nsName 要素
特定の名前空間に属する名前全てを指定する要素
- ある特定の名前空間に属するあらゆる種類の要素, 属性名の存在を許可したい場合、その名前指定を nsName要素 で明示します。
 - 「あらゆる種類の名前」という意味で、anyName要素 と類似の働きをします。しかし anyName要素 が名前空間の内容に関わらず全ての名前を許可するのに対し、nsName要素 では名前空間が特定されるという違いがあります。
 - (当然と言えば当然ですが) nsName要素 を子要素に持つ element要素, attribute要素 では、 name 属性 は使えません。
 
属性
ns 属性
- 名前空間の明示は ns 属性 で行います。スキーマ自体を接頭辞無しで用いている場合は、xmlns 属性 は使えません(ただし、スキーマ自体の要素や属性に接頭辞が附属されている場合を除く)。
 - ns 属性 が省略された場合は、先祖要素に記述された ns 属性 の値が適用されます。
 
子ノード
anyName要素 と同様、except要素 を用いた排他パターンのみが許されます。except要素 と name要素 を使うことにより、特定の要素, 属性名を対象から除くことが出来ます。
使用例
例 1: 特定の名前空間に属する任意の属性を記述する
名前空間 http://www.garden.co.jp/ に属する任意の属性を埋め込みたい場合、以下のような記述が考えられます。
<element name="喫茶店"> <zeroOrMore> <attribute> <nsName ns="http://www.garden.co.jp/"/> <text/> </attribute> </zeroOrMore> … </element>
以上のスキーマで、以下の XML 文書(の断片)は妥当なものとなります。
<喫茶店 庭:種類="ローズガーデン" 庭:広さ="10m^2"
    xmlns:庭="http://www.garden.co.jp/">
 …
</喫茶店>
  
尚、複数の種類の名前空間を許したい場合は、異る ns 属性 値を有する nsName要素 を複数並べて書きます。以下に例を示します。
<element name="喫茶店"> <zeroOrMore> <attribute> <nsName ns="http://www.garden.co.jp/"/> <nsName ns="http://www.address.co.jp/"/> <text/> </attribute> </zeroOrMore> … </element>
例 2: 名前に制限を設ける
except要素 を子要素に置いて、特定の名前を排除することを考えてみます。例1 のスキーマを、以下のように変えてみたとします。
<element name="喫茶店">
 <zeroOrMore>
  <attribute>
   <nsName ns="http://www.garden.co.jp/">
    <except>
     <name>広さ</name>
    </except>
   </nsName>
   <text/>
  </attribute>
 </zeroOrMore>
 …
</element>
  
このようにした場合、以下の記述は妥当でなくなります。 庭:広さ 属性の記述が許されなくなっているためです。
<喫茶店 庭:種類="ローズガーデン" 庭:広さ="10m^2"
    xmlns:庭="http://www.garden.co.jp/">
 …
  
  
例 3: 特定の名前空間のみを排除する
except要素 の中に nsName要素 を入れることで、特定の名前空間に属する名前を排除出来ます。例えば、名前空間 http://bad.com/ に属する要素のみを弾き、それ以外は全て許可したい場合は、以下のような記述が出来るでしょう。
<element name="例">
 <zeroOrMore>
  <element>
   <anyName>
    <except><nsName ns="http://bad.com/"/></except>
   </anyName>
  </element>
 </zeroOrMore>
</element>
  
  
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
 - 古林 寛, 「nsName要素 @ ぽかぽか RELAX NG 工房」
 


