XSD begrænsninger / Facets

Begrænsning (restriction) bruges til at definere de acceptable værdier for XML-elementer eller egenskaber. Begrænsning af XML-elementer kaldes facet.

Begrænsning af værdier

Følgende eksempel definerer et element med navnet "age" med en begrænset værdi. Age-værdien må ikke være lavere end 0 eller højere end 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 af en gruppe værdier

For at begrænse indholdet af en XML-element til en gruppe af acceptable værdier, skal vi bruge en eksterne begrænsning (enumeration constraint).

Følgende eksempel definerer et element med navnet "car" med en begrænset værdi. De acceptable værdier er kun 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>

Det foregående eksempel kan også skrives 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 dette tilfælde kan typen "carType" bruges af andre elementer, fordi den ikke er en del af elementet "car".

Begrænsning af en række værdier

For at begrænse indholdet af en XML-element til en række brugbare tal eller bogstaver, skal vi bruge mønsterbegrænsninger (pattern constraint).

Følgende eksempel definerer et element med navnet "letter" med en begrænset værdi. De acceptable værdier er kun én af de små bogstaver 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æste eksempel definerer et element med navnet "initials" med en begrænset værdi. De acceptable værdier er tre af de store bogstaver 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æste eksempel definerer også en element med navnet "initials" med en begrænset værdi. De acceptable værdier er tre af de store eller små bogstaver 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æste eksempel definerer et element med en begrænset navn kaldet "choice". De acceptable værdier er bogstaverne x, y eller z en af dem:

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

Næste eksempel definerer et element med en begrænset navn kaldet "prodid". De acceptable værdier er en række af fem arabiske tal, og hvert tal skal være i 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>

Andre begrænsninger for en række værdier

Dette eksempel definerer et element med en begrænset navn kaldet "letter". De acceptable værdier er nul eller flere bogstaver fra a-z:

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

Dette eksempel definerer et element med en begrænset navn kaldet "letter". De acceptable værdier er et par eller flere par af bogstaver, hvor hvert par består af en lille bogstav efterfulgt af et stort bogstav. For eksempel vil "sToP" passere denne mønsterverifikation, men "Stop", "STOP" eller "stop" vil ikke kunne passere verifikationen:

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

Dette eksempel definerer et element med en begrænset navn kaldet "gender". De acceptable værdier er 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>

Dette eksempel definerer et element med en begrænset navn kaldet "password". De acceptable værdier er en række af 8 tegn, som skal være store eller små bogstaver a-z eller tal 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 af blanke tegn

For at fastlægge behandlingen af blanke tegn (whitespace characters) skal vi bruge whiteSpace begrænsningen.

Dette eksempel definerer en element med en begrænset navn kaldet "address". Denne whiteSpace begrænsning er sat til "preserve", hvilket betyder, at XML-håndteringen ikke vil fjerne nogen blanke tegn:

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

Dette eksempel definerer også et element med en begrænsning kaldet "address" med whiteSpace-begrænsningen sat til "replace", hvilket betyder, at XML-håndtereren vil fjerne alle blanke tegn (linjeskift, returtegn, mellemrum og tabulatorer):

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

Dette eksempel definerer også et element med en begrænsning kaldet "address" med whiteSpace-begrænsningen sat til "collapse", hvilket betyder, at XML-håndtereren vil fjerne alle blanke tegn (linjeskift, returtegn, mellemrum og tabulatorer vil blive erstattet af et mellemrum, og begyndende og afsluttende mellemrum vil blive fjernet, samt flere på hinanden følgende mellemrum vil blive reduceret til én enkelt mellemrum):

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

Begrænsning af længden

For at begrænse længden af værdier i et element skal vi bruge begrænsninger som length, maxLength og minLength.

Dette eksempel definerer et element med en begrænsning og navnet "password" med en værdi, der skal være præcis 8 tegn lang:

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

Dette eksempel definerer også et element med en begrænsning kaldet "password" med en minimumslængde på 5 tegn og en maksimumslængde på 8 tegn:

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

Begrænsning Beskrivelse
enumeration Definerer en liste af acceptable værdier
fractionDigits Definerer det maksimale antal decimalpladser, der er tilladt. Denne værdi skal være større end eller lig med 0.
length Definerer den præcise antal tilladte tegn eller elementer i en liste. Denne værdi skal være større end eller lig med 0.
maxExclusive Definerer det øvre grænseværdi for et tal. De tilladte værdier skal være mindre end denne værdi.
maxInclusive Definerer øvre grænse for et tal. De tilladte værdier skal være mindre end eller lig med denne værdi.
maxLength Definerer det maksimale antal tilladte tegn eller elementer i en liste. Må være større end eller lig med 0.
minExclusive Definerer nedre grænse for et tal. De tilladte værdier skal være større end denne værdi.
minInclusive Definerer nedre grænse for et tal. De tilladte værdier skal være større end eller lig med denne værdi.
minLength Definerer det mindste antal tilladte tegn eller elementer i en liste. Må være større end eller lig med 0.
pattern Definerer den præcise sekvens af tegn, der er acceptable.
totalDigits Definerer den præcise antal decimaler, der er tilladt for de tilladte arabiske tal. Må være større end 0.
whiteSpace Definerer behandlingen af blanke tegn (linjeskift, returtegn, mellemrum og tabulatorer).