2016-11-09 6 views
1

Я следующий xml.dtd файлВставка специальных символов, таких как «#» в перечисленных значений атрибутов в XML DTD

<?xml version="1.0" encoding="UTF-8"?> 

<!ELEMENT aliens (alien+,alienTesting)>  
<!ELEMENT alien (name,from,middleName?)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT from (#PCDATA)> 
<!ELEMENT middleName (#PCDATA)> 

<!--defining element attributes --> 


<!ATTLIST alien aid ID #REQUIRED> 
<!ATTLIST alien bioType CDATA #IMPLIED> 

<!ATTLIST alien lang (Java|C|Python) "Java"> 

<!ELEMENT alienTesting (alienT*)> 
<!ELEMENT alienT (#PCDATA)> 

и вот xml файл

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE aliens SYSTEM "AleinDTD.dtd"> 

<aliens> 

    <alien aid="a01"> 
     <name>Kasun </name> 
     <from>Northwest</from> 
    </alien> 

    <alien aid="a02"> 
     <name>Madu</name> 
     <from>south</from> 

    </alien> 

    <alienTesting> 
     <alienT></alienT> 

    </alienTesting> 

</aliens> 

То, что я хочу, чтобы иметь Java , C#, Python в перечисленных атрибутах. Так что, когда я могу изменить его, как показано ниже

<!ATTLIST alien lang (Java|C#|Python) "Java">

Это дает мне ошибку как

В списке перечислимого типа должны заканчиваться «)» в объявлении атрибута «языки»

Как исправить это, заблаговременно

ответ

1

Боюсь, что это будет невозможно. Посмотрев на XML Specification, §3.3.1 Attribute types, перечисляемые значения должны быть Nmtoken, где символы разрешены перечислены here:

ASCII-символы и знаки препинания, а также довольно большой группы символов символов Unicode, исключаются из названий, потому что они более полезны в качестве разделителей в контекстах, где XML-имена используются вне XML-документов; предоставление этой группе дает этим контекстам серьезные гарантии того, что не может быть частью имени XML. Символ # x037E, GREEK QUESTION MARK, исключается, поскольку при нормализации он становится точкой с запятой, что может изменить значение ссылок на сущности.

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

Grossely, вам разрешается использовать цифры и буквы (с любого другого языка), дефиса, точки, подчеркивания однако не пространства, # () [ ] | и другие знаки препинания.

+0

Поэтому я должен использовать 'C sharp' тогда :). В любом случае хороший ответ, спасибо. –

+2

'C_sharp' потребуется ... Пробелы также не разрешены (я забыл упомянуть об этом - я обновляю свой ответ. – potame

 Смежные вопросы

  • Нет связанных вопросов^_^