我认为这是一个简单的问题,但在搜索后我找不到任何解决方案。有没有办法在XML DTD中定义全局属性以便所有元素都可以访问?
答案 0 :(得分:1)
如果你问,你有一个适用于多个元素的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:
格式良好约束:内部子集中的PE
在内部DTD子集中,不得出现参数实体引用 标记声明中;它们可能出现在标记声明的地方 可以发生。 (这不适用于在外部发生的引用 参数实体或外部子集。)
答案 1 :(得分:0)
您可以使用XML设计模式:公共属性