XSD elementudskiftning (Element Substitution)
- Forrige side XSD <anyAttribute>
- Næste side XSD eksempel
Gennem XML Schema kan en element erstatte en anden element.
Elementersætning
Lad os tage et eksempel: Vores brugere kommer fra Storbritannien og Norge. Vi ønsker at have mulighed for at lade brugere vælge mellem at bruge elementnavne på norsk eller engelsk i XML-dokumentet.
For at løse dette problem kan vi definere en substitutionGroupFørst deklarerer vi hovedelementet, derefter deklarerer vi underelementerne, som kan deklarere, 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 blive erstattet
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 nedenstående dokument er ikke længere gyldigt:
<kunde> <navn>John Smith</navn> </kunde>
Brug af substitutionGroup
Typen af erstattelementer skal være den samme som hovedelementet, eller afledt fra hovedelementet. Hvis typen af erstattelementet er den samme som hovedelementets type, behøver du ikke at specificere typen af erstattelementet.
Bemærk, at alle elementer (hovedelementer og erstattelementer) i substitutionGroup 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