nsName 要素

特定の名前空間に属する名前全てを指定する要素

属性の説明

中身の説明

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>