Xsd lista mogućih vrijednosti. XSD obrasci dizajna. Postavljanje i upravljanje šemama

1. Kreirajte XML Shema dokument koji sadrži ugrađene tipove podataka o bilo kojoj temi

Prikažite dokument u pretraživaču

Laboratorijski rad №2

Definiranje jednostavnih tipova podataka i imenskih prostora

Svrha rada:

Istražite jednostavne XMLShema tipove podataka i imenske prostore

Napredak rada:

U XML shemama možete koristiti ugrađene tipove za definiranje novih jednostavnih tipova elemenata na tri načina. Oni se unose kao sužavanje(ograničenje) ugrađenog ili prethodno definiranog jednostavnog tipa, lista(lista) ili udruženje(unija) jednostavnih tipova. Jednostavan tip je definiran komponentom sheme simpieType, koja ima oblik

Definicija tipa

Sužavanje

Jednostavno sužavanje tipa definirana je komponentom ograničenja, u kojoj osnovni atribut specificira jednostavan tip koji treba suziti, a sadržaj specificira ograničenja koja ističu jednostavni tip koji se definira. Na primjer, poštanski broj se može definirati kao šest arapskih znamenki kako slijedi

Drugi način za definiranje jednostavnog tipa zip je pozitivan cijeli broj u rasponu od 100000 do 999999:

  • Lista

Jednostavni tip liste je tip elementa u čijem tijelu je napisano nekoliko vrijednosti istog jednostavnog tipa odvojenih razmacima. Na primjer, XML dokument može sadržavati sljedeći element koji sadrži listu cijelih brojeva:

21 34 55 4 6

Lista je definirana komponentom liste, u kojoj atribut itemType specificira tip elemenata liste koja se definira. Tip elemenata liste se takođe može odrediti u sadržaju elementa liste. Na primjer, gore prikazani dani elementa XML dokumenta mogu se definirati u shemi poput ove:

i postavite tip listofinteger koji se koristi u njegovoj definiciji kao listu

od najviše pet cijelih brojeva kako slijedi:

· Udruženje

Jednostavan tip unije definiran je komponentom unije, u kojoj se atribut memberTypes može koristiti za specificiranje imena tipova unije. na primjer:

Drugi način je pisanje definicija jednostavnih tipova uključenih u uniju u sadržaj komponente unije. na primjer:

je ograničenje koje se može koristiti za sužavanje skupa mogućih vrijednosti za gotovo svaki jednostavan tip.

Prostori naziva XSD jezika

Imena elemenata i atributa koji se koriste prilikom pisanja shema definirani su u imenskom prostoru pomoću identifikatora http://www.w3.org/2001/XMLSchema. Prefiks imena koji se odnosi na ovaj prostor često se naziva xs ili xsd.

Ovaj imenski prostor možete učiniti zadanim, ali tada morate specificirati imenski prostor za tipove i elemente definirane u šemi. Radi pogodnosti takve definicije, koncept ciljni imenski prostor(ciljani imenski prostor). Identifikator ciljnog imenskog prostora određen je atributom targettiamespace, na primjer:

Treba napomenuti samo da globalna imena, čiji su opisi direktno ugniježđeni unutar elementa korijenske sheme.

Drugi standardni imenski prostor se često koristi u XML šemama i dokumentima. Preporuka za XSD jezik definira nekoliko atributa:

type, nil, schemaLocation, noNamespaceSchemaLocation koji se primjenjuju

ne samo u dijagramima, već i direktno u onima opisanim ovim šemama

XML dokumenti pozvani instance kola(instanca XML šeme). Ovi atributi se odnose na prostor imena http://www.w3.org/2001/XMLSchema-instance. Ovom imenskom prostoru najčešće se daje prefiks xsi, na primjer:

xmins:xsi="http://www.w3.org/2001/XMLSchema-instance">

Napravite XMLShema dokument s jednostavnim tipovima podataka i imenskim prostorom tako što ćete učiniti sljedeće:

  1. Otvorite novu datoteku u uređivaču teksta i unesite tekst XMLShema dokumenta, čiji je popis prikazan ispod

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  1. Koristite komandu Sačuvaj u uređivaču teksta da sačuvate dokument na svoj čvrsti disk, nazovite ga ProstTip.xsd
  2. Otvorite datoteku u svom pretraživaču i dobićete ono što je prikazano na slici 3.1.

Slika 3.1

Laboratorijski rad br. 3

Dođe dan u životu svakog analitičara i programera kada sazna za postojanje predložaka dizajna XML shema i njegove životne promjene. Za mene je, na primjer, razumijevanje ljepote dizajna počelo sa ovim znanjem.

Danas želim govoriti o tome koji modeli XSD dizajna postoje, prednosti i nedostaci svakog od njih i zašto smo za naše zadatke odabrali „Edenski vrt“.

Na primjer, uzmimo sljedeći XML dokument kao izvor podataka.

100 Paul Orlov

Ugreška 2 Moskva 115088

I da vidimo kako možemo opisati istu strukturu XML dokumenta na različite načine.
Osnova podjele šablona je princip definiranja globalnih elemenata i/ili tipova podataka unutar XSD-a.

Matrjoška (ruska lutka)


Suština predloška je da je shema ogledalo XML dokumenta koji opisuje: ako složeni elementi sadrže druge složene elemente, a oni pak sadrže jednostavne, tada će u XSD-u opisi takvih elemenata biti ugniježđeni unutar jedni druge. Naziv šablona je dat u čast naše svetski poznate lutke Matrjoške, po analogiji sa načinom na koji su podređeni elementi u šablonu inkapsulirani u roditeljske.

Dijagram koji opisuje strukturu naše izvorne datoteke pomoću Matryoshka predloška izgleda ovako:


Karakteristike šablona:

  • Neprozirnost sadržaja. Sadržaj XSD-a je neproziran za druge šeme, pa čak i za druge dijelove iste sheme. Kao rezultat toga, nijedan od tipova ili elemenata unutar XSD-a ne može se ponovo koristiti.
  • Skrivena područja. Područja sheme u kojima su definirani lokalni elementi ("Grad" i "Zip" u primjeru) lokalizirana su unutar korijenskog elementa ("Adresa"). Kao rezultat toga, ako postavite elementFormDefault = “nekvalificiran” u shemi, tada su prostori imena lokalnih elemenata (“Grad” i “Zip”) skriveni unutar sheme.
  • Nezavisnost. Sa ovim dizajnom, svaka komponenta kola je autonomna (to jest, nije međusobno povezana s drugim komponentama). Stoga će promjene pojedinačnih komponenti imati ograničen uticaj. Na primjer, ako u adresu dodate element “FlatNumber”, to ni na koji način neće utjecati na druge elemente kola.
  • Kompaktnost. Zahvaljujući ovom dizajnu, svi značajni podaci se kombinuju u kolu u autonomne komponente, tj. Komponente su kompaktne.

Salami Slice


Suština predloška je da je opisani XML dokument podijeljen na sastavne elemente, od kojih je svaki opisan u XSD-u kao globalni. Zatim se opisani elementi kombinuju zajedno.

Dijagram koji opisuje strukturu izvorne datoteke koristeći Salami predložak izgleda ovako:


Karakteristike šablona:

  • Transparentnost sadržaja. Svi elementi mogu vidjeti druge šeme, kao i ostale komponente ovog XSD-a.
  • Globalnost. Pošto su svi elementi sheme deklarisani globalno, bez obzira na vrijednost elementFormDefault imenskog prostora sheme, cijeli skup atributa će biti prikazan u XML dokumentu (neki mogu biti prazni).
  • Međuzavisnost. Ovim dizajnom složeni elementi se odnose na druge dijelove kola, odnosno ovise o njima. Posljedično, promjene pojedinačnih komponenti mogu dovesti do opsežnih promjena u cijelom krugu.
  • Kompaktnost.

venecijaneri


Suština predloška je da je opisani XML dokument podijeljen na kompozitne tipove, od kojih je svaki opisan u XSD-u kao globalni. Zatim se deklarira osnovni element, koji odgovara globalnom tipu koji povezuje shemu zajedno.

Dijagram koji opisuje strukturu izvorne datoteke pomoću predloška venecijaneri izgleda ovako:


Karakteristike šablona:

  • Transparentnost sadržaja. Tipovi podataka su vidljivi iz drugih šema, a vidljivi su i komponentama ovog XSD-a.
  • Maksimalno skrivanje imena. Deklaracije elemenata su lokalne, tako da predložak ima maksimalan potencijal za skrivanje imena.
  • Lako kontrolirajte skrivanje praznih atributa. Ako su imenski prostori skriveni, onda hoće li se prikazati prazni atributi u dokumentima ili ne kontrolira jedan elementFormDefault prekidač.
  • Međuzavisnost. Sa ovim dizajnom, složeni tipovi podataka referiraju na druge dijelove sheme, odnosno zavise od njih. Posljedično, promjene na pojedinačnim komponentama mogu dovesti do opsežnih promjena u cijelom krugu.
  • Kompaktnost. Zahvaljujući ovom dizajnu, svi značajni podaci se kombinuju u kolu u autonomne komponente, odnosno komponente su kompaktne.

Rajski vrt


Ono što je sjajno kod Rajskog vrta je to što svaki element i kompozitni tip podataka definira kao globalne. Ovo vam omogućava da referencirate bilo koji tip ili element unutar jednog XSD-a ili iz bilo kojeg drugog XSD-a, pa čak i iz WSDL-a. Ovo je jedini način da se u potpunosti kontroliše semantika i tipova i elemenata.

Dijagram koji opisuje strukturu izvorne datoteke pomoću predloška Edenskog vrta izgleda ovako:


Karakteristike šablona:

  • Maksimalna transparentnost sadržaja. I tipovi i elementi podataka su vidljivi iz drugih šema, a vidljivi su i komponentama ovog XSD-a.
  • Maksimalno otkrivanje imena. Ništa nije definirano lokalno, tako da je vidljivost imena maksimalna.
  • Međuzavisnost. Sa ovim dizajnom, složeni tipovi podataka i elementi upućuju na druge dijelove sheme, odnosno ovise o njima. Posljedično, promjene pojedinačnih komponenti mogu dovesti do opsežnih promjena u cijelom krugu.
  • Bulky. Smisleno povezani podaci su „razmazani“ definicijom tipa i elementa. Teže je „pročitati“ takav dijagram.

Odaberite predložak

Prilikom odabira šablona važno je uzeti u obzir nekoliko kriterija:
  1. U kojoj meri je moguće ponovo koristiti komponente kola;
  2. Koliko je lako raditi sa kolom;
  3. U kojoj mjeri komponente kola trebaju biti međusobno zavisne ili neovisne?

Često, kada birate obrazac dizajna, morate uravnotežiti mogućnost ponovne upotrebe komponenti kola i dubinu međusobne povezanosti između komponenti. Slika pokazuje potencijal svakog od šablona u kontekstu ova dva aspekta.

Oni dizajni koji dobro podržavaju ponovnu upotrebu komponenti, s druge strane, imaju jake međusobne veze između komponenti. Ako je potrebno nešto promijeniti u takvoj šemi, programer sheme može biti suočen s činjenicom da će se morati promijeniti mnogi povezani elementi i/ili tipovi. Takve šeme je kasnije teško upravljati.

Općenito, mogu se izvesti sljedeća pravila za odabir predloška:

  • ako ponovna upotreba komponenti šeme nije neophodna, ako je jednostavnija upotreba XSD-a od strane programera važnija i nema striktne potrebe za kontrolom imena komponenti, onda biste trebali odabrati „Matryoshka“;
  • ako je ponovna upotreba komponenti važnija od pogodnosti za programere, a nazivi elemenata podataka moraju biti kontrolirani u cijelom sistemu, onda biste trebali odabrati „Salama“;
  • ako je, pored prethodne tačke, važno da kontrolišete nazive tipova podataka i da budete u mogućnosti da ponovo koristite tipove podataka, trebalo bi da izaberete „Rajski vrt“;
  • "Venecijaneri" su prikladni ako su i ponovna upotreba komponenti i sloboda definiranja njihovih lokalnih naziva (ili mogućnost da se sakriju unutar kruga) važni.

Najvažnija stvar za nas u projektu bila je ponovna upotreba tipova i elemenata sheme i, drugo, potpuna semantička kontrola imena. Izbor šablona je bio očigledan - Rajski vrt.

Mala lirska digresija. Najzanimljivija upotreba obrazaca dizajna XML shema kojih se mogu sjetiti bila je i još uvijek je hipnoza publike. Jedan od naših nagrađivanih analitičara voli da preuzme inicijativu govoreći o ovoj temi. Odmjerio sam vrijeme, nakon 5 minuta su se slušaocima zamračile oči i povukle su se negdje daleko u sebe. U "Edenskom vrtu" svijest većine je isključena.

I u zaključku, želio bih dodati da su miksovi šablona također mogući, mi smo se susreli s njima.

Izvori i resursi.

Ograničenja se koriste za definiranje prihvatljivih vrijednosti za XML elemente ili atribute. Ograničenja na XML elemente se takođe nazivaju "fasetima".

Ograničenja vrijednosti

godine" sa ograničenjem. Ovaj element bi trebao ukazivati ​​na starost osobe, a starost osobe, kao što je poznato, ne može biti manja od 0 i veća od 120:

Ograničenje skupa vrijednosti

Da biste ograničili sadržaj XML elementa na određeni skup prihvatljivih vrijednosti, trebali biste koristiti graničnik nabrajanja.

Sljedeći primjer definira element " auto" uz ograničenje. Jedine prihvatljive vrijednosti su Audi, Golf, BMW:

Gornji primjer se također može napisati na sljedeći način:

U ovom slučaju tip " carType" mogu ga koristiti drugi elementi jer nije dio elementa " auto".

Ograničenja serije vrijednosti

Da biste ograničili sadržaj XML elementa na niz brojeva ili slova, trebali biste koristiti graničnik uzorka.

Sljedeći primjer definira element " pismo" sa ograničenjem. Njegova jedina važeća vrijednost može biti JEDNO MALO slovo u rasponu od "a" do "z":

Sljedeći primjer definira element "inicijali" s ograničenjem. Njegova jedina važeća vrijednost može biti TRI VELIKA SLOVA u rasponu od "a" do "z":

inicijali" uz ograničenje. Njegova jedina važeća vrijednost može biti TRI MALA ILI VELIKA Slova u rasponu od "a" do "z":

Sljedeći primjer definira element " izbor" sa ograničenjem. Njegova jedina važeća vrijednost može biti JEDNO od tri slova: x, y ILI z:

Sljedeći primjer definira element " prodid" uz ograničenje. Njegova jedina važeća vrijednost može biti PET uzastopnih cifara, a svaka cifra mora biti u rasponu od 0 do 9:

Ostala ograničenja na niz vrijednosti

Sljedeći primjer definira element " pismo" sa ograničenjem. Njegova važeća vrijednost je nula ili više malih slova u rasponu od a do z:

Sljedeći primjer također definira element " pismo" sa ograničenjem. Njegova prihvatljiva vrijednost bi bila jedan ili više parova slova, pri čemu svaki par sadrži malo slovo praćeno velikim slovom. Na primjer, "sToP" bi odgovaralo datom uzorku, a "Stop" ili "STOP " ili "stop" br:

Sljedeći primjer definira element " spol" sa ograničenjem. Njegova prihvatljiva vrijednost će biti samo niz " muško " ILI " žensko ":

Sljedeći primjer definira element " lozinka" uz ograničenje. Njegova vrijednost mora biti niz od 8 znakova, a ti znakovi mogu biti mala ili velika slova od a do z, ili brojevi od 0 do 9:

Ograničenja razmaka

Da bi se odredilo kako će se razmaci tretirati, koristi se graničnik whiteSpace.

Sljedeći primjer definira element " adresa whiteSpace je postavljen na " sačuvati ", što govori XML parseru da NE uklanja nijedan razmak:

Sljedeći primjer također definira element " adresa"sa ograničenjem. Limiter whiteSpace postavljeno na " zamijeniti ", koji govori XML parseru da ZAMIJENI sve znakove razmaka (tabulator, razmak, prijelaz na red i povratak) s razmacima:

Sljedeći primjer također definira element " adresa"sa ograničenjem. Limiter whiteSpace postavljeno na " kolaps ", koji govori XML raščlanjivanju da UKLONI sve znakove razmaka (tabulator, razmak, prijelaz na red, povratni i završni razmak znakovi su uklonjeni i višestruki razmaci se zamjenjuju jednim razmakom):

Ograničenja dužine

Da biste ograničili dužinu vrijednosti elementa, trebali biste koristiti graničnike dužina, maxLength I minLength.

Sljedeći primjer definira element " lozinka" sa ograničenjem. Dužina njegove vrijednosti mora biti tačno 8 znakova:

Sljedeći primjer definira još jedan element " lozinka" sa ograničenjem. Dužina njegove vrijednosti mora biti najmanje 5, a najviše 8 znakova:

Ograničenja tipa podataka

LimiterOpis
nabrajanjeDefinira listu prihvatljivih vrijednosti
fractionDigitsDefinira maksimalan broj decimalnih mjesta. Mora biti jednak ili veći od nule
dužinaOdređuje tačan broj znakova ili objekata liste. Mora biti jednak ili veći od nule
maxExclusiveOdređuje gornju granicu za numeričke vrijednosti (vrijednost mora biti manja od vrijednosti navedene ovdje)
maxInclusiveOdređuje gornju granicu za numeričke vrijednosti (vrijednost mora biti manja ili jednaka vrijednosti navedenoj ovdje)
maxLengthOdređuje maksimalan broj znakova ili objekata liste. Mora biti jednak ili veći od nule
minExclusiveDefinira donju granicu za numeričke vrijednosti (vrijednost mora biti veća od vrijednosti navedene ovdje)
minInclusiveOdređuje donju granicu za numeričke vrijednosti (vrijednost mora biti veća ili jednaka vrijednosti navedenoj ovdje)
minLengthOdređuje minimalni broj znakova ili objekata liste. Mora biti jednak ili veći od nule
uzorakDefinira tačan niz prihvatljivih znakova
totalDigitsDefinira tačan broj važećih cifara. Mora biti veći od nule
whiteSpaceDefinira kako se rukuje razmacima

XSD je jezik za opisivanje strukture XML dokumenta. Naziva se i XML šema. Kada se koristi XML shema, XML parser može provjeriti ne samo ispravnu sintaksu XML dokumenta, već i njegovu strukturu, model sadržaja i tipove podataka.

Ovaj pristup omogućava objektno orijentisanim programskim jezicima da lako kreiraju objekte u memoriji, što je nesumnjivo praktičnije od raščlanjivanja XML-a kao obične tekstualne datoteke.

Osim toga, XSD je proširiv i omogućava vam da povežete gotove rječnike za opisivanje tipičnih zadataka, na primjer web servise kao što je SOAP.

Također je vrijedno spomenuti da XSD ima ugrađene alate za dokumentaciju, koji vam omogućavaju da kreirate samostalne dokumente koji ne zahtijevaju dodatni opis.

Razmotrimo, kao primjer, XSD dokument koji opisuje dio strukture naloga na Habréu.

Nisam uključio tekst XSD šeme i XML dokumenta koji odgovara ovoj šemi u članak zbog njihove veličine.

Prvi red dijagrama označava da je dokument XML dokument i koristi UTF-8 kodiranje.


Sljedeći red počinje opis glavnog elementa dokumenta - habra_user.
< xs:element name ="habra_user" >
Linije koje dokumentuju element:
< xs:annotation >
< xs:documentation >Glavni element sheme. Opisuje korisnika habra

Tag opisuje "složeni" tip podataka korisničko_ime. Po želji, može se izdvojiti kao zaseban tip podataka, po analogiji sa contact_info. Da biste to učinili, potreban vam je blok preseliti se u i navedite atribut ime i postavite atribut elementa tip.

Elementi korisničko_ime, ime, prezime imaju tip stringa i opisuju korisnika, ime i prezime vlasnika naloga.

Element datum_rođenja ima tip podataka o datumu i opisuje datum rođenja.

Datum registracije opisuje datum_registra, koji ima vlastiti tip podataka customDateTime. Vrijednost ove oznake će se postaviti pomoću atributa vrijednost. Linije to ukazuju.

< xs:attribute name ="value" use ="required" >
U ovom slučaju, atribut je obavezan. Kako bismo osigurali da vrijednost ispunjava zahtjeve, opisat ćemo "provjere":
< xs:simpleType >
< xs:restriction base ="xs:string" >
< xs:length value ="19" />
< xs:pattern value ="-- ::" />


U ovom slučaju, dužina linije će uvijek biti 19, to je određeno oznakom a sama vrijednost će odgovarati uzorku navedenom u oznaci .

Elementi contact_info I blog- nizovi, to je naznačeno atributom maxOccurs="nevezan".

Tag specificira da će ugniježđeni element biti jedan od ICQ ili linkedin elemenata.

Tag označava da će ugniježđeni elementi biti blog_name I blog_url tačno tim redosledom. Ako redoslijed nije važan, onda morate koristiti oznaku .

WiFi