Un exemplu XSD
On septembrie 29, 2021 by adminAcest capitol va demonstra cum se scrie o schemă XML. De asemenea, veți învăța că o schemă poate fi scrisă în diferite moduri.
Un document XML
Să ne uităm la acest document XML numit „shiporder.xml”:
Crearea unei scheme XML
Acum dorim să creăm o schemă pentru documentul XML de mai sus.
Începem prin a deschide un nou fișier pe care îl vom numi „shiporder.xsd”. Pentru a crea schema am putea pur și simplu să urmărim structura din documentul XML și să definim fiecare element așa cum îl găsim. Vom începe cu declarația XML standard urmată de elementul xs:schema care definește o schemă:
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
….
</xs:schema>
În schema de mai sus folosim spațiul de nume standard (xs), iar URI-ul asociat cu acest spațiu de nume este definiția limbajului Schema, care are valoarea standard de http://www.w3.org/2001/XMLSchema.
În continuare, trebuie să definim elementul „shiporder”. Acest element are un atribut și conține alte elemente, prin urmare îl considerăm ca fiind un tip complex. Elementele copil ale elementului „shiporder” sunt înconjurate de un element xs:sequence care definește o secvență ordonată de subelemente:
<xs:complexType>
<xs:sequence>
….
</xs:sequence>
</xs:complexType>
</xs:element>
Apoi trebuie să definim elementul „orderperson” ca fiind un tip simplu (pentru că nu conține atribute sau alte elemente). Tipul (xs:string) este prefixat cu prefixul de spațiu de nume asociat cu XML Schema care indică un tip de date predefinit de schemă:
În continuare, trebuie să definim două elemente care sunt de tip complex: „shipto” și „item”. Începem prin a defini elementul „shipto”:
Cu ajutorul schemelor putem defini numărul de apariții posibile pentru un element cu ajutorul atributelor maxOccurs și minOccurs. maxOccurs specifică numărul maxim de apariții pentru un element, iar minOccurs specifică numărul minim de apariții pentru un element. Valoarea implicită atât pentru maxOccurs, cât și pentru minOccurs este 1!
Acum putem defini elementul „item”. Acest element poate apărea de mai multe ori în interiorul unui element „shiporder”. Acest lucru este specificat prin setarea atributului maxOccurs al elementului „item” la „unbounded”, ceea ce înseamnă că pot exista atâtea apariții ale elementului „item” câte dorește autorul. Observați că elementul „note” este opțional. Am specificat acest lucru prin setarea atributului minOccurs la zero:
Acum putem declara atributul elementului „shiporder”. Deoarece acesta este un atribut obligatoriu, specificăm use=”required”.
Nota: Declarațiile de atribut trebuie să fie întotdeauna ultimele:
Iată lista completă a fișierului de schemă numit „shiporder.xsd”:
Divizează schema
Metoda de proiectare anterioară este foarte simplă, dar poate fi dificil de citit și de întreținut atunci când documentele sunt complexe.
Următoarea metodă de proiectare se bazează pe definirea mai întâi a tuturor elementelor și atributelor, iar apoi se face referire la ele folosind atributul ref.
Iată noua proiectare a fișierului de schemă („shiporder.xsd”):
Utilizarea tipurilor numite
A treia metodă de proiectare definește clase sau tipuri, care ne permite să reutilizăm definițiile elementelor. Acest lucru se face prin numirea elementelor simpleTypes și complexTypes, iar apoi se indică spre ele prin atributul type al elementului.
Iată a treia metodă de proiectare a fișierului de schemă („shiporder.xsd”):
Elementul restriction indică faptul că tipul de date este derivat dintr-un tip de date din spațiul de nume W3C XML Schema. Astfel, următorul fragment înseamnă că valoarea elementului sau a atributului trebuie să fie o valoare de șir de caractere:
Elementul de restricție este mai des utilizat pentru a aplica restricții elementelor. Priviți următoarele linii din schema de mai sus:
<xs:restriction base=”xs:string”>
<xs:pattern value=”{6}”/>
</xs:restriction>
</xs:simpleType>
Aceasta indică faptul că valoarea elementului sau atributului trebuie să fie un șir de caractere, trebuie să aibă exact șase caractere la rând, iar aceste caractere trebuie să fie un număr de la 0 la 9.
Lasă un răspuns