uporaba tehnologije xquery na primeru iskalnika … · xquery je jezik, ki omogoča povpraševanja...
TRANSCRIPT
Martin Počkar
UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV
Diplomsko delo
Maribor, avgust 2013
UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV
Diplomsko delo
Študent: Martin Počkar
Študijski program: univerzitetni študijski program
Računalništvo in informatika
Smer: Informatika
Mentor: izr. prof. dr. Aleš Živkovič
Lektorica: Helena Bradač, univ. dipl. prev.
I
II
UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV
Ključne besede: povpraševalni jezik XQuery, iskalnik AmisTV, Saxon, test obremenitve, EPG
UDK: 004.438:004.777(043.2)
Povzetek
V diplomskem delu je predstavljena uporaba povpraševalnega jezika XQuery na primeru iskalnika
po digitalnem televizijskem sporedu (angl. EPG) na storitvi AmisTV 1.5. Skozi delo so predstavljeni
koncepti jezika XQuery in orodja za delo s tem jezikom. Delo predstavi delovanje produkcijskega
iskalnika AmisTV 1.5, ki deluje z uporabo relacijske podatkovne baze in jezika SQL, ter praktično
rešitev iskalnika z uporabo jezika XQuery. Obe rešitvi sta v diplomskem delu primerjani s statistiko,
pridobljeno z izvajanjem testov obremenitve. Delo vsebuje tudi predloge, kako izboljšati
zmogljivosti aplikacij v jeziku XQuery.
III
USING XQUERY WITHIN THE AMISTV SEARCH ENGINE
Key words: query language XQuery, AmisTV search engine, Saxon, load test, EPG
UDK: 004.438:004.777(043.2)
Abstract
The graduation thesis presents the use of the query language XQuery, by the example of the
AmisTV search engine, which is a search engine for electronic program guide data on digital
television AmisTV 1.5. The concepts of XQuery language and also some tools to work with it are
presented. The thesis defines the main principles of AmisTV search engine, which operates on the
use of relational data base and query language SQL; furthermore the practical solution for the
search engine by using the query language XQuery is presented. Both solutions are tested with
load tests and statistically compared. Consequently, the thesis includes suggestions how to improve
performance of applications in XQuery language.
IV
KAZALO VSEBINE 1 UVOD ................................................................................................................................. 1
2 OPIS TEHNOLOGIJE XQUERY ...................................................................................... 3
2.1 Uvod ............................................................................................................................. 3
2.2 Izrazi, operatorji ........................................................................................................... 4
2.3 Podatkovni model, tipi ................................................................................................ 9
2.4 Funkcije .................................................................................................................... 12
2.5 XQuery po specifikaciji 3.0 ...................................................................................... 13
2.6 Prednosti tehnologije, primerjava s XSLT in SQL ................................................... 15
3 ORODJA ZA DELO Z XQUERY ............................................................................... 17
3.1 Procesorji XQuery ................................................................................................ 18
3.1.1 Saxon ............................................................................................................. 18
3.1.2 Zorba .............................................................................................................. 18
3.1.3 Apache VXQuery .......................................................................................... 19
3.2 XQuery urejevalniki ............................................................................................. 19
3.2.1 Altova XMLSpy ............................................................................................ 20
3.2.2 <oXygen/> XML ........................................................................................... 21
3.2.3 Editix 2008 .................................................................................................... 24
3.3 Podatkovne baze na osnovi XML in XQuery ....................................................... 24
3.3.1 BaseX ............................................................................................................ 25
3.3.2 eXist-db 2.0 ................................................................................................... 26
4 UPORABA PROCESORJA XQUERY SAXON ............................................................ 28
4.1 Osnovne funkcije procesorja XQuery ................................................................... 28
4.1.1 Analiza ........................................................................................................... 29
4.1.2 Prevajanje ...................................................................................................... 29
4.1.3 Evalvacija ...................................................................................................... 30
4.1.4 Serializacija ................................................................................................... 30
4.2 Procesor Saxon ..................................................................................................... 30
4.3 Uporaba procesorja XQuery Saxon v .NET ......................................................... 32
5 OPIS STORITVE ISKALNIK AMISTV 1.5 ............................................................... 34
5.1 Storitev AmisTV 1.5 ............................................................................................. 34
5.2 Iskalnik AmisTV 1.5 v splošnem ......................................................................... 35
V
5.3 Iskalnik AmisTV 1.5 podrobneje .......................................................................... 37
6 ISKALNIK AMISTV 1.5 Z UPORABO XQUERY ........................................................ 42
7 TESTIRANJE ZMOGLJIVOSTI ..................................................................................... 47
7.1 Testiranje obremenitve ......................................................................................... 47
7.2 Testno okolje ......................................................................................................... 48
7.3 Testiranje .............................................................................................................. 49
7.3.1 Test 1 – scenarij 1 nad različico z uporabo relacijske podatkovne baze SQL 49
7.3.2 Test 2 – scenarij 2 nad različico z uporabo relacijske podatkovne baze SQL 50
7.3.3 Test 3 – scenarij 3 nad različico z uporabo relacijske podatkovne baze SQL 51
7.3.4 Test 4 – scenarij 1 nad različico z uporabo XQuery...................................... 51
7.3.5 Test 5 – scenarij 2 nad različico z uporabo XQuery...................................... 52
7.3.6 Test 6 – scenarij 3 nad različico z uporabo XQuery...................................... 52
7.4 Povzetek in analiza testov ..................................................................................... 53
8 IDEJE ZA IZBOLJŠAVO ................................................................................................ 55
8.1 Transformacija ali drugačna oblika dokumentov ................................................. 55
8.2 XML podatkovna baza .......................................................................................... 55
8.3 Večnitnost ............................................................................................................. 56
9 SKLEP .......................................................................................................................... 57
VIRI ..................................................................................................................................... 59
PRILOGE ............................................................................................................................ 63
VI
KAZALO SLIK
Slika 3.1: Altova XMLSpy orodje za odpravljanje napak ("debugger"). ............................ 21
Slika 3.2: <oXygen/> XML Editor - orodje Tree editor. .................................................... 23
Slika 3.3: <oXygen/> XML Editor - vmesnik pomočnika za odpravljanje napak. ............. 23
Slika 3.4: Arhitektura podatkovne baze, osnovane na XML [12]. ...................................... 24
Slika 3.5: Grafični vmesnik BaseX. V zgornji vrstici oken so od leve proti desni aktivirana
okna: Editor, Folder, Map in Plot. V spodnji vrstici oken so od leve proti desni aktivirana
okna: Text, Query info, Table in Tree. ................................................................................ 26
Slika 5.1: Prikaz vnosa iskanja v storitvi iskalnika AmisTV 1.5 - na levi strani lahko z
virtualno tipkovnico ali s črkami na daljinskem upravljalcu vnašamo iskalni niz, v
sredinskem stolpcu pa lahko rezultate omejimo z izbiro žanra ali podžanra. ..................... 36
Slika 5.2: Iskalnik AmisTV 1.5 nam rezultat prikaže v obliki večstranskega seznama
zadetkov. .............................................................................................................................. 36
KAZALO DIAGRAMOV
Diagram 2.1: Hierarhija tipov v XQuery 1.0 in XPath 2.0 [3]. ........................................... 11
Diagram 5.1: Diagram primerov uporabe za AmisTV 1.5. ................................................. 35
Diagram 5.2: Entitetno-relacijski diagram podatkovne baze na AmisTV 1.5..................... 38
Diagram 5.3: Diagram primerov uporabe za produkcijsko rešitev z uporabo relacijske
podatkovne baze SQL. Za iskanje po podatkih EPG je najprej potrebno parsanje. ............ 39
Diagram 5.4: Diagram aktivnosti pri parsanju dokumentov XML na produkcijski različici.
............................................................................................................................................. 39
Diagram 5.5: Poenostavljen prikaz delovanja iskalnika po podatkih EPG na produkcijski
različici. ............................................................................................................................... 41
Diagram 6.1: Izpuščena je potreba po parsanju in zapisovanju podatkov v relacijske tabele.
............................................................................................................................................. 42
Diagram 6.2: Diagram sodelovanja za rešitev iskalnika EPG z uporabo XQuery. ............. 44
VII
KAZALO TABEL
Tabela 3.1: Primerjalna tabela preizkušenih orodij za delo z jezikom XQuery. ................. 17
Tabela 7.1: Scenarij 1. ......................................................................................................... 49
Tabela 7.2: Scenarij 2. ......................................................................................................... 49
Tabela 7.3: Scenarij 3. ......................................................................................................... 49
Tabela 7.4: Rezultati Test 1. ................................................................................................ 49
Tabela 7.5: Rezultati Testa 2. .............................................................................................. 50
Tabela 7.6: Rezultati Testa 3. .............................................................................................. 51
Tabela 7.7: Rezultati za Test 4. ........................................................................................... 51
Tabela 7.8: Rezultati za Test 6. ........................................................................................... 52
Tabela 7.9: Rezultati testov obremenitve. ........................................................................... 53
KAZALO GRAFOV
Graf 7.1: Časi odgovorov za Test 1. .................................................................................... 50
Graf 7.2: Časi odgovorov za Test 2. .................................................................................... 50
Graf 7.3: Časi odgovorov za Test 3. .................................................................................... 51
Graf 7. 4: Časi odgovorov za Test 4. ................................................................................... 52
Graf 7.5: Časi odgovorov za Test 6. .................................................................................... 53
VIII
UPORABLJENE KRATICE
API Application Programming Interface
programski vmesnik
CIL Common Intermediate Language
skupni vmesni jezik
CRID Content Reference Identifier
referenčni identifikator vsebine
EPG Electronic Program Guide
digitalni televizijski spored
FTP File Transfer Protocol
protokol za prenos datotek
JAXP Java API for XML Processing
API za procesiranje XML v jeziku Java
JDOM Java Document Object Model
dokumentni objektni model za jezik Java
JSON JavaScript Object Notation
objektna notacija za jezik JavaScript
OQL Object Query Language
objektni povpraševalni jezik
SQL Structured Query Language
strukturiran povpraševalni jezik
STB Set-top Box digitalni sprejemnik
URI Uniform Resource Identifier
enotni označevalnik vira
W3C World Wide Web Consortioum
konzorcij za svetovni splet
XDM XQuery and XPath Data Model
podatkovni model za jezika XQuery in XPath
XML eXtesible Markup Language
razširljivi označevalni jezik
XOM XML Object Model
objektni model za jezik XML
IX
XQJ XQuery API for Java
API za procesiranje XQuery v jeziku Java
XQL XML Query Language
povpraševalni jezik za XML
XSD XML Schema Definition
shema XML
XSLT Extensible Stylesheet Language Transformations
razširljiv slogovni jezik za transformacije
1
1 UVOD
Za diplomsko nalogo smo iskalnik po elektronskem televizijskem sporedu (angl. electronic
program guide ali EPG; v nadaljevanju EPG) 1
1. XQuery je dovolj izrazno močna, da lahko v visokonivojski spletni aplikaciji
nadomesti klasičen pristop k podatkom s tehnologijo SQL. Prva teza te naloge je,
da lahko jezik XQuery v takšnih okoliščinah oziroma v danem modelu
enakovredno nadomesti relacijsko podatkovno bazo.
, ki je bil med študijsko prakso v podjetju
Amis d.o.o. razvit s pomočjo povpraševalnega jezika SQL, razvili s pomočjo XQuery,
povpraševalnega jezika za XML, in ob tem še dodobra raziskali ta jezik. S pomočjo tega
bomo skušali jezik XQuery predstaviti kot jezik, ki je zmožen izrazno in zmogljivostno
opravljati naloge povpraševanj v visokonivojskih aplikacijah, hkrati pa kot dostopna
tehnologija z veliko odprtokodnimi rešitvami in pripomočki omogoča nizke stroške
razvoja. Tako lahko postavimo dve tezi:
2. Uporaba tehnologije XQuery ima nižje stroške razvoja in je bolj organska
tehnologija za razvijalca v primerjavi z uporabo relacijske podatkovne baze in
jezika SQL.
Skozi poglavja bomo predstavili tehnologijo XQuery, spoznali orodja za delo z XQuery,
četrto poglavje pa se bo podrobneje osredotočilo na procesor Saxon, ki je bil uporabljen v
praktičnem delu naloge. Naslednja poglavja se osredotočajo na praktično rešitev; peto
poglavje na rešitev, ki je bila razvita v podjetju Amis, šesto poglavje pa se posveti rešitvi v
jeziku XQuery. Ob koncu smo nad obema rešitvama izvedli obremenitvene teste in zbrali
nekaj idej za izboljšave zmogljivosti rešitve z uporabo XQuery.
XML je široko sprejet kot format za shranjevanje dokumentov in kot standardna oblika za
izmenjavo podatkov med aplikacijami, pogosto tudi med različnimi organizacijami. Dobra
sprejetost tehnologije je posledica zmožnosti vzdrževanja kompleksnih informacij in na
drugi strani preprostosti in dostopnosti tehnologije [28].
XQuery kot povpraševalni jezik za XML je funkcionalno močna razširitev tehnologije
XML, saj omogoča povpraševanje po podatkih v večjem številu dokumentov XML in celo
1 Electronic program guide ali EPG je neprestano osveževan seznam celotne televizijske ali radijske vsebine, ki ga zagotavlja ponudnik storitve digitalne televizije [30].
2
povpraševanje po dokumentih XML na spletu ter s tem ponuja uporabno alternativo
shranjevanju podatkov v relacijske podatkovne baze.
3
2 OPIS TEHNOLOGIJE XQUERY
2.1 Uvod
XML je vsestranski označevalni jezik, zmožen označevanja informacij v različnih oblikah.
XQuery je jezik, ki omogoča povpraševanja po strukturah podatkov XML, bodisi so ti
fizično shranjeni kot dokument XML bodisi so prevedni v XML s pomočjo vmesnega
programja (angl. middleware). Zaradi svoje vsestranskosti omogoča združevanje podatkov
iz dokumentov XML, podatkovnih baz, spletnih strani in mnogih drugih virov [6].
Jezik XQuery je razvila skupina XML query working group oziroma Skupina za razvoj
povpraševalnega jezika XML pod okriljem W3Consortium (v nadaljevanju W3C). W3C
ali World Wide Web Consotium je osrednja mednarodna organizacija za standardizacijo
World Wide Web tehnologij. Osnova za nastanek je bil povpraševalni jezik Quilt, pri
katerem so združili lastnosti številnih drugih jezikov, vključno z XPath 1.0, XQL, XML-
QL, SQL in OQL [5]. Prvi delovni dokumenti za specifikacijo jezika XQuery 1.0 so nastali
februarja 2001, jezik pa je zaživel leta 2007, ko je W3C izdal priporočilo za specifikacijo
1.0. W3C priporočilo (angl. W3C Recommendation) je ekvivalentni dokument, kot
'standard' pri sorodnih organizacijah za standardizacijo. V osnovi je to skupek smernic.
XQuery so podprli IBM, Microsoft in Oracle kot najpomembnejša podjetja, ki se ukvarjajo
z razvojem podatkovnih baz [37]. V začetku leta 2013 je W3C izdal kandidata za
priporočilo za specifikacijo XQuery 3.0 (na začetku znana pod delovnim imenom XQuery
1.1), ki bo nadomestila specifikacijo 1.0.
Omenjena skupina je tesno sodelovala s Skupino za razvoj XSL, ki je razvila XSLT 2.0.
Obe skupini sta skupaj razvili XPath 2.0 [36], ki je neke vrste podjezik jezika XQuery.
XPath je v primerjavi z XQuery izrazno skromnejši jezik, vendar nepogrešljiv del pri
povpraševanju z XQuery. Lahko bi se reklo, da XQuery 1.0 funkcionalno nadgrajuje
XPath 2.0. Kateri koli izraz, ki je sintaktično in semantično pravilen v XPath 2.0, je
pravilen tudi v XQuery 1.0, izvajanje tega izraza pa bo vrnilo enake rezultate.
Specifikacija XQuery 1.0 zajema sledeče:
• Podatkovni model XQuery/XPath (XDM).
4
• Formalno semantiko XQuery 1.0 in XPath, ki definira statično semantiko jezika
XQuery, vsebuje pa tudi formalni (vendar ne definicijski) opis dinamične semantike.
• Sistem tipov XQuery, ki so definirani z XML Shemo; enaki tipi, kot se uporabljajo
v XQuery, se uporabljajo tudi v XML oziroma v XML Shemi.
• Knjižnico vgrajenih funkcij in operatorjev, ki jih podpira XQuery.
• Ima vsaj dva sintaksna vhoda, prvi je sintaksa, ki je berljiva ljudem, drugi je
sintaksa, ki je bazirana na XML. Sintaksa, definirana v obliki XML, je opisana z
XQueryX [17].
2.2 Izrazi, operatorji
XQuery uporablja XPath sintakso za naslavljanje določenih delov dokumenta XML.
Dopolnjuje ga stavkom SQL podobna skupina stavkov, poimenovana FLWOR (izgovarja
se enako, kot angleška beseda 'flower'), ki je namenjena iteracijam in združevanju
spremenljivk. FLWOR je v jeziku XQuery ekvivalent stavkom SELECT-FROM-WHERE
v jeziku SQL. Izrazi FLWOR so najpomembnejši izrazi in posebnost jezika XQuery, ostali
izrazi so opisani v drugi polovici tega poglavja.
FLWOR sestoji iz petih stavkov:
• FOR – ustvari zaporedje rezultatov (rezultat je ekvivalent SQL vrstici),
• LET – poveže rezultat s spremenljivko,
• WHERE – vsebuje Boolov izraz (angl. Boolean expression), s katerim filtrira
rezultat,
• ORDER BY – uredi rezultate,
• RETURN – konstruira rešitve, ovrednosti se za vsak posamezen rezultat.
Stavek RETURN nam omogoča vračanje rezultatov v obliki novega dokumenta XML,
vseeno pa XQuery ne pozna konstruktov, kot so stavki INSERT, UPDATE, DELETE v
jeziku SQL.
Uporaba povpraševalnega jezika XQuery na primeru trgovskega podjetja z več
poslovalnicami:
5
"podjetje.xml": <?xml version="1.0" encoding="utf-8" ?> <podjetje> <poslovalnica id="1"> <naslov> <ulica>Prešernova ulica 15</ulica> <postna_stevilka type="xs:integer">2000</postna_stevilka> <posta>Maribor</posta> </naslov> <telefon>02/9876-123</telefon> <email>[email protected]</ email> <cas_poslovanja> <odpiralni>8</odpiralni> <zapiralni>18</zapiralni> </cas_poslovanja> </poslovalnica> <poslovalnica id="2"> <naslov> <ulica>Tržaška cesta 397</ulica> <postna_stevilka type="xs:integer">2000</postna_stevilka> <posta>Maribor</posta> </naslov> <telefon>02/5918-000</telefon> <email>[email protected]</ email>
<cas_poslovanja> <odpiralni>10</odpiralni> <zapiralni>21</zapiralni> </cas_poslovanja> </poslovalnica> <poslovalnica id="3"> <naslov> <ulica>Mariborska cesta 38</ulica> <postna_stevilka type="xs:integer">3000</postna_stevilka> <posta>Celje</posta> </naslov> <telefon>03/1000-000</telefon> <email>[email protected]</ email> <cas_poslovanja> <odpiralni>9</odpiralni> <zapiralni>18</zapiralni> </cas_poslovanja> </poslovalnica> <poslovalnica id="4">
6
<naslov> <ulica>Dunajska cesta 100</ulica> <postna_stevilka type="xs:integer">1000</postna_stevilka> <posta>Ljubljana</posta> </naslov> <telefon>01/1234-987</telefon> <email>[email protected]</email> <cas_poslovanja> <odpiralni>8</odpiralni> <zapiralni>21</zapiralni> </cas_poslovanja> </poslovalnica> </podjetje>
XQuery za naslavljanje delov dokumenta uporablja izraze s sintakso XPath:
doc("podjetje.xml")/podjetje/poslovalnica/naslov/ulica
Funkcija doc() omogoča odpiranje dokumentov XML, /poslovalnica izbere vse
poslovalnice v dokumentu, z /naslov se premaknemo en nivo globlje po drevesu, z /ulica
pa še za en nivo globlje na element 'ulica'. Klic zgornje funkcije bi vrnil sledeči rezultat:
<ulica>Prešernova ulica 15</ulica> <ulica>Tržaška cesta 397</ulica> <ulica>Mariborska cesta 38</ulica> <ulica>Dunajska cesta 100</ulica>
Raba FLWOR izraza na tem primeru bi izgledala tako:
for $x in doc("podjetje.xml")/podjetje/poslovalnica where $x/naslov/postna_stevilka=2000 order by $x/naslov/ulica return $x/telefon
Stavek for izbere vse elemente, izbrane z izrazom XPath, v spremenljivko x. Stavek where
filtrira elemente na izbor tistih, pri katerih je vrednost elementa postna_stevilka enaka kot
2000, stavek order by določi kriterij, po katerem se rezultati sortirajo, return pa pove, da
naj izraz vrne vse telefon elemente. Zgornji izraz bi vrnil sledeči rezultat:
<telefon>02/9876-123</telefon> <telefon>02/5918-000</telefon>
7
Izrazi so gradniki vseh povpraševanj v jeziku XQuery. Obstaja več vrst (skupin) izrazov
[18]:
• Primarni izrazi (angl. primary expressions) – literali, imena spremenljivk, opisi
konteksta, konstruktorji, klici funkcij.
• Izrazi poti (angl. path expressions) – locirajo elemente, atribute znotraj
dokumenta XML. Izrazi poti so lahko:
o Relativni (izraz je sestavljen iz enega ali več korakov, ki so med seboj
ločeni z eno ali dvema poševnicama (/ ali //).
o Absolutni (izraz se začne z eno ali dvema poševnicama (/ ali //), opcijsko
(le če smo uporabili dve poševnici) pa se nadaljuje z relativno potjo.
• Izrazi zaporedij (angl. sequence expressions) – operatorji, ki se uporabljajo za
ustvarjanje, filtriranje in kombiniranje zaporedij predmetov. Predmeti so lahko
atomarne vrednosti ali vozlišča.
• Aritmetični izrazi – aritmetični operatorji - seštevanje, odštevanje, množenje,
deljenje in modusi.
• Primerjalni izrazi – operatorji, ki omogočajo primerjave:
o Splošni primerjalni operatorji (=, !=, <, >, <=, >=) – z njimi lahko
primerjamo atomarne vrednosti, zaporedja ali kombinacije teh dveh.
o Vrednostni primerjalni operatorji (eq, ne, lt, gt, le, ge) – z njimi lahko
primerjamo le atomarne vrednosti. Lahko jih nadomestimo s splošnimi
primerjalnimi izrazi.
o Vozliščni primerjalni operator (operator 'is') – le za primerjavo med
vozlišči.
o Primerjalni operatorji za primerjavo zaporedja vozlišč – primerjajo par
vozlišč glede na njihovo mesto v dokumentu. Obstajata dva operatorja:
<<: vrne 'true', če je operand 1 pred operandom 2,
>>: vrne 'true' če je operand 1 za operandom 2.
• Logični izrazi ('and' in 'or' operatorja) – logični izrazi lahko vračajo prazno
zaporedje, zaporedje enega ali več vozlišč ali 'boolean' vrednost.
• Izrazi za ustvarjanje dokumentov XML – konstruktorji, ki omogočajo
ustvarjanje struktur XML znotraj povpraševanj. S konstruktorji lahko
8
ustvarjamo elemente, atribute, dokumente, tekst, komentarje in procesne
inštrukcije. Poznamo:
o Direktni konstruktorji – vrednosti elementov, atributov itd. so konstante.
Primer direktnega konstruktorja elementov, ki ustvari element z
atributom in nekaj vgnezdenemi elementi:
<oseba emso="0101900500111">
<naziv>
<ime>Martin</ime>
<priimek>Počkar</priimek>
</naziv>
</oseba>
o Računski konstruktorji – klic konstruktorja se začne s tipom vozlišča, ki
ga želimo ustvariti (element, atribut ... itd.), sledi mu ime vozlišča, sledi
pa mu zaviti oklepaj ({}), v katerega se vstavi bodisi fiksna vrednost ali
izraz, iz katerega se vrednost izračuna:
<primer>
<p>EMŠO Martina Počkarja je { data($x/@emso) }</p>
<!--funkcija data() vrača vrednost (vsebino) elementa; več funkcij je
opisanih v poglavju 2.5-->
</primer>
Ta izraz bi vrnil sledeče:
<primer>
<p>EMŠO Martina Počkarja je 0101900500111 }</p>
</primer>
• Izrazi FLWOR– opisani v začetku tega poglavja.
• Izrazi razvrščanja – urejajo zaporedje vračanja rezultatov nekaterih izrazov poti.
Nimajo povezave z 'order by', ki spada med izraze FLWOR.
• Pogojni izrazi (if, else, then stavki).
• Kvantifikatorski izrazi (every, some):
9
o Kvantifikator 'some' vrne true, če je izraz, na katerega vpliva
kvantifikator, vsaj enkrat v povpraševanju resničen, torej vrača vrednost
'true'.
o Kvantifikator 'every' vrne 'true', če je izraz, na katerega vpliva
kvantifikator, v vsakem primeru resničen in torej vrača vrednost 'true'.
• Izrazi tipa zaporedja (operatorja 'instance of' in 'cast as').
2.3 Podatkovni model, tipi
XQuery 1.0 in XPath 2.0 Data Model ali krajše XDM je formalni podatkovni model za
jezik XQuery. XDM hkrati definira sledeče:
• vse dovoljene vrednosti izrazov,
• vse dovoljene vrednosti pri vmesnih kalkulacijah,
• vse dovoljene vrednosti, ki jih vrača izraz.
To pomeni, da je vsak vhod, vsak izhod in vsaka vmesna kalkulacija instanca
podatkovnega modela XDM.
Parsanje podatkov XML v XDM in validiranje po shemi se izvede pred procesiranjem
XQuery. Med generiranjem podatkovnega modela se dokument XML parsa v XDM
instanco.
Na kratko bi lahko XDM podatkovni model opisali kot zaporedje predmetov (angl. items),
ki so bodisi atomarne vrednosti bodisi vozlišča, torej je to zaporedje (angl. sequence)
zbirka nič ali več atomarnih vrednosti ali vozlišč. Atomarna vrednost (angl. atomic value)
je tista, ki ima vrednost atomarnega tipa. Atomarni tip (angl. atomic type) je primitivni tip
(angl. primitive simple type) ali tip, ki je derivat drugega atomarnega tipa.
Pomembna lastnost modela je, da ne razlikuje med predmetom in zaporedjem, ki vsebuje
ta predmet. Predmet je ekvivalenten zaporedju, ki vsebuje le ta isti predmet, in obratno.
V XDM obstaja sedem različnih tipov vozlišč:
• dokument,
10
• element,
• atribut,
• tekst,
• namespace,
• procesna inštrukcija,
• komentar.
Vsako vozlišče v modelu ima svojo unikatno identiteto, ki ga razlikuje od vseh ostalih
vozlišč, četudi so ta vozlišča sicer identična.
Na drugi strani se atomarne vrednosti nanašajo na preproste tipe (angl. simple types), ki so
definirani v W3C priporočilu XML Shema, Part 2. Preprosti tipi so string, Boolean,
decimal itd. Točna sestava tipov po podatkovnem modelu XDM je prikazana v Diagramu
2.1:
11
Diagram 2.1: Hierarhija tipov v XQuery 1.0 in XPath 2.0 [3].
12
2.4 Funkcije
XQuery vključuje številne vgrajene funkcije, ki omogočajo upravljanje z numeričnimi
vrednostmi, nizi, upravljanje z vozlišči in podobno. XQuery 1.0, XPath 2.0 in XSLT 2.0 si
delijo knjižnico definiranih funkcij. Moč jezika XQuery pa leži tudi v možnosti definiranja
uporabniško definiranih funkcij.
V primerjavi z jezikom SQL so pomembnejše funkcije min (arg, arg, ...), max (arg, arg,
...), count (arg, arg, ...) in avg (arg, arg, ...), saj nudijo enake funkcionalnosti kot funkcije
SQL. Najpomembnejša funkcija XQuery pa je doc (URI), ki omogoča naslavljanje in
odpiranje dokumentov XML. Primer klica funkcij doc() in substring():
doc(''dokument.xml'')/podatki/naslov[substring(ulica,1,3)='Smetanova']
Funkcije se lahko v grobem razdeli na naslednje kategorije [16]:
• upravljanje z nizi, npr. substring, contains, concat,
• regularni izrazi, npr. matches, replace,
• aritmetične funkcije, npr. count, sum, avg, min, max,
• lastnosti vozlišč, npr. name, node-name,
• upravljanje z dokumenti, npr. doc, doc-available.
Uporabniško definirane funkcije se lahko definirajo znotraj povpraševanja ali v ločeni
knjižnici. Funkcija se definira na sledeč način:
declare function prefix:ime_funkcije($parameter AS tip_parametra)
AS return tip_funkcije
{
...telo funkcije...
}
Preprost primer uporabniško definirane funkcije:
declare function local:kvadratna_potenca ($x as xs:double)
as xs:double {
13
<result>{$x*$x}</result>
};
2.5 XQuery po specifikaciji 3.0
Specifikacija XQuery 3.0 je trenutno v fazi kandidata za priporočilo, kar pomeni, da bo
postala tudi uradno W3C priporočilo [32], ko bo specifikacija široko sprejeta in bo
zadovoljevala vse tehnične zahteve. To se utegne zgoditi v kratkem, zato je primerno, da
predstavimo razlike specifikacije XQuery 3.0 od prvotne različice XQuery 1.0.
Predstavili bomo izbor najbolj bistvenih sprememb:
• Group by stavek v FLWOR izrazih – stavek generira zaporedje izhodnih
rezultatov, pri čemer je vsak rezultat skupina tistih vhodnih podatkov, ki imajo
skupen grupacijski ključ [21].
• Window stavek v FLWOR izrazih – stavek iterira prek vezanega zaporedja
(angl. binding sequence; predstavlja vrednost izraza, ki sledi besedi 'in' – npr. for
$x in $expr) in generira zaporedje rezultatov. Vsak rezultat predstavlja okno.
Okno je zaporedje elementov, zaporedno povlečenih iz vezanega zaporedja.
Vsako okno je določeno z najmanj eno in največ devetimi spremenljivkami.
Imena spremenljivk so sicer uporabniško-specifična, vendar so njihove vloge
sledeče (namenoma bomo uporabili angleška poimenovanja, ki jih uporablja
W3C, saj bi se med prevodom utegnil pomen izgubiti):
o Window-variable – vezana na zaporedje elementov iz vezanega
zaporedja in omejujejo okno.
o Start-item – vezana na prvi element v oknu.
o Start-item-position – vezana na zaporedno pozicijo prvega okenskega
elementa v vezanem zaporedju in je tipa xs:integer.
o Start-previous-item – vezana na element v vezanem zaporedju, ki ima
zaporedno pozicijo pred prvim elementom v oknu.
o Start-next-item – vezana na element v vezanem zaporedju, ki sledi
prvemu elementu v oknu.
14
o End-item – vezana na zadnji element v oknu.
o End-item-position – vezana na zaporedno pozicijo zadnjega okenskega
elementa v vezanem zaporedju in je tipa xs:integer.
o End-previous-item – vezana na element v vezanem zaporedju, ki ima
zaporedno pozicijo pred zadnjim elementom v oknu.
o End-next-item – vezana na element v vezanem zaporedju, ki sledi
zadnjemu elementu v oknu [21].
• Stavek count v FLWOR izrazih – stavek se navezuje na zaporedno pozicijo
vsakega rezultata v zaporedju rezultatov. Zaporedje vhodnih podatkov je enako
kot zaporedje izhodnih rezultatov s to razliko, da so izhodni rezultati
opremeljeni z dodatno spremenljivko, ki prikazuje zaporedno pozicijo tega
rezultata v zaporedju rezultatov [21].
• Try/catch izrazi – zagotavljajo upravljanje z napakami, ki nastanejo zaradi napak
pri uporabi tipov ali med dinamično evalvacijo. Podobno kot v visokonivojskih
jezikih Java ali C++/C#, try/catch izrazi s catch stavki 'lovijo' napake, ki so
leksikalno vsebovane v try stavku [21].
• Deklaracija funkcij kot private ali public.
• Možnost dinamičnih klicov funkcij.
• Izraz switch – izraz, dobro poznan iz drugih jezikov, pri katerem ključni besedi
switch sledi switch operand, ki se nato primerja s case operandi. Če noben
switch operand ne ustreza case operandu, je vrednost izraza enaka privzetemu
stavku [21].
15
2.6 Prednosti tehnologije, primerjava s XSLT in SQL
Osnovne prednosti tehnologije XQuery so [34]:
• Izraznost – jezik XQuery lahko vrši povpraševanja nad različnimi podatkovnimi
strukturami, s svojo dobro podporo rekurziji pa je naravni jezik za povpraševanje
po drevesnih strukturah in grafih.
• Jedrnatost – stavki v jeziku XQuery so krajši kot podobni stavki, napisani v
jezikih SQL ali XSLT
• Fleksibilnost – v jeziku XQuery lahko povprašujemo po hierarhičnih kot tudi
tabeliranih podatkih.
• Konsistentnost – jezik XQuery ima konsistentno sintakso, ki jo je možno uporabiti
tudi s sintakso drugih standardov XML, kot naprimer podatkovni tipi XML Sheme.
Za razliko od jezika SQL, ki vrača tabele, jezik XQuery vrača drevesno strukturo
podatkov. To nam omogoča, da neposredno ustvarjamo XHTML strukture, ki jih nato
lahko uporabimo za spletne strani. XQuery je namenjen objektnim podatkovnim bazam na
osnovi tehnologije XML, objektne baze pa pred podatkovnimi bazami, ki shranjujejo
tabelirane podatke, prednjačijo po svoji fleksibilnosti.
XQuery je lahko razumljiv in enostaven za učenje za vsakogar, ki pozna jezik SQL. Mnogi
konstrukti so v obeh jezikih podobni:
• urejanje rezultatov – oba jezika poznata 'order by' stavek,
• izbiranje določenih vrednosti – oba jezika lahko na enostaven način povprašujeta
po točno določenih vrednostih,
• razločevanje vrstic – oba jezika poznata 'where' stavek.
Velika prednost jezika XQuery pred jezikom SQL je v tem, da je XQuery naravni jezik za
svetovni splet. Uporabnik lahko z jezikom XQuery povprašuje po spletnih straneh, česar
mu jezik SQL ne omogoča. Tudi če uporablja podatkovno bazo na osnovi SQL, kamor
shranjuje HTML/XHTML strani ali dele strani, bo izgubil veliko prednosti, ki jih nudi
preprosto iskanje po oznakah in atributih.
16
Kot že napisano je XQuery jezik, ki je zlahka razumljiv nekomu, ki pozna jezik SQL, kar
pa ne velja za jezik XSLT. Ta vsebuje veliko principov, ki se bodo zdeli nenaravni
marsikateremu razvijalcu, vajenemu proceduralnih jezikov.
Na eni strani je XSLT dober za statične transformacije enega tipa dokumentov v drugega,
na drugi strani pa je XQuery dosti bolj dinamičen povpraševalni jezik, primeren za iskanje
podatkov iz velikih dokumentov oziroma iz velike količine dokumentov.
XSLT 2.0 in XQuery 1.0 sta bila razvita v tesnem sodelovanju obeh delovnih skupin, zato
je kljub razlikam med jezikoma veliko prekrivajočih funkcionalnosti [15] in tako si delita
sledeče koncepte:
• podatkovni model XDM,
• funkcije in operatorje,
• formalno semantiko,
• serializacijo [31].
17
3 ORODJA ZA DELO Z XQUERY
Z uveljavitvijo jezika XQuery se je pojavila tudi ponudba orodij za delo s tem jezikom.
Razdelili smo jih na procesorje, urejevalnike in podatkovne baze na osnovi jezikov XML
in XQuery. V tem poglavju se ne bomo osredotočali na tehnične rešitve orodij, ampak na
uporabnost in namen teh – izbrana orodja smo tudi preizkusili in primerjali, kar prikazuje
Tabela 3.1:
Tabela 3.1: Primerjalna tabela preizkušenih orodij za delo z jezikom XQuery.
Procesorji
Ime orodja Proizvajalec Licenca Podprte
platforme
Saxon Saxonica
Saxon-HE odprtokodna;
licence za plačljive
izvedenke od 50 £ naprej Java, .NET
Zorba Skupina s podporo
FLWOR Foundation Odprtokodna
C++, C, C#,
Java, PHP,
Python, Ruby
VXQuery Skupina pod okriljem
Apache Inkubatorja Odprtokodna Java
Urejevalniki
Ime orodja Proizvajalec Licenca
XMLSpy Altova Professional Edition 399$;
Enterprise Edition 799$
<oXygen/>
XML SyncRo Soft
Academic Edition 99$;
Professional Edition 488$;
Enterprise Edition 698$
Editix 2008 JAPISoft
Editix 2008 brezplačna;
Editix 2013 Small Business 79$;
Editix 2013 Enterprise 139$
18
Podatkovne baze na osnovi XML in XQuery
Ime orodja Proizvajalec Licenca
BaseX
BaseX GmbH, podjetje
raziskovalcev Univerze v
Konstanzu
Odprtokodna
eXist-db 2.0 eXist Solutions GmbH Odprtokodna;
Opcijsko doplačilo za uporabniško podporo
3.1 Procesorji XQuery
3.1.1 Saxon
Saxon je implementacija standarda XQuery podjetja Saxonica, napisana v Javi in omogoča
delo z jezikom XQuery v javanskih aplikacijah. Sprva je bil to procesor XSLT, ki se mu je
kasneje dodala tudi podpora za XQuery. Saxon poleg XQuery 1.0 implementira XSLT 2.0,
XPath 2.0, XML Schema 1.0, podpira pa tudi prihajajoči XQuery 3.0, ki je trenutno
kandidat za priporočilo (candidate recommendation) [13].
Implementacija je spisana v čisti Javi in je torej platformsko široko uporabna, obstaja pa
tudi .NET različica, ki pa je v bistvu prevedena javanska bajtna koda. Saxon je na voljo v
več različicah, od katerih je ena prostodostopna in odprtokodna. Za namene te naloge smo
uporabili in preizkusili odprtokodno različico Saxon-HE 9.3, prevedeno za .NET. Več o
Saxonu je opisano v četrtem poglavju te naloge.
3.1.2 Zorba
Zorba je odprtokodni procesor XQuery, napisan v programskem jeziku C++. Projekt med
drugim podpira tudi FLWOR Foundation in Oracle. Čeprav je spisan v C++, ima širok
nabor programskih vmesnikov (angl. application programming interface ali API;
19
opredeljuje, kako naj določene programske komponente interaktirajo med seboj - v praksi
so to knjižnice oziroma nabor knjižnic, ki specificira rutine, podatkovne tipe, razrede in
spremenljivke [35]) in je tako na voljo iz številnih programskih jezikov, npr. C++,C, C#,
Java (z ali brez XQuery API for Java), PHP, Python in Ruby.
Procesor poleg XQuery kot povpraševalnega jezika za XML podpira še povpraševalni
jezik JSONiq za JSON (JavaScript Object Notation – standard za izmenjavo berljivih
podatkov). XQuery in JSONiq si delita podobno semantiko, tako pri obeh veljajo izrazi
FLWOR, oba uporabljata jezik XPath za navigacijo, tudi tipi in operacije so pri obeh
jezikih enake. Tako si v procesorju Zorba oba jezika delita isti prevajalnik.
3.1.3 Apache VXQuery
Apache VXQuery je procesor XQuery, implementiran v programskem jeziku Java, ki je
trenutno še v fazi razvoja in se nahaja v Apachejevem Inkubatorju (angl. Apache
Incubator). Apache Incubator je vstopna točka v The Apache Software Foundation (ASF)
za vse projekte, ki želijo pridobiti podporo fundacije. Vsi zunanji projekti v fundacijo
vstopijo skozi ta inkubator [29]. Razvoj procesorja se osredotoča na izvrševanje
povpraševanj nad veliko količino podatkov XML, prav posebej na izvrševanje
povpraševanj nad velikimi zbirkami relativno majhnih dokumentov XML [2].
3.2 XQuery urejevalniki
Urejevalniki so celovita orodja, ki ponujajo pomoč pri pisanju programske kode jezika
XQuery v smislu barvnega označevanja programske kode, številčenja vrstic in
samodejnega zapiranja posameznih sklopov programske kode (angl. source folding),
pomoč pri vnašanju, vgrajene validatorje in vgrajene procesorje, ki omogočajo izvrševanje
kode jezika XQuery nad datotekami XML ali podatkovnimi bazami, ki omogočajo
povpraševanja v jeziku XQuery.
20
3.2.1 Altova XMLSpy
XMLSpy je priljubljeno in zelo razširjeno orodje avstrijskega podjetja Altova, ki omogoča
modeliranje, urejanje, transformiranje in odpravljanje napak v širokem spektru tehnologij
XML. Poleg podpore jezikom XSLT 2.0, XPath 2.0 in XQuery 1.0 omogoča tudi
integracijo v Microsoftov Visual Studio in javansko razvojno okolje Eclipse.
Licenca za XMLSpy 2013 je plačljiva, za preizkus delovanja in funkcionalnosti pa so na
voljo brezplačne 30-dnevne preizkusne različice. Za namen te naloge smo preizkusili
preizkusno različico cenejše izvedenke Professional Edition, ki vključuje večino
funkcionalnosti dražje izvedenke Enterprise Edition.
Kot drugi podobni urejevalniki tudi XMLSpy razvijalcu pomaga z barvnim označevanjem
programske kode, številčenjem vrstic in samodejnim zapiranjem posameznih sklopov
programske kode. Za sintaktično pravilnost kode med shranjevanjem skrbi validator, za
pravilno in hitrejšo pisanje kode pa je na voljo pomočnik, ki ponuja imena elementov
XML, že definiranih spremenljivk, funkcij (vključno s prikazom tipov in števila
argumentov). Močno orodje je tudi pomočnik za odpravljanje napak (angl. debugger), ki
po vzoru orodij za razvoj aplikacij v visokonivojskih jezikih omogoča vpogled v proceduro
kode po principu korak-za-korakom (angl. step-by-step debugging), ki predstavlja metodo
odpravljanja napak, pri kateri se izvaja le ena programska vrstica naenkrat, ali z uporabo
točke ustavljanja (angl. breakpoint), ki je točka v programski kodi, na kateri namenoma
ustavimo izvajanje za namene odpravljanja napak. Potek opazujemo v štirih oknih – v
prvem vidimo dokument s povpraševanjem XQuery z morebitnimi točkami ustavljanja, v
drugem lahko opazujemo vrednost spremenljivk, tretje okno nam prikazuje sklad klicev
(angl. call stack)2
2 Sklad, ki kaže na mesto, od koder je bila neka rutina poklicana in s tem zagotavlja informacijo, kam mora ta rutina predati izvajanje. Ta sklad se uporablja pri rekurzivnih klicih rutin ali v situaciji, ko rutina kliče drugo rutino.
. To tretje okno je možno prilagoditi, da prikazuje druge informacije,
zadnje, četrto okno, pa sproti izpisuje trenutni kontekst (rezultat) v obliki dokumenta
XML. To orodje je dodelano in nudi dober vpogled v proceduro – v primeru izvrševanja
povpraševanj XQuery razvijalec lahko celo vidi, do katerih delov dokumenta XML
procedura trenutno dostopa.
21
Slika 3.1 prikazuje vmesnik pomočnika za odpravljanje napak v urejevalniku Altova
XMLSpy 2013:
Slika 3.1: Altova XMLSpy orodje za odpravljanje napak ("debugger"). XMLSpy je standardno in kvalitetno orodje za delo s tehnologijami XML, ki se je v
različici 2013 znebilo številnih napak preteklih različic, čeprav bi se tudi na tem področju
dalo narediti še več (med preizkusom se je program sesul brez očitnega vzroka).
3.2.2 <oXygen/> XML
Urejevalnik <oXygen/> XML podjetja SyncRO Soft je na voljo v treh različicah, pri
katerih že ime namiguje, čemu je katera namenjena [20]:
• <oXygen/> XML Editor – celovito orodje za razvijanje aplikacij XML in
urejanje dokumentov XML,
• <oXygen/ > XML Developer – specializirano orodje za razvijalce XML,
• <oXygen/> XML Author – poenostavljena različica Editor, osredotočena na
urejanje dokumentov XML.
22
Vsaka od različic je na voljo v Professional in Enterprise verziji, različica Editor pa
prihaja tudi v različici Academic, namenjeni študentom in izobraževalnim ustanovam.
Preizkusili smo brezplačno 30-dnevno različico oXygen/> XML Editor Academic.
Poleg klasičnih funkcionalnosti, kot so barvno označevanje programske kode, številčenje
vrstic in samodejno zapiranje posameznih sklopov programske kode, je zelo uporabna
funkcionalnost okno, poimenovano Outline, ki v skrčenem in preglednem načinu prikazuje
dokument, ki ga urejamo, vključno z deklaracijami imenskih področij, spremenljivkami in
funkcijami. Za razliko od XMLSpy, kjer je večina funkcionalnosti dostopna prek številnih
tekstovnih menijev, se <oXygen/> XML ponaša z veliko bolj grafičnim vmesnikom, ki
sicer zahteva nekaj trenutkov privajanja, vendar pa razvijalcu ponuja veliko bolj intiutivno
izkušnjo ter omogoča veliko možnosti grafičnega urejanja dokumentov (npr. orodje Tree
editor, ki omogoča urejanje in izdelavo dokumentov XML prek zelo preglednega in
razumljivega grafičnega vmesnika). Validacija je z vsemi temi pripomočki sprotna in
trivialna. Pomočnik za odpravljanje napak, ki je tukaj neke vrste 'podprogram' in zahteva
zamenjavo uporabniškega pogleda, je morda šibkejša točka tega urejevalnika – omogoča
sicer točke ustavljanja in pristop korak-za-korakom, vendar je pri prikazu poteka procedure
manj natančen kot XMLSpy – ima pa na drugi strani določene uporabne funkcionalnosti,
ki jih XMLSpy ne omogoča. Naprimer s klikom vrstico v izhodnem dokumentu (ki ga je
generiralo povpraševanje XQuery) nam program prikaže vrstico v povpraševalni kodi, ki je
generirala izhodno vrstico. Na voljo je XQuery Profiler, ki je pri XMLSpy na voljo le v
Enterprise različici, ki omogoča razvijalcu, da identificira ozka grla in druge
problematične dele programske kode.
Naslednja Slika 3.2 prikazuje orodje Tree editor, Slika 3.3 pa prikazuje vmesnik orodja za
odpravljanje napak v urejevalniku <oXygen> XML Editor:
23
Slika 3.2: <oXygen/> XML Editor - orodje Tree editor.
Slika 3.3: <oXygen/> XML Editor - vmesnik pomočnika za odpravljanje napak.
<oXygen/> XML je doraslo orodje, ki s kvalitetnim grafičnim vmesnikom ponuja dobro
uporabniško izkušnjo. Med preizkusno uporabo nismo opazili nobenih napak v delovanju,
24
tako da je ta urejevalnik prav gotovo dober pripomoček za vsakega razvijalca XML in
XQuery.
3.2.3 Editix 2008
Odločili smo se poiskati brezplačen urejevalnik in preizkusili Editix 2008. Program je sicer
plačljiv v novejših različicah, nekaj let staro različico Editix 2008 z omejenimi določenimi
funkcionalnostmi pa je možno brezplačno prenesti z njihove spletne strani.
Razporejenost ukazne vrstice je zelo podobna kot pri XMLSpy, se pa takoj opazijo
nekatere manjkajoče funkcionalnosti – pri urejanju dokumentov XML ni številčenja vrstic,
ni možnosti samodejnega zapiranja posameznih sklopov programske kode, programska
koda pa je označena v tako neizrazitih barvah, da jih je med seboj težavno ločiti. Na spletni
strani proizvajalec navaja, da je v tej različici omogočeno urejanje povpraševanj XQuery,
vendar je ta možnost v programu zaklenjena, zato je ta program za naš kontekst
popolnoma neuporaben.
3.3 Podatkovne baze na osnovi XML in XQuery
Preden se lotimo opisovanja konkretnih implementacij podatkovnih baz na osnovi XML,
bomo najprej predstavili koncept podatkovni baz, osnovanih na XML.
Slika 3.4 prikazuje arhitekturo podatkovne baze, osnovane na XML:
Slika 3.4: Arhitektura podatkovne baze, osnovane na XML [12].
25
Stolpci, ki jih vidimo v Sliki 3.4, so virtualni, niso fizično shranjeni in jih nakazujejo le
glave stolpcev. Glavna tabela vsebuje številčne ključe do indeksov oznak, URI (angl.
Uniform resource identifier; zaporedje znakov, ki identificira abstraktni ali fizični vir [4])
naslovi imenskih področij in imen atributov. Besedila (vključno s procesnimi
inštrukcijami, komentarji, in URI naslovi vozlišč) in vrednosti atributov so shranjeni v
ločenih tabelah, ki so referencirane v glavni tabeli. Tabela Directory vsebuje kazalce na
prvi identifikator vozlišča v vsaki glavni tabeli. Več podatkov je shranjenih kot Meta Data,
kot naprimer ime podatkovne baze, velikost, datum zadnje spremembe, globina drevesa in
podobno. Drevo zagotavlja dostop do imenskih področij.
3.3.1 BaseX
BaseX je prostodostopna, odprtokodna in platformsko neodvisna rešitev, katere osrednja
funkcionalnost je čistokrvna podatkovna baza, osnovana na XML. Programu je že
priložena podatkovna baza, poimenovana factbook.xml, ki novemu uporabniku omogoča,
da se seznani s funkcionalnostmi programa. Obširnih funkcionalnosti program ne omogoča
– grafični vmesnik omogoča vklapljanje in izklapljanje posameznih oken, od katerih je
osrednje okno Editor, ki omogoča urejanje dokumentov XML ali vpisovanje povpraševanj
XQuery in jih izpisuje v okno Text z možnostjo izpisa v realnem času. Ostala okna so
posvečena pregledu podatkov v podatkovni bazi in pregledu rezultatov povpraševanj.
Podatkovno bazo lahko pregledujemo v dveh različnih drevesnih načinih, prvi je
poimenovan Folder, drugi pa Tree. Podatke v tabelirani obliki nam zagotavlja okno Table,
okno Plot pa omogoča številne različne grafirane prikaze podatkov podatkovne baze. Okno
Map uporabniku ponuja tabelarni pogled, ki sledi arhitekturi podatkovne baze.
Uporabniške akcije v enem oknu (tudi hover3
3 Mouse hover je premik kazalca miške nad določenim delom uporabniškega vmesnika.
prek določenega podatka) sprožijo akcije
tudi v drugih oknih in sproti prikazujejo ustrezne podatke. Statistične in performančne
podatke o povpraševanju XQuery nam izpisuje okno Query info. Zanimivo pri tem
programu je, da ima poleg možnosti iskanja s pomočjo povpraševanj XQuery na voljo tudi
svoj lasten iskalnik za manj vešče uporabnike.
26
Naslednja Slika 3.5 prikazuje grafični vmesnik podatkovne baze BaseX in razlaga
posamezne elemente grafičnega vmesnika:
Slika 3.5: Grafični vmesnik BaseX. V zgornji vrstici oken so od leve proti desni aktivirana okna:
Editor, Folder, Map in Plot. V spodnji vrstici oken so od leve proti desni aktivirana okna: Text,
Query info, Table in Tree.
Na spletni strani http://docs.basex.org/wiki/Main_Page je na voljo zelo razumljiv Wiki
dokument in uporabnik lahko hitro ugotovi, da gre za preprost in precej neposreden
program brez zapletenih funkcionalnosti in obsežnega vmesnika.
3.3.2 eXist-db 2.0
eXist-db je odprtokodna rešitev podatkovne baze, osnovane na jeziku XML, napisana v
Javi, ki je v paketu brez uporabniške podpore brezplačno snemljiva s spletne strani.
Grafični vmesnik aplikacije uporabljamo prek spletnega brskalnika prek lokalnega ali
oddaljenega strežnika. Osrednja točka grafičnega vmesnika je nadzorna plošča, ki
27
omogoča izvajanje različnih nalog, kot so nalaganje podatkov v podatkovno bazo in
upravljanje uporabniških računov, vključuje pa tudi aplikacijo eXide za povpraševanje po
podatkih v bazi in ustvarjanje lastnih aplikacij XQuery [9].
eXist-db ni le podatkovna baza, saj omogoča razvoj modularnih aplikacij, ki so enostavno
prenosljive na katerokoli podatkovno bazo, ki uporablja enako standardizacijo formata
modularnih paketov [8].
Gre za ambiciozno orodje, ki z možnostjo modularnega dopolnjevanja ali izvažanja lastno
kreiranih modulov in z upravljanjem prek strežnika nudi napredno izkušnjo. Vmesnik je
uporabniku prijazen, tudi navodila za uporabo so dovolj razumljiva tudi za popolnoma
novega uporabnika, se pa občasno pojavljajo manjše napake, ki pa so bolj v obliki
nejasnega delovanja vmesnika, kot pa kakšnih kritičnih napak. Kot smo že v prejšnjem
odstavku navedli, ne gre samo za podatkovno bazo, saj aplikacija nudi številne primere
uporabe, na katerih se lahko učimo upravljati podatkovno bazo in uporabljati jezik
XQuery, na spletni strani http://exist-db.org/exist/apps/doc/learning-xquery.xml pa celo
navajajo, da aplikacija eXide omogoča tudi razvojno obliko korak za korakom pomoči pri
odpravljanju napak, vendar te funkcionalnosti med preizkusom ni bilo mogoče aktivirati.
28
4 UPORABA PROCESORJA XQUERY SAXON
V tem poglavju bomo predstavili eno trenutno najbolj aktualnih orodji za delo z jezikom
XQuery v visokonivojskih jezikih Java in jezikih okolja .NET, to je procesor Saxon
podjetja Saxonica, namenjen procesiranju jezikov XQuery, XSLT in XPath. Saxon je v
letih svojega obstoja pridobil status hitrega in zanesljivega orodja, ki v veliki meri spoštuje
W3C specifikacije jezikov.
4.1 Osnovne funkcije procesorja XQuery
Procesorji XQuery so sistemi za efektivno pridobivanje in hranjenje podatkov XML,
pridobljenih z jezikom XQuery. Tipičen procesor XQuery vsebuje:
• Podatkovni model.
• Povpraševalni model, ki definira, kako se povpraševanja procesirajo.
• Optimizacijski modul, ki vsebujejo različne algoritme in indeksacijske
tehnike za izboljšanje zmogljivosti procesiranja povpraševanj [11].
XQuery je v osnovi predstavljen kot preprost niz znakov, zato so potrebne tehnike
prevajanja, da tak niz prevedemo v izvršljivo kodo. Pri procesiranju povpraševanj sta
bistveni dve fazi:
• Statična analiza, ki se lahko nadalje razdeli v:
o analiza,
o prevajanje.
• Dinamična evalvacija, ki se lahko nadalje razdeli v:
o evalvacija,
o serializacija [12].
29
4.1.1 Analiza
Preden se povpraševanje lahko izvrši, mora biti vhodni niz interpretiran in trasformiran v
izvršljivo podatkovno obliko. Pri tem se uporablja leksikalna analiza, ki kot rezultat
generira leksikalne simbole [38]. V naslednjem koraku se skozi sintaktično analizo s
pomočjo gramatike generira drevo izrazov. XQuery in vsa ostala W3C priporočila
temeljijo na EBNF notaciji (angl. Extended Bacus-Naur form; metajezik za opisovanje
drugih jezikov [38]) in so lahko razpoznana z LL(1) razpoznavalnikom4
Razpoznavalnik izvede sledeče korake:
.
1. Ustvarjanje statičnega konteksta – vsebuje globalne informacije o
povpraševanju, kot recimo imenska področja, spremenljivke, funkcije ali statični
dokumenti.
2. Vhod je analiziran in pretvorjen v izraze, ki skupaj tvorijo drevo izrazov.
3. Sprožijo se razpoznavalne napake, če vhod ne ustreza LL(1) gramatiki ali
dodatnim gramatičnim omejitvam.
4. Ker lahko funkcija kliče drugo funkcijo, ki še ni bila definirana v povpraševanju,
se vse funkcije verificirajo po razpoznavanju celotnega povpraševanja.
4.1.2 Prevajanje
V XQuery 1.0 je definirana formalna semantika, vendar se zaradi komplesnosti jezika ta v
specifikaciji XQuery 3.0 opušča. Vse implementacije lahko izberejo svoje korake
prevajanja, v kolikor rezultati povpraševanja izpolnjujejo zahteve specifikacije.
Prevajanje vsebuje korake, ki poenostavljajo in optimizirajo drevo izrazov:
• Statične operacije so pred-ocenjene.
• Izrazi se prepišejo, če so njihovi argumenti vedno true ali false.
• Izrazi FLWOR in definicije poti se poenostavijo.
• Predikati se prepišejo za dostop do prostih struktur indeksacije.
4 LL(1) razpoznavalnik (angl. parser) je top-down razpoznavalnik, ki razpoznava vhod iz leve proti desni.
30
• Neznane oznake ali atributi se odstranijo.
• Preverjanje statičnih tipov se izvede še preden je povpraševanje evalvirano.
4.1.3 Evalvacija
V koraku evalvacije se izračuna zaporedje rezultatov izraza. Za preprosta statična
povpraševanja se vsi potrebni računski koraki izračunajo pri prejšnjem koraku
optimizacije, vsa ostala kompleksnejša dinamična povpraševanja pa se izračunajo v tem
koraku.
4.1.4 Serializacija
Ko se izraz izračuna, je potreben še korak serializacije, ki rezultat transformira v breljiv
format. Ta proces je prav tako formaliziran v priporočilu W3C za specifikacijo XQuery
1.0, čeprav ta del ni obvezen za implementacijo XQuery. V takšnih primerih procesor
preda rezultat v objektni obliki, naprimer v izvajanje javanskemu navideznemu stroju
(angl. Java Virtual Machine).
.
4.2 Procesor Saxon
Saxon je implementacija procesorja XQuery, napisana v Javi. Podpira XQuery po
specifikaciji 1.0, aktualna različica Saxon 9.5 pa celo podpira XQuery po kandidatu za
priporočilo 3.0 [13] [25].
Saxon prav tako vsebuje implementacijo XSLT 2.0, XPath 2.0 in XML Schema 1.0 (verziji
PE in EE). Saxon je bil prvotno zamišljen kot procesor XSLT, kasneje pa so ga prilagodili
tako, da nudi podporo tudi XQuery. Implementacija je zasnovana tako, da se dve
sintaktično različni kodi (XSLT in XQuery) skozi prevajanje pretovorita v uniformirano
objektno kodo in na enoten navidezni stroj (angl. runtime engine). Tako iz objektne kode
niti ni možno razbrati, ali je bila prevedena iz enega ali drugega jezika.
31
Trenutno aktualna različica je 9.5, ta pa obstaja še v štirih različnih izvedenkah [27]:
• Saxon-HE (Home Edition) – odprtokodna rešitev, ki zagotavlja podporo jezikom
XSLT 2.0, XQuery 1.0 in XPath 2.0. Zagotavlja osnovno izpolnjevanje z W3C
priporočili, razen podpore shemam. Ta različica ne podpira XQuery 3.0. Rešitev je
brezplačna in jo je možno prenesti s spleta.
• Saxon-PE (Professional Edition) – komercialna rešitev s podporo razširitvam
vključuje tudi delno podporo za XQuery 3.0, XPath 3.0 in dokumentne objektne
modele, kot so JDOM, XOM in DOM4J.
• Saxon-EE (Enterprise Edition) – polno-funkcionalna komercialna rešitev s polno
podporo za XQuery 3.0 in XPath 3.0 ter delno podporo za XSLT 3.0. Ta različica
podpira tudi sheme XML; vsebuje procesor XSD 1.0 in XSD 1.1 in omogoča
shemsko procesiranje jezikov XSLT in XQuery.
• Saxon-CE 1.1 (Client Edition) – je klient različica, ki ponuja izvajanje jezika XSLT
2.0 v brskalniku. Izvedenka bazira na izvorni kodi različice 9.3 in je prevedena v
jezik JavaScript.
Rešitev je v celoti napisana v Javi. Verzija za .NET je narejena s prevajanjem javanske
bajtne kode v Microsoftovo CIL (CIL je nizkonivojski berljiv jezik, ki ga uporablja
ogrodje .NET Framework). V svoji rešitvi smo uporabili različico, namenjeno ogrodju
.NET.
Glavne komponente orodja Saxon so [25]:
• Procesor XSLT 2.0; uporablja se ga prek ukazne vrstice ali iz aplikacije s pomočjo
vmesnika API.
• Procesor XPath 2.0; uporablja se ga iz aplikacije s pomočjo vmesnika API.
• Procesor XQuery 1.0; uporablja se ga lahko prek ukazne vrstice ali iz aplikacije s
pomočjo vmesnika API.
• Procesor XML Schema 1.0; lahko se ga uporablja za validacijo pravilnosti shem ali
pa za validacijo dokumenta glede na definicije v shemi. Uporablja se ga lahko tudi
v navezi s procesorjema XSLT in XQuery. Prav tako se ga lahko uporablja prek
ukazne vrstice ali iz aplikacije.
32
• Za jezik Java je na voljo več vmesnikov API. Na voljo so JAXP, XQJ in s9api.
• Za okolje .NET je na voljo vmesnik API, ki omogoča tesno integracijo z ostalimi
storitvami v .NET, posebej z razredi v imenskem področju System.Xml.
Prednosti orodja Saxon pred podobnimi produkti so [13]:
• strogo sledenje priporočilom W3C– po navedbah virov [12] in [26] je Saxon v
celoti skladen s priporočilom W3C za XQuery 1.0,
• zanesljivost,
• uporabnost,
• zmogljivost.
4.3 Uporaba procesorja XQuery Saxon v .NET
Vsi razredi za uporabo procesorja Saxon v .NET se nahajajo v imenskem področju
Saxon.Api, ki se nahaja v knjižnici saxonapi.dll.
Prva stvar, ki jo moramo v aplikaciji narediti, je, da ustvarimo primerek razreda Processor.
Ta vsebuje konfiguracijske podatke o procesorju Saxon ter nekatere deljene vire. Po želji
lahko ustvarimo več primerkov. Nad primerkom razreda Processor nato kličemo metodo
NewXQueryCompiler, ki ustvari primerek razreda XQueryCompiler. Temu objektu lahko
nato nastavljamo določene lastnosti, ki določajo statični kontekst evalvacije. Nato kličemo
metodo Compile, ki kot argument prejme povpraševanje v obliki stringa ali v obliki
streama ter vrača primerek razreda XQueryExecutable.
Objekt razreda XQueryExecutable predstavlja prevedeno povpraševanje. Evalvacija
povpraševanja se lahko izvede večkrat, bodisi v isti niti bodisi v različnih. Pri evalvaciji se
nad objektom kliče metoda Load. Ta kot rezultat ustvari objekt razreda XQueryEvaluator.
Temu lahko nastavimo določene lastnosti, s čimer vzpostavimo dinamični kontekst
evalvacije. Za dokončanje evalvacije nato kličemo metodo Run, če kot rezultat želimo
novo ustvarjen dokument XML, oziroma Evaluate ali EvaluateSingle, če kot rezultat
želimo zaporedje.
33
Vmesnik API vsebuje razrede, ki so osnovani na podlagi podatkovnega modela XDM.
Podatkovni razredi, ki jih uporablja Saxon, so:
• XdmValue – zaporedje bodisi vozlišč bodisi atomarnih vrednosti. XdmValue lahko
nastopa kot parameter povpraševanja ali kot rezultat evalvacije povpraševanja.
• XdmItem – je podtip (deduje od) XdmValue, pri katerem je vsak primerek
zaporedje dolžine 1. Nad objektom razreda XdmValue se lahko kliče metoda
GetEnumeration, ki omogoča iteracijo čez elemente zaporedja.
• XdmNode – vozlišče XDM. Omogoča dostop do večine lastnosti, ki so določena za
vozlišča v XDM.
• XdmAtomicValue – atomarna vrednost XDM. Lahko se ustvari direktno s pomočjo
integer, string, double itd. objektov ali pa se ustvari prek leksografsko določenega
stringa s pripadajočo definicijo tipa QName [24].
34
5 OPIS STORITVE ISKALNIK AMISTV 1.5
5.1 Storitev AmisTV 1.5
Leta 2007 je Amis od Telekoma Slovenije odkupil njihovo rešitev IP televizije in jo začel
tržiti kot storitev Amis Televizija. Leta 2009 so se v podjetju odločili, da bodo ponudili
sodobnejšo rešitev, ki bo omogočala nekatere dodatne funkcionalnosti, kot so opomniki,
iskalnik, videoteka, snemalnik, napredne časovne storitve (funkciji Na začetek in Pavza)
idr. Storitev so na tržišče poslali jeseni 2009 in jo poimenovali AmisTV 2.0. Za uporabo
teh storitev uporabnik potrebuje Albisovo STB enoto (angl. Set-top box, tudi receiver;
naprava, ki omogoča sprejemanje in dekodiranje digitalnega televizijskega signala [23]) za
sprejem TV signala, uporaba na Sagemovih STB enotah, na katerih teče starejša storitev
Amis Televizija, pa ni mogoča. Ker je imel Amis veliko uporabnikov, ki so že bili
opremeljeni s Sagemovimi STB enotami, sodobnih funkcionalnosti pa bodisi niso
potrebovali bodisi zaradi tehničnih razlogov pri njih niso bile na voljo, so se odločili za
Sagemove STB enote razviti storitev AmisTV 1.5. To naj bi bila v bistvu tehnološka
evolucija Amis Televizije, ki bi ohranjala osnovno jedro nespremenjeno, a z enakim
videzom in uporabniško izkušnjo kot AmisTV 2.0. Postopoma pa bi se naj uvajale tudi
funkcionalnosti, ki so implementirane v AmisTV 2.0. Za uporabnike Sagemovih STB enot
bi se nadgradnja iz Amis Televizije na AmisTV 1.5 izvedla oddaljeno ob naslednjem
zagonu STB enote.
AmisTV 1.5 je prilagojen za delovanje na v Sagemovo STB enoto vgrajen spletni
brskalnik ANT Fresco, ta pa ima precej omejene specifikacije. Brskalnik ANT Fresco je
posebej razvit za digitalne televizije, elektronske naprave za domačo rabo, kot npr. set-top
boxi, integrirane televizije, DVD predvajalniki ipd. [1].Tako je odjemalčeva stran razvita v
programskih jezikih HTML 4.01, CSS 1.0 ter JavaScript 1.3, strežniška stran pa v
programskem jeziku C#. Podatki se shranjujejo v Microsoftovo podatkovno bazo MSSQL.
V času zaključka razvoja iskalnika po podatkih EPG so bile funkcionalnosti AmisTV 1.5
videti tako, kot jih prikazuje sledeči diagram primerov uporabe Diagram 5.1:
35
Diagram 5.1: Diagram primerov uporabe za AmisTV 1.5.
5.2 Iskalnik AmisTV 1.5 v splošnem
Vpogled v programsko kodo rešitve AmisTV 2.0 ni bil mogoč, saj se je ta razvijal zunaj
podjetja in z uporabo popolnoma drugačnih pristopov (kot samostoječa aplikacija) kot
AmisTV 1.5 (kot aplikacija, ki teče v brskalniku z odjemalec-strežnik arhitekturo).
Iskalnik uporabniku omogoča, da prek uporabniškega vmesnika s pomočjo numeričnih tipk
na daljinskem upravljalcu ali prek smernih tipk ter virtualne tipkovnice brska po podatkih
EPG. Možen je vnos iskalnega niza ter dvonivojska izbira žanra (žanr – podžanr).
Specifikacije za razvoj iskalnika AmisTV 1.5 se je pridobivalo s podrobnim opazovanjem
delovanja iskalnika v rešitvi AmisTV 2.0.
Slika 5.1 in Slika 5.2, narejeni na grafičnem vmesniku iskalnika AmisTV 1.5:
36
Slika 5.1: Prikaz vnosa iskanja v storitvi iskalnika AmisTV 1.5 - na levi strani lahko z virtualno
tipkovnico ali s črkami na daljinskem upravljalcu vnašamo iskalni niz, v sredinskem stolpcu pa
lahko rezultate omejimo z izbiro žanra ali podžanra.
Slika 5.2: Iskalnik AmisTV 1.5 nam rezultat prikaže v obliki večstranskega seznama zadetkov.
37
Izbira (potrditev s tipko 'OK') vrstice rezultatov uporabniku omogoči vpogled v
podrobnosti najdene vsebine – naslov, čas predvajanja, žanr in podžanr ter opis. Uporabnik
ima na izbiro vračanje na seznam rezultatov ali odpiranje izbrane oddaje oziroma
dodajanje med opomnike, če se oddaja še ni pričela.
5.3 Iskalnik AmisTV 1.5 podrobneje
Amisov strežnik prejme podatke EPG s strani ponudnika v obliki stisnjene datoteke, v
kateri se nahajajo datoteke XML za vsak posamezni televizijski kanal. Vsaka datoteka
XML vsebuje podrobne podatke o vseh oddajah posebej za približno teden dni naprej:
• čas začetka,
• naslov oddaje,
• opcijski izvorni naslov oddaje (v izvornem jeziku),
• povzetek (opis),
• ključne besede,
• žanr,
• opcijske avdio-video atribute.
<ProgramInformation programId="crid://AMIS_EPG/1/00051/057/002912755@2009-09-28T22:00:00Z"> <BasicDescription>
<Title xml:lang="sl" type="main">Mladi veterinarji</Title> <Synopsis xml:lang="sl" length="long">Resničnostna dokumentarna serija vas popelje v svet mladih veterinarjev veterinarske bolnišnice Alamenda East v Denverju, kjer se le-ti srečujejo s težavami različnih živalskih vrst.</Synopsis> <Keyword type="secondary">dokumentarna serija</Keyword> <Genre href="urn:tva:metadata:cs:DVBgenre:2005:C:2:0:0" />
</BasicDescription> <AVAttributes> <AudioAttributes /> <VideoAttributes /> </AVAttributes> </ProgramInformation>
Vsako noč se zažene modul, imenovan EpgParser, ki iz strežnika FTP (angl. file transfer
protocol) sname stisnjeno datoteko, jo shrani na svoj strežniški prostor in to datoteko
razpakira. Iz relacijske podatkovne baze SQL pobriše obstoječe vnose, nato pa se začne
38
parsanje podatkov v dokumentih XML in njihovo shranjevanje v relacijsko podatkovno
bazo MSSQL. Na tak način se v času najmanjše obremenitve v bazo naložijo najnovejši
podatki EPG.
Diagram 5.1 prikazuje entitetno-relacijski diagram podatkovne baze AmisTV 1.5:
Diagram 5.2: Entitetno-relacijski diagram podatkovne baze na AmisTV 1.5.
Ti v podatkovno bazo shranjeni podatki se nato uporabljajo za različne funkcionalnosti,
med drugim tudi za iskalnik.
Potrebno je izpostaviti, da se v tej nalogi posvečamo le enemu primeru uporabe sistema
AmisTV 1.5, in sicer iskalniku, prikazanem na Diagramu 5.3. Celotni sistem vsebuje
številne primere uporabe, ki pa za to nalogo niso pomembni.
39
Diagram 5.3: Diagram primerov uporabe za produkcijsko rešitev z uporabo relacijske podatkovne
baze SQL. Za iskanje po podatkih EPG je najprej potrebno parsanje.
Naslednji Diagram 5.4 prikazuje, kako potekajo aktivnosti pri parsanju dokumentov XML
in njihovo prepisovanje v podatkovno bazo na produkcijski različici z uporabo relacijske
podatkovne baze.
Diagram 5.4: Diagram aktivnosti pri parsanju dokumentov XML na produkcijski različici.
40
Pri razvoju parserja dokumentov XML je bila pomembna lastnost odpornost parserja na
napake in nekonsistentnosti v dokumentih XML. Dokumenti, ki jih je Amisu zagotavljal
ponudnik, so namreč pogosto vsebovali nesmiselne podatke, kot naprimer dve televizijski
oddaji, ki na istem programu tečeta ob istem času, ali pa televizijski čas, kjer v dokumentu
ni bilo navedene nobene oddaje ipd. V naslednjem poglavju je predstavljena rešitev, ki
korak parsanja podatkov v dokumentih XML in shranjevanja v podatkovno bazo izpusti in
prek povpraševanj XQuery dostopa neposredno do dokumentov XML.
Iskalnik po podatkih EPG na produkcijski različici je napisan kot spletna storitev z dvema
javnima spletnima metodama ter tremi zaščitenimi metodami:
• Public string getResult (string input, string category) – glavna rutina, ki izvede
povpraševanja v podatkovni bazi SQL, sestavi rezultat v ustrezni format, ki ga
zna prikazati odjemalec na uporabnikovi STB enoti in ga v tipu string vrne
klientu.
• Public string getCategoryName (string category) – pomožna metoda, ki služi
preprečevanju izgube podatkov o izbranem žanru med tem, ko uporabnik
preskakuje med meniji.
• Protected int vrniKategorijo (string input) – kot argument metoda prejme ime
žanra tipa string, ki jo je uporabnik izbral prek uporabniškega vmesnika, vrača
pa indeks številko te kategorije v podatkovni bazi.
• Protected string vrniKategorijo (int input) – zaradi različnih uporabniških
situacij (primerov uporabe) ima ta metoda obrnjeno funkcionalnost kot prejšnja.
Kot argument prejme indeks številko kategorije v podatkovni bazi, vrača pa ime
žanra tipa string.
• Protected string vrniParentKategorijo (int kategorija) – posamezna oddaja ima v
podatkovni bazi tuj ključ, ki določa podžanr. Iz podžanra je za pravilen prikaz v
uporabniškem vmesniku potrebno ugotoviti tudi žanr, kar stori ta metoda.
Sledeči diagram aktivnosti, Diagram 5.5, pa prikazuje delovanje produkcijske različice
iskalnika z uporabo relacijske podatkovne baze SQL:
41
Diagram 5.5: Poenostavljen prikaz delovanja iskalnika po podatkih EPG na produkcijski različici.
42
6 ISKALNIK AMISTV 1.5 Z UPORABO XQUERY
Glede na v prejšnjem poglavju opisano delovanje iskalnika na produkcijski različici z
uporabo relacijske podatkovne baze SQL se je porodila nekako logična ideja poskusa
branja podatkov EPG neposredno iz dokumentov XML, ki so na strežniku. S tem se vsaj
na primeru uporabe iskalnika izpusti potreba po zapisovanju podatkov v relacijske tabele, s
čimer bi v primeru, da bi vse storitve, ki jih ponuja AmisTV 1.5, prilagodili na uporabo
jezika XQuery, tudi znižali stroške delovanja digitalne televizije, saj bi nakup in
vzdrževanje relacijske podatkovne baze postala odvečna.
Diagram 6.1 prikazuje, kako smo se v različici iskalnika z uporabo XQuery izognili
parsanju dokumentov XML, ki je potrebno v različici rešitve, ki temelji na relacijski
podatkovni bazi SQL.
Diagram 6.1: Izpuščena je potreba po parsanju in zapisovanju podatkov v relacijske tabele.
Prva težava, ki jo lahko opazimo, je neprimerna struktura dokumentov XML.
Najpomembnejši podatki za delovanje uporabniškega vmesnika iskalnika so:
• ime programa,
• naslov oddaje,
• čas začetka oddaje,
• čas konca oddaje,
• opis (sinopsis) oddaje.
Manj bistveni, a v uporabniškem vmesniku potrebni podatki pa so še:
• žanr,
• podžanr,
• številka televizijskega programa.
43
Dokument XML ne vsebuje imena programa, ampak je vsebovan v imenu datoteke
dokumenta skupaj z (za uporabniški vmesnik) nekoristnimi podatki o času izdelave
dokumenta. Torej je potrebno ime programa pridobiti iz imena datoteke. Naslov oddaje in
sinopsis sta uporabno shranjena v vrednosti elementov, zaplete pa se pri času začetka
oddaje. Začetek oddaje se namreč skriva v referenci CRID (angl. content reference
identificator; je shema, ki omogoča referenciranje trenutnih ali prihajajočih televizijskih ali
spletnih medijskih vsebin [7]), ki nima podpore za delo v .NET in tako je bilo potrebno čas
začetka oddaje pridobiti iz te reference. Ta referenca je videti tako:
"crid://AMIS_EPG/1/00051/047/002928339@2009-09-28T22:50:00Z"
Za znakom'@' se nahaja najprej datum oddaje, nato še ura začetka. Še večja težava pa
nastane s časom konca oddaje. Ta namreč ni eksplicitno naveden v dokumentu XML - v
produkcijski različici se v fazi parsanja in zapisovanja v relacijske tabele dejansko kot čas
konca oddaje privzame začetek naslednje oddaje na istem televizijskem programu. Vendar
je za pridobitev tega podatka potreben prehod čez vse podatke, kar stori parser, v naši
rešitvi pa bi bilo to nesprejemljivo zamudno.
Ker se podatki o žanrih in podžanrih ter zaporedje televizijskih programov načeloma ne
spreminjajo, smo jih statično shranil v dokumenta programs.xml in genres.xml. Ker iz
imena datoteke XML s podatki EPG pridobimo ime programa, lahko nato z dodatnim
povpraševanjem nad datoteko programs.xml pridobimo še številko tega televizijskega
programa. Žanr in podžanr se v dokumentih XML nahajata v nepoznanem formatu:
"urn:tva:metadata:cs:DVBgenre:2005:2:0:0:0"
Težavo smo rešili podobno, kot je bila rešena na produkcijski različici, namreč z
obrezovanjem niza. Številska vrednost, ki sledi znaku '2005:', določa žanr, naslednja
številska vrednost pa podžanr. Na Amisu je obstajala Excel razpredelnica s številkami teh
žanrov, referenciranimi na imena žanrov. Podatki iz te razpredelnice so za to rešitev
prenešeni v dokument genres.xml.
Iz Diagrama 6.2 je razvidno, kako smo se lotili delovanja iskalnika z uporabo XQuery.
44
Diagram 6.2: Diagram sodelovanja za rešitev iskalnika EPG z uporabo XQuery.
Najprej se izvede aktivnost, ki gre čez celoten dokument XML, nato pa se izvedejo
primerjanja ustreznosti časovne značke (ali je oddaja že pretečena ali je še vedno aktualna)
in ustreznosti kategorije. Ta procedura se iterativno ponavlja za vsako datoteko XML. Ali
je ta način z vidika zmogljivosti najbolj ustrezen, bomo skušali ugotoviti v poglavju osem,
kjer se bomo posvetili izboljšavam. Kot je razvidno iz diagrama, se rezultati, ki so prestali
kriterije iskanja, shranjujejo v strukturo XDM, poimenovano rezultat. Ker se ta struktura
45
polni iterativno za vsak televizijski program, je takoj jasno, da bi bila pri takšni rešitvi
potrebna majhna predelava uporabniškega vmesnika. Pri produkcijski različici je namreč
kriterij razporejanja rezultatov čas začetka oddaje, pri različici z uporabo XQuery pa
primarno televizijski program in šele nato čas začetka oddaje.
Podobno kot pri produkcijski različici je tudi različica z uporabo XQuery spletna storitev,
zamišljena kot storitev, ki na enostaven način nadomesti različico z uporabo relacijske
podatkovne baze SQL. Storitev ima štiri globalno deklarirane objekte, štiri javne metode in
eno zaščiteno metodo.
Objekti:
• Processor procesor,
• XQueryCompiler xCompiler,
• XQueryExecutable xExe,
• XQueryEvaluator xEval.
Metode:
• Public string getResult (string input, string kategorija) – glavna rutina, ki izvaja
povpraševanja XQuery, klice drugih metod, ob koncu pa rezultat sestavi v
format, ki ustreza formatu, ki ga vrača produkcijska različica in ki ga razume
odjemalec. Osrednja funkcionalnost te metode je povpraševanje XQuery, ki je
videti tako:
"for $x in doc('" + trenutna_datoteka + "')/ExtendedTVAMain/ProgramDescription/ProgramInformationTable/ProgramInformation/BasicDescription where contains(string($x), '" + iskalni_niz + "') or contains(string($x), '" + iskalni_niz_z_veliko_zacetnico + "') return <result program='" + ime_televizijskega_programa + "' order='" + številka_televizijskega_programa + "'>
<start>{$x/../@programId}</start> <title>{data($x/Title)}</title> <synopsis>{data($x/Synopsis)}</synopsis> <genre>{data($x/Genre/@href)}</genre>
</result>";
• Protected int isProgramskaShema (string ime_programa) – ni nujno, da vsi
dokumenti XML, ki jih imamo na strežniku, spadajo tudi v televizijsko
46
programsko shemo. Teh dokumentov je več, zato je potrebno preveriti, ali
dokument sploh spada v programsko shemo. Metoda s pomočjo povpraševanja
XQuery pogleda v dokument programs.xml, kjer je zabeležena programska
shema – če najde zadetek, vrne številko televizijskega programa, če zadetka ni,
vrne -1:
"for $x in doc('" + programska_shema + "')/programs/program where $x/label = '" + ime_programa + "' return data($x/order_epg)";
• Public string vrniParentKategorijo (string kategorija) – metoda s
povpraševanjem XQuery pogleda v dokument genres.xml, kjer je shranjena
struktura žanrov, in za podžanr v argumentu vrne ime žanra:
"for $x in doc('" + seznam_žanrov + "')/genres/parent where $x/@id = '" + argument + "' return $x/@name";
• Public string vrniChildKategorijo (string parent_kategorija, string
child_kategorija) – kot argument metoda prejme številčne identifikatorje žanra
in podžanra v obliki niza. Povpraševanje XQuery iz dokumenta genres.xml
pridobi ime podžanra v obliki niza:
"for $x in doc('" + seznam_žanrov + "')/genres/parent/child where $x/../@id = '" + argument + "' and $x/@id = '" + child_kategorija + "' return $x";
• Public bool checkTimestamp (string time_extract) – časovno značko oddaje
primerja s trenutnim časom.
47
7 TESTIRANJE ZMOGLJIVOSTI
»Zmogljivostno testiranje je proces določanja hitrosti ali učinkovitosti računalnika,
omrežja ali programske opreme.« [14].
Zmogljivostne teste lahko razdelimo na sledeče tipe:
• test zmogljivosti (angl. performance test),
• test obremenitve (angl. load test),
• stres test (angl. stress test),
• test kapacitete (angl. capacity test) [14].
Za namene te naloge smo obe različici iskalnika, torej produkcijsko različico z uporabo
relacijske podatkovne baze SQL in različico z uporabo XQuery, podvrgli testom
obremenitve. Za izvajanje teh testov smo uporabili namizni računalnik.
7.1 Testiranje obremenitve
V tem podpoglavju bomo definirali termin test obremenitve. »Test obremenitve je proces
izpostavljanja računalnika, periferne naprave, strežnika, omrežja ali aplikacije na nivo, ki
se približuje zgornji specificirani meji predvidene obremenitve. Testiranje obremenitve je
lahko izvedeno v kontroliranih laboratorijskih razmerah za statistično primerjavo
zmožnosti različnih sistemov ali za natančno merjenje zmožnosti posameznega sistema.
Testiranje obremenitve pa se lahko izvaja tudi terensko za namen pridobivanja
kvalitativnih predstav, kako sistem deluje v praksi.
Praktični primeri preprostih testov obremenitve so:
• nalaganje serije večjih datotek s spleta,
• hkratno poganjanje več aplikacij na računalniku ali strežniku,
• dodajanje več nalog tiskalniku,
• obremenitev strežnika z veliko količino e-mail prometa,
48
• neprestano zapisovanje in branje s trdega diska.« [22].
V našem primeru je test obremenitve v obliki večjega števila zahtev po podatkih EPG, kar
je opisano v naslednjem podpoglavju.
7.2 Testno okolje
Kot strežnik za testiranje smo uporabili namizni računalnik:
• procesor: Intel Core 2 Duo E8200 2,66 GHz, jedri tečeta na 2,90GHz,
• pomnilnik: 4x 1GB DDR2-800 v dual channel načinu, teče na 181 MHz,
• trdi disk: 500 GB, 7200 obratov/min, 32 MB medpomnilnika,
• operacijski sistem: Microsoft Windows 7 SP1.
Testni kontekst smo ustvarili s pomočjo orodja Visual Studio 2012 Ultimate. Zagnali smo
dve instanci; v prvi smo zaganjali spletno storitev v načinu release, ki storitev požene
lokalno na strežniku Microsoft IIS, v drugi instanci pa smo izvajali teste. Prevajalnik pri
prevajanju v release načinu ne producira simboličnih debugging informacij. Velikost
izvršljive datoteke je tako manjša, izvajanje pa posledično hitrejše [19].
V vseh testih, ki jih bomo opisali v naslednjem poglavju, smo spletni storitvi izpostavili
enaki obremenitvi. Ta obremenitev ustreza skrajnemu scenariju množice 100 uporabnikov,
ki vsi pošiljajo zahteve storitvi:
• 2 začetna uporabnika,
• vsakih 15 sekund se število uporabnikov poveča za 5,
• vsak uporabnik potrebuje 6 sekund za 'razmislek', to je čas, preden sproži
naslednjo zahtevo,
• maksimalno število uporabnikov je 100,
• test se izvaja 10 minut.
49
Določili smo tri različne scenarije:
Tabela 7.1: Scenarij 1. Ime parametra Vrednost parametra input »dexter« category »«
Tabela 7.2: Scenarij 2.
Ime parametra Vrednost parametra input »« category »komedija«
Tabela 7.3: Scenarij 3.
Ime parametra Vrednost parametra input »uničevalca mitov« category »dokumentarna serija«
7.3 Testiranje
7.3.1 Test 1 – scenarij 1 nad različico z uporabo relacijske podatkovne baze SQL
Tabela 7.4 in Graf 7.1 prikazujeta rezultate Testa 1:
Tabela 7.4: Rezultati Test 1.
Število izvedenih testov 3766 Povprečje odgovorov/sekunda 6,28 Povprečen čas za odgovor 5,86 s Minimalni čas odgovora 0,21 s Maksimalni čas odgovora 8,63 s
50
Graf 7.1: Časi odgovorov za Test 1.
Iz rezultatov je razvidno, da storitev, ki uporablja relacijsko podatkovno bazo SQL, ob
majhnem številu uporabnikov še uspe zagotavljati odgovore v realnem času, z večanjem
števila uporabnikov pa se čas odgovora začne daljšati v linearno.
Upoštevati je treba, da testno okolje ni namenjeno opravljanju strežniških nalog. Ob
podobnih scenarijih je Amisov strežnik odgovarjal z maksimalnimi časi 0,60 s.
7.3.2 Test 2 – scenarij 2 nad različico z uporabo relacijske podatkovne baze SQL
Tabela 7.5 in Graf 7.2 prikazujeta rezultate Testa 2:
Tabela 7.5: Rezultati Testa 2.
Število izvedenih testov 7443 Povprečje odgovorov/sekunda 12,4 Povprečen čas za odgovor 0,067 s Minimalni čas odgovora 0,041 s Maksimalni čas odgovora 0,140 s
Graf 7.2: Časi odgovorov za Test 2.
51
V tem scenariju se je storitev odzivala v realnem času in je brez težav zagotavljala odgovore.
7.3.3 Test 3 – scenarij 3 nad različico z uporabo relacijske podatkovne baze SQL
Tabela 7.6 in Graf 7.3 prikazujeta rezultate Testa 3:
Tabela 7.6: Rezultati Testa 3.
Število izvedenih testov 7444 Povprečje odgovorov/sekunda 12,4 Povprečen čas za odgovor 0,046 s Minimalni čas odgovora 0,038 s Maksimalni čas odgovora 0,130 s
Graf 7.3: Časi odgovorov za Test 3. Tudi v tem testu opazimo, da se je storitev uspela odzivati v realnem času, povprečni čas odgovora je celo krajši kot v Testu 2.
7.3.4 Test 4 – scenarij 1 nad različico z uporabo XQuery
Tabela 7. 7 in Graf 7.4 prikazujeta rezultate Testa 4:
Tabela 7.7: Rezultati za Test 4.
Število izvedenih testov 664 Povprečje odgovorov/sekunda 1,12 Povprečen čas za odgovor 55,7 s Minimalni čas odgovora 1,76 s Maksimalni čas odgovora 83,5 s
52
Graf 7. 4: Časi odgovorov za Test 4. Pri tem scenariju se je storitev, ki uporablja XQuery, pri majhnem številu uporabnikov
odzivala v dokaj sprejemljivem časovnem okvirju (nekje do dveh sekund), z večanjem
števila zahtev pa se je čas odgovora relativno hitro linearno povečeval. Časi odgovorov so
se ustalili, ko je test dosegel maksimalno število uporabnikov (100).
7.3.5 Test 5 – scenarij 2 nad različico z uporabo XQuery
Tega testa ni bilo mogoče opraviti, saj se je storitev z uporabo XQuery odzivala prepočasi
in strežnik je vse zahteve po 300 sekundah zavrnil z request timeout napako. Napaka se
sproži, ko čas odgovora na zahtevo traja dlje, kot je strežnik pripravljen sprejeti [10].
7.3.6 Test 6 – scenarij 3 nad različico z uporabo XQuery
Tabela 7.8 in Graf 7.5 prikazujeta rezultate Testa 6:
Tabela 7.8: Rezultati za Test 6.
Število izvedenih testov 381 Povprečje odgovorov/sekunda 0,64 Povprečen čas za odgovor 93,5 s Minimalni čas odgovora 2,72 s Maksimalni čas odgovora 147 s
53
Graf 7.5: Časi odgovorov za Test 6.
Storitev z uporabo XQuery je imela že pri majhnem številu uporabnikov težave s hitrostjo
odgovorov, z večanjem števila zahtev pa je čas odgovora hitro narastel na nesprejemljive
vrednosti.
7.4 Povzetek in analiza testov
Tabela 7.9 povzema rezultate vseh testov:
Tabela 7.9: Rezultati testov obremenitve.
Test 1 Test 2 Test 3 Test 4 Test 5 Test 6 Število izvedenih testov 3766 7443 7444 649 / 381
Povprečje odgovorov/sekunda 6,28 12,4 12,4 1,08 / 0,64
Povprečen čas za odgovor 5,86 s 0,067 s 0,046 s 57,1 s / 93,5 s
Minimalni čas odgovora 0,21 s 0,041 s 0,038 s 1,56 s / 2,72 s
Maksimalni čas odgovora 8,63 s 0,140 s 0,130 s 89,3 s / 147 s
Težko je jasno (s časovno enoto) definirati, kaj je še sprejemljiv čas odgovora storitve za
realno uporabno na produkciji. Sprejemljiv je še tisti čas, v katerem povprečen uporabnik
zahteve še ne bo preklical ali sprožil nove v prepričanju, da prva zahteva ni bila poslana.
Iz Tabele 7.9 je razvidno, da je imela storitev z uporabo relacijske podatkovne baze SQL
težave pri scenariju 1, to je iskanju le po iskalnem nizu brez žanra. Storitev z uporabo
XQuery se je na drugi strani po scenariju 1 v Testu 4 najbolje obnesla, čeprav je bilo
povprečje odgovorov na sekundo skoraj šestkrat manjše, kot pri storitvi z relacijsko
podatkovno bazo. Performanse ob obremenitvi v Testu 5 in Testu 6, v katerih je vključeno
54
iskanje po žanru, so bile popolnoma nesprejemljive. Vendar lahko predpostavimo, da bi
storitev z uporabo XQuery po scenariju 1 v primernem okolju (na zmogljivejšem
strežniku) delovala povsem primerljivo storitvi z uporabo relacijske baze, bi bile pa za
sprejemljive zmogljivosti v scenariju 2 in scenariju 3 (oziroma za podobne scenarije)
potrebne določene izboljšave oziroma spremembe.
55
8 IDEJE ZA IZBOLJŠAVO
8.1 Transformacija ali drugačna oblika dokumentov
Problem pri iskanju po žanru nastane, ker je ta nerodno shranjen v vrednosti enega od
elementov v dokumentih XML. Da iskalnik pride do podatka o žanru, se izvede preveč
korakov.
Prva rešitev te težave bi bila odprava dvojnega obhoda podatkov, kakor naša rešitev
trenutno deluje. Najprej se podatki s pomočjo povpraševanja XQuery prefiltrirajo glede na
iskalni niz, šele s pomočjo tega povpraševanja pridobimo informacijo o žanru, po katerem
podatke ponovno prefiltriramo. Glede na to, da ime žanra že prejmemo v zahtevi, ki jo
pošlje uporabnik in da so imena žanrov shranjena v datoteki genres.xml, bi se filtracija po
žanru lahko opravila že v prvem povpraševanju. Ampak to bi pomenilo improvizirano
rešitev s pomočjo obrezovanja nizov.
Druga rešitev bi bila transformacija s pomočjo jezika XSLT ali XQuery. Povpraševanje bi
bilo veliko hitrejše, če bi bil žanr preprosto zapisan kot vrednost elementa v dokumentu
XML. Tako bi bila zelo smiselna rešitev, da se za tem, ko se na strežnik naložijo nove
verzije dokumentov XML, izvede transformacija, ki bi ustvarila nove dokumente XML z
bolj uporabno zabeleženimi žanri.
Tretja in najboljša rešitev pa bi bila, da bi ponudnik podatkov EPG zagotovil drugačno
obliko dokumentov XML.
8.2 XML podatkovna baza
Ena od opcij izboljšav zmogljivosti storitve z uporabo XQuery bi bila organizacija
dokumentov XML v podatkovno bazo, osnovano na XML, kot je npr. BaseX, opisan v
poglavju 3.3.1. Obstajajo zmogljive brezplačne implementacije takšnih podatkovnih baz,
tako da bi pri tej rešitvi odpravili strošek nakupa same podatkovne baze, še vedno pa nam
ostaja strošek vzdrževanja podatkovne baze.
56
Z ureditvijo podatkov v podatkovno bazo bi lahko izvajali povpraševanja nad celotnimi
podatki in se na tak način izognil iteraciji čez številne dokumente XML, za kar lahko
domnevamo, da bi opazno izboljšalo zmogljivosti rešitve.
8.3 Večnitnost
Ta ideja se nanaša na rešitev z uporabo večnitnosti. Večnitnost ali multithreading je
zmožnost operacijskega sistema, da istočasno izvaja različne dele programa, imenovane
niti [33]. Implementirati bi bilo treba nit za vsako datoteko XML. Takšna rešitev najbrž v
testnem okolju, v katerem smo v tej nalogi poganjali storitev, to je procesor z dvema
jedroma, ne bi dala občutno boljših rezultatov, medtem ko bi lahko bila razlika na
večjedrnem strežniku občutna.
57
9 SKLEP
Izrazna moč jezika XQuery je na zelo visokem nivoju, kar omogočajo številne funkcije ter
možnost vgnezdenih in rekurzivnih klicev funkcij. W3C priporočilo za XQuery 1.0 iz leta
2007 je jeziku in celotni tehnologiji dalo zagon v takšni meri, da je na voljo veliko orodij,
ki omogočajo tudi zahtevnejše delo z jezikom.
Orodja za XML in XQuery so na takšnem nivoju, da omogočajo hitro vpeljavo in
kvalitetno delo tudi razvijalcu, ki se s tehnologijo šele spoznava. Izjemno pozitivna stran
teh orodij je tudi dejstvo, da so namenjene ne samo razvijalcem XML, ampak tudi
urednikom XML, torej uporabnikom, ki se ne spoznajo nujno na procese razvoja. To je
bistvena ideja za potrjevanje druge teze. Orodja za delo z relacijskimi podatkovnimi
bazami SQL so vseeno inženirsko naravnana, medtem ko so orodja za delo z XML in
XQuery namenjena tudi laikom in vsebujejo številne primere ter orodja, ki omogočajo
hitro vpeljavo v tehnologijo. Menimo, da je preprostost drevesne strukture, ki je bistvo
XML, bolj naravna od relacijskih struktur, zato je povpraševanje po takšnih strukturah bolj
razumljivo. Predhodno znanje jezika SQL je vsekakor koristno, ni pa nujno potrebno za
obvladovanje jezika XQuery. S tem lahko potrdimo drugo tezo naloge.
V začetku tega poglavja smo že omenili visoko izrazno moč jezika XQuery. Ta vidik ni
sporen in zato lahko popolnoma enakovredno nadomesti jezik SQL v kakršnem koli
kontekstu. Rahlo pa se zaplete pri performančnih zmožnostih jezika oziroma procesorjev,
ki jezik izvajajo. Na konkretnem primeru iskanja po podatkih EPG smo ugotovili, da bi se
z uporabo XQuery sicer lahko izognili relacijski podatkovni bazi, ampak bi celoten sistem
(celotna storitev AmisTV 1.5, ne samo iskalnik) potreboval nekaj predelav in prilagoditev,
ki bi omogočale, da bi se rešitev z uporabo XQuery v tem kontekstu zmogljivostno
približal rešitvi z uporabo relacijske podatkovne baze. V konkretnem kontekstu menimo,
da je težava v namenski izdelavi celotnega AmisTV 1.5 za uporabo z jezikom SQL in
relacijsko podatkovno bazo, zato je izločitev le te in nadomestitev s tehnologijo XQuery
terjala določeno stopnjo prilagajanja, ki je posledično privedla do manjše zmogljivosti
različice z uporabo XQuery. Torej lahko prvo tezo te naloge potrdimo le s pridržkom –
XQuery je izrazno dovolj močan, da opravi kakršno koli nalogo povpraševanja po
podatkih, vendar se dejanska zmogljivost te tehnologije lahko pokaže le v kontekstu
58
aplikacij oziroma primerov uporabe, ki so bili načrtovani na temelju tehnologije XML in
povpraševalnega jezika XQuery.
59
VIRI
[1] ANT Fresco Browser. Dostopno na: http://www.windriver.com/cgi-
bin/partnerships/directory/viewProd.cgi?id=1059 [20. 7. 2013].
[2] Apache Incubator. Apache VXQuery. 2012. Dostopno na:
http://incubator.apache.org/vxquery/index.html [22.7.2013].
[3] Berglund, A., Fernandez, M., Malhotra, A., Marsh, J., Nagy, M., Walsh, N. (ur.).
W3C Recommendation: XQuery 1.0 and XPath 2.0 Data Model (XDM) (Second
Edition). 2010. Dostopno na: http://www.w3.org/TR/2010/REC-xpath-datamodel-
20101214/ [20. 7. 2013].
[4] Berners-Lee, T., Fielding, R., Masinter, L. Uniform Resource Identifier (URI):
Generic Syntax. W3C/MIT, 2005. Dostopno na: http://www.ietf.org/rfc/rfc3986.txt
[20. 7. 2013].
[5] Boag, S., Chamberlin, D., Fernandez, M. F., Florescu, D., Robie, J., Simeon, J.
(ur.). W3C Recommendation: XQuery 1.0: An XML Query Language. 2007.
Dostopno na: http://www.w3.org/TR/2007/REC-xquery-20070123/ [20. 7. 2013].
[6] Boag, S., Chamberlin, D., Fernandez, M. F., Florescu, D., Robie, J., Simeon, J.
(ur.). W3C Recommendation: XQuery 1.0: An XML Query Language (Second
Edition). 2010. Dostopno na: http://www.w3.org/TR/xquery/ [31. 5. 2010].
[7] Ernshaw, N., Aoki, S., Ashley A., Kameyama, W. The TV-Anytime Content
Reference Identifier (CRID). GITS, Waseda University, 2005. Dostopno na:
http://tools.ietf.org/html/rfc4078 [20. 7. 2013].
[8] eXist-db. Getting Started with Web Application Development. 2013. Dostopno na:
http://exist-db.org/exist/apps/doc/development-starter.xml [14. 7. 2013].
[9] eXist-db. Quick Start. 2013. Dostopno na: http://exist-
db.org/exist/apps/doc/quickstart.xml [14. 7. 2013].
[10] Fisher, T. 408 Request Timeout Error Resolution: Steps to Resolve the 408
Request Timeout Error. Dostopno na:
http://pcsupport.about.com/od/findbyerrormessage/a/408error.htm [20. 7. 2013].
[11] Grust, T., Jagadish, H. V., Özcan, F., Yu, C. XQuery Processors. V: Liu, L.,
Özsu, T. M. (ur.), Encyclopedia of Database Systems. Springer US, 2009, 3671–
3676. Dostopno na: http://link.springer.com.nukweb.nuk.uni-
lj.si/referenceworkentry/10.1007/978-0-387-39940-9_800 [20. 7. 2013].
60
[12] Grün, C. Storing and Querying Large XML Instances. Konstanz: Univerza
Konstanz, 2010. Dostopno na: http://kops.ub.uni-
konstanz.de/bitstream/handle/urn:nbn:de:bsz:352-opus-
127142/Dissertation_Gruen_2010.pdf?sequence=1 [20. 7. 2013].
[13] Kay, M. Ten Reasons Why Saxon XQuery is Fast. Reading, Berks, UK:
Saxonica Limited, 2008. Dostopno na:
http://sites.computer.org/debull/A08dec/saxonica.pdf [11. 7. 2013].
[14] Korelič, T. Testiranje funkcionalnosti in zmogljivosti informacijskih
sistemov. Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko
Univerze v Mariboru, 2009. Dostopno na: http://dkum.uni-
mb.si/Dokument.php?id=9716 [11. 7. 2013].
[15] Križan, M. Primerjava jezika za transformacije in povpraševalnega jezika.
Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko Univerze v
Mariboru, 2008. Dostopno na: http://dkum.uni-mb.si/Dokument.php?id=6524 [11.
7. 2013].
[16] Malhotra, A., Melton, J., Walsh, N., Kay, M. (ur.). XQuery 1.0 and XPath
2.0 Functions and Operators (Second Edition). 2010. Dostopno na:
http://www.w3.org/TR/xquery-operators/ [19.8.2013].
[17] Melton, J., Muralidhar, S. (ur.). W3C Recommendation: XML Syntax for
XQuery 1.0 (XQueryX) (Second Edition). 2010. Dostopno na:
http://www.w3.org/TR/xqueryx/ [20. 7. 2013].
[18] Msdn. Primary Expressions (XQuery). 2012. Dostopno na:
http://msdn.microsoft.com/en-us/library/ms190754.aspx [16. 6. 2010].
[19] Msdn. Release Builds. 2012. Dostopno na: http://msdn.microsoft.com/en-
us/library/73e0461e.aspx [18. 7. 2013].
[20] <oXygen/> XML Editor. Dostopno na:
http://www.oxygenxml.com/download.html [20. 7. 2013].
[21] Robie, J., Chamberlin, D., Dyck, M., Snelson, J. W3C Candidate
Recommendation: XQuery 3.0: An XML Query Language. 2013. Dostopno na:
http://www.w3.org/TR/xquery-30/#id-group-by [20. 7. 2013].
[22] Rouse, M. What is load testing? 2007. Dostopno na:
http://searchsoftwarequality.techtarget.com/definition/load-testing [18. 7. 2013].
61
[23] Rouse, M. What is set-top box? 2005. Dostopno na:
http://searchnetworking.techtarget.com/definition/set-top-box [20. 7. 2013].
[24] Saxonica. Saxon Developer Guide: Saxon API for .NET. 2013. Dostopno
na: http://www.saxonica.com/documentation/index.html#!dotnet/dotnetapi [20. 7.
2013].
[25] Saxonica. Saxon Developer Guide: What is Saxon? 2013. Dostopno na:
http://www.saxonica.com/documentation/index.html#!about/whatis [20. 7. 2013].
[26] Saxonica. Saxon Developer Guide: XQuery 1.0 Conformance. 2013.
Dostopno na:
http://www.saxonica.com/documentation/index.html#!conformance/xquery [20. 7.
2013].
[27] Saxonica. The XSLT and XQuery Processor. 2013. Dostopno na:
http://saxon.sourceforge.net/ [20. 7. 2013].
[28] Saxonica. Why XSLT and XQuery? Dostopno na:
http://saxonica.com/html/introducing/introducing.html [20. 7. 2013].
[29] The Apache Software Foundation. Dostopno na: http://incubator.apache.org/
[12. 7. 2013].
[30] Thursby, A. Electronic Programming Guide. Dostopno na:
http://dvr.about.com/od/dvrbasics/g/Electronic-Programming-Guide.htm [20. 7.
2013].
[31] Tverskov, J. XQuery and XSLT compared. 2008. Dostopno na:
http://www.xmlplease.com/xquery-xslt [15. 7. 2013].
[32] W3C. Process Document: Technical Report Development Process.
Dostopno na: http://www.w3.org/2005/10/Process-20051014/tr.html#RecsCR [20.
7. 2013].
[33] Webopedia. Multithreading. Dostopno na:
http://www.webopedia.com/TERM/M/multithreading.html [20. 7. 2013].
[34] Wikibooks. XQuery/Benefits. 2011. Dostopno na:
http://en.wikibooks.org/wiki/XQuery/Benefits [8. 7. 2010].
[35] Wikipedia. Application programming interface. 2013. Dostopno na:
http://en.wikipedia.org/wiki/Application_programming_interface [12. 7. 2013].
62
[36] Wikipedia. Xquery. 2013. Dostopno na:
http://en.wikipedia.org/wiki/XQuery [31. 5. 2010].
[37] Žatuchin, D. XML Seminar: XQuery. Wroclaw: University of Technology,
2006. Dostopno na: http://www.slideshare.net/dizhat/xquery-overview [8. 6. 2010].
[38] Žumer, V., Mernik, M. Principi programskih jezikov. Maribor: Fakulteta za
elektrotehniko, računalništvo in informatiko, Inštitut za računalništvo, 2001.
63
PRILOGE
Vsebina na priloženi zgoščenki:
• Diplomsko delo v obliki PDF
• Diplomsko delo v obliki DOC
• Rešitev iskalnika AmisTV z uporabo XQuery v obliki projekta Microsoft Visual
Studio 2008