XSD begränsningar/Facets

Begränsning (restriction) används för att definiera vilka värden som är acceptabla för en XML-element eller egenskap. En begränsning av ett XML-element kallas för facet.

Begränsning av värden

Följande exempel definierar ett element med en begränsning och namnet "age". age:s värde får inte vara lägre än 0 eller högre än 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>

Begränsning av en uppsättning värden

För att begränsa innehållet i ett XML-element till ett grupps accepterade värden, måste vi använda en uppsättning begränsningar (enumeration constraint).

Nedanstående exempel definierar ett element med ett begränsat namn "car". De accepterade värdena är endast: 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>

Ovanstående exempel kan också skrivas som:

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

Kommentar:I detta fall kan typen "carType" användas av andra element, eftersom den inte är en del av elementet "car".

Begränsning av en serie värden

För att begränsa innehållet i en XML-element till en serie användbara siffror eller bokstäver, måste vi använda mönsterbegränsningar (pattern constraint).

Nedanstående exempel definierar ett element med ett begränsat namn "letter". De accepterade värdena är endast en liten bokstav a-z:

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

Nästa exempel definierar ett element med ett begränsat namn "initials". De accepterade värdena är tre stora bokstäver 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>

Nästa exempel definierar också ett element med ett begränsat namn "initials". De accepterade värdena är tre stora eller små bokstäver 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>

Nästa exempel definierar ett element med ett begränsat namn "choice". De accepterade värdena är bokstäverna x, y eller z:

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

Nästa exempel definierar ett element med ett begränsat namn "prodid". De accepterade värdena är en sekvens av fem arabiska siffror, där varje siffra ligger inom intervallet 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>

Andra begränsningar för en uppsättning värden

Följande exempel definierar ett element med ett begränsat namn "letter". Accepterade värden är noll eller flera bokstäver från a-z:

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

Följande exempel definierar ett element med ett begränsat namn "letter". Accepterade värden är ett eller flera par bokstäver, där varje par består av en små bokstav följt av en stor bokstav. Exempelvis kommer "sToP" att passera denna modell, men "Stop", "STOP" eller "stop" kommer inte att kunna passera valideringen:

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

Följande exempel definierar ett element med ett begränsat namn "gender". Accepterade värden är male eller female:

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

Följande exempel definierar ett element med ett begränsat namn "password". Accepterade värden är en rad med 8 tecken, som måste vara stora eller små bokstäver a-z eller siffror 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>

Begränsning av blanktecken

För att specificera hur blanktecken (whitespace characters) ska hanteras, måste vi använda whiteSpace-begränsningen.

Följande exempel definierar ett element med ett begränsat namn "address". Den begränsade whiteSpace-egenskapen är satt till "preserve", vilket innebär att XML-handlaren inte kommer att ta bort några blanktecken:

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

Detta exempel definierar också ett element med ett begränsat namn "address". Den begränsade whiteSpace-egenskapen är satt till "replace", vilket innebär att XML-handlaren kommer att ta bort alla blanktecken (radbrytningar, returtecken, mellanslag och tabulatorer):

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

Detta exempel definierar också ett element med namnet "address" som har en begränsning. whiteSpace-begränsningen är satt till "collapse", vilket innebär att XML-behandlaren kommer att ta bort alla blanka tecken (nyckelrad, returtecken, mellanslag och tabulatorer kommer att ersättas med ett mellanslag, och mellanslag vid början och slutet kommer att tas bort samt flera upprepade mellanslag kommer att reduceras till ett enda mellanslag):

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

Begränsning av längd

För att begränsa längden på ett elements värde behöver vi använda begränsningar som length, maxLength och minLength.

Detta exempel definierar ett element med namnet "password" som har en begränsning och måste vara exakt 8 tecken långt:

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

Detta exempel definierar också ett element med namnet "password" som har en begränsning. dess värde måste vara minst 5 tecken och högst 8 tecken:

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

Begränsning av datatyp

Begränsning Beskrivning
enumeration Definierar en lista med acceptabla värden
fractionDigits Definierar det maximala antalet decimaler som är tillåtna för ett numeriskt värde. Det måste vara större än eller lika med 0.
length Definierar det exakta antalet tillåtna tecken eller element i en lista. Det måste vara större än eller lika med 0.
maxExclusive Definierar det högsta tillåtna värdet för ett numeriskt värde. De tillåtna värdena måste vara mindre än detta värde.
maxInclusive Definierar det högsta tillåtna värdet för ett numeriskt värde. De tillåtna värdena måste vara mindre än eller lika med detta värde.
maxLength Definierar det maximala tillåtna antalet tecken eller element i en lista. Det måste vara större än eller lika med 0.
minExclusive Definierar det minsta tillåtna värdet för ett numeriskt värde. De tillåtna värdena måste vara större än detta värde.
minInclusive Definiera det minsta värdet för numret. De tillåtna värdena måste vara större än eller lika med detta värde.
minLength Definiera den minsta antalet tecken eller listpost som är tillåtna. Måste vara större än eller lika med 0.
pattern Definiera den exakta sekvensen av tecken som är acceptabla.
totalDigits Definiera den exakta antalet decimaler som är tillåtna för de tillåtna arabiska siffrorna. Måste vara större än 0.
whiteSpace Definiera hur blanka tecken (nyckel, retur, blanksteg och tabulator) behandlas.