在 XML 中定义全局属性
Defining global attributes in XML
我认为这是一个简单的问题,但搜索后找不到任何解决方案。有什么方法可以在 XML DTD 中定义全局属性以供所有元素访问?
如果您要问,能否有一个适用于多个元素的 ATTLIST
,答案是否定的。 The attribute list declaration must only have a single name. 对于每个具有属性的元素,您都无法绕过 ATTLIST
。
但是,您可以使用 parameter entity 在多个属性列表声明中重用属性定义。这将使维护公共属性变得更加容易。
举个例子。在示例中有两个属性,attr1
和 attr2
,它们是元素 elem1
和 elem2
共有的。这些元素还具有属性,分别为 unique-attr1
和 unique-attr2
,这些属性是这些元素所独有的。
so.dtd
<!ENTITY % common-attrs
"common1 CDATA #REQUIRED
common2 CDATA #REQUIRED">
<!ELEMENT test (elem1,elem2)>
<!ELEMENT elem1 EMPTY>
<!ATTLIST elem1
%common-attrs;
unique1 CDATA #REQUIRED>
<!ELEMENT elem2 EMPTY>
<!ATTLIST elem2
%common-attrs;
unique2 CDATA #REQUIRED>
下面是 XML 实例的示例:
so.xml
<!DOCTYPE test SYSTEM "so.dtd">
<test>
<elem1 common1="x" common2="x" unique1="x"/>
<elem2 common1="x" common2="x" unique2="x"/>
</test>
注意:在标记声明中使用参数实体引用,就像我在上面所做的那样,只允许在外部子集(外部 DTD)中使用;不在内部子集(内部 DTD)中。 (内部和外部子集都在下面引用的规范的同一部分中讨论。)
来自spec:
Well-formedness constraint: PEs in Internal Subset
In the internal DTD subset, parameter-entity references must not occur
within markup declarations; they may occur where markup declarations
can occur. (This does not apply to references that occur in external
parameter entities or to the external subset.)
您可以使用 XML 设计模式:公共属性
我认为这是一个简单的问题,但搜索后找不到任何解决方案。有什么方法可以在 XML DTD 中定义全局属性以供所有元素访问?
如果您要问,能否有一个适用于多个元素的 ATTLIST
,答案是否定的。 The attribute list declaration must only have a single name. 对于每个具有属性的元素,您都无法绕过 ATTLIST
。
但是,您可以使用 parameter entity 在多个属性列表声明中重用属性定义。这将使维护公共属性变得更加容易。
举个例子。在示例中有两个属性,attr1
和 attr2
,它们是元素 elem1
和 elem2
共有的。这些元素还具有属性,分别为 unique-attr1
和 unique-attr2
,这些属性是这些元素所独有的。
so.dtd
<!ENTITY % common-attrs
"common1 CDATA #REQUIRED
common2 CDATA #REQUIRED">
<!ELEMENT test (elem1,elem2)>
<!ELEMENT elem1 EMPTY>
<!ATTLIST elem1
%common-attrs;
unique1 CDATA #REQUIRED>
<!ELEMENT elem2 EMPTY>
<!ATTLIST elem2
%common-attrs;
unique2 CDATA #REQUIRED>
下面是 XML 实例的示例:
so.xml
<!DOCTYPE test SYSTEM "so.dtd">
<test>
<elem1 common1="x" common2="x" unique1="x"/>
<elem2 common1="x" common2="x" unique2="x"/>
</test>
注意:在标记声明中使用参数实体引用,就像我在上面所做的那样,只允许在外部子集(外部 DTD)中使用;不在内部子集(内部 DTD)中。 (内部和外部子集都在下面引用的规范的同一部分中讨论。)
来自spec:
Well-formedness constraint: PEs in Internal Subset
In the internal DTD subset, parameter-entity references must not occur within markup declarations; they may occur where markup declarations can occur. (This does not apply to references that occur in external parameter entities or to the external subset.)
您可以使用 XML 设计模式:公共属性