【发布时间】:2018-11-30 01:16:32
【问题描述】:
如何声明多个元素的属性?
喜欢:
<!ATTLIST foo,bar createdAt CDATA #IMPLIED>
【问题讨论】:
如何声明多个元素的属性?
喜欢:
<!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 代替元素名称,将声明应用于所有声明或隐含的元素,分别。这些被包含在 WebSGML 中以表示通用 XML 属性,例如 xml:base、xml:lang 和 xmlns(但不是 xmlns:xyz)。然而,就像 name group 语法一样,它们没有成为 SGML 的 XML 子集的一部分。
【讨论】: