如何声明多个元素共有的属性?

时间:2013-12-01 03:22:53

标签: dtd xml-dtd

我想要赋予这些属性多个元素:

<!ATTLIST [all these elements]
    width   CDATA   "0"
    height  CDATA   "0"
    margin  CDATA   "0 0 0 0"
    padding CDATA   "0 0 0 0"
    rotation CDATA  "0"
    halign  (left|center|right|full)    "center"
    valign  (top|middle|bottom|full)    "middle"
    >

这在DTD中是否有可能,或者我必须手动完成吗?

(另外,虽然我在这里,但我认为以这种方式声明marginpadding属性并不是一个好主意。有没有人知道更好的方法?)< / p>

1 个答案:

答案 0 :(得分:9)

每个元素都需要有自己的attribute declarationATTLIST)。但是,您可以使用parameter entity重复使用它。

示例...

<!ENTITY % attrs 
    'width   CDATA   "0"
     height  CDATA   "0"
     margin  CDATA   "0 0 0 0"
     padding CDATA   "0 0 0 0"
     rotation CDATA  "0"
     halign  (left|center|right|full)    "center"
     valign  (top|middle|bottom|full)    "middle"'>

<!ELEMENT elem1 (#PCDATA)>
<!ATTLIST elem1 %attrs;>

<!ELEMENT elem2 (#PCDATA)>
<!ATTLIST elem2 %attrs;>

这是另一个示例,它混合了参数实体引用以及仅出现在各个元素上的属性。

<!ELEMENT elem1 (#PCDATA)>
<!ATTLIST elem1 
    attr1 CDATA #IMPLIED
    %attrs;              >

<!ELEMENT elem2 (#PCDATA)>
<!ATTLIST elem2 
    attr2 CDATA #IMPLIED
    %attrs;              >