目次へ

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>

数字に関してですが、値のとりうる範囲を指定することができます。値の大きさの指定を行う場合は、以下の要素を使用します。

要素名 意味
minInclusive <minInclusive value="10000"/> 10000以上
maxInclusive <maxInclusive value="99999"/> 99999以下
minExclusive <minExclusive value="9999"/> 9999以下は除く(10000以上)
maxExclusive <maxExclusive value="100000"/> 100000以上は除く(9999以下)

以上の要素を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以上の整数

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp