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>