XSD elementtien korvaaminen (Element Substitution)
- Edellinen sivu XSD <anyAttribute>
- Seuraava sivu XSD esimerkki
Through XML Schema, one element can replace another element.
Element replacement
Antakaamme esimerkki: Käyttäjämme tulevat Yhdistyneestä kuningaskunnasta ja Norjasta. Haluamme pystyä sallimaan käyttäjien valita, käyttävätkö he XML-dokumentissa norjankielisiä vai englanninkielisiä elementtinimiä.
Ratkaisemaan tämän ongelman voimme määritellä XML-skeemassa: substitutionGroup.Ensiksi, 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 jonkin 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"/>
Virkillinen XML-dokumentti tulisi olemaan tällainen (mukaan lukien yllä oleva schema):
<customer> <name>John Smith</name> </customer>
Tai jotain tällaista:
<kunde> <navn>John Smith</navn> </kunde>
Estä elementin korvaaminen
Jotta vältetään muiden elementtien korvaaminen tietyn elementin sijaan, käytä block-ominaisuutta:
<xs:element name="name" type="xs:string" block="substitution"/>
Tarkastele jonkin 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 tällainen (mukaan lukien yllä oleva schema):
<customer> <name>John Smith</name> </customer>
Mutta seuraava dokumentti ei ole enää laillinen:
<kunde> <navn>John Smith</navn> </kunde>
Käyttääksesi substitutionGroup
Korvattavien elementtien tyyppi on olla sama kuin pääelementin tyyppi tai johdettu pääelementistä. Jos korvattavan elementin tyyppi on sama kuin pääelementin tyyppi, et tarvitse määrittää korvattavan elementin tyyppiä.
Huomaa, että substitutionGroupissa olevat kaikki elementit (pääelementit ja korvattavat elementit) on ilmoitettava globaaliksi elementiksi, muuten ne eivät toimi!
Mitä globaalit elementit (Global Elements) ovat?
Globaalit elementit viittaavat "schema"-elementin suorat alisijat! Paikalliset elementit (Local elements) ovat elementtejä, jotka sijaitsevat muiden elementtien sisällä.
- Edellinen sivu XSD <anyAttribute>
- Seuraava sivu XSD esimerkki