XSD ograniczenia / Facets

Ograniczenie (restriction) służy do definiowania akceptowanych wartości dla elementów XML lub atrybutów. Ograniczenie elementu XML nazywa się faceta.

Ograniczenie wartości

Poniższy przykład definiuje element o nazwie "age" z ograniczonymi wartościami. 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 akceptowanych wartości, należy użyć ograniczeń liczb (enumeration constraint).

Poniższy przykład definiuje element o nazwie "car" z ograniczonymi wartościami. Akceptowane są 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>

Poniż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 serii wartości

Aby ograniczyć zawartość elementu XML do serii dostępnych cyfr lub liter, należy użyć ograniczeń wzorców (pattern constraint).

Poniższy przykład definiuje element o nazwie "letter" z ograniczonymi wartościami. Akceptowany jest tylko jeden znak: 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 ograniczonymi wartościami. Akceptowane są tylko 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 ograniczonymi wartościami. Akceptowane są trzy litery, zarówno duże, jak i małe: 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 określonymi ograniczeniami. 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 określonymi ograniczeniami. Akceptowane wartości to sekwencja pięciu cyfr arabskich, a każda liczba mieści się w zakresie 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 ograniczenia dla serii wartości

Poniższy przykład definiuje element o nazwie "letter" z określonymi ograniczeniami. Akceptowane wartości to zero lub więcej 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 ograniczeniami. Akceptowane 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 ograniczeniami. Akceptowane 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 ograniczeniami. Akceptowane wartości to wiersz z 8 znaków, które mogą być zarówno dużymi, jak i 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>

Ograniczenia znaków białych

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

Poniższy przykład definiuje element o nazwie "address" z określonymi ograniczeniami. Określona wartość whiteSpace to "preserve", co oznacza, że procesor XML nie usuwa żadnych znaków białych:

<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 ograniczeniem. Ta wartość whiteSpace została ustawiona na "replace", co oznacza, że procesor XML usunie wszystkie znaki białe (w tym 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. Ta wartość whiteSpace została ustawiona na "collapse", co oznacza, że procesor XML usunie wszystkie znaki białe (w tym wiersze, enter, 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>

Ograniczenie 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óry musi być dokładnie 8 znaków długi:

<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, które są dozwolone. 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órne ograniczenie liczby. Dozwolone wartości muszą być mniejsze niż ta wartość.
maxInclusive Definiowanie górnej granicy wartości liczbowych. Dozwolone wartości muszą być mniejsze lub równe tej wartości.
maxLength Definiowanie maksymalnej liczby dozwolonych znaków lub elementów listy. Musi być większe lub równe 0.
minExclusive Definiowanie dolnej granicy wartości liczbowych. Dozwolone wartości muszą być większe niż tę 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ększe lub równe 0.
pattern Definiowanie dokładnej sekwencji dozwolonych znaków.
totalDigits Definiowanie dokładnej liczby miejsc dziesiętnych dozwolonych cyfr. Musi być większe niż 0.
whiteSpace Definiowanie sposobu traktowania białych znaków (enter, return, spacje oraz tabulatory).