Een XSD Voorbeeld
On september 29, 2021 by adminDit hoofdstuk laat zien hoe u een XML Schema kunt schrijven. U zult ook leren dat een schema op verschillende manieren kan worden geschreven.
Een XML-document
Laten we eens kijken naar dit XML-document met de naam “shiporder.xml”:
Maak een XML Schema
Nu willen we een schema maken voor bovenstaand XML document.
We beginnen met het openen van een nieuw bestand dat we “shiporder.xsd” zullen noemen. Om het schema te maken zouden we eenvoudigweg de structuur in het XML document kunnen volgen en elk element definiëren zoals we het aantreffen. We beginnen met de standaard XML-declaratie gevolgd door het xs:schema element dat een schema definieert:
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
….
</xs:schema>
In het bovenstaande schema gebruiken we de standaard namespace (xs), en de URI die aan deze namespace is gekoppeld, is de taaldefinitie van het schema, die de standaardwaarde http://www.w3.org/2001/XMLSchema heeft.
Daarnaast moeten we het “shiporder” element definiëren. Dit element heeft een attribuut en het bevat andere elementen, daarom beschouwen we het als een complex type. De child-elementen van het “shiporder”-element worden omgeven door een xs:sequence-element dat een geordende reeks subelementen definieert:
<xs:complexType>
<xs:sequence>
…
</xs:sequence>
</xs:complexType>
</xs:element>
Daarna moeten we het element “orderperson” definiëren als een eenvoudig type (omdat het geen attributen of andere elementen bevat). Het type (xs:string) wordt voorafgegaan door het namespace-voorvoegsel dat hoort bij XML Schema en een vooraf gedefinieerd schemagegevenstype aangeeft:
Volgende moeten we twee elementen definiëren die van het complexe type zijn: “shipto” en “item”. We beginnen met de definitie van het “shipto”-element:
Met schema’s kunnen we het aantal mogelijke occurrences voor een element definiëren met de maxOccurs- en minOccurs-attributen. maxOccurs specificeert het maximum aantal occurrences voor een element en minOccurs specificeert het minimum aantal occurrences voor een element. De standaardwaarde voor zowel maxOccurs als minOccurs is 1!
Nu kunnen we het “item” element definiëren. Dit element kan meerdere malen voorkomen binnen een “shiporder” element. Dit wordt gespecificeerd door het maxOccurs attribuut van het “item” element op “unbounded” te zetten, wat betekent dat het “item” element zo vaak kan voorkomen als de auteur wenst. Merk op dat het “note” element optioneel is. We hebben dit gespecificeerd door het minOccurs attribuut op nul te zetten:
We kunnen nu het attribuut van het “shiporder” element declareren. Aangezien dit een verplicht attribuut is, specificeren we use=”required”.
Note: De attribuutdeclaraties moeten altijd als laatste komen:
Hier volgt de volledige lijst van het schema-bestand met de naam “shiporder.xsd”:
Verdeel het schema
De vorige ontwerpmethode is heel eenvoudig, maar kan moeilijk te lezen en te onderhouden zijn als de documenten complex zijn.
De volgende ontwerp-methode is gebaseerd op het eerst definiëren van alle elementen en attributen, en er vervolgens naar te verwijzen met behulp van het ref attribuut.
Hier volgt het nieuwe ontwerp van het schema-bestand (“shiporder.xsd”):
Gebruik maken van Named Types
De derde ontwerp-methode definieert klassen of typen, die ons in staat stellen element-definities te hergebruiken. Dit wordt gedaan door de elementen simpleTypes en complexTypes een naam te geven, en er vervolgens naar te verwijzen via het type-attribuut van het element.
Hier volgt het derde ontwerp van het schema-bestand (“shiporder.xsd”):
Het restrictie-element geeft aan dat het datatype is afgeleid van een W3C XML Schema namespace datatype. Het volgende fragment betekent dus dat de waarde van het element of attribuut een string-waarde moet zijn:
Het restriction-element wordt vaker gebruikt om beperkingen op elementen toe te passen. Kijk eens naar de volgende regels uit het schema hierboven:
<xs:restriction base=”xs:string”>
<xs:pattern value=”{6}”/>
</xs:restriction>
</xs:simpleType>
Dit geeft aan dat de waarde van het element of attribuut een string moet zijn, uit precies zes tekens achter elkaar moet bestaan, en dat deze tekens een getal van 0 tot en met 9 moeten zijn.
Geef een antwoord