XSDの制限/ファセット
制限は、XML要素または属性の許容値を定義するために使用されます。XML要素の制限はファセットと呼ばれます。
値の制限
次の例では、制限付きの「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要素のコンテンツを許容可能な値のセットに制限するには、列挙型制約を使用します。
以下の例では、制限付きの「car」という要素を定義しています。唯一の許容値は次のとおりです。アウディ、ゴルフ、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要素の内容を制限して、使用できる一連の数字または文字を定義するには、パターン制約を使用します。
以下の例では、制限付きの「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>
次の例では、制限付きの「イニシャル」と呼ばれる要素を定義します。唯一の許容値は、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>
次の例では、制限付きの「イニシャル」と呼ばれる要素も定義しています。唯一の許容値は、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:
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
次の例では、制限付きの「prodid」という要素を定義しています。唯一の許容値は、シーケンス内の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までの小文字が0回以上出現することです。
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
次の例では、制限付きの「letter」という要素も定義しています。許容値は、1つ以上の文字のペアであり、各ペアは小文字とそれに続く大文字で構成されます。たとえば、「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」という要素を定義しています。唯一の許容値は男性または女性です:
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
次の例では、制限付きの「password」という要素を定義しています。行には正確に8文字が必要であり、それらの文字はaからzまでの小文字または大文字、または0から9までの数字でなければなりません。
<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制約を使用します。
この例では、「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制約は「置換」に設定されます。これは、XMLプロセッサがすべての空白文字(改行、タブ、スペース、および改行)をスペースに置き換えることを意味します。
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
この例では、制限付きの「address」という要素も定義しています。whiteSpace制約は「折りたたみ」に設定されます。これは、XMLプロセッサがすべての空白文字を削除することを意味します(改行、タブ、スペース、キャリッジリターンはスペースに置き換えられ、先頭と末尾のスペースは削除され、複数のスペースは次のように削減されます)単一のスペース):
<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>
この例では、「パスワード」と呼ばれる別の要素を制限付きで定義しています。値は、最小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>
データ型の制限
Constraint | Description |
---|---|
enumeration | Defines a list of acceptable values |
fractionDigits | Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero |
length | Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero |
maxExclusive | Specifies the upper bounds for numeric values (the value must be less than this value) |
maxInclusive | Specifies the upper bounds for numeric values (the value must be less than or equal to this value) |
maxLength | Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero |
minExclusive | Specifies the lower bounds for numeric values (the value must be greater than this value) |
minInclusive | Specifies the lower bounds for numeric values (the value must be greater than or equal to this value) |
minLength | Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero |
pattern | Defines the exact sequence of characters that are acceptable |
totalDigits | Specifies the exact number of digits allowed. Must be greater than zero |
whiteSpace | Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled |