単純型のパターンを指定する
正規表現言語を使うと、内容を一致させるパターンを指定することができます。XML Schemaの正規表現はPerlの正規表現に基づいています。ここでは、要点だけをごく簡単に説明します。
1. カスタム宣言内に(「カスタム単純型を作成する」4.の方法で)<xsd:pattern と入力します。
2. value="regex"と入力します。
regexの部分には、内容を一致させるパターンを入力します。パターンは次のものを使って作成します。
具体的な文字、数字、記号 内容にその文字、数字、記号そのものを使わなければなりません .(ピリオド) 任意の文字 \d 任意の数字 \D 数字以外の任意の文字 \s 任意のホワイトスペース(空白、タブ、改行、復帰) \S ホワイトスペース以外の任意の文字 x* 0個以上のx (xy)* 0個以上のxy x? 1個または0個のx (xy)? 1個または0個のxy x+ 1個以上のx (xy)+ 1個以上のxy [abc] a、b、cのうちいずれかの値 [0-9] 0から9までの範囲 this | that thisまたはthatのどちらか、さらにパイプ記号を追加して、値を増やすこともできます。 x{5} 丁度5個のx x{5,} 5個以上のx x{5,8} 5〜8個のx (xyz){2} ちょうど2個のxyz。小カッコを使って中カッコ{}やほかの修飾子(?、+、*)の効果を制御できます。 4. />と入力して、xsd:pattern要素を終えます。
XSDコード <xsd:element name="invoice_number">
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
<xsd:pattern value="INV #99\d(3) " />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
このパターンでは、invoivce_number要素の内容をINV #99で始まり三桁の数値が続く文字列に限定しています。正規表現内で指定した文字はすべて要素の内容でも同じ位置に指定します。
XMLコード <invoice_number> INV #99426 </invoice_number>これは、上のスキーマに対して有効な例です。「INV #99」という文字の後ろに3桁の数値を続ければよいだけです。
XSDコード <xsd:element name="gestation">
<xsd:simpleType>
<xsd:restriction base="xsd:timeDuration" />
<xsd:pattern value="P\d+D " />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
パターンを使って、他の型を基に要素の内容を制限することもできます。たとえば、gestation要素に懐胎日数(週や月ではなく)を含めたい場合は、この例のようなパターンを指定します。このパターンはとくに型を認識しているわkではありません。単に先頭時大文字のPを指定し、その後ろに1つ又は複数の数字を指定し、その後ろに大文字のDを指定するように定義しているだけです。
XMLコード <gestation> P108D</gestation>これは、上記スキーマに対して有効な例です。
XSDコード <xsd:element name="gestation">
<xsd:simpleType>
<xsd:pattern value="Japanese | Latin " />
<xsd:pattern value="P\d+D " />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
パターンを使って、要素の内容として設定できる値のリストを指定できます。ただし、この種の目的にはxsd:enumerationa要素を使うのが一般的です
XMLコード <gestation> Japanese </gestation>これは、上記スキーマに対して有効な例です。
・XML Schemaの正規表現とPerlの正規表現には大きな違いが1つありいます。それは、比較が常に正規表現と要素の内容全体との間で行われるということです。Perlには比較を先頭に末尾だけに限定するための^文字や$文字がありますが、XML Schemaにはこれらがありません。