如何为多个元素声明属性?
类似:
<!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解释的参数实体(参见XML规范(。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
代替元素名称,分别将声明应用于所有声明或隐含的元素。这些被包含在WebSGML中以表示通用的XML属性,如xml:base
、xml:lang
和xmlns
(而不是xmlns:xyz
(。然而,就像名称组语法一样,它们并没有成为SGML的XML子集的一部分。