XSD Elementudskiftning (Element Substitution)
- Forrige side XSD <anyAttribute>
- Næste side XSD eksempel
Gennem XML Schema kan et element erstatte et andet element.
Elementudskiftning
Lad os tage et eksempel: Vores brugere kommer fra Storbritannien og Norge. Vi ønsker at have mulighed for at lade brugere vælge mellem norske eller engelske elementnavne i XML-dokumenter.
For at løse dette problem kan vi definere en substitutionGroupFørst erklærer vi hovedelementet, derefter vil vi erklære sekundære elementer, som kan erklære, at de kan erstatte hovedelementet.
<xs:element name="name" type="xs:string"/> <xs:element name="navn"}} substitutionGroup="name"/>
I det ovenstående eksempel er "name"-elementet hovedelementet, mens "navn"-elementet kan erstatte "name"-elementet.
Se et stykke af en XML-skema:
<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"/>
En gyldig XML-dokument bør se sådan ud (baseret på den ovenstående skema):
<customer> <name>John Smith</name> </customer>
eller noget lignende:
<kunde> <navn>John Smith</navn> </kunde>
Forhindre elementer i at erstattes
For at forhindre, at andre elementer erstatter et bestemt element, skal du bruge block-attributten:
<xs:element name="name" type="xs:string" block="substitution"/>
Se et stykke af en XML-skema:
<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"/>
En gyldig XML-dokument bør se sådan ud (baseret på den ovenstående skema):
<customer> <name>John Smith</name> </customer>
Men den følgende dokument er ikke gyldig længere:
<kunde> <navn>John Smith</navn> </kunde>
Brug substitutionGroup
Typen for en erstatningsbar element skal være den samme som hovedelementet, eller afledt fra hovedelementet. Hvis typen for et erstatningsbart element er den samme som typen for hovedelementet, behøver du ikke at specificere typen for det erstatningsbare element.
Bemærk, at alle elementer i substitutionGroup (hovedelementer og erstatningskomponenter) skal erklæres som globale elementer, ellers vil de ikke fungere!
Hvad er globale elementer (Global Elements)?
Globale elementer refererer til "schema"-elementets direkte underelementer! Lokale elementer (Local elements) refererer til elementer, der er indlejret i andre elementer.
- Forrige side XSD <anyAttribute>
- Næste side XSD eksempel