3

我正在为允许灵活属性名称的 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 验证?

4

1 回答 1

2

AFAIK 这不能用 DTD 完成。您需要使用一些其他模式语言,例如 W3C XML Schema 在<xs:anyAttribute>使用时允许灵活的属性名称。

更准确地说:DTD属性列表声明需要属性名称,并且没有通用名称通配符。奇怪的是,属性声明列表中的属性定义是可选的,所以理论上你可以有一个匿名且无类型的属性列表声明。

AttlistDecl  ::=  '<!ATTLIST' S Name AttDef* S? '>'
AttDef       ::=  S Name S AttType S DefaultDecl

所以规范允许属性声明,<!ATTLIST element-name >但似乎规范没有指定应该如何解释这种声明,它是否有任何影响,或者它是否允许任何类型的任何属性名称。无论哪种情况,我都不相信这种结构得到很好的支持,因为该功能的稀有性和古怪性。

于 2011-11-26T14:44:23.490 回答