An XSD Example
On 29 września, 2021 by adminW tym rozdziale pokażemy, jak napisać schemat XML. Dowiesz się również, że schemat może być napisany na różne sposoby.
Dokument XML
Przyjrzyjrzyjmy się dokumentowi XML o nazwie „shiporder.xml”:
Utwórz schemat XML
Teraz chcemy utworzyć schemat dla powyższego dokumentu XML.
Zaczynamy od otwarcia nowego pliku, który nazwiemy „shiporder.xsd”. Aby utworzyć schemat, moglibyśmy po prostu podążać za strukturą dokumentu XML i definiować każdy element tak, jak go znajdziemy. Zaczniemy od standardowej deklaracji XML, a następnie elementu xs:schema, który definiuje schemat:
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
….
</xs:schema>
W powyższym schemacie używamy standardowej przestrzeni nazw (xs), a URI związanym z tą przestrzenią nazw jest definicja języka Schema, która ma standardową wartość http://www.w3.org/2001/XMLSchema.
Następnie musimy zdefiniować element „shiporder”. Ten element posiada atrybut i zawiera inne elementy, dlatego uważamy go za typ złożony. Elementy potomne elementu „shiporder” są otoczone elementem xs:sequence, który definiuje uporządkowaną sekwencję elementów podrzędnych:
<xs:complexType>
<xs:sequence>
…
</xs:sequence>
</xs:complexType>
</xs:element>
Wtedy musimy zdefiniować element „orderperson” jako typ prosty (ponieważ nie zawiera on żadnych atrybutów ani innych elementów). Typ (xs:string) jest poprzedzony prefiksem przestrzeni nazw związanym z XML Schema, który wskazuje na predefiniowany typ danych schematu:
Następnie musimy zdefiniować dwa elementy, które są typu złożonego: „shipto” oraz „item”. Zaczynamy od zdefiniowania elementu „shipto”:
W schematach możemy określić liczbę możliwych wystąpień elementu za pomocą atrybutów maxOccurs i minOccurs. maxOccurs określa maksymalną liczbę wystąpień elementu, a minOccurs minimalną liczbę wystąpień elementu. Domyślną wartością zarówno dla maxOccurs jak i minOccurs jest 1!
Teraz możemy zdefiniować element „item”. Ten element może pojawić się wiele razy wewnątrz elementu „shiporder”. Jest to określone przez ustawienie atrybutu maxOccurs elementu „item” na „unbounded”, co oznacza, że może istnieć tyle wystąpień elementu „item”, ile autor sobie życzy. Zauważ, że element „note” jest opcjonalny. Określiliśmy to poprzez ustawienie atrybutu minOccurs na zero:
Możemy teraz zadeklarować atrybut elementu „shiporder”. Ponieważ jest to atrybut wymagany, określamy use=”required”.
Uwaga: Deklaracja atrybutu musi być zawsze ostatnia:
Tutaj znajduje się pełna lista pliku schematu o nazwie „shiporder.xsd”:
Divide the Schema
Poprzednia metoda projektowania jest bardzo prosta, ale może być trudna do odczytania i utrzymania, gdy dokumenty są złożone.
Kolejna metoda projektowania polega na zdefiniowaniu najpierw wszystkich elementów i atrybutów, a następnie odwołaniu się do nich za pomocą atrybutu ref.
Oto nowy projekt pliku schematu („shiporder.xsd”):
Używanie nazwanych typów
Trzecia metoda projektowania definiuje klasy lub typy, co pozwala nam na ponowne użycie definicji elementów. Odbywa się to poprzez nadanie nazw elementom simpleTypes i complexTypes, a następnie wskazanie na nie poprzez atrybut type elementu.
Tutaj znajduje się trzeci wzór pliku schematu („shiporder.xsd”):
Element restriction wskazuje, że typ danych pochodzi z przestrzeni nazw W3C XML Schema datatype. Tak więc, następujący fragment oznacza, że wartość elementu lub atrybutu musi być wartością łańcuchową:
Element restriction jest częściej używany do stosowania ograniczeń do elementów. Spójrz na następujące linie z powyższego schematu:
<xs:restriction base=”xs:string”>
<xs:pattern value=”{6}”/>
</xs:restriction>
</xs:simpleType>
Wskazuje to, że wartość elementu lub atrybutu musi być ciągiem znaków, musi to być dokładnie sześć znaków z rzędu, a znaki te muszą być liczbą z zakresu od 0 do 9.
Dodaj komentarz