Prijeđi na sadržaj

XML Schema

Izvor: Wikipedija

XML Schema je noviji način određivanja pravila strukturiranja XML dokumenta. Format se kreira prema pravilima XML jezika. Način određivanja strukture sličan je načinu izgradnje baze podataka. Korištenjem XML Scheme moguće je na vrlo detaljnom nivou odrediti opis sadržaja odgovarajućeg elementa:

  • kardinalnost
  • tip podatka
  • 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 kreirao Microsoft, ali je od 2001. godine to W3C preporuka.

Sintaksna pravila

[uredi | uredi kôd]

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. Korijenski <schema> element mora se navesti u svakom XML Schema dokumentu. Taj element, kao i svi drugi može imati odgovarajuće atribute.

Tipovi podataka

[uredi | uredi kôd]

Jednostavni tipovi podataka ugrađeni su u XML Schema specifikaciju. Jednostavni tipovi podataka mogu se proširivati specifičnim skupovima, ovisno o određenoj namjeni XML dokumenta koji se opisuje. Npr. kod XML dokumenata koji opisuju strukturu baze podataka postoje jednostavni tipovi podataka identični svim tipovima podataka koje određena baza može imati. Prednost korištenje jednostavnih tipova podataka je u tome što sve kontrole i provjere ispravnosti podataka vrši sam XML program i nije potrebno pisati posebne kontrolne procedure. Neki od jednostavnih tipova podataka 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

[uredi | uredi kôd]

U XML Schemi mogu se koristiti jednostavni i složeni tipovi elemenata.

Jednostavni tipovi elemenata

[uredi | uredi kôd]

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).

<xs:element name="prezime" type="xs:string"/>
<xs:element name="ime" type="xs:string"/>

Jednostavni elementi mogu imati inicijalnu (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

[uredi | uredi kôd]

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 mogu imati samo početnu oznaku.
<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 sadrže samo tekst i stributem, 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

[uredi | uredi kôd]

Atributi detaljnije opisuju elemente i opcionalni su te se ne moraju navoditi. Vrijednost atributa navodi se pod znakovima navodnika. Atribut "name" opisuje naziv atributa ili elementa, a atribut "type" njegov dozvoljeni tip. Tip podatka može biti jednostavan ili složen.

Kardinalnost elemenata

[uredi | uredi kôd]

Kardinalnost podataka definirana je atributima "minOccurs" i "maxOccurs". Minimalni broj pojavljivanja određenog elementa postavljen je u osnovi na "1". Ako se želi navesti neki drugi broj, npr. da se element ne mora niti jednom pojaviti, potrebno je u vrijednost tog atributa upisati "0". Atribut "maxOccurs" navodi maksimalni broj puta što se može pojaviti vrijednost određenog elementa. Ako se neki element može pojaviti neograničen broj puta kao vrijednost se treba postaviti "unbounded". Ako je broj puta što se element smije pojaviti fiksiran, potrebno je kao vrijednost atributa navesti taj broj.

Ograničenja elemenata

[uredi | uredi kôd]

Odgovarajućim elementima i atributima mogu se precizno odrediti odgovarajuća ograničenja na vrijednost XML elemenata. Element <restriction> koristi se za ograničavanje vrijednosti određenog elementa na određene vrijednosti. Primjer ograničenja podatka starosti koje mora upasti u interval između 0 i 110

<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 ograničenja podatka vrsta automobila koji mora biti jedan od ponuđenih tipova:

<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 ograničenja na niz slova engleske abecede:

<xs:element name="slovo">
<xs:simpleType>
	<xs:restriction base="xs:string">
		<xs:pattern value="[a-z]"/>
	</xs:restriction>
</xs:simpleType>
</xs:element> 

Primjer ograničenja duljine podatka:

<xs:element name="jmbg">
<xs:simpleType>
 	<xs:restriction base="xs:string">
		<xs:length value="13"/>
	</xs:restriction>
</xs:simpleType>
</xs:element> 

Ostala svojstva elemenata

[uredi | uredi kôd]

Osim kardinalnosti i ograničenja podataka postoji niz predefiniranih svojstava koja se mogu koristiti prilikom opisa svakog elementa. Ta predefinirana svojstva nazivaju se "facets". Neki od najčešće korištenih su precision, scale, encoding, whiteSpace, totalDigits fractionDigits i pattern.

Primjer korištenja

[uredi | uredi kôd]

XML dokument

[uredi | uredi kôd]

Dokument studenti.xml

<?xml version="1.0" encoding="UTF-8"?>
<Studenti xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="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>

XSD dokument

[uredi | uredi kôd]

Dokument studenti.xsd

<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'[neaktivna poveznica]>
	<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>
	<xsd:element name='Osoba'>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref='Ime'/>
				<xsd:element ref='Prezime' minOccurs='0' maxOccurs='1'/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name='Ime' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Prezime' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Studij' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Adresa'>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref='Ulica' minOccurs='0' maxOccurs='1'/>
				<xsd:element ref='Broj' minOccurs='0' maxOccurs='1'/>
				<xsd:element ref='Grad' minOccurs='0' maxOccurs='1'/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name='Ulica' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Broj' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Grad' type='xsd:string'>
	</xsd:element>
	<xsd:element name='KontaktPodaci'>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref='Telefon' minOccurs='0' maxOccurs='unbounded'/>
				<xsd:element ref='Email' maxOccurs='unbounded'/>
				<xsd:element ref='KorisnickoIme' maxOccurs='unbounded'/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name='KorisnickoIme' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Telefon' type='xsd:string'>
	</xsd:element>
	<xsd:element name='Email' type='xsd:string'>
	</xsd:element>
</xsd:schema>

Prednosti i nedostaci korištenja XML Scheme

[uredi | uredi kôd]

Prednost korištenja XML Scheme je što se sam XML Schema dokument XML dokument i kreira se prema istim pravilima. Time nije potrebno učiti pravila 2 različita jezika, a i sami programi koji provjeravaju ispravnost XML dokumenta mogu se koristiti za provjeru formalne ispravnosti Schema dokumenta.
Osim toga 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 tip podataka datum programi bi trebali interpretirati na ispravan način, ovisno o lokalnim datumskim postavkama odgovarajuće zemlje.
Nedostatak korištenja XML Schema dokumenta je u dosta složenoj sintaksi koju je potrebno svladati kako bi se kreirali dokumenti.

Vanjske poveznice

[uredi | uredi kôd]

W3C stranice o XML SchemiArhivirana inačica izvorne stranice od 23. kolovoza 2006. (Wayback Machine)
Specifikacija XML Scheme

XML Schema
Vodič kroz XML schemuArhivirana inačica izvorne stranice od 28. travnja 2006. (Wayback Machine)