300 likes | 520 Views
6. XML – 2.dio. DTD i XML shema. DTD i XML shema. Ispravnost nekog XML dokumenta se provjerava u odnosu na određenu: Document Type Definition (DTD) ili XML schemu. Shema određuje koje elemente smije sadržavati XML dokument te redoslijed i broj tih elemenata.
E N D
6. XML – 2.dio DTD i XML shema
DTD i XML shema • Ispravnost nekog XML dokumenta se provjerava u odnosu na određenu: • Document Type Definition (DTD) ili • XML schemu. • Shema određuje koje elemente smije sadržavati XML dokument te redoslijed i broj tih elemenata. • Datoteka sheme koja se koristi navodi se u zaglavlju XML dokumenta. Primjer ako se koristi DTD: • <!DOCTYPE poruka SYSTEM "PorukaPodsjetnik.dtd"> Primjer ako se koristi XML shema: • <poruka xmlns="http://hr.wikipedia.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="poruka.xsd">
Upotreba DTD pravila Namjera DTD pravila je: • opisati svaki element koji se koristi u razmatranom XML dokumentu, • opisati i međusobne odnose tih elemenata. Budući da neki element može imati atribute, potrebno je posebnim pravilima opisati i njihov sadržaj i odnose. • Svaki element opisuje se <!ELEMENT .... > deklaracijom. Sintaksa te deklaracije je: <!ELEMENT ime_elementa pravilo> • Ako se želi naglasiti da element može sadržavati i nove tagove i podatke, tada se naredba piše ovako: <!ELEMENT ime_elementa ANY> .
Upotreba DTD tagova - nastavak • Ako se želi istaknuti da element ima samo podatke, a ne i nove tag-ove, koristi se kratica PCDATA (engl. Parsed Character Data): <!ELEMENT ime_elementa (#PCDATA)> • Za element koji nema informacijskog sadržaja unutar svojih tag-ova koristi se oznaka EMPTY u opisu elementa: • <!ELEMENT ime_elementa EMPTY> • Ako želimo koristiti ugnježdene elemente, prvo se definiraju elementi više razine, grupirajući imena ugnježdenih elemenata unutar zagrada i odijeljujući ih znakom: • zareza ',' po obvezujućem poretku pojavljivanja ili • znakom '|' ako se tek pretpostavlja pojavljivanje barem nekog od njih. Ime jednog elementa ili grupe elemenata može se proširiti posebnim znakom, operatorom pojavljivanja, za koje vrijedi: ? – bez pojavljivanja ili pojavljivanje jedanput + - pojavljivanje barem jedanput ili više puta * - pojavljivanje može biti niti jednom ili jedanput ili više puta
Uključivanje DTD pravila • DTD pravila mogu se uključiti u XML dokument ili izvan njega u posebnu datoteku. • Ako se DTD pravila uključuju u XML dokument, tada se u prvoj naredbi XML dokumenta navodi: <?xml version="1.0" standalone="yes"> • Ako se DTD pravila nalaze u posebnoj datoteci odvojenoj od XML dokumenta, tada se u prvoj naredbi XML dokumenta navodi: <?xml version="1.0" standalone=“no"> U tom slučaju se u nastavku XML dokumenta navodi naredba <!DOCTYPE .... > u kojoj se navodi naziv datoteke sa DTD pravilima. Sintaksa za tu naredbu je sljedeća: <!DOCTYPE ime_root_elementa SYSTEM "URL">, npr. <!DOCTYPE poruka SYSTEM "PorukaPodsjetnik.dtd">
Primjer 1 upotrebe DTD-a • U primjeru je DTD naveden unutar XML dokumenta: <?xml version="1.0" standalone="yes"> <!-- DTD definicije --> <!DOCTYPE knjiga [ <!ELEMENT knjiga (naslov, izdavač) > <!ELEMENT naslov (#PCDATA)> <!ELEMENT izdavač (#PCDATA)> ]> • U nastavku XML dokumenta se koriste tagovi koji su prethodno definirani: <!-- XML dokument --> <knjiga> <naslov> Uvod u XML </naslov> <izdavač> FSB Zagreb </izdavač> </knjiga> Definiran je korjenski (root) element “knjiga”, koji ima podelemente “naslov”, “izdavač”, a oni mogu sadržavati podatke
Primjer 2 upotrebe DTD-a • U donjem primjeru, u DTD-u je definirano da element “knjiga” može imati podelement “naslov” ili “izdavač”, ali ne i oba elementa (isključivi elementi se odvajaju crtom “|”: <!DOCTYPE knjiga [ <!ELEMENT knjiga (naslov | izdavač) > <!ELEMENT naslov (#PCDATA)> <!ELEMENT izdavač (#PCDATA)> ]>
Primjer 3 upotrebe DTD-a • U ovom primjeru definirano je da korjenski element “knjiga” može imati ili niz podelemenata: naslov, autor izdavač (i to 0,1 ili više puta), ili podelement “pregled” (1 ili više puta). <!DOCTYPE knjiga [ <!ELEMENT knjiga ((naslov, autor, izdavač)* | pregled+ ) <!ELEMENT naslov (#PCDATA)> <!ELEMENT autor (ime_autora+)> <!ELEMENT ime_autora (#PCDATA)> <!ELEMENT naslov (#PCDATA)> <!ELEMENT izdavač (tvrtka | logo)?> <!ELEMENT tvrtka (#PCDATA)> <!ELEMENT logo EMPTY> <!ELEMENT pregled (#PCDATA)> ]> “ime_autora” se može pojaviti 1 ili više puta “izdavač” može se pojaviti, a i ne mora, a ako se pojavi, mora imati element tvrtka ili logo
Definiranje atributa u DTD-u • U DTD-u se atributi definiraju u naredbi <!ATTLIST...> čiji je opći oblik: <!ATTLIST odredišni_element ime_atributa atributni_tip pretpostavljena_vrijednost> • Odredišni element = element na koji se atributi odnose • Atributni tip = tip atributa koji može biti: • obični znakovni tip podataka (CDATA), • niz vrijednosti od kojih se jedno izabire (engl. enumerated types), • ostali tipovi: ENTITY, ID, NMTOKEN, NOTATION sa svojim varijantama koje zahtijevaju poseban opis • Pretpostavljena vrijednost (default) može biti • #REQUIRED – obavezno ju je navesti uz atribut • #IMPLIED – u XML dokumentu se može izostaviti, ali u DTD-u ne • #FIXED – fiksna i ne može se mijenjati od strane korisnika
Primjeri deklaracije atributa • U elementu “cijena” postoji atribut “tečaj” koji je obavezno navesti, a pretpostavljena vrijednost mu je “kn” (ako se ne navede drugačije): <!ATTLIST cijena tečaj CDATA #REQUIRED "kn"> • U elementu “datum” postoji atribut “godina” koji se ne mora obavezno navesti, a ako se ne navede, kao vrijednost će se uzeti fiksna vrijednost “2002”: <!ATTLIST datum godina CDATA #FIXED "2002"> • U elementu “osoba” pojavit će se atribut “spol” koji može imati vrijednost “muško” ili “žensko”, a pretpostavljena vrijednost će biti “žensko”: <!ATTLIST osoba spol (muško | žensko) "žensko"> • U elementu “osoba” pojavit će se atribut “bračno_stanje” koji može imati jednu od više navedenih vrijednosti, a u XML dokumentu se ne mora navesti vrijednost <!ATTLIST osoba bračno_stanje (sam | sama | oženjen | udata | rastavljen | rastavljena | udovac | udovica) #IMPLIED>
Atributni tipovi ID, IDREF • ID i IDREF su posebni tipovi atributa koji se koriste za označavanje identifikatora atributa • Primjer: ako u “odjel.dtd” datoteci definiramo: <!-- odjel.dtd datoteka --> <!ELEMENT odjel (zaposlenik*)> <!ELEMENT zaposlenik (#PCDATA)> <!ATTLIST zaposlenik zapid ID #REQUIRED> <!ATTLIST zaposlenik šef IDREF #IMPLIED> • Tada će u XML dokumentu element “odjel” imati podelement “zaposlenik” koji će imati obavezno svoj identifikator u atributu “zapid”, a atribut šef ne mora imati definiranu vrijednost u XML-u
Atributni tipovi ID, IDREF - nastavak • U XML dokumentu će tagovi izgledati ovako: <?xml version="1.0" standalone=“no" ?> <!DOCTYPE odjel SYSTEM odjel.dtd> <odjel> <zaposlenik zapid="z007"> Marko Matić </zaposlenik> <zaposlenik zapid="z008"> Hrvoje Horvat </zaposlenik> <zaposlenik zapid="z009" šef="z007"> Darko Dragić </zaposlenik> <zaposlenik zapid="z010" šef="z008"> Štefica Štef </zaposlenik> </odjel> • Ovdje se koristi vanjska datoteka “odjel.dtd” za deklariranje pravila XML tagova. Za element “odjel” definirana su 4 elementa “zaposlenik” koji svi imaju atribut “zapid” sa definiranim vrijednostima. Za dvoje zaposlenika definiran je i atribut “šef” čija se vrijednost referencira na atribut “zapid”, tj. vrijednost atributa “šef” je jedna od onih koja postoji definirana u vrijednostima “zapid”. Drugim riječima, za neke djelatnike možemo definirati tko im je šef. Šef mora biti jedan od upisanih djelatnika.
Ključne riječi NOTATION(S) • Ključne riječi NOTATION i NOTATIONS koriste se kada želimo aktivirati neku drugu datoteku, ovisno o vrijednosti atributa. • Dolaze u atributnoj listi neposredno povezane s DTD deklaracijom <!NOTATION> koja se nalazi u opisu XML dokumenta. • Primjer: u DTD opisu možemo navesti notaciju za nazive nekoliko programa koje želimo koristiti za gledanje slika: <!NOTATION jpg SYSTEM "ACDSee.exe"> <!NOTATION gif SYSTEM "imaging.exe"> <!NOTATION bmp SYSTEM "paint.exe"> <!NOTATION png SYSTEM "netscape.exe"> <!ATTLIST slika gledaj NOTATIONS (jpg | gif | png) #REQUIRED> Prethodno treba biti definiran element “slika” koji će imati atribut “gledaj” i obaveznu notaciju (jpg ili gif, ili png). Ovdje je notacija “bmp” namjerno izostavljena, jer se može definirati, ali se ne moraju sve definirane notacije i koristiti. Notacija upućuje na exe datoteku koja će se pokrenuti ovisno o vrijednosti atributa “gledaj”
Upotreba ENTITY za referenciranje • ENTITY deklaracija može se koristiti za povezivanje niza znakova s prikladnim imenom koje se potom na bilo kojim mjestima unutar XML dokumenta može koristiti kao referenca, bez ponovnog ispisa (općenito) dužeg niza znakova – slično 'macro' naredbi u programskim jezicima. • Opći oblik deklaracije izgleda ovako: <!ENTITY ime "znakovi_koje_zamjenjujemo_imenom"> • U XML dokumentu se referenca koristi upisom imena na ovaj način: '&ime;'.
Primjer 1 upotrebe ENTITY • U DTD deklaraciju se upisuje naredba ENTITY: <!-- ovo je DTD deklaracija --> <!ENTITY OM “Odjel za matematiku"> • Referencom “&OM;” u XML dokument se upisuje puni naziv kratice, tj. ‘Odjel za matematiku'. <!-- a ovo je XML dokument --> <ustanova> U okviru Sveučilišta u Osijeku je i &OM;. </ustanova>
Primjer 2 upotrebe ENTITY • Ako u DTD deklaraciju u naredbi ENTITY upišem ključnu riječ SYSTEM i navedemo adresu dokumenta, npr. ovako: <!- ovo je DTD deklaracija --> <!ENTITY dodatak SYSTEM "http://zrno.fsb.hr/odsjeci.xml"> • Tada se u XML dokument može umetnuti dokument “drugi.xml” pozivom reference, npr. ovako: <!-- ovo je XML dokument --> <ustanova> Fakultet se sastoji od ovih odsjeka: &dodatak;. </ustanova>
Ispravne i neispravne reference • Ispravna referenca: <!ENTITY A “Moje ime je &B;"> <!ENTITY B “Ivo Ivić"> • Neispravna referenca (jer je cirkularna: referenca A poziva B, a u B se poziva A: <!ENTITY A “Moje ime je &B;"> <!ENTITY B "&A Ivo Ivić">
XML shema • XML shema je noviji način određivanja pravila strukturiranja XML dokumenta. • Format se stvara prema pravilima XML jezika. Način određivanja strukture sličan je načinu izgradnje baze podataka. • Korištenjem XML sheme moguće je na vrlo detaljnoj razini odrediti opis sadržaja odgovarajućeg elementa: o prebrojivost o tip podatka o format podatka (npr. može se odrediti format telefonskog broja koji se sastoji od pozivnog broja države, mjesta i samog telefonskog broja). • XML schemu je izvorno načinio Microsoft, ali je od 2001. godine to W3C preporuka.
Sintaksa XML sheme • Na početku XML Schema dokumenta navodi se: • identifikator koji povezuje dokument s pravilima formiranja, kao i određeni XML prostor imena. • Nakon toga slijedi dio "annotation" u kojem se opisuje namjena dokumenta. • Korjenski <schema> element mora se navesti u svakom XML schema dokumentu. • Taj element, kao i svi drugi može imati odgovarajuće atribute.
Tipovi podataka u XML shemi • U XML shemu ugrađeni su jednostavni tipovi podataka, koji se po potrebi mogu i proširivati • Ako se koriste jednostavni tipovi, provjere ispravnosti vrši sam XML • Jednostavni tipovi su: • numerički tipovi podataka ("byte", "float", "long") • tipovi podataka za opis datuma vremena i trajanja ("time", "date", "timeinstant", "timeduration") • logički tip podataka ("boolean" – može imati vrijednost "true" ili "false") • tip podataka za unos binarnih brojeva ("binary") • oznaka jezika koja se koristi ("language" – npr. "en-US") • oznaka web adrese ("uri-reference" – npr. "http://www.w3c.org/")
Tipovi elemenata u XML shemi • U XML shemi mogu se koristiti i jednostavni i složeni tipovi elemenata. Jednostavni tipovi elemenata: • sadrže samo tekst i ne smiju unutar sebe sadržavati druge elemente i atribute (osim name i type atributa koji određuju naziv i tip određenog elementa), npr: <xs:element name="prezime"type="xs:string"/> <xs:element name="ime"type="xs:string"/> • mogu imati pretpostavljenu (default) ili fiksno zadanu (fixed) vrijednost atributa. • Ako u XML dokumentu nije zadana neka druga vrijednost atributa primjenjuje se inicijalna vrijednost. • Fiksno zadana vrijednost ima kontrolni karakter i vrijednost u XML dokumentu ne smije biti različita od nje.
Složeni tipovi elemenata u XML shemi Složeni tipovi elemenata su korisnički definirani elementom "complexType". Definira ih korisnik i njihovu kontrolu vrši sam. Postoje 4 različite vrste složenih elemenata: • prazni elementi ne smiju imati sadržaj već samo atribute. Prazni elementi imaju samo početnu oznaku, npr. <artikal sifra="1234"/> • elementi koji sadrže druge elemente sadrže samo druge elemente koji sadrže text. Osim drugih elemenata ne smiju sadržavati unutar sebe text. <osoba> <ime>Pero</ime> <prezime>Perić</prezime> </osoba> • elementi koji sadrže samo tekst s atributom, a ne smiju unutar sebe imati sadržane druge elemente. <racunalo type="rucno">Palm</racunalo> • elementi koji sadrže i tekst i druge elemente unutar sebe mogu imati sadržan i tekst i druge elemente. <opis> Osoba je rođena <datum lang="croatian">01.01.1989.</datum> </opis>
Atributi elemenata • Najčešći atributi elemenata, koji detaljnije opisuju elemente, su: • Name – sadrži ime elementa ili atributa • Type – opisuje tip elementa Ostali atributi opisuju: • Prebrojivost (kardinalnost) – definirana atributima: • minOccurs = minimalni broj pojavljivanja • maxOccurs = maksimalni broj pojavljivanja nekog elementa (“*” za neograničen broj pojavljivanja) • Ograničenja elementa – definirana aributima: • Restriction – koristi se za ograničavanje mogućih vrijednosti
Primjer 1 ograničavanja vrijednosti atributa • Ako želimo npr. postaviti da se za element “starost” može unijeti samo cijeli broj između 0 i 110, tada će XML shema biti sljedeća: <xs:element name="starost"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="110"/> </xs:restriction> </xs:simpleType> </xs:element>
Primjer 2 ograničavanja vrijednosti atributa • Ako želimo npr. postaviti da se za element “automobil” može unijeti samo tekst sa jednom od vrijednosti “Golf” ili “Fiat”, tada će XML shema biti sljedeća: <xs:element name="automobil"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Golf"/> <xs:enumeration value="Fiat"/> </xs:restriction> </xs:simpleType> </xs:element>
Primjer 3 ograničavanja vrijednosti atributa • Ako želimo npr. postaviti da se za element “JMBG” može unijeti samo tekst sa 13 znakova, tada će XML shema biti sljedeća: <xs:element name="jmbg"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="13"/> </xs:restriction> </xs:simpleType> </xs:element>
Primjer upotrebe XML sheme – sadržaj XML dokumenta “studenti.xml” <?xml version="1.0" encoding=“Windows-1250"?> <Studenti xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="studenti.xsd"> <Osoba> <Ime>Pero</Ime> <Prezime>Perić</Prezime> </Osoba> <Studij>Računarstvo</Studij> <Adresa> <Ulica>U gradu</Ulica> <Broj>247</Broj> <Grad>Zagreb</Grad> </Adresa> <KontaktPodaci> <Telefon>01-111-777</Telefon> <Telefon>098-111-1778</Telefon> <Email>pperic@zg.tel.hr</Email> <KorisnickoIme>pperic</KorisnickoIme> </KontaktPodaci> </Studenti>
Primjer upotrebe XML sheme – sadržaj datoteke “studenti.xsd” • Početak xsd datoteke bi bio sljedeći: <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <xsd:element name='Studenti'> <xsd:complexType> <xsd:sequence> <xsd:element ref='Osoba'/> <xsd:element ref='Studij' minOccurs='0' maxOccurs='1'/> <xsd:element ref='Adresa' minOccurs='0' maxOccurs='1'/> <xsd:element ref='KontaktPodaci' minOccurs='0' maxOccurs='1'/> </xsd:sequence> </xsd:complexType> </xsd:element> Na sličan način su definirani i ostali elementi koji se koriste u XML dokumentu na prethodnoj stranici. Za uvid u cijeli primjer kliknite na “studenti.xml”, te na “studenti.xsd”
Prednosti i nedostaci upotrebe XML sheme Prednosti: • XML shema dokument stvara se prema istim pravilima koja vrijede i za XML dokumente, pa je osigurana i kontrola ispravnosti naredbi • unutar XML Schema dokumenta moguće je provesti puno precizniju kontrolu sadržaja dokumenta i ispitati više različitih svojstava. Npr. ako se neki podatak opiše tipom “datum”, taj podatak u datumskom formatu trebao bi biti čitljiv u svim zemljama, jer bi taj tip programi trebali interpretirati na ispravan način, ovisno o lokalnim datumskim postavkama odgovarajuće zemlje. Nedostatak: • sintaksi koju je potrebno svladati kako bi se stvorili dokumenti je još uvijek vrlo složena.
Literatura • Essert, M., Web programiranje, materijali s predavanja, http://www.mathos.hr/wp, 20.02.2008.) • Wikipedia, www.wikipedia.org, 28.02.08. • W3C Consortium, www.w3c.org, 28.02.08. • M. Zekić-Sušac, Računarski praktikum 3, materijali s predavanja, http://www.mathos.hr/rp3, 28.02.08. • http://archive.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html - NCSA html beginner’s guide