XSD-elementin korvaus (Element Substitution)
- Edellinen sivu XSD <anyAttribute>
- Seuraava sivu XSD-esimerkki
XML-skeeman avulla yksi elementti voi korvata toisen elementin.
Elementin korvaus
Antaamme esimerkin: käyttäjämme tulevat Yhdistyneestä kuningaskunnasta ja Norjasta. Haluamme pystyä antamaan käyttäjille mahdollisuuden valita, käyttävätkö he XML-dokumentissa norjankielisiä vai englanninkielisiä elementinimiä.
Tämän ongelman ratkaisemiseksi voimme määritellä XML-skeemassa yhden substitutionGroupEnsiksi määrittelemme pääelementin, sitten määrittelemme toissijaiset elementit, jotka voivat ilmoittaa, että ne voivat korvata pääelementin.
<xs:element name="name" type="xs:string"/> <xs:element name="navn"}} substitutionGroup="name"/>
Yllä olevassa esimerkissä "name"-elementti on pääelementti, ja "navn"-elementti voi korvata "name"-elementin.
Tarkastele XML-skeeman osaa:
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo"/> <xs:element name="kunde" substitutionGroup="customer"/>
Tämä on esimerkki kelvollisesta XML-dokumentista (schemaa perustuen):
<customer> <name>John Smith</name> </customer>
Tai vastaavasti:
<kunde> <navn>John Smith</navn> </kunde>
Estä elementin korvaaminen
Jotta vältetään muiden elementtien korvaaminen tiettyyn elementtiin, käytä block-ominaisuutta:
<xs:element name="name" type="xs:string"> block="substitution"/>
Tarkastele XML-skeeman osaa:
<xs:element name="name" type="xs:string" block="substitution"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo" block="substitution"/> <xs:element name="kunde" substitutionGroup="customer"/>
Laillinen XML-dokumentti tulisi olemaan noin (schemaa perustuen):
<customer> <name>John Smith</name> </customer>
Mutta seuraava dokumentti ei ole enää laillinen:
<kunde> <navn>John Smith</navn> </kunde>
Käytä substitutionGroup
Vaihdettavien elementtien tyyppi täytyy olla sama kuin pääelementin tyyppi tai pääelementistä johdettu. Jos vaihdettavan elementin tyyppi on sama kuin pääelementin tyyppi, ette tarvitse määritellä vaihdettavan elementin tyyppiä.
Huomaa, että substitutionGroupin kaikki elementit (pääelementti ja korvattavat elementit) täytyy ilmoittaa globaaleiksi elementeiksi, muuten ne eivät toimi!
Mitä globaalit elementit (Global Elements) ovat?
Globaalit elementit tarkoittavat "schema"-elementin suoraa tytärylehtia! Paikalliset elementit (Local elements) tarkoittavat elementtejä, jotka ovat sisällä toisia elementtejä.
- Edellinen sivu XSD <anyAttribute>
- Seuraava sivu XSD-esimerkki