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:base
、xml:lang
和 xmlns
(但不是 xmlns:xyz
)。但是,就像 name group 语法一样,它们没有成为 SGML XML 子集的一部分。
如何为多个元素声明属性?
喜欢:
<!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:base
、xml:lang
和 xmlns
(但不是 xmlns:xyz
)。但是,就像 name group 语法一样,它们没有成为 SGML XML 子集的一部分。