I have multiple elements I want to give these attributes:
<!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"
>
Is this possible somehow in DTD, or will I have to do it manually?
(Also, while I'm here, I don't think it was such a good idea to declare the margin
and padding
attributes that way. Does anyone know a better way?)
You can't. Attribute names are unique per element. If you need to have multiple bits of data under the same name, then the usual solutions are either a space separated list or child elements.
The attr() method also allows you to set multiple attributes at the same time.
Each element needs to have its own attribute declaration (ATTLIST
). However, you can use a parameter entity to reuse the bulk of it.
Example...
<!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;>
Here's another example that has a mix of the parameter entity references along with attributes that only appear on the individual elements.
<!ELEMENT elem1 (#PCDATA)>
<!ATTLIST elem1
attr1 CDATA #IMPLIED
%attrs; >
<!ELEMENT elem2 (#PCDATA)>
<!ATTLIST elem2
attr2 CDATA #IMPLIED
%attrs; >
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With