XSD Begrensninger/Facetter

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

Dette eksempel definerer en element med navn "age" som er begrænset. Værdien af age 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 opretningsbegrænsning (enumeration constraint).

Nedenstående eksempel definerer et element med et specificeret navn "car". 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ønstervilkår (pattern constraint).

Nedenstående eksempel definerer et element med et specificeret navn "letter". De acceptable værdier er kun et enkelt lille bogstav 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 et specificeret navn "initials". De acceptable værdier er tre 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å et element med et specificeret navn "initials". De acceptable værdier er tre 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 et specificeret navn "choice". De acceptable værdier er en af bogstaverne 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æste eksempel definerer et element med en specificeret navn "prodid". De acceptable værdier er en sekvens af fem arabiske cifre, og hvert ciffer har et interval på 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

Et andet eksempel definerer et element med et 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>

Et andet eksempel definerer et element med et 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 fulgt af et stort bogstav. For eksempel vil "sToP" passere denne model, men "Stop", "STOP" eller "stop" vil ikke kunne passere validiteten:

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

Et andet eksempel definerer et element med et 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>

Et andet eksempel definerer et element med et 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 specificere behandlingen af blanke tegn (whitespace characters) skal vi bruge whiteSpace begrænsningen.

Et andet eksempel definerer et element med et begrænset navn kaldet "address". Denne whiteSpace begrænsning er sat til "preserve", hvilket betyder, at XML-behandleren 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 et begrænset navn kaldet "address". Denne whiteSpace begrænsning er sat til "replace", hvilket betyder, at XML-behandleren 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 navnet "address", der har en begrænsning. Denne whiteSpace-begrænsning er sat til "collapse", hvilket betyder, at XML-håndtereren vil fjerne alle blanke tegn (linjeskift, enter, mellemrum og tabulatorer vil blive erstattet af et mellemrum, og begyndelses- og slutmellemrum vil blive fjernet, samt flere sammenhængende mellemrum vil blive reduceret til et 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ængde

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 navnet "password", der har en begrænsning. Værdien 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 navnet "password", der har en begrænsning. Værdien skal være mellem 5 og 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 accepterbare værdier
fractionDigits Definerer det maksimale antal decimalpladser for de tilladte værdier. Det skal være større end eller lig med 0.
length Definerer det præcise antal tilladte tegn eller elementer i en liste. Det skal være større end eller lig med 0.
maxExclusive Definerer numerisk øvre grænse. De tilladte værdier skal være mindre end denne værdi.
maxInclusive Definerer numerisk øvre grænse. 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. Det skal være større end eller lig med 0.
minExclusive Definerer numerisk nedre grænse. De tilladte værdier skal være større end denne værdi.
minInclusive Definerer nedre grænse for tallet. 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 cifre. Må være større end 0.
whiteSpace Definerer behandlingen af blanke tegn (linjeskift, enter, mellemrum og tabulatorer).