在XML中定义全局属性

时间:2015-02-05 08:18:31

标签: xml dtd xml-dtd

我认为这是一个简单的问题,但在搜索后我找不到任何解决方案。有没有办法在XML DTD中定义全局属性以便所有元素都可以访问?

2 个答案:

答案 0 :(得分:1)

如果你问,你有一个适用于多个元素的ATTLIST,答案是否定的。 The attribute list declaration must only have a single name.对于每个具有属性的元素,都无法绕过ATTLIST

但是,您可以使用parameter entity在多个属性列表声明中重用属性定义。这样可以更容易地维护公共属性。

这是一个例子。在示例中,有两个属性attr1attr2,这些属性对于元素elem1elem2是通用的。这些元素还分别具有unique-attr1unique-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设计模式:公共属性

http://www.xmlpatterns.com/CommonAttributesMain.shtml