name 要素
要素, 属性の名前を宣言する要素
- 通常、要素や属性の名前を明示するためには、element要素, attribute要素 の name 属性 を用います。しかし、name要素 を用いても等価な結果が得られます。
- name要素 を使うと、要素, 属性の名前の決め方を柔軟にすることが出来ます。
注意すべき点
- name要素 の中身は有修飾名(qname)です。デフォルトの名前空間を持たない要素には、常に接頭辞が必要です。
- 属性に使う場合は、常に「グローバルな属性」を想定しているため、常に接頭辞が必要になりますし、ローカルな属性の定義にも使えません。ただし、名前空間の宣言を全く行わない場合に限り、接頭辞が不要になります(と言うより、そもそも使えない)。
- 二つ以上並べて書いてはなりません。ただし、choice要素 の子要素に複数記述し、名前の選択をさせることは可能です。
- name要素 を使った場合、element要素, attribute要素 で name 属性 を使ってはなりません。
属性
- この要素に固有な属性はありません。
使用例
例 1: name要素 と name 属性
以下の二つのスキーマ(の断片)は、等価なものと見倣されます。接頭辞の有無には関係ありません。
- 例1
-
<element name="庭:植物"> <text/> </element>
- 例2
-
<element> <name>庭:植物</name> <text/> </element>
例 2: 名前に選択肢を設ける
例えば、ルート要素が 家屋 要素でも 田畑 要素でも良く、かつこれらの要素の取り得る中身が同一(名前, 場所が書ける)である場合は、以下のようなスキーマが書けるでしょう。
- スキーマ例
-
<?xml version="1.0"?> <element xmlns="http://relaxng.org/ns/structure/1.0"> <choice> <name>家屋</name> <name>田畑</name> </choice> <element name="名前"><text/></element> <element name="場所"><text/></element> </element>
- 妥当な XML 文書の例1
-
<?xml version="1.0"?> <家屋> <名前>牧野啓文宅</名前> <場所>山里市五丁目三番地</場所> </家屋>
- 妥当な XML 文書の例2
-
<?xml version="1.0"?> <田畑> <名前>ラベンダー牧場</名前> <場所>柏原郡海里町3-2-1</場所> </田畑>
属性に関して
ns 属性 でデフォルトの名前空間が明示されている場合、以下の二つは等価ではありません。名前空間の仕様により、「デフォルトの名前空間に属した属性」を表すことが出来ないためです。
- 例1
-
<element name="ゲーム" ns="http://www.sanada.org/"> <attribute name="対象年齢"> <text/> </attribute> <empty/> </element>
- 例2
-
<element name="ゲーム" ns="http://www.sanada.org/"> <attribute> <name>対象年齢</name> <text/> </attribute> <empty/> </element>
ただし、xmlns:xxxx 属性 による宣言がなされている場合、以下の二つは等価です。当然ですが、娯楽:対象年齢 属性はグローバル属性になります。
- 例1
-
<element name="娯楽:ゲーム" xmlns:娯楽="http://www.sanada.org/"> <attribute name="娯楽:対象年齢"> <text/> </attribute> <empty/> </element>
- 例2
-
<element name="娯楽:ゲーム" xmlns:娯楽="http://www.sanada.org/"> <attribute> <name>娯楽:対象年齢</name> <text/> </attribute> <empty/> </element>
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「name要素 @ ぽかぽか RELAX NG 工房」