Ett XSD-exempel
On september 29, 2021 by adminDetta kapitel visar hur man skriver ett XML-schema. Du kommer också att lära dig att ett schema kan skrivas på olika sätt.
Ett XML-dokument
Vi tar en titt på det här XML-dokumentet som heter ”shiporder.xml”:
Skapa ett XML-schema
Nu vill vi skapa ett schema för XML-dokumentet ovan.
Vi börjar med att öppna en ny fil som vi kallar ”shiporder.xsd”. För att skapa schemat kan vi helt enkelt följa strukturen i XML-dokumentet och definiera varje element som vi hittar det. Vi börjar med standard XML-deklarationen följt av xs:schema-elementet som definierar ett schema:
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
…
</xs:schema>
I schemat ovan använder vi standardnamnsrymden (xs), och den URI som är kopplad till denna namnrymd är Schema språkdefinitionen, som har standardvärdet http://www.w3.org/2001/XMLSchema.
Nästan måste vi definiera elementet ”shiporder”. Detta element har ett attribut och innehåller andra element, därför betraktar vi det som en komplex typ. Barnelementen till elementet ”shiporder” omges av ett xs:sequence-element som definierar en ordnad sekvens av underelement:
<xs:complexType>
<xs:sequence>
…
</xs:sequence>
</xs:complexType>
</xs:element>
Då måste vi definiera elementet ”orderperson” som en enkel typ (eftersom det inte innehåller några attribut eller andra element). Typen (xs:string) är försedd med det namnområdesprefix som är förknippat med XML Schema och som anger en fördefinierad schemadatatyp:
Nästan måste vi definiera två element som är av den komplexa typen: ”shipto” och ”item”. Vi börjar med att definiera elementet ”shipto”:
Med scheman kan vi definiera antalet möjliga förekomster för ett element med attributen maxOccurs och minOccurs. maxOccurs anger det maximala antalet förekomster för ett element och minOccurs anger det minimala antalet förekomster för ett element. Standardvärdet för både maxOccurs och minOccurs är 1!
Nu kan vi definiera elementet ”item”. Detta element kan förekomma flera gånger i ett element ”shiporder”. Detta anges genom att attributet maxOccurs för elementet ”item” sätts till ”unbounded”, vilket innebär att elementet ”item” kan förekomma så många gånger som författaren önskar. Observera att elementet ”note” är valfritt. Vi har specificerat detta genom att sätta attributet minOccurs till noll:
Vi kan nu deklarera attributet för elementet ”shiporder”. Eftersom detta är ett obligatoriskt attribut anger vi use=”required”.
Notera: Attributdeklarationerna måste alltid komma sist:
Här är den kompletta listningen av schemafilen som heter ”shiporder.xsd”:
Dela upp schemat
Den tidigare designmetoden är mycket enkel, men kan vara svår att läsa och underhålla när dokumenten är komplexa.
Nästa designmetod bygger på att man först definierar alla element och attribut och sedan hänvisar till dem med hjälp av ref-attributet.
Här är den nya designen av schemafilen (”shiporder.xsd”):
Användning av namngivna typer
Den tredje designmetoden definierar klasser eller typer, vilket gör det möjligt för oss att återanvända elementdefinitioner. Detta görs genom att namnge elementen simpleTypes och complexTypes och sedan peka på dem genom elementets attribut type.
Här är den tredje utformningen av schemafilen (”shiporder.xsd”):
Restriction-elementet anger att datatypen härstammar från en W3C XML Schema namespace datatype. Följande fragment innebär alltså att värdet för elementet eller attributet måste vara ett strängvärde:
Restriction-elementet används oftare för att tillämpa begränsningar på element. Titta på följande rader från schemat ovan:
<xs:restriction base=”xs:string”>
<xs:pattern value=”{6}”/>
</xs:restriction>
</xs:simpleType>
Detta anger att värdet för elementet eller attributet måste vara en sträng, att det måste bestå av exakt sex tecken i rad och att dessa tecken måste vara ett tal från 0 till 9.
Lämna ett svar