element
, attribute
各要素の name
属性を用います。しかし、 name
要素を用いても等価な結果が得られます。name
要素を使うと、要素, 属性の名前の決め方を柔軟にすることが出来ます。name
要素の中身は有修飾名(qname)です。デフォルトの名前空間を持たない要素には、常に接頭辞が必要です。choice
要素の子要素に複数記述し、名前の選択をさせることは可能です。name
要素を使った場合、 element
/attribute
各要素で name
属性を使ってはなりません。以下の二つのスキーマ(の断片)は、等価なものと見倣されます。接頭辞の有無には関係ありません。
<element name="庭:植物"> <text/> </element>
<element> <name>庭:植物</name> <text/> </element>
例えば、ルート要素が 家屋
要素でも 田畑
要素でも良く、かつこれらの要素の取り得る中身が同一(名前
, 場所
が書ける)である場合は、以下のようなスキーマが書けるでしょう。
<?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 version="1.0"?> <家屋> <名前>牧野啓文宅</名前> <場所>山里市五丁目三番地</場所> </家屋>
<?xml version="1.0"?> <田畑> <名前>ラベンダー牧場</名前> <場所>柏原郡海里町3-2-1</場所> </田畑>
ns
属性でデフォルトの名前空間が明示されている場合、以下の二つは等価ではありません。名前空間の仕様により、「デフォルトの名前空間に属した属性」を表すことが出来ないためです。
<element name="ゲーム" ns="http://www.sanada.org/"> <attribute name="対象年齢"> <text/> </attribute> <empty/> </element>
<element name="ゲーム" ns="http://www.sanada.org/"> <attribute> <name>対象年齢</name> <text/> </attribute> <empty/> </element>
ただし、 xmlns:xx
属性による宣言がなされている場合、以下の二つは等価です。当然ですが、娯楽:対象年齢
属性はグローバル属性になります。
<element name="娯楽:ゲーム" xmlns:娯楽="http://www.sanada.org/"> <attribute name="娯楽:対象年齢"> <text/> </attribute> <empty/> </element>
<element name="娯楽:ゲーム" xmlns:娯楽="http://www.sanada.org/"> <attribute> <name>娯楽:対象年齢</name> <text/> </attribute> <empty/> </element>