220 likes | 418 Views
Aplikativni softver. Fakultet za poslovnu informatiku Univerzitet Singidunum www.fpi.singidunum.ac.yu. XML Schema. 2007/2008. Violeta Tomašević Literatura E.Rusty Harold, W.Scott Means, XML za programere , prevod Mikro knjiga, 2006. Šta je XML Schema?.
E N D
Aplikativni softver Fakultet za poslovnu informatiku Univerzitet Singidunum www.fpi.singidunum.ac.yu XML Schema 2007/2008. Violeta Tomašević Literatura E.Rusty Harold, W.Scott Means, XML za programere, prevod Mikro knjiga, 2006.
XML Schema Šta je XML Schema? • XML Schemapredstavlja XML dokument koji sadrži formalan opis onoga od čega se sastoji validan XML dokument. XML dokument opisan šemom naziva se primerak dokumenta (instancedocument), i ako zadovoljava sva ograničenja zadata šemom, proglašava se validnim u odnosu na šemu. • XML Schema dokumenti imaju ekstenziju .xsd jer se pišu u XSD (XML Schema Definition) jeziku. • XML Schema: • omogućava validaciju XML dokumenta prema detaljnoj specifikaciji • podržava sintaksu XML-a • omogućava tipizaciju podataka i prikaz ograničenja • koristi prostor imena (namespace) • prezentuje veze koje postoje između elemenata
XML Schema DTD i XML Schema Primer: razmotrimo element quantity za koji aplikacija smatra da predstavlja pozitivan ceo broj. DTD deklaracija elementa quantity <!ELEMENT quantity (#PCDATA) > Deklaracija elementa quantity u XML Schema <xsd:schemaxmlns:xsd='http://www.w3.org/2001/XMLSchema'> <xsd:element name='quantity' type=“xsd:nonNegativeInteger"/> <xsd:/schema> DTD deklaracija će smatrati da je sledeći XML kod validan: <quantity>4</quantity> <quantity>-2</quantity> <quantity>lots</quantity> XML Schema deklaracija će smatrati da je samo prvi primer validan.
XML Schema Pridruživanje šeme XML dokumentu Šema se primerku dokumenta može pridružiti na jedan od sledećih načina: • korišćenjem atributa xsi:schemaLocation nekog elementa koji sadrži spisak prostora imena upotrebljenih unutar tog elementa i spisak URL adresa šema pomoću kojih treba proveriti validnost elemenata i atributa u tim prostorima imena • korišćenjem atributa xsi:noNamespaceSchemaLocation koji sadrži URL adresu šeme koju treba upotrebiti za proveru validnosti elemenata koji ne pripadaju nijednom prostoru imena • izdavanjem komande analizatoru validnosti da proveri validnost datog dokumenta u odnosu na eksplicitno zadatu šemu i da zanemari sva uputstva te vrste u samom dokumentu
XML Schema Struktura dokumenta • Prva linija u XML Schema dokumentu je XML deklaracija (jer to u suštini predstavlja XML fajl). • U drugoj liniji se deklariše <xs:schema> kao osnovni (root) element u dokumentu. Ovaj element sadrži deklaracije svih elemenata i atributa koji se mogu pojaviti u validnom primerku dokumenta. • Uobičajeno je da se u deklaraciji osnovnog elementa koristi prefiks xs (mada može i neki drugi), koji je pridružen prostoru imena XML Schema • xmlns:xs=http://www.w3.org/2001/XMLSchema • XML elementi od kojih se sastoji XML šema moraju pripadati navedenom prostoru imena.
XML Schema Izrada šeme (1) Primer: napraviti jednostavnu šemu koja predstavlja uobičajenu stavku u adresaru. XML dokument: stavka_adresara.xml <?xml version=“1.0”?> <punoIme>Petar Milic</punoIme> XML Schema dokument: sema_stavke_adresara.xsd <?xml version=“1.0”?> <xs:schemaxmlns:xs='http://www.w3.org/2001/XMLSchema'> <xs:element name=‘punoIme' type=“xs:string"/> <xs:/schema> Pridruživanje šeme XML dokumentu: stavka_adresara.xml sa referencom šeme <?xml version=“1.0”?> <punoIme xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“sema_stavke_adresara.xsd“> Petar Milic </punoIme>
XML Schema Izrada šeme (2) Za proveru validnosti definisanog XML dokumenta u odnosu na njegovu šemu, potreban je XML analizator koji podržava šeme. Na primer, Xerces analizator napisan na Javi ima program dom.Writer koji se pokreće sa komandne linije. Ovaj analizator se u datom primeru može iskoristiti za proveru validnosti kreiranog XML dokumenta na sledeći način: %java dom.Writer –v –s stavka_adresara.xml Pošto je navedeni dokument validan, dom.Writer će preslikati ulazni dokument na standardan izlaz. Za nevalidan dokument, analizator bi generisao poruku o grešci. Na primer: <?xml version=“1.0”?> <punoIme xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“sema_stavke_adresara.xsd“> Petar <b> Milic </b> </punoIme> Rezultat provere validnosti: [Error] stavka_adresara.xml:4:13: Element type “b” must be declared. [Error] stavka_adresara.xml:4:31: Datatype error: In element ‘punoIme’ : Can not have element children within a simple type content.
XML Schema Deklaracije elemenata XML dokumenti se prvenstveno sastoje od ugnježdenih elemenata, pa je jedna od najčešćih deklaracija u tipičnoj šemi: <xs:element name=“ime_elementa” type=“xs:tip_elementa”> Šeme podržavaju dva tipa sadržaja elementa: jednostavan (prost) i složen. Jednostavan sadržaj se sastoji od čistog teksta koji ne obuhvata ugnježdene elemente. U tabeli su navedeni najčešće korišćeni prosti tipovi definisani u W3C specifikaciji: Element deklarisan da je prostog tipa ne može imati atribute.
XML Schema Atributi • Atributi uvek moraju biti deklarisani kao prosti tipovi. • Elementi koji sadrže atribute su složenog tipa. • Atributi se deklarišu pomoću elementa: • <xs:attribute name=“ime_atributa” type=“xs:tip_atributa”> • Primer: • <xs:attribute name=”id” type=“xs:integer”/> • <proizvod id="135">stolica</proizvod> • Atributi mogu imati podrazumevanu ili fiksnu vrednost. • Primer: • <xs:attribute name=”id” type=“xs:integer” use=“optional”/> • <xs:attribute name=”id” type=“xs:integer” use=“required”/>
XML Schema Fasete (1) • Fasete (facets) predstavljaju mehanizam kontrole mogućih vrednosti prostih tipova podataka. Fasete se na proste tipove primenjuju korišćenjem elementa • xs:restriction • Svaka faseta se izražava kao određeni element unutar bloka ograničenja, a više faseta se može kombinovati da bi se dodatno ograničile moguće vrednosti prostog tipa. • Šeme koriste sledeće vrste faseta: • length (ili minLength i maxLenght) – određuju dužinu podataka • pattern – zadaje sofisticirana ograničenja formata stringa • enumeration – ograničavaju moguće vrednosti na članove unapred definisane liste • whiteSpace – određuje način na koji se obrađuju beline unutar podataka • maxInclusive i maxExclusive – određuju najveće vrednosti stavki • minInclusive i minExclusive – određuju najmanje vrednosti stavki • totalDigits – ograničava ukupan broj cifara u decimalnom broju • fractionDigits – zadaje obavezan broj cifara u broju desno od decimalne tačke
XML Schema Fasete (2) Numeričke fasete Numeričke fasete definišu najmanje (xs:minInclusive i xs:minExclusive) i najveće (xs:maxInclusive i xs:maxExclusive) vrednosti podataka. Razlika između uključive i isključive varijante faseta je u tome da li se data vrednost smatra delom skupa dozvoljenih vrednosti ili ne. Primer1: Primer2: <xs:element name=“starost"><xs:maxInclusive value="0"/> <xs:simpleType> <xs:maxExclusive value=“1"/> <xs:restriction base=“xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction>Ovo su ekvivalentne deklaracije. </xs:simpleType> </xs:element>
XML Schema Fasete (3) Faseta xs:enumeration Ova faseta ograničava moguće vrednosti elemenata i atributa na članove unapred definisane liste. Ukoliko element ili atribut u bilo kom primerku dokumenta bude sadržao vrednost koje nema u listi nabrojanih članova, generisaće se greška. Primer: <xs:element name="auto"> <xs:simpleType> <xs:restriction base=“xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element>
XML Schema Fasete (4) Faseta xs:pattern Fasetom uzorka se mogu nametnutni vrlo raznovrsna ograničenja u pogledu formata stringa. Ova faseta poredi datu vrednost sa određenim regularnim izrazom i ukoliko mu vrednost ne odgovara, generiše se greška validnosti. Primer1: <xs:simpleType name=“bso">Definiše da broj socijalnog osiguranja <xs:restriction base=“xs:string"> mora sadržati tri cifre, zatim crticu, dve <xs:pattern value=“\d\d\d-\d\d-\d\d\d\d"/> cifre, novu crticu i još četiri cifre. </xs:restriction> </xs:simpleType> Primer2: <xs:element name=“pol"> <xs:simpleType> <xs:restriction base=“xs:string"> Definiše da pol može biti muški ili ženski.<xs:pattern value=“muski|zenski”> </xs:restriction> </xs:simpleType> </xs:element>
XML Schema Fasete (5) Fasete za ograničavanje dužine Faseta xs:lengthnameće određenoj vrednosti tačno zadatu dužinu. Fasete xs:minLengthi xs:maxLengthzadaju opseg dužina (najmanju i najveću) za vrednosti datog tipa. Primer1: Primer2: <xs:element name=“password"><xs:element name=“password"> <xs:simleType><xs:simleType> <xs:restriction base=“xs:string"><xs:restriction base=“xs:string“> <xs:length value=“8“/> <xs:minLength value=“5“/> </xs:restriction><xs:maxLength value=“8“/> </xs:simpleType></xs:restriction> </xs:element></xs:simpleType> </xs:element>
XML Schema Složeni tipovi(1) Šema pridružuje tip svakom elementu i atributu koji deklariše. Elementi složenih tipova mogu imati atribute i sadržati ugnježdene elemente. Samo elementi mogu biti složenog tipa. Tipovi atributa su uvek prosti. Složeni tip se deklariše pomoću elementa xs:complexType koji je ugrađen neposredno u deklaraciju elementa. XML kod <zaposleni> <ime>Pera</ime> <prezime>Miric<prezme> </zaposleni> XML Schema kod <xs:element name=“zaposleni”> <xs:complexType> <xs:sequence> <xs:element name=“ime” type=“xs:string”/> <xs:element name=“prezime” type=“xs:string”/> </xs:sequence> </xs:complexType> </xs:element>
XML Schema Složeni tipovi(2) Element može imati referencu na ime složenog tipa. <xs:element name=“zaposleni” type=“osobainfo”/> <xs:complexType name=“osobainfo”/> <xs:sequence> <xs:element name=“ime” type=“xs:string”/> <xs:element name=“prezime” type=“xs:string”/> </xs:sequence> </xs:complexType> Na ovaj način se može definisati više elemenata istog tipa. <xs:element name=“zaposleni” type=“osobainfo”/> <xs:element name=“student” type=“osobainfo”/> <xs:element name=“clan” type=“osobainfo”/> <xs:complexType name=“osobainfo”/> <xs:sequence> <xs:element name=“ime” type=“xs:string”/> <xs:element name=“prezime” type=“xs:string”/> </xs:sequence> </xs:complexType>
XML Schema Složeni tipovi(3) Složeni element se može bazirati na nekom već postojećem složenom tipu kome se mogu dodati novi elementi. <xs:element name=“zaposleni” type=“dopunjeninfo”/> <xs:complexType name=“osobainfo”/> <xs:sequence> <xs:element name=“ime” type=“xs:string”/> <xs:element name=“prezime” type=“xs:string”/> </xs:sequence> </xs:complexType> <xs:complexType name=“dopunjeninfo”/> <xs:complexContent> <xs:extension base=“osobainfo”> <xs:sequence> <xs:element name=“ulica” type=“xs:string”/> <xs:element name=“grad” type=“xs:string”/> <xs:element name=“drzava” type=“xs:string”/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
XML Schema Ograničenja broja pojavljivanja U XML Schema postoji mogućnost eksplicitnog zadavanja najmanjeg i najvećeg broja pojavljivanja određenog elementa na određenom mestu u dokumentu. Za ograničavanje broja pojavljivanja koriste se sledeći atributi elementa xs:element: minOccurs – definiše minimalan broj pojavljivanja elementa maxOccurs – definiše maksimalan broj pojavljivanja elementa Primer: <xs:element name=“osoba”> <xs:complexType> <xs:sequence> <xs:element name=“ime” type=“xs:string”/> <xs:element name=“ime_deteta” type=“xs:string” minOccurs=“0” maxOccurs=“10”/> </xs:sequence> </xs:complexType> </xs:element>
XML Schema Mešoviti sadržaj elemenata Mešoviti sadržaj imaju XML elementi koji sadrže znakovne podatke (stringove, tekst) i neograničen broj elemenata. XML Schema podržava ovu funkcionalnost, i još omogućava određivanje broja i redosleda po kome se elementi pojavljuju unutar znakovnih podataka. Atribut mixed elementa tipa complexType određuje da li se znakovni podaci smeju pojaviti unutar tela elementa. <pismo> Dragi<ime>Pero</ime> Vasa narudzbina <narid>1432</narid> ce stici<nardatum>2007-06-18</nardatum> </pismo> XML kod <xs:element name=“pismo“ type=“pismoTip“/> <xs:complexType name=“pismoTip“ mixed=“true“> <xs:sequence> <xs:element name=“ime“ type=“xs:string“/> <xs:element name=“narid“ type=“xs:positiveInteger“/> <xs:element name=“nardatum“ type=“xs:date“/> </xs:sequence> </xs:complexType> XML Schema kod
XML Schema Zadavanje redosleda elemenata (1) • Za određivanje redosleda u kome se elementi mogu pojavljivati, XML šeme nude sledeće mogućnosti: • xs:sequence • xs:choice • xs:all • Ove mogućnosti se mogu ugnježdavati u slučaju izgradnje složenijih struktura elemenata. Primer: <xs:element name=“pismo“> <xs:complexType mixed=“true“> <xs:sequence> <xs:element name=“pozdrav“/> <xs:element name=“telo“/> <xs:element name=“zavrsetak“/> </xs:sequence> </xs:complexType> </xs:element> • xs:sequence • Ovaj element zahteva da se elementi • koje sadrži moraju pojavljivati tačno • onim redosledom kojim su navedeni • u njegovom spisku. • Pismo mora sadržati element pozdrav, • element telo i element završetak, • tim redom.
XML Schema Zadavanje redosleda elemenata (2) xs:choice Ovaj element omogućava pojavljivanje samo jednog elementa iz niza mogućnosti. Pozdrav mora da sadrži samo jednu iz liste dozvoljenih pozdravnih reči (zdravo, ćao ili draga). Primer: <xs:element name=“pozdrav“> <xs:complexType mixed=“true“> <xs:choice> <xs:element name=“zdravo“/> <xs:element name=“cao“/> <xs:element name=“draga“/> </xs:choice> </xs:complexType> </xs:element>
XML Schema Zadavanje redosleda elemenata (3) xs:all Ovaj element zahteva da se svaki od elemenata mora pojaviti jednom, pri čemu redosled njihovog pojavljivanja nije važan. Redosled pojavljivanja elemenata stavka, cena i datumPrispeca nije bitan, a sprečeno je i pojavljivanje više referenci iste vrednosti. XML Schema kod: cirpismo.xsd <xs:element name=“telo“> <xs:complexType mixed=“true“> <xs:all> <xs:element name=“stavka“/> <xs:element name=“datumPrispeca“/> <xs:element name=“cena“/> </xs:all> </xs:complexType> </xs:element> XML dokument: cirpismo.xlm <pismo xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“cirpismo.xsd“> <pozdrav> <zdravo/>Bobo!</pozdrav> <telo> Hvala Vam sto se narucili <stavka/> (<cena/>). Trebalo bi da stigne do <datumPrispeca/> </telo> <zavrsetak/> </pismo>