在了解DTD for XML之后,我非常喜欢这个概念,并希望做如下的事情: 我希望有一个选项可以声明一个属性,所以如果它被声明,它是一组选择x,y,z之一,如果它没有被声明,它被认为是值m。 我尝试了以下方法:
type (x|y|z) "m"
但我得到了(使用读取文件的java):
The enumerated type list must end with ')' in the "type" attribute declaration.
整个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ATTLIST item
name ID #REQUIRED
type (type a|type b) "type a"
>]>
<root>
<item name="name1" type="type a" />
<item name="name2" />
</root>
如果我没有说明类型,作为第二项,我得到错误。我希望它暗示,如果我没有在xml中声明它,默认值是类型a。 另外,另一个(位)无关的问题是我必须在ATTLIST中声明我的所有属性,否则它们会产生错误。有没有办法绕过它?目前我所做的是用#IMPLIED声明它们,但也许它不是正确的方式
答案 0 :(得分:3)
默认值必须是枚举中的一个选项。只需添加m
作为选项:
type (x|y|z|m) "m"
更多信息:http://www.w3.org/TR/xml11/#sec-attr-defaults
枚举必须是单个Nmtoken(名称标记),因此您无法使用type a
和type b
中的空格。您可以使用type_a
,type-a
,typeA
等内容。
示例:
<!DOCTYPE root [
<!ELEMENT root (item+)>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
name ID #REQUIRED
type (type_a|type_b) "type_a">
]>
<root>
<item name="name1" type="type_a"/>
<item name="name2"/>
</root>
此外,必须声明所有属性才能使XML有效。我认为没有办法解决这个问题。将它们声明为#IMPLIED
是正确的。