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

Sam*_*man 7 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"
    >
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*ley 9

每个元素都需要有自己的属性声明(ATTLIST).但是,您可以使用参数实体来重用其中的大部分内容.

例...

<!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;>
Run Code Online (Sandbox Code Playgroud)

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

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

<!ELEMENT elem2 (#PCDATA)>
<!ATTLIST elem2 
    attr2 CDATA #IMPLIED
    %attrs;              >
Run Code Online (Sandbox Code Playgroud)