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つのアラビア数字のシーケンスであり、各数字の範囲は0-9です:

<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の中の零個または複数の文字です:

<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 空白文字(改行、Enter、スペースおよびタブ)の処理方法を定義します。