Ograniczenia/Facets w XSD

Ograniczenia (restriction) służą do określenia akceptowalnych wartości dla elementów XML lub atrybutów. Ograniczenia elementów XML nazywane są cechami.

Ograniczenia wartości

Poniżej znajduje się przykład definiujący element o nazwie "age" z ograniczeniami. Wartość "age" nie może być niższa niż 0 ani wyższa niż 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>

Ograniczenie zestawu wartości

Aby ograniczyć zawartość elementu XML do zestawu dozwolonych wartości, należy użyć ograniczeń liczbowych (enumeration constraint).

Poniższy przykład definiuje element o nazwie "car" z ograniczeniem. Akceptowane wartości to tylko: 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>

Powyższy przykład można również zapisać jako:

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

Komentarz:W tym przypadku typ "carType" może być używany przez inne elementy, ponieważ nie jest częścią elementu "car".

Ograniczenie szeregu wartości

Aby ograniczyć zawartość elementu XML do szeregu dozwolonych cyfr lub liter, należy użyć ograniczeń wzorcowych (pattern constraint).

Poniższy przykład definiuje element o nazwie "letter" z ograniczeniem. Akceptowane wartości to tylko jedna mała litera a - z:

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

Następny przykład definiuje element o nazwie "initials" z ograniczeniem. Akceptowane wartości to trzy duże litery 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>

Następny przykład również definiuje element o nazwie "initials" z ograniczeniem. Akceptowane wartości to trzy duże lub małe litery 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>

Następny przykład definiuje element o nazwie "choice" z ograniczeniem. Akceptowane wartości to litera x, y lub z:

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

Następny przykład definiuje element o nazwie "prodid" z ograniczeniem. Akceptowane wartości to sekwencja pięciu cyfr arabskich, gdzie każda liczba ma zakres 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>

Inne określenia dla serii wartości

Poniższy przykład definiuje element o nazwie "letter" z określonymi cechami. Akceptowalne wartości to zero lub kilka liter z zakresu a - z:

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

Poniższy przykład definiuje element o nazwie "letter" z określonymi cechami. Akceptowalne wartości to para lub kilka par liter, każda para składa się z małej litery połączona z dużą literą. Na przykład, "sToP" przejdzie weryfikację tego wzorca, ale "Stop", "STOP" lub "stop" nie przejdą weryfikacji:

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

Poniższy przykład definiuje element o nazwie "gender" z określonymi cechami. Akceptowalne wartości to male lub female:

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

Poniższy przykład definiuje element o nazwie "password" z określonymi cechami. Akceptowalne wartości to wiersz z 8 znaków, które muszą być dużymi lub małymi literami a - z lub cyframi 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>

Określenie białych znaków

Aby określić sposób traktowania białych znaków (białych znaków), musimy użyć cechy whiteSpace.

Poniższy przykład definiuje element o nazwie "address" z określonymi cechami. Cecha whiteSpace ustawiona jest na "preserve", co oznacza, że przetwornik XML nie usunie żadnych białych znaków:

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

Ten przykład również definiuje element o nazwie "address" z określonymi cechami. Określona cecha whiteSpace ustawiona jest na "replace", co oznacza, że przetwornik XML usunie wszystkie białe znaki (wiersze, enter, spacje oraz tabulatory):

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

Ten przykład również definiuje element o nazwie "address" z ograniczeniem. WhiteSpace ograniczenie ustawione na "collapse", co oznacza, że procesor XML usunie wszystkie znaki białe (nowe wiersze, znaki return, spacje oraz tabulatory będą zastąpione spacją, spacje na początku i końcu będą usunięte, a多个连续的空格将被缩减为一个单一的空格):

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

Ograniczenia długości

Aby ograniczyć długość wartości elementu, musimy użyć ograniczeń length, maxLength oraz minLength.

Ten przykład definiuje element o nazwie "password" z ograniczeniem, którego wartość musi być dokładnie 8 znaków:

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

Ten przykład również definiuje element o nazwie "password" z ograniczeniem. Jego wartość musi wynosić co najmniej 5 znaków, a co najmniej 8 znaków:

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

Ograniczenie typu danych

Ograniczenie Opis
enumeration Definiuje listę akceptowalnych wartości
fractionDigits Definiuje maksymalną liczbę miejsc po przecinku. Musi być większa lub równa 0.
length Definiuje dokładną liczbę dozwolonych znaków lub elementów listy. Musi być większa lub równa 0.
maxExclusive Definiuje górną granicę wartości liczbowych. Dozwolone wartości muszą być mniejsze niż ta wartość.
maxInclusive Definiuje górną granicę wartości liczbowych. Dozwolone wartości muszą być mniejsze lub równe tej wartości.
maxLength Definiuje maksymalną liczbę dozwolonych znaków lub elementów listy. Musi być większa lub równa 0.
minExclusive Definiuje dolną granicę wartości liczbowych. Dozwolone wartości muszą być większe niż ta wartość.
minInclusive Definiowanie dolnej granicy wartości liczbowych. Dozwolone wartości muszą być większe lub równe tej wartości.
minLength Definiowanie minimalnej liczby dozwolonych znaków lub elementów listy. Musi być większa lub równa 0.
pattern Definiowanie dokładnej sekwencji znaków akceptowanych.
totalDigits Definiowanie dokładnej liczby miejsc dziesiętnych dozwolonych cyfr. Musi być większa niż 0.
whiteSpace Definiowanie sposobu traktowania białych znaków (enter, return, spacje oraz tabulatory)