我有以下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">
它给我一个错误
枚举类型列表必须以&#39;)&#39;结尾。在&#34; lang&#34;属性声明
如何解决此问题,提前致谢
答案 0 :(得分: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,您可以使用数字和字母(来自任何语言),连字符,圆点,下划线但不是空格,# ( ) [ ] |
和其他标点符号。