Et XSD-eksempel
On september 29, 2021 by adminDette kapitel viser, hvordan man skriver et XML-skema. Du vil også lære, at et skema kan skrives på forskellige måder.
Et XML-dokument
Lad os tage et kig på dette XML-dokument kaldet “shiporder.xml”:
Opret et XML-skema
Nu vil vi gerne oprette et skema til ovenstående XML-dokument.
Vi starter med at åbne en ny fil, som vi kalder “shiporder.xsd”. For at oprette skemaet kunne vi blot følge strukturen i XML-dokumentet og definere hvert element, som vi finder det. Vi starter med standard XML-deklarationen efterfulgt af xs:schema-elementet, der definerer et skema:
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
…
</xs:schema>
I skemaet ovenfor bruger vi standardnavneområdet (xs), og den URI, der er tilknyttet dette navneområde, er definitionen af skemasproget, som har standardværdien http://www.w3.org/2001/XMLSchema.
Næst skal vi definere “shiporder”-elementet. Dette element har en attribut, og det indeholder andre elementer, og derfor betragter vi det som en kompleks type. Underelementerne til “shiporder”-elementet er omgivet af et xs:sequence-element, der definerer en ordnet rækkefølge af underelementer:
<xs:complexType>
<xs:sequence>
…
</xs:sequence>
</xs:complexType>
</xs:element>
Så er vi nødt til at definere elementet “orderperson” som en simpel type (fordi det ikke indeholder nogen attributter eller andre elementer). Typen (xs:string) er forsynet med det namespace-præfiks, der er forbundet med XML Schema, som angiver en foruddefineret skemadatatype:
Næst skal vi definere to elementer, der er af den komplekse type: “shipto” og “item”. Vi starter med at definere elementet “shipto”:
Med skemaer kan vi definere antallet af mulige forekomster for et element med maxOccurs- og minOccurs-attributterne. maxOccurs angiver det maksimale antal forekomster for et element, og minOccurs angiver det minimale antal forekomster for et element. Standardværdien for både maxOccurs og minOccurs er 1!
Nu kan vi definere elementet “item”. Dette element kan optræde flere gange inde i et “shiporder”-element. Dette specificeres ved at sætte maxOccurs-attributten for “item”-elementet til “unbounded”, hvilket betyder, at der kan være så mange forekomster af “item”-elementet, som forfatteren ønsker. Bemærk, at “note”-elementet er valgfrit. Vi har specificeret dette ved at sætte minOccurs-attributten til nul:
Vi kan nu erklære attributten for “shiporder”-elementet. Da det er en obligatorisk attribut, angiver vi use=”required”.
Bemærk: Attributdeklarationerne skal altid komme til sidst:
Her er den komplette liste over skemafilen med navnet “shiporder”.xsd”:
Divide the Schema
Den tidligere designmetode er meget enkel, men kan være vanskelig at læse og vedligeholde, når dokumenterne er komplekse.
Den næste designmetode er baseret på først at definere alle elementer og attributter og derefter henvise til dem ved hjælp af ref-attributten.
Her er det nye design af skemafilen (“shiporder.xsd”):
Anvendelse af navngivne typer
Den tredje designmetode definerer klasser eller typer, som gør det muligt at genbruge elementdefinitioner. Dette gøres ved at navngive elementerne simpleTypes og complexTypes og derefter pege på dem via elementets type-attribut.
Her er det tredje design af skemafilen (“shiporder.xsd”):
Restriction-elementet angiver, at datatypen er afledt af en W3C XML Schema namespace datatype. Så følgende fragment betyder, at værdien af elementet eller attributten skal være en strengværdi:
Restriction-elementet bruges oftere til at anvende begrænsninger på elementer. Se på følgende linjer fra skemaet ovenfor:
<xs:restriction base=”xs:string”>
<xs:pattern value=”{6}”/>
</xs:restriction>
</xs:simpleType>
Dette angiver, at værdien af elementet eller attributten skal være en streng, den skal bestå af præcis seks tegn i en række, og disse tegn skal være et tal fra 0 til 9.
Skriv et svar