myGroup > myProject
 

attribute 要素

要素の属性を定義する要素

  • langspace の属性を定義する場合、名前空間を考慮する必要はありません。
  • 複数の attribute要素 を用いることで、一つの要素に複数の属性を定義出来ます。その際、element要素 要素と異なり、 実際の属性の出現順位は、attribute要素 の出現順位に依存しません。つまり、定義さえされていれば、実際には任意の順番で属性を記述出来る、ということです。
  • element要素 直下に記述された場合、その属性は必須属性となります(DTD では、 #REQUIRED の宣言に相当)。任意属性 (DTD で言う #IMPLIED) としたい場合は、optional要素 の中に attribute要素 を入れる必要があります。
  • oneOrMore要素, zeroOrMore要素 を親要素とすることは可能ですが、同じ属性名を持つ属性を複数書けるようにはなりません。optional要素 は普通に使用出来ます。

属性

name 属性

  • 属性名を定義します。element要素 と同様、このほかに name要素 で定義、もしくは anyName要素 を子要素とすることで、任意の名前の属性を入れられるように定義することも可能です。ここで定義される名前は「有修飾名(qualified name)」なので、名前空間を考慮する必要があります。

ns,xmlns:xxxx 属性

  • grammar要素, element要素 と同様、ns 属性 や xmlns:xxxx 属性 を用いて、局所的に名前空間を変更することが出来ます。
  • 要素に名前空間を指定したとしても、通例属性はローカルなままで用います。この場合 xmlns:xxxx 属性 を、attribute要素 で定義する必要はありません。

子ノード

  • 子ノードにより、その属性の属性値が定義されます。
  • text要素 を用いるのが一般的ですが、value要素, data要素 や choice要素 を子孫に持つことが出来ます。
  • element要素, attribute要素 を子孫要素としてはなりません。
  • 当然ですが、ref要素 を子孫要素とする場合、その参照先に、上記の禁じられた要素が存在してはなりません。
  • ref 要素を中身にし、マクロを参照することが出来ます。

使用例

例 1:

item 要素において、 lang 属性と、xlink:href 属性を定義。 lang 属性は任意、 xlink:href 属性は必須とする。いずれも属性値は任意テキストとする。

<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>

例 2:

color 属性を定義。属性値は、 red, blue, yellow いずれかの値を取り得る。

<attribute name="color">
 <choice>
  <value>red</value>
  <value>blue</value>
  <value>yellow</value>
 </choice>
</attribute>

参考文献