XSD 限定/Facets

Pengaturan (restriction) digunakan untuk menentukan nilai yang diterima bagi elemen XML atau atribut. Pengaturan bagi elemen XML disebut dengan aspek.

Pengaturan nilai

Contoh di bawah ini mendefinisikan elemen yang mempunyai batasan dan dinamai "age". Nilai age tidak boleh kurang daripada 0 atau lebih tinggi daripada 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>

Pengaturan untuk sekumpulan nilai

Untuk membatasi konten elemen XML menjadi sekumpulan nilai yang diterima, kita harus menggunakan pengaturan enumerasi (enumeration constraint).

Contoh berikut menentukan elemen yang dihadapi dengan nama yang ditentukan "car". Nilai yang diterima hanya: 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>

Contoh di atas juga dapat ditulis sebagai:

<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>

Keterangan:Dalam kasus ini, tipe "carType" dapat digunakan oleh elemen lain, karena ia bukan bagian dari elemen "car".

Pengaturan untuk sekumpulan nilai

Untuk membatasi konten elemen XML menjadi sekumpulan angka atau huruf yang dapat digunakan, kita harus menggunakan pengaturan pola (pattern constraint).

Contoh berikut menentukan elemen yang dihadapi dengan nama yang ditentukan "letter". Nilai yang diterima hanya huruf kecil a - z salah satu dari mereka:

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

Contoh berikut juga menentukan elemen yang dihadapi dengan nama yang ditentukan "initials". Nilai yang diterima adalah tiga huruf besar A - Z:

<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>

Contoh berikut juga menentukan elemen yang dihadapi dengan nama yang ditentukan "initials". Nilai yang diterima adalah tiga huruf besar atau kecil a - z:

<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>

Contoh berikut juga menentukan elemen yang dihadapi dengan nama yang ditentukan "choice". Nilai yang diterima adalah huruf x, y atau z salah satu dari mereka:

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

Contoh berikut menentukan elemen yang dihadapi dengan nama yang ditentukan "prodid". Nilai yang diterima adalah urutan lima angka Arab, dan setiap angka berada dalam rentang 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>

Batasan lain untuk sekumpulan nilai

Contoh di bawah ini mendefinikan elemen dengan nama yang disempurnakan "letter". Nilai yang diterima adalah nol atau beberapa huruf dari a-z:

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

Contoh di bawah ini mendefinikan elemen dengan nama yang disempurnakan "letter". Nilai yang diterima adalah pasangan atau beberapa pasangan huruf, setiap pasangan huruf disusun dari huruf kecil diikuti huruf besar. Sebagai contoh, "sToP" akan melalui pengesahan dengan mode ini, tetapi "Stop", "STOP" atau "stop" tidak dapat melalui pengesahan:

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

Contoh di bawah ini mendefinikan elemen dengan nama yang disempurnakan "gender". Nilai yang diterima adalah male atau female:

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

Contoh di bawah ini mendefinikan elemen dengan nama yang disempurnakan "password". Nilai yang diterima adalah baris karakter yang terdiri dari 8 karakter, karakter-karakter ini harus huruf besar atau kecil a-z atau angka 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>

Batasan karakter kosong

Untuk menentukan cara menangani karakter kosong (karakter whitespace), kita perlu menggunakan batasan whiteSpace.

Contoh di bawah ini mendefinikan elemen dengan nama yang disempurnakan "address". Batasan whiteSpace ini diatur menjadi "preserve", yang berarti pemroses XML tidak akan menghapus karakter kosong apapun:

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

Contoh ini juga mendefinikan elemen dengan nama yang disempurnakan "address". Batasan whiteSpace ini diatur menjadi "replace", yang berarti pemroses XML akan menghapus semua karakter kosong (garis baris, enter, spasi serta tab):

<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 处理器将移除所有空白字符(换行、回车、空格以及制表符会被替换为空格,开头和结尾的空格会被移除,而多个连续的空格会被缩减为一个单一的空格):

<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 定义空白字符(换行、回车、空格以及制表符)的处理方式。