2

在了解了 XML 的 DTD 之后,我真的很喜欢这个概念并希望做以下事情:我希望可以选择声明或不声明一个属性,这样如果它声明了,它就是一组选项 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 声明它们,但也许它不是正确的方法

4

1 回答 1

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是正确的。

于 2013-11-12T16:41:12.043 回答