except 要素を用いて排他法則を明記します。anyName, nsName 各要素の子要素として記述します。また、 data 要素の子要素にすることも出来ます。except 要素を、 anyName 又は nsName 各要素の子要素として記述します。except 要素の中身は、 nsName, name, choice 各要素のみです。例えば、公開情報 要素の中にはいかなる要素も複数個入れられる一方、 極秘 要素と 機密 要素のみを排除させるようにするには、以下のようにします。
<element name="公開情報">
<zeroOrMore>
<element>
<anyName>
<except>
<name>極秘</name>
<name>機密</name>
</except>
</anyName>
<text/> <!-- いかなる要素においても、中身はテキストとする -->
</element>
</zeroOrMore>
</element>
属性名においても、同様に制馭が出来ます。
記入欄 要素にはいかなる要素も複数個入れられ、中身にはテキストが記入できるとします。また、 記入が無い場合は、 記入無し 要素(空要素)を一つだけ含むようにしたいとします。この場合、 choice 要素を用いて、以下のようにスキーマを記述出来ます。
<element name="記入欄">
<choice>
<zeroOrMore>
<element>
<anyName>
<except>
<name>記入無し</name> <!-- 記入無し 要素は特別扱い -->
</except>
</anyName>
<text/>
</element>
</zeroOrMore>
<element name="記入無し"> <!-- 記入無し 要素はこちらで定義 -->
<empty/>
</element>
</choice>
</element>
<記入欄> <名前>ラーナ=シャルロット</名前> <年齢>16</年齢> <好きな食べ物>ショートケーキ、パイナップル</好きな食べ物> </記入欄>
<記入欄> <記入無し/> </記入欄>
<記入欄> <name>Y. Imada</name> <記入無し/> <!-- 記入無し 要素以外には、何も入れられない !! --> </記入欄>
例えば、名前空間URI http://www.evil.com/ に属する要素だけを排除し、あとはいかなる要素も入れられるようにするためには、例えば以下のように記述します。
<element name="記入欄">
<zeroOrMore>
<element>
<anyName>
<except>
<nsName ns="http://www.evil.com/"/>
</except>
</anyName>
<text/> <!-- いかなる要素においても、中身はテキストとする -->
</element>
</zeroOrMore>
</element>
data 要素の子要素として、 except 要素を記述します。except 要素の中身として、各種のパターンを記述することが可能です。ただし、テキストにそぐわない要素を記述することは出来ません。例えば、 element, attribute 各要素は記述出来ません。例えば、何らかのデータを扱っている中で、未定義のデータ(例えば 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>