2016-11-09 21 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> 

我想是有JavaC#Python中的枚舉屬性。 所以,當我改變它下面

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

它給了我一個錯誤的

枚舉類型列表必須以「結尾)」中的「lang」屬性聲明

如何解決此問題,提前致謝

回答

1

恐怕不可能。在看看XML Specification, §3.3.1 Attribute types,枚舉值應包含的Nmtoken,其中允許的字符列here

的ASCII符號和標點符號,有一個相當大的羣體的統一符號字符一起,被排除的名字,因爲在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