XSD - Elementvervanging (Element Substitution)
- Vorige pagina XSD <anyAttribute>
- Volgende pagina XSD Voorbeeld
Via XML Schema kan een element een ander element vervangen.
Elementvervanging
Laten we een voorbeeld geven: onze gebruikers komen uit Engeland en Noorwegen. We willen in staat zijn om gebruikers te laten kiezen tussen Noorse en Engelse elementnamen in XML-documenten.
Om dit probleem op te lossen, kunnen we een definiëren in het XML schema. substitutionGroupEerst verklaren we het hoofd-element, daarna verklaren we het sub-element, die kunnen verklaren dat ze het hoofd-element kunnen vervangen.
<xs:element name="name" type="xs:string"/> <xs:element name="navn"}} substitutionGroup="name"/>
In het bovenstaande voorbeeld is de "name"-element het hoofdcomponent, terwijl de "navn"-element de "name"-element kan vervangen.
Bekijk een fragment van een XML schema:
<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"/>
Een geldig XML-document ziet er ongeveer zo uit (volgens het bovenstaande schema):
<customer> <name>John Smith</name> </customer>
of iets dergelijks:
<kunde> <navn>John Smith</navn> </kunde>
Voorkom elementvervangenis
Gebruik de block-eigenschap om te voorkomen dat andere elementen een specifiek element vervangen:
<xs:element name="name" type="xs:string" block="substitution"/>
Bekijk een fragment van een XML schema:
<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"/>
Een geldige XML-document moet ongeveer zo uitzien (volgens het bovenstaande schema):
<customer> <name>John Smith</name> </customer>
Maar het volgende document is niet meer geldig:
<kunde> <navn>John Smith</navn> </kunde>
Gebruik substitutionGroup
Het type van het vervangbare element moet identiek zijn aan het hoofdcomponent of afgeleid daarvan. Als het type van het vervangbare element identiek is aan het type van het hoofdcomponent, hoeft u het type van het vervangbare element niet te specificeren.
Let op, alle elementen (hoofd- en vervangbare elementen) in de substitutionGroup moeten worden verklaard als globale elementen, anders werkt het niet!
Wat zijn globale elementen (Global Elements)?
Globale elementen verwijzen naar de directe onderliggende elementen van het "schema" element! Lokale elementen (Local elements) verwijzen naar elementen die zijn ingesloten in andere elementen.
- Vorige pagina XSD <anyAttribute>
- Volgende pagina XSD Voorbeeld