XSD 限定 / Facets

Begränsning (restriction) används för att definiera de accepterade värdena för XML-element eller egenskaper. Begränsningar för XML-element kallas facet.

Begränsning av värden

Följande exempel definierar ett element med ett namn "age" med begränsningar. age-värdet 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 grupp värden

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

Följande exempel definierar ett element med ett namn "car" med begränsningar. 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>

Följande 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 tillåtna siffror eller bokstäver, måste vi använda mönsterbegränsningar (pattern constraint).

Följande exempel definierar ett element med ett namn "letter" med begränsningar. 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 namn "initials" med begränsningar. 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 namn "initials" med begränsningar. 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 namn "choice" som har en begränsning. Godkända värden är en av 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 namn "prodid" som har en begränsning. Godkända värden är en sekvens av fem araberiska 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 serie värden

Följande exempel definierar ett element med ett namn "letter" som har en begränsning. Godkända 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 namn "letter" som har en begränsning. Godkända 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. Till exempel kommer "sToP" att passera denna mönsterkontroll, men "Stop", "STOP" eller "stop" kommer inte att passera kontrollen:

<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 namn "gender" som har en begränsning. Godkända 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 namn "password" som har en begränsning. Godkända värden är en rad tecken bestående av 8 tecken, dessa tecken 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 reglera hur blanktecken (whitespace characters) ska behandlas, måste vi använda whiteSpace-begränsningen.

Följande exempel definierar ett element med ett namn "address" som har en begränsning. Denna whiteSpace-begränsning ä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 namnet "address" som har en begränsning. denna whiteSpace-begränsning är satt till "replace", vilket innebär att XML-handlaren kommer att ta bort alla blanktecken (radbrytningar, returtecken, blanksteg 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. denna whiteSpace-begränsning är satt till "collapse", vilket innebär att XML-handlaren kommer att ta bort alla blanktecken (radbrytningar, returtecken, blanksteg och tabulatorer kommer att ersättas med ett blanksteg, och början och slutet av blanksteg kommer att tas bort samt att flera upprepade blanksteg kommer att reduceras till en enda blanksteg):

<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å värdet i ett element måste vi använda begränsningarna length, maxLength och minLength.

Detta exempel definierar ett element med namnet "password" som har en begränsning. dess värde måste vara exakt 8 tecken:

<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 max 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 tillåtna maxantalet decimaler. 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 övre gränsen för ett värde. De tillåtna värdena måste vara mindre än detta värde.
maxInclusive Definiera det övre gränsen för det numeriska värdet. De tillåtna värdena måste vara mindre än eller lika med detta värde.
maxLength Definiera det största antalet tecken eller listobjekt som tillåts. Det måste vara större än eller lika med 0.
minExclusive Definiera det minsta värdet för det numeriska värdet. De tillåtna värdena måste vara större än detta värde.
minInclusive Definiera det minsta värdet för det numeriska värdet. De tillåtna värdena måste vara större än eller lika med detta värde.
minLength Definiera det minsta antalet tecken eller listobjekt som tillåts. Det måste vara större än eller lika med 0.
pattern Definiera den exakta sekvensen av tecken som accepteras.
totalDigits Definiera den exakta antalet decimaler som tillåts för de tillåtna arabiska siffrorna. Det måste vara större än 0.
whiteSpace Definiera behandlingsmetoden för tomma tecken (nyckel, retur, blanksteg och tabulator).