XSD rajoitukset/Facets

Rajoitus (restriction) määrittelee XML-elementin tai ominaisuuden hyväksyttävät arvot. XML-elementin rajoitus kutsutaan tarkistukseksi (facet).

Arvojen rajoittaminen

Esimerkki määrittelee elementin, jolla on rajoitus ja nimi "age". age:n arvon ei tule olla alle 0 tai yli 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>

Arvojen rajoittaminen joukkoon

Jos haluamme rajoittaa XML-elementin sisällön joukkoon hyväksyttäviä arvoja, meidän on käytettävä luettelorajoitusta (enumeration constraint).

Seuraava esimerkki määrittelee elementin nimeltä "car", jolla on rajoitettu nimi. Hyväksytyt arvot ovat vain: 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>

Yllä oleva esimerkki voidaan myös kirjoittaa seuraavasti:

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

Huomautus:Tässä tapauksessa tyyppi "carType" voidaan käyttää muiden elementtien kanssa, koska se ei ole "car"-elementin osa.

Arvojen rajoittaminen joukkoon

Jos haluamme rajoittaa XML-elementin sisällön joukkoon hyväksyttäviä numeroita tai kirjaimia, meidän on käytettävä mallirajoitusta (pattern constraint).

Seuraava esimerkki määrittelee elementin nimeltä "letter", jolla on rajoitettu nimi. Hyväksytyt arvot ovat vain pieniä kirjaimia a-z yksi:

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

Seuraava esimerkki määrittelee elementin nimeltä "initials", jolla on rajoitettu nimi. Hyväksytyt arvot ovat ison kirjaimen A-Z kolme:

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

Seuraava esimerkki määrittelee elementin nimeltä "initials", jolla on rajoitettu nimi. Hyväksytyt arvot ovat ison tai pienen kirjaimen a-z kolme:

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

Seuraava esimerkki määrittelee elementin nimeltä "choice", jolla on rajoitettu nimi. Hyväksytyt arvot ovat kirjaimista x, y tai z yksi:

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

Seuraava esimerkki määrittelee elementin nimeltä "prodid", jolla on rajoitettu nimi. Hyväksytyt arvot ovat viiden arabiallisen numeron sarja, ja jokaisen numeron arvo on 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>

Muiden arvojen rajoitusten määrittäminen

Seuraavassa esimerkissä elementti nimeltä "letter" määritellään rajauksella, joka sallii a-z-merkkien pituisen rivin, jossa on nolla tai useita kirjaimia:

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

Seuraavassa esimerkissä elementti nimeltä "letter" määritellään rajauksella, joka sallii vain yhden tai useamman parin kirjaimia, joissa jokainen pari koostuu pienestä kirjaimesta ja suuresta kirjaimesta. Esimerkiksi "sToP" läpäisee tämän模式的验证, mutta "Stop", "STOP" tai "stop" eivät läpäise:

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

Seuraavassa esimerkissä elementti nimeltä "gender" määritellään rajauksella, joka sallii vain "male" tai "female":

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

Seuraavassa esimerkissä elementti nimeltä "password" määritellään rajauksella, joka sallii vain 8 merkin pituisen rivin, joissa merkit ovat joko isokirjaimia a-z tai pienikirjaimia a-z tai numeroita 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>

Tyhjien merkien rajaus

Jos haluamme sopia tyhjien merkkien käsittelytavan, meidän täytyy käyttää "whiteSpace"-rajauksia.

Seuraavassa esimerkissä elementti nimeltä "address" määritellään rajauksella "whiteSpace", joka on asetettu arvoksi "preserve". Tämä tarkoittaa, että XML-käsittely ei poista minkäänlaisia tyhjiä merkkejä:

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

Tämä esimerkki määrittelee elementin nimeltä "address" ja rajauksen nimeltä "whiteSpace", joka on asetettu arvoksi "replace". Tämä tarkoittaa, että XML-käsittely poistaa kaikki tyhjät merkit (rivinvaihdot, enterit, välilyönnit ja tabulatyyrit):

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

Tämä esimerkki määrittää nimeltään "address" olevan elementin, jolla on rajoitus. Tämä whiteSpace rajoitus on asetettu arvoksi "collapse". Tämä tarkoittaa, että XML-käsittelylaite poistaa kaikki tyhjät merkit (rivinvaihdot, takaisinjohtimet, välilyönnit ja tabulaattorit korvataan välilyönnillä, alkuperäiset ja lopulliset välilyönnit poistetaan, ja useat peräkkäiset välilyönnit lyhennetään yhdeksi välilyönniksi):

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

Pituuden rajoitus

Jos haluat rajoittaa elementin arvon pituutta, sinun täytyy käyttää length, maxLength ja minLength rajoituksia.

Tämä esimerkki määrittää nimeltään "password" olevan elementin, jolla on rajoitus. Arvon täytyy olla tarkka 8 merkin mittainen:

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

Tämä esimerkki määrittää nimeltään "password" olevan elementin, jolla on rajoitus. Arvon täytyy olla vähintään 5 merkkiä ja korkeintaan 8 merkkiä:

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

Datan tyypin rajoitus

Rajoitus Kuvaus
enumeration Määritä hyväksyttävien arvojen luettelo
fractionDigits Määritä sallittujen suurimman desimaalimäärän enimmäismäärä. Arvon täytyy olla suurempi tai yhtä suuri kuin 0.
length Määritä sallittujen merkkien tai luettelon kohteiden tarkka sallittu määrä. Arvon täytyy olla suurempi tai yhtä suuri kuin 0.
maxExclusive Määritä lukuarvon yläraja. Sallitut arvot täytyy olla pienemmät kuin tämä arvo.
maxInclusive Määritä lukuarvon yläraja. Sallitut arvot täytyy olla pienemmät tai yhtä suuret kuin tämä arvo.
maxLength Määritä sallittujen merkkien tai luettelon kohteiden suurin sallittu määrä. Arvon täytyy olla suurempi tai yhtä suuri kuin 0.
minExclusive Määritä lukuarvon alaraja. Sallitut arvot täytyy olla suuremmat kuin tämä arvo.
minInclusive Määritellään arvon alaraja. Sallitut arvot on oltava suurempia tai yhtä suuria kuin tämä arvo.
minLength Määritellään sallittujen merkkien tai luettelojen projektien vähimmäismäärä. On oltava suurempi tai yhtä suuri kuin 0.
pattern Määritellään hyväksyttävien merkkien tarkka sarja.
totalDigits Määritellään sallittujen arabi numeroiden tarkka määrä. On oltava suurempi kuin 0.
whiteSpace Määritellään tyhjien merkkien (uudelleenkirjoitus, enter, välilyönti ja tabulaattori) käsittelytapa.