我正在为XML结构编写一个DTD,它允许灵活的属性名称,如下所示:
<root_element>
<child_element>
<element_with_attrib iCouldbeAnything="value" defined="true" />
</child_element>
</root_element>
所以这是一个简单的DTD:
<!ELEMENT root_element (child_element)*>
<!ELEMENT child_element (element_with_attrib)+>
<!ELEMENT element_with_attrib EMPTY>
<!ATTLIST element_with_attrib
defined CDATA #IMPLIED
iCouldbeAnything CDATA #IMPLIED
>
问题是,对XML的要求是“iCouldBeAnything”必须是任何东西。 是否可以使用DTD描述这一点,还是需要依赖其他类型的XML验证?
答案 0 :(得分:1)
AFAIK使用DTD无法做到这一点。您需要使用其他一些模式语言,例如,当使用<xs:anyAttribute>
时,W3C XML Schema允许灵活的属性名称。
更确切地说:DTD attribute list declarations需要属性的名称,并且没有通用名称通配符。奇怪的是,属性声明列表中的属性定义是可选的,因此理论上你可以有一个匿名和无类型的属性列表声明。
AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
AttDef ::= S Name S AttType S DefaultDecl
因此规范允许像<!ATTLIST element-name >
这样的属性声明,但似乎规范没有规定如何解释这种声明,它是否有任何影响,或者它是否允许任何类型的任何属性名称。无论哪种情况,我都不相信这种结构得到很好的支持,因为该特征的稀有性和偏心性。