attribute
要素の中身により、その属性の属性値が定義されます。element
要素と同様、 name
属性もしくは name
要素で定義します。また、 anyName
を子要素とすることで、任意の名前の属性を入れられるようにすることも可能です。ここで定義される名前は「有修飾名(qualified name)」なので、名前空間を考慮する必要があります。text
要素を用いるのが一般的ですが、 value
, data
要素や、 choice
要素や ref
要素を子孫に持つことが出来ます。element
, attribute
要素を子孫要素としてはなりません。oneOrMore
, zeroOrMore
要素を親要素とすることは可能ですが、同じ属性名を持つ属性を複数書けるようにはなりません。 optional
要素は普通に使用出来ます。ref
要素を子孫要素とする場合、その参照先に、上記の禁じられた要素が存在してはなりません。attribute
要素を用いることで、一つの要素に複数の属性を定義出来ます。その際、 element
要素と異なり、 実際の属性の出現順位は、 attribute
要素の出現順位に依存しません。つまり、定義さえされていれば、実際には任意の順番で属性を記述出来る、ということです。element
要素直下に記述された場合、その属性は必須属性となります(DTD では、 #REQUIRED
の宣言に相当)。任意属性 (DTD で言う #IMPLIED
) としたい場合は、 optional
要素の中に attribute
要素を入れる必要があります。grammar
, element
要素と同様、 ns
属性や xmlns:xxxx
属性を用いて、局所的に名前空間を変更することが出来ます。
lang
や space
の属性を定義する場合、名前空間を考慮する必要はありません。xmlns:xxxx
属性は、 attribute
要素で定義する必要はありません。<element name="p"> <optional> <attribute name="lang"> <text/> </attribute> </optional> <attribute name="xlink:href" xmlns:xlink="http://www.w3.org/1999/xlink"> <text/> </attribute> <text/> <!-- p要素の中身はテキストとする --> </element>
<attribute name="color"> <choice> <value>red</value> <value>blue</value> <value>yellow</value> </choice> </attribute>