XSD Sınırlama / Facets

Kısıtlama (restriction), XML elementi veya özelliğine kabul edilebilir değerleri tanımlamak için kullanılır. XML elementine olan kısıtlamaya facet denir.

Değer kısıtlaması

Aşağıdaki örnek, adı "age" olan sınırlı bir element tanımlar. Age değeri 0 veya 120'den düşük veya yüksek olamaz:

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

Değerler grubu kısıtlaması

XML elementinin içeriğini kabul edilebilir bir değer grubu olarak sınırlamak için, sayısal kısıtlama (enumeration constraint) kullanmamız gerekir.

Aşağıdaki örnek, adı "car" olan sınırlı bir element tanımlar. Kabul edilen değerler sadece Audi, Golf, BMW'dir:

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

Yukarıdaki örnek, aşağıdaki şekilde de yazılabilir:

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

Açıklama:Bu durumda, "carType" türü, "car" elementinin bir parçası olmadığı için diğer elementler tarafından kullanılabilir.

Değerler dizisi kısıtlaması

XML elementinin içeriğini kullanılabilir sayı veya harfler dizisi olarak sınırlamak için, desen kısıtlaması (pattern constraint) kullanmamız gerekir.

Aşağıdaki örnek, adı "letter" olan sınırlı bir element tanımlar. Kabul edilen değerler, sadece küçük harf a-z arasındaki bir harftir:

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

Bir sonraki örnek, adı "initials" olan sınırlı bir element tanımlar. Kabul edilen değerler, büyük harf A-Z arasındaki üç harftir:

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

Bir sonraki örnek, adı "initials" olan sınırlı bir element tanımlar. Kabul edilen değerler, büyük veya küçük harf a-z arasındaki üç harftir:

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

Bir sonraki örnekte, "choice" adlı bir elementin tanımlanması gösterilmektedir. Kabul edilen değerler, x, y veya z harflerinden biridir:

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

Bir sonraki örnekte, "prodid" adlı bir elementin tanımlanması gösterilmektedir. Kabul edilen değerler, 0-9 aralığında olan beş araba rakamından oluşan bir dizidir:

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

Bir dizi değer için diğer sınırlamalar

Aşağıdaki örnekte, "letter" adlı bir elementin tanımlanması gösterilmektedir. Kabul edilen değerler, a - z arasında sıfır veya daha fazla harf olabilir:

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

Aşağıdaki örnekte, "letter" adlı bir elementin tanımlanması gösterilmektedir. Kabul edilen değerler, küçük bir harf ardından büyük bir harfle oluşan bir veya daha fazla harf çiftinden oluşur. Örneğin, "sToP" bu tür bir doğrulamayı geçer, ancak "Stop", "STOP" veya "stop" geçemez:

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

Aşağıdaki örnekte, "gender" adlı bir elementin tanımlanması gösterilmektedir. Kabul edilen değerler male veya female olabilir:

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

Aşağıdaki örnekte, "password" adlı bir elementin tanımlanması gösterilmektedir. Kabul edilen değerler, 8 karakterden oluşan bir satır karakterlerinden oluşur ve bu karakterler büyük veya küçük harf a - z veya rakamlar 0 - 9 olmalıdır:

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

Boş karakter sınırlaması

Boş karakterler (whitespace characters) işlenme şeklini belirlemek için whiteSpace sınırlaması kullanmamız gerekmektedir.

Aşağıdaki örnekte, "address" adlı bir elementin tanımlanması gösterilmektedir. Bu whiteSpace sınırlaması "preserve" olarak ayarlanmıştır, bu da XML işleyicisinin herhangi bir boş karakteri kaldırmayacağı anlamına gelir:

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

Bu örnek, adı "address" olan ve whiteSpace sınırlaması "replace" olarak ayarlanmış sınırlı bir element tanımlar. Bu, XML işleyicisinin tüm boşluk karakterlerini (satır sonları, geri alış tuşları, boşluklar ve tablolar) kaldıracağı anlamına gelir:

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

Bu örnek, adı "address" olan ve whiteSpace sınırlaması "collapse" olarak ayarlanmış sınırlı bir element tanımlar. Bu, XML işleyicisinin tüm boşluk karakterlerini (satır sonları, geri alış tuşları, boşluklar ve tablolar) kaldıracağı anlamına gelir (satır sonları, geri alış tuşları, boşluklar ve tablolar boşluklarla değiştirilecek, başlangıç ve bitiş boşlukları kaldırılacaktır ve birden fazla sıralı boşluk tek bir boşluğa indirgenecektir):

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

Uzunluk sınırlaması

Bir elementin değer uzunluğunu sınırlamak için length, maxLength ve minLength sınırlamalarını kullanmamız gerekecek.

Bu örnekte, adı "password" olan ve 8 karakterlik olmalı olan sınırlı bir element tanımlanmıştır. Değerin tam olarak 8 karakter olmalıdır:

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

Bu örnek, adı "password" olan ve 5 ile 8 karakter arasında olmalı olan sınırlı bir element tanımlar. Değerinin minimum 5, maksimum 8 karakter olmalıdır:

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

Veri türü sınırlaması

Sınırlama Açıklama
enumeration Kabul edilebilir değerlerin bir listesini tanımlar
fractionDigits İzin verilen en büyük ondalık basamak sayısını belirler. Bu değer 0 veya daha büyük olmalıdır.
length İzin verilen karakterler veya liste öğeleri sayısını belirler. Bu değer 0 veya daha büyük olmalıdır.
maxExclusive Bu değerin üzerinde olan değerler izin verilmez.
maxInclusive Sayının üst sınıfını tanımlar. İzin verilen değerler bu değerin veya daha küçük olmalıdır.
maxLength İzin verilen karakterlerin veya listeleme öğelerinin maksimum sayısını tanımlar. 0 veya daha büyük olmalıdır.
minExclusive Sayının alt sınıfını tanımlar. İzin verilen değerler bu değerin biraz daha büyük olmalıdır.
minInclusive Sayının alt sınıfını tanımlar. İzin verilen değerler bu değerin veya daha büyük olmalıdır.
minLength İzin verilen karakterlerin veya listeleme öğelerinin minimum sayısını tanımlar. 0 veya daha büyük olmalıdır.
pattern Kabul edilebilir karakterlerin doğru sırasını tanımlar.
totalDigits İzin verilen Arap rakamlarının doğru sayısını tanımlar. 0'dan büyük olmalıdır.
whiteSpace Boş karakterlerin (satır başı, enter, boşluk ve tab) işlenme yöntemini tanımlar.