XSD 限定 / Facets

制限(restriction)は、XML要素または属性に対して許可される値を定義するために使用されます。XML要素の制限はフェイセット(facet)と呼ばれます。

値の制限

以下の例では、名前が「age」で制限された要素も定義されています。ageの値は0未満または120を超えることができません:

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

値の制限の一例

XML要素の内容を一連の許可される値に制限するには、列挙制約(enumeration constraint)を使用する必要があります。

以下の例では、名前が「car」で制限された要素も定義されています。許可される値はAudi、Golf、BMWのみです:

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

上記の例は以下のように書かれることもできます:

<xs:element name="car"> type="carType"/>
<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

注:この場合、型「carType」は他の要素で使用できますが、それは「car」要素の一部ではありません。

値の制限の一例

XML要素の内容を一連の使用可能な数字やアルファベットに制限するには、パターン制約(pattern constraint)を使用する必要があります。

以下の例では、名前が「letter」で制限された要素も定義されています。許可される値は小文字のアルファベットa-zの1文字です:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

次の例では、名前が「initials」で制限された要素も定義されています。許可される値は大文字のアルファベットA-Zの3文字です:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

次の例では、名前が「initials」で制限された要素も定義されています。許可される値は大文字または小文字のアルファベットa-zの3文字です:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

次の例では、名前が「choice」の指定された要素を持つことを定義しています。許可された値は、アルファベットx、y、またはzの1つです:

<xs:element name="choice">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

次の例では、名前が「prodid」の指定された要素を持つことを定義しています。許可された値は、0から9の範囲の5桁のアラビア数字のシーケンスです:

<xs:element name="prodid">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

一連の値の他の指定

以下の例では、名前が「letter」の指定された要素を持つことを定義しています。許可された値はa-zの0個または複数のアルファベットです:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

以下の例では、名前が「letter」の指定された要素を持つことを定義しています。許可された値は、小文字のアルファベットと大文字のアルファベットで構成される一対または複数の一対のアルファベットです。例えば、「sToP」はこのパターンで確認されますが、「Stop」、「STOP」または「stop」は確認されません:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+">
  </xs:restriction>
</xs:simpleType>
</xs:element>

以下の例では、名前が「gender」の指定された要素を持つことを定義しています。許可された値はmaleまたはfemaleです:

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

以下の例では、名前が「password」の指定された要素を持つことを定義しています。許可された値は、大文字または小文字のアルファベットa-zまたは数字0-9で構成される8文字の一行文字です:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

空白文字の指定

空白文字(whitespace characters)の処理方法を規定するには、whiteSpace指定を使用する必要があります。

以下の例では、名前が「address」の指定された要素を持つことを定義しています。このwhiteSpace指定は「preserve」に設定されており、XML処理器は空白文字を全て削除しません:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

この例では、名前が "address" で限定された要素が定義されています。このwhiteSpaceの限定は"replace"に設定されており、これはXML処理器がすべての空白文字(改行、エンター、スペースおよびタブを削除することを意味します):

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

この例では、名前が "address" で限定された要素が定義されています。このwhiteSpaceの限定は"collapse"に設定されており、これはXML処理器がすべての空白文字(改行、エンター、スペースおよびタブを空格に置き換え、先頭および末尾のスペースを削除し、連続するスペースを1つのスペースにまとめることを意味します):

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

長さの限定

要素内の値の長さを制限するには、length、maxLengthおよびminLengthの限定を使用する必要があります。

この例では、限定された名前が "password" で要素が定義されています。値は正確に8文字でなければなりません:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

この例では、名前が "password" で限定された要素が定義されています。値は最小5文字、最大8文字です:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

データ型の限定

限定 説明
enumeration 許可される値のリストを定義します。
fractionDigits 許可される最大の小数桁数を定義する必要があります。0以上でなければなりません。
length 許可される文字またはリスト項目の正確な数を定義する必要があります。0以上でなければなりません。
maxExclusive 数値の上限を定義します。許可される値はこの値以下でなければなりません。
maxInclusive 数値の上限を定義します。許可される値はこの値以下でなければなりません。
maxLength 許可される文字またはリスト項目の最大数を定義します。0以上でなければなりません。
minExclusive 数値の下限を定義します。許可される値はこの値以上でなければなりません。
minInclusive 数値の下限を定義します。許可される値はこの値以上でなければなりません。
minLength 許可される文字またはリスト項目の最小数を定義します。0以上でなければなりません。
pattern 許可される文字の正確なシーケンスを定義します。
totalDigits 許可されるアラビア数字の正確な桁数を定義します。0以上でなければなりません。
whiteSpace 空白文字(改行、エンター、スペースおよびタブ)の処理方法を定義します。