DTD - 是否可以一次为多个元素声明属性

DTD - Is it possible to declare attribute for multiple element at once

如何为多个元素声明属性?

喜欢:

<!ATTLIST foo,bar createdAt CDATA #IMPLIED>

通常的做法是定义一个参数实体,它本质上只是一个宏。本例定义了两个参数实体,其中一个引用了另一个:

<!ENTITY % role.att
        'role                   NMTOKEN         #IMPLIED'>

<!ENTITY % common.att
        'id                     ID              #IMPLIED
        %role.att;'>

<!ATTLIST notice %common.att;>

当专家这样做时,生成的 DTD 变得极其复杂,普通人几乎无法阅读,但功能非常强大。

对于 XML DTD,只有使用参数实体才有可能,正如 Michael 所解释的那样(参见 the XML spec)。 OTOH,SGML DTD 允许以非常接近您的想法的形式为多个元素声明属性列表:

<!-- only valid in SGML rather than XML DTDs: -->
<!ATTLIST (elem1|elem2|elem3) myatt CDATA #IMPLIED>

SGML 还允许 名称组 代替其他标记声明中的单个名称。

此外,WebSGML (ISO 8879:1986/Cor 2:1999) 还允许 #ALL#IMPLICIT 代替元素名称,以将声明应用于所有已声明或隐含元素,resp。这些包含在 WebSGML 中以表示通用 XML 属性,例如 xml:basexml:langxmlns(但不是 xmlns:xyz)。但是,就像 name group 语法一样,它们没有成为 SGML XML 子集的一部分。