- 4.1 Simple Typeの定義
- 4.2 ビルトイン Simple Type
- 4.3 Simple Typeの作成
- 4.4 Restriction
- 4.5 listとUnion
- 4.6 まとめ
4.4 Restriction
まず、既存のSimple Typeに何らかの「制限」を加えて、新たな型を作成する方法です。「制限」をして、作成する場合はrestriction要素を使用します。
<simpleType name="SImple Type の名前"> <restriction base="基になるSimple Typeの名前"> 制限の内容 </restriction> </simpleType>
base属性の値で、基となる既存のSimple Typeの名前を指定します。以下に例を示します。
<!-- Stock Keeping Unit, a code for identifying products --> <xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType>
上の例では、SKUという新しいSimple Typeを定義しています。restriction要素のbase属性の値は、xsd:stringです。これより、XML Schemaのstring型を制限して新たな型を作成していることがわかります。
では、どのような制限ができるのか、見ていきましょう。
まず、XML Schemaが強力な機能のひとつとして、「正規表現による値の制限が可能」ということです。正規表現を使用する場合は、pattern要素を使用します。
<simpleType name="SImple Type の名前"> <restriction base="基になるSimple Typeの名前"> <pattern value="正規表現"/> </restriction> </simpleType>
以下に例を示します。
<!-- Stock Keeping Unit, a code for identifying products --> <xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType>
何度も出現している例ですが、これは、string型を制限して新たにSKUというSimple Typeを作成しています。restrinction要素の中で、pattern要素を使用しています。これより、正規表現により型の制限を行っていることがわかります。valueの値は、"\d{3}-[A-Z]{2}"という正規表現が記述されています。これは、数字が3個、その後ハイフンが続いて、最後に大文字のアルファベットが2つ続くような文字列、という意味です。SKU型の属性の例を以下に示します。
<items> <item partNum="872-AA"> ... </item> <item partNum="926-AA"> ... </item> </items>
partNum属性の型は、SKU型です。スキーマを満たしています。
また、とれる値が特定できる場合は、それを列挙することもできます。
<airline>JAL</airline> <airline>ANA</airline> <airline>JAS</airline>
上の例では、airline要素の中身は、JAL、ANA、JASのどれかになります。このような制限をする場合は、enumeration要素を使用します。(enumerationは列挙という意味です。)
<simpleType name="SImpleType の名前"> <restriction base="基になるSimple Typeの名前"> <enumeration value="値の候補1"/> <enumeration value="値の候補2"/> ... </restriction> </simpleType>
airline要素の型の定義は、以下のようになります。
<xsd:simpleType name="AirlineType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="JAL"/> <xsd:enumeration value="ANA"/> <xsd:enumeration value="JAS"/> </xsd:restriction> </xsd:simpleType>
数字に関してですが、値のとりうる範囲を指定することができます。値の大きさの指定を行う場合は、以下の要素を使用します。
以上の要素をrestrictionの子供要素に指定します。以下に例を示します。
<xsd:simpleType name="myInteger"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="10000"/> <xsd:maxInclusive value="99999"/> </xsd:restriction> </xsd:simpleType>
以上では、integer型を制限して、新たにmyIntegerという名前のsimpleTypeを作成すしています。minInclusiveの値は10000に設定されています。maxInclusiveの値は99999に設定されています。これにより、myInteger型は10000以上99999以下の整数の値を持つことができる型になります。
minInclusive、maxInclusive等の性質上、以下のように設定しなければなりません。
- minInclusiveの値 < maxInclusiveの値
- minExclusiveの値 < maxExclusiveの値
- minExclusiveの値 < minInclusiveの値
また、その型の「長さ」を規定することもできます。string型であれば、「長さ」は文字の数になります。次章で説明するリストの形をとっていれば、長さはそのリストに含められる単位の個数になります。このように、長さは、ベースとなるSimple Typeにより意味が異なります。長さは、以下の要素により規定します。
要素名 | 例 | 意味 |
---|---|---|
length | <length value="3"/> | 長さはちょうど3 |
minlength | <minlength value="5"/> | 長さは5以上 |
maxlength | <maxlength value="10"/> | 長さは10以下 |
lengthについては、次章でもう一度触れたいと思います。
その他にも以下のような制限を行うことができます。
要素名 | 意味 |
---|---|
string型に設定できる制限 | |
whiteSpace | スペースの扱いについて規定する。preserve、replace、collapseのどれかを指定できる |
decimal型に設定できる値 | |
totalDigits | 小数点より右側に記述できる数字の数の最大値、1以上の整数を指定できる |
fractionDigits | 小数点より左側に記述できる数字の数の最大値、0以上の整数 |