except 要素
排他法則を記述するための要素
- 特定の要素/属性名を対象から外したい場合や、特定のデータを排除したい場合は、 except要素 を用いて排他法則を明記します。
- 要素/属性名の排他処理のための anyName要素, nsName要素 各要素の子要素として記述します。
- data要素 の子要素にすることも出来ます。この場合、except要素 の中身として、各種のパターンを記述することが可能です。ただし、テキストにそぐわない要素を記述することは出来ません。例えば、element要素, attribute要素 は記述出来ません。
属性
- この要素に固有な属性はありません。
子ノード
except要素 の中身は、nsName要素, name要素, choice要素 のみです。
使用例
例 1: 特定の名前を排除する
例えば、公開情報 要素の中にはいかなる要素も複数個入れられる一方、 極秘 要素と 機密 要素のみを排除させるようにするには、以下のようにします。
<element name="公開情報">
<zeroOrMore>
<element>
<anyName>
<except>
<name>極秘</name>
<name>機密</name>
</except>
</anyName>
<text/> <!-- いかなる要素においても、中身はテキストとする -->
</element>
</zeroOrMore>
</element>
属性名においても、同様に制馭が出来ます。
例 2: 要素の振り分け
記入欄 要素にはいかなる要素も複数個入れられ、中身にはテキストが記入できるとします。また、 記入が無い場合は、 記入無し 要素(空要素)を一つだけ含むようにしたいとします。この場合、choice要素 を用いて、以下のようにスキーマを記述出来ます。
- スキーマ(の断片)の例
-
<element name="記入欄"> <choice> <zeroOrMore> <element> <anyName> <except> <name>記入無し</name> <!-- 記入無し 要素は特別扱い --> </except> </anyName> <text/> </element> </zeroOrMore> <element name="記入無し"> <!-- 記入無し 要素はこちらで定義 --> <empty/> </element> </choice> </element> - 妥当な XML 文書(の断片)1
-
<記入欄> <名前>ラーナ=シャルロット</名前> <年齢>16</年齢> <好きな食べ物>ショートケーキ、パイナップル</好きな食べ物> </記入欄>
- 妥当な XML 文書(の断片)2
-
<記入欄> <記入無し/> </記入欄>
- 妥当でない XML 文書
-
<記入欄> <name>Y. Imada</name> <記入無し/> <!-- 記入無し 要素以外には、何も入れられない !! --> </記入欄>
例 3: 特定の名前空間に属する名前を排除する
例えば、名前空間URI http://www.evil.com/ に属する要素だけを排除し、あとはいかなる要素も入れられるようにするためには、例えば以下のように記述します。
<element name="記入欄">
<zeroOrMore>
<element>
<anyName>
<except>
<nsName ns="http://www.evil.com/"/>
</except>
</anyName>
<text/> <!-- いかなる要素においても、中身はテキストとする -->
</element>
</zeroOrMore>
</element>
例 4: データの排他処理
例えば、何らかのデータを扱っている中で、未定義のデータ(例えば undefined や 未定義, none)を弾きたい場合には、以下のような記述が考えられます。
<element name="情報">
<data type="string">
<except>
<choice>
<value>undefined</value>
<value>未定義</value>
<value>none</value>
</choice>
</except>
</data>
</element>
あるいは、怪しい記述が含まれているデータ(例えば 押売, 強盗, 死 を含むもの)を弾くのにも用いることが可能です。ここでは、データ型ライブラリとして W3C XML Schema のデータ型を使います。
<element name="活動内容">
<data type="string"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<except>
<data type="string">
<param name="pattern">[.\s]*(押売|強盗|死)[.\s]*</param>
</data>
</except>
</data>
</element>
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「except要素 @ ぽかぽか RELAX NG 工房」


