XSD Facets

Een beperking (restriction) wordt gebruikt om aanvaardbare waarden voor XML-elementen of attributen te definiëren. Een beperking van een XML-element wordt een facet genoemd.

Beperking van waarden

Het volgende voorbeeld definieert een element genaamd "age" met een beperking. De waarde van "age" mag niet lager zijn dan 0 of hoger dan 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>

Beperking van een groep waarden

Als je de inhoud van een XML-element wilt beperken tot een groep aanvaardbare waarden, moet je een enumeratiebeperking (enumeration constraint) gebruiken.

Het volgende voorbeeld definieert een element genaamd "car" met een beperking. De aanvaardbare waarden zijn alleen: 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>

Het vorige voorbeeld kan ook worden geschreven als:

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

Opmerking:In dit geval kan het type "carType" gebruikt worden door andere elementen, omdat het geen onderdeel is van het element "car".

Beperking van een reeks waarden

Als je de inhoud van een XML-element wilt beperken tot een reeks gebruikte cijfers of letters, moet je een patroonbeperking (pattern constraint) gebruiken.

De volgende voorbeeld definieert een element genaamd "letter" met een beperking. De aanvaardbare waarde is één kleine letter van het alfabet: a-z:

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

De volgende voorbeeld definieert een element genaamd "initials" met een beperking. De aanvaardbare waarden zijn drie hoofdletters van het alfabet: 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>

De volgende voorbeeld definieert ook een element genaamd "initials" met een beperking. De aanvaardbare waarden zijn drie letters, zowel hoofd- als kleine letters van het alfabet: 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>

Het volgende voorbeeld definieert een element genaamd "choice" met een beperking. De aanvaardbare waarden zijn een van de letters x, y of z:

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

Het volgende voorbeeld definieert een element genaamd "prodid" met een beperking. De aanvaardbare waarden zijn een reeks van vijf Arabische cijfers, waarbij elk cijfer in het bereik 0-9 ligt:

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

Andere beperkingen voor een reeks waarden

Het volgende voorbeeld definieert een element genaamd "letter" met een beperking. De aanvaardbare waarden zijn nul of meerdere letters uit a-z:

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

Het volgende voorbeeld definieert een element genaamd "letter" met een beperking. De aanvaardbare waarden zijn een paar of meerdere paren letters, waarbij elk paar een kleine letter gevolgd door een hoofdletter bestaat. Bijvoorbeeld, "sToP" zal deze patroon verifiëren, maar "Stop", "STOP" of "stop" zullen dat niet doen:

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

Het volgende voorbeeld definieert een element genaamd "gender" met een beperking. De aanvaardbare waarden zijn "male" of "female":

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

Het volgende voorbeeld definieert een element genaamd "password" met een beperking. De aanvaardbare waarden bestaan uit een reeks van 8 karakters, die zowel hoofdletters als kleine letters a-z of cijfers 0-9 moeten zijn:

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

Beperking van witruimtekarakters

Om de behandeling van witruimtekarakters (whitespace characters) te regelen, moeten we de whiteSpace beperking gebruiken.

Het volgende voorbeeld definieert een element genaamd "address" met een beperking. Deze whiteSpace beperking is ingesteld op "preserve", wat betekent dat de XML-verwerker geen enkele witruimteletter zal verwijderen:

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

Dit voorbeeld definieert ook een element genaamd "address" met een beperking. Deze whiteSpace-beperking is ingesteld op "replace", wat betekent dat de XML-verwerker alle witte regels (reepjes, return, spaties en tabtasteren zal verwijderen):

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

Dit voorbeeld definieert ook een element genaamd "address" met een beperking. Deze whiteSpace-beperking is ingesteld op "collapse", wat betekent dat de XML-verwerker alle witte regels (reepjes, return, spaties en tabtasteren zullen vervangen door een enkele ruimte, de ruimtes aan het begin en einde zullen worden verwijderd en meerdere opeenvolgende ruimtes zullen worden samengevoegd tot een enkele ruimte):

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

Beperking van de lengte

Om de lengte van de waarde van een element te beperken, moeten we de beperkingen length, maxLength en minLength gebruiken.

Dit voorbeeld definieert een element genaamd "password" met een beperking en exact 8 tekens lang:

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

Dit voorbeeld definieert ook een element genaamd "password" met een beperking. De waarde ervan moet minimaal 5 tekens lang zijn en maximaal 8 tekens:

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

Beperking van de gegevenstypen

Beperking Beschrijving
enumeration Definieert een lijst van acceptabele waarden
fractionDigits Definieert het maximaal toegestane aantal decimalen. Dit moet groter of gelijk zijn aan 0.
length Definieert het exacte aantal toegestane tekens of items in een lijst. Dit moet groter of gelijk zijn aan 0.
maxExclusive Definieert het bovengrens van een getal. De toegestane waarden moeten kleiner zijn dan deze waarde.
maxInclusive Definieer het bovengrens van het getal. De toegestane waarden moeten kleiner of gelijk zijn aan deze waarde.
maxLength Definieer het maximale aantal toegestane tekens of lijstitems. Dit moet groter of gelijk zijn aan 0.
minExclusive Definieer het benedengrens van het getal. De toegestane waarden moeten groter zijn dan deze waarde.
minInclusive Definieer het benedengrens van het getal. De toegestane waarden moeten groter of gelijk zijn aan deze waarde.
minLength Definieer het minimale aantal toegestane tekens of lijstitems. Dit moet groter of gelijk zijn aan 0.
pattern Definieer de exacte volgorde van de toegestane tekens.
totalDigits Definieer het exacte aantal cijfers van de toegestane Arabische cijfers. Dit moet groter zijn dan 0.
whiteSpace Definieer de verwerking van witruimte (regeleinden, enter, spaties en tabulators).