5 XML Query Language. Skeemojen opiskelun myötä olemme polulla joka luontevasti johtaa ajatukseen XMLdokumenteista

Samankaltaiset tiedostot
5 XML Query Language. Skeemojen opiskelun myötä olemme polulla joka luontevasti johtaa ajatukseen XMLdokumenteista

XQuery tietokannan kyselykielenä

Hohde Consulting 2004

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

Web-teknologiat. XML-datan kysely Topi Sarkkinen

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

CSE-A1200 Tietokannat

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

StanForD-XML. Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen

Ohjelmoinnin peruskurssien laaja oppimäärä

Makrojen mystinen maailma lyhyt oppimäärä

Paikkatiedot ja Web-standardit

XML kielioppi. Elementtien ja attribuuttien määrittely. Ctl230: Luentokalvot Miro Lehtonen

Luento 3: Tietorakenteiden esittäminen

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Johdatus rakenteisiin dokumentteihin

Ohjelmoinnin peruskurssien laaja oppimäärä

3 Verkkosaavutettavuuden tekniset perusteet

Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

XML-dokumenttien deklaratiivinen kyselykieli. Teemu Kumpulainen

XML-datan kysely. Topi Sarkkinen. Seminaarityö. Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

Ohjelmoinnin peruskurssien laaja oppimäärä

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

HELIA 1 (14) Outi Virkki Tiedonhallinta

Ohjelmoinnin peruskurssien laaja oppimäärä

A TIETORAKENTEET JA ALGORITMIT

Helsingin yliopisto/tktl XML-metakieli XPath

Ohjelmoinnin peruskurssien laaja oppimäärä

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Haskell ohjelmointikielen tyyppijärjestelmä

Semanttinen Web. Ossi Nykänen Tampereen teknillinen yliopisto (TTY), DMI / Hypermedialaboratorio W3C Suomen toimisto

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Luento 5. Timo Savola. 28. huhtikuuta 2006

SELECT-lauseen perusmuoto

Ohjelmoinnin peruskurssien laaja oppimäärä

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

W3C, Web-teknologiat ja XML

P e d a c o d e ohjelmointikoulutus verkossa

6 XML-työkalut 1. 6 XML-työkalut

Extensible Stylesheet Language (XSL)

W3C-teknologiat ja yhteensopivuus

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

CSE-A1200 Tietokannat

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Kielioppia: toisin kuin Javassa

Digitaalisen median tekniikat. JSP ja XML

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Julkishallinnon XML-skeemat v0.5 JHS-suositus

SQL - STRUCTURED QUERY LANGUAGE

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli (2011) Harri Laine 1. Jäsennys ja sarjallistaminen

XSL-muunnokset. 9 XSL-muunnokset

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Telecommunication Software

ITKP102 Ohjelmointi 1 (6 op)

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Matlab- ja Maple- ohjelmointi

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Apuja ohjelmointiin» Yleisiä virheitä

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Harjoitus 4 -- Ratkaisut

Harjoitustyö: virtuaalikone

Hohde Consulting 2004

Helsingin yliopisto/tktl Kyselykielet, s 2006 Relaatiokalkyylit. Harri Laine 1

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

ITKP102 Ohjelmointi 1 (6 op)

Luento 12: XML ja metatieto

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 7: XML-ohjelmointirajapinnat

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 1. Luento 3 Ti Timo Männikkö

Mathematica Sekalaista asiaa

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

è è è RDF-perusteet 7 RDF-perusteet

Python-ohjelmointi Harjoitus 5

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

811120P Diskreetit rakenteet

Ohjelmointiharjoituksia Arduino-ympäristössä

Transkriptio:

5 XML Query Language Skeemojen opiskelun myötä olemme polulla joka luontevasti johtaa ajatukseen XMLdokumenteista tietokantoina. Erityisesti, XML-skeema voi vaatia että tietty rakenne toimii (esiintymässä) avaimen tavoin (xsd: unique, xsd:key/xsd:keyref). Tätä voidaan ilmeisesti hyödyntää esim. kyselyissä. Vaikka myös matalan tason sovellusohjelmointi (SAX, DOM) hyötyy täsmällisistä skeemamäärittelyistä, ei XML-muotoisen tiedon käsittely suoraan ruohonjuuritasolla ole aina tuottavaa (vrt. XSLT vs. DOM). XML-dataan on kuitenkin mahdollista päästä myös XML-kyselykielten välityksellä (vrt. SQL). XML-kyselykieliä on useita erilaisia; rajaamme (suppean!) tarkastelumme seuraavassa XQuery-teknologiaan koska se muodostunee jatkossa de facto - standardiksi (Huom. se ei siis vielä ole esim. W3C-suositus). 95

5.1 Välisoitto Tehokas sovellusintegraatio on tiedon saatavuuden näkökulmasta hyvä asia Tiedon yhtenäinen tekninen esitys ja vaivaton saatavuus korostavat myös esim. tietoturvan merkitystä organisaatioissa... tekijänoikeudet, tietosuoja ja rekisterit, yms. 96

5.2 Perusidea: XML tietokantana Useat XML-sovellukset voidaan käsitteellisesti jäsentää XML-tietokantoja (database) hyödyntävinä sovelluksina Kuten tietokantajärjestelmien tapauksessa, myös XML-sovellusten suunnittelu selkiytyy kun... - tietoa noudetaan kannasta kyselyiden (query) avulla... - jotka palauttavat XML-dokumentteja... XML DOM Application DOM XML Application DB XQuery - joita käsitellään hallitusti "matalan tason" rajapintojen avulla (esim. DOM) Huom. Ratkaisu tarjoaa keinon esittää periaatteessa mitä tahansa tietoa (ns. virtual [XML] documents) XML-rajanpinnan läpi (myös olemassa olevia relaatiotietokantoja(!)) XML DOM 97

5.3 XML Query Language XML Query Language eli XQuery määrittelee kielen jolla DTD:n tai XMLskeeman mukaisesta loogisesta tietovarannosta voidaan tietyn syntaksin puitteissa kysellä tietoa - ks. http://www.w3.org/tr/2005/wd-xquery-20050915/ Kyselykieli pohjautuu vahvasti XPath-tekniikkaan, mikä määrittelee viittausten perustan useissa XML-perheen tekniikoissa (esim. XSLT) - teknisesti: XQuery laajentaa XPath 2.0 -määritystä XPath 2.0 - lausekkeet kelpaat siis jo XQuery-kyselyiksi Itse kysely(lauseke) (query) on tekstimuotoinen lauseke (XQuery/XMLsyntaksi) Kysely palauttaa tuloksena (result) XML-elementtirakenteen (ei vaatimusta juurielementistä, ts. voi olla myös hyvin muodostettu XML-tekstientiteetti) 98

5.4 SQL-tyyppinen esimerkki (1/3) Olkoon annettuna seuraava XML-dokumentti <bib> <book year="1994"> <title>tcp/ip Illustrated</title> <author><last>stevens</last><first>w.</first></author> <publisher>addison-wesley</publisher> <price>65.95</price> </book>... <book year="1992"> <title>advanced Programming in the Unix environment</title> <author><last>stevens</last><first>w.</first></author> <publisher>addison-wesley</publisher> <price>65.95</price> </book> 99

... <book year="2000"> <title>data on the Web</title> <author><last>abiteboul</last><first>serge</first></author> <author><last>buneman</last><first>peter</first></author> <author><last>suciu</last><first>dan</first></author> <publisher>morgan Kaufmann Publishers</publisher> <price>39.95</price> </book> </bib> <book year="1999"> <title>the Economics of Technology and Content for Digital TV</title> <editor> <last>gerbarg</last><first>darcy</first> <affiliation>citi</affiliation> </editor> <publisher>kluwer Academic Publishers</publisher> <price>129.95</price> </book> 100

5.5 SQL-tyyppinen esimerkki (2/3) Suoritetaan kysely: "List the titles and years of all books published by Addison-Wesley after 1991, in alphabetic order." <bib> (: An example from the test cases [ON] :) { for $b in doc("http://bstore1.example.com/bib.xml")//book where $b/publisher = "Addison-Wesley" and $b/@year > 1991 order by $b/title return <book> { $b/@year } { $b/title } </book> } </bib> Huomioita: - oma syntaksi, XPath-lausekkeita, ns. FLWOR ("flower") -kysely 101

5.6 SQL-tyyppinen esimerkki (3/3) Kyselyn tuloksena (result) saadaan odotetusti: <bib> <book year="1992"> <title>advanced Programming in the Unix environment</title> </book> <book year="1994"> <title>tcp/ip Illustrated</title> </book> </bib> Huomioita: - SAX/DOM-ohjelmointiin verrattuna kysely yksinkertaistaa XML:n roolia sovelluksessa - tuloksen käsittelyyn tarvitaan XML-prosessointia, mutta tulos on helppo pakottaa helposti käsiteltävään muottiin (vrt. XML CSV) - tehtävän tasolla, yhtäläisyys XSLT-muunnosten kanssa on ilmeinen 102

5.7 XML-tietokannan tietomalli, huomioita SQL-vertauskuva ei kanna määräänsä pidemmälle: on hyvä muistaa että - XML-tietomalli on rakenteeltaan monimutkaisempi kuin relaatio JA - skeemamääritys voi sisältää vaihtoehtoisia ja toistuvia osia Ts. esim. seuraavalle "rikkaalle" tietorakenteelle ei löydy suoraa vastinetta relaatiotietokannoista (joskin "sama tietosisältö" voitaisiin toki esittää toisin): <!ELEMENT bib (book* )> <!ELEMENT book (title, (author+ editor+ ), publisher, price )> <!ATTLIST book year CDATA #REQUIRED > <!ELEMENT author (last, first )> <!ELEMENT editor (last, first, affiliation )> <!ELEMENT title (#PCDATA )> <!ELEMENT last (#PCDATA )> <!ELEMENT first (#PCDATA )> <!ELEMENT affiliation (#PCDATA )> <!ELEMENT publisher (#PCDATA )> <!ELEMENT price (#PCDATA )> 103

5.8 XQuery-kielioppi (1/6): perusteet Lausekkeiden perusrakenne, (dokumentin jäsennyspuun) solmun käsite, literaalit ja numeeriset tyypit tulevat XPathista ja XML-skeemoista, esim. doc("bib.xml")/bib//author[1] "merkkijono" -1.3E2 Kyselyn lähde valitaan syötefunktioiden avulla (input functions): - doc(...) (dokumenttisolmu, esim. doc("bib.xml") ) - collection(...) (kokoelma solmuja [listarakenne], esim. fn:collection("http://example.org")//customer ) - collection() valitsee oletussyötteenä oletuskokoelman (default collection) Kyselyn lähde voi olla selvillä myös kontekstin (tai kyselyn esittelyssä ilmoitetun option) perusteella Kyselyn liittyvät kommentit kirjataan hymynotaatiolla (: kommentti :) 104

5.9 XQuery-kielioppi (2/6): rakentajat Solmuja voidaan tuottaa suoraan rakentajien (constructor) avulla, esim.: <book year="1994"> <title>tcp/ip Illustrated</title> <author><last>stevens</last><first>w.</first></author> <price>65.95</price> </book> Sama voidaan tuottaa ohjelmallisesti myös rakentajakomentojen avulla (ns. computed constructors, vrt. XSLT-komennot), esim.: element book { attribute year { "isbn-0060229357" }, element title { "TCP/IP Illustrated" }, element author { element last { "Stevens" }, element first { "W." } }, element price { 65.95 } } 105

5.10 XQuery-kielioppi (3/6): ohjelmointi Aaltosulut merkkaavat evaluoitavan kohdan: <fact>i saw {5 + 3} cats.</fact> (: gives 8 :) XQuery sisältää tyypillisiä ohjelmointikielten piirteitä, kuten silmukoita (käsitellään tuonnempana) ja ehtolauseita: if ($widget1/unit-cost < $widget2/unit-cost) then $widget1 else $widget2 Monimutkaisemmat lausekkeet voidaan suunnitella funktioina: declare function local:between($seq as node()*, $start as node(), $end as node()) as item()* (: The between() function takes a sequence of nodes, a starting node, and an ending node, and returns the nodes between them. :) { let $nodes := for $n in $seq except $start//node() where $n >> $start and $n << $end (: Huomaa järjestysvertailu :) return $n return $nodes except $nodes//node() }; 106

5.11 XQuery-kielioppi (4/6): muuttujat & funktiot Kyselyt voivat esitellä erilaisia muuttujia (: Muuttuja jolla tyyppi & alustettu arvo :) declare variable $x as xs:integer := 7; (: Ympäristön asettama muuttuja (esim. argumenttina prosessorille) :) declare variable $x as xs:integer external; (: Globaali muuttuja jonka nimi kvalifioitu :) declare variable $math:pi as xs:double := 3.14159E0; Kuten tavallista, funktiot voivat olla myös rekursiivisia: declare function local:depth($e as node()) as xs:integer { (: A node with no children has depth 1 :) (: Otherwise, add 1 to max depth of children :) if (fn:empty($e/*)) then 1 else fn:max(for $c in $e/* return local:depth($c)) + 1 }; (: Find the maximum depth of the document named partlist.xml :) local:depth(fn:doc("partlist.xml")) 107

5.12 XQuery-kielioppi (5/6): kyselyt Yksinkertainen kysely palauttaa koko dokumentin sisällön tai sen osan: doc("bib.xml")//book Arkinen kysely rakentaa esim. tulokseen omia elementtejä: suorittaa laskentaa ja vertailuja: <example> <p> Here is a query. </p> <eg> $b/title </eg> (: tekstiä, EI evaluoitava lauseke! :) <p> Here is the result of the query. </p> <eg>{ $b/title }</eg> (: evaluoitava lauseke :) </example> Hieman monimutkaisempi kysely suorittaa myös "ehdollista laskentaa": (: oletetaan että muuttujat $dict ja $e on sidottu sopivasti... :) element {$dict/entry[@word=name($e)]/variant[@xml:lang="it"]} {$e/@*, $e/node()} Ks. http://www.w3.org/tr/2005/wd-xquery-20050915/#id-computedelements 108

5.13 XQuery-kielioppi (6/6): kyselyn esittelyosa Kuten esimerkeistä käy ilmi, kysely voi sisältää myös esittelyosan (prolog) Tyypillinen käyttötapaus on XQuery-version ja kyselyssä tarvittavien nimiavaruuden (prefiksinimien) esittely (declare): xquery version "1.0" encoding "utf-8"; declare namespace p="http://example.com/ns/p"; declare namespace q="http://example.com/ns/q"; declare namespace f="http://example.com/ns/f"; <p:a q:b="{f:func(2)}" xmlns:r="http://example.com/ns/r"/> Kyselyt voidaan jakaa myös useisiin moduuleihin joihin viitata (import): import module namespace math = "http://example.org/math-functions"; Esittelyosa voi lisäksi sisältää esim. muuttujien esittelyjä, (itse määriteltyjä, kukaties rekursiivisiakin) funktioita ja kyselyä ohjaavia asetuksia 109

5.14 FLWOR-lausekkeet: sano se kukkasin Kyselyiden tärkeä erikoistapaus ovat FLWOR-kyselyt (for-let-where-order-return), esimerkiksi: for $d in fn:doc("depts.xml")/depts/deptno let $e := fn:doc("emps.xml")/emps/emp[deptno = $d] where fn:count($e) >= 10 order by fn:avg($e/salary) descending return <big-dept> { $d, <headcount>{fn:count($e)}</headcount>, <avgsal>{fn:avg($e/salary)}</avgsal> } </big-dept> Huomaa SQL-tyyppinen rakenne; keskeinen ero on se miten ja mistä syötevirta muodostuu (ns. tuple stream) 110

5.15 FLWOR-lausekkeiden evaluointi FLWOR-lausekkeiden syntaksi on melko intuitiivinen: FLWORExpr ::= (ForClause LetClause)+ WhereClause? OrderByClause? "return" ExprSingle for- ja let-osat (kenties useita kutakin) iteroivat valitun solmujoukon läpi, kiinnittäen "työmuuttujia" "silmukkamuuttujien" osoittamiin tietorakenteisiin syötevirrassa where-osa suodattaa syötevirtaa (valinnainen) order by -osa järjestää syötevirran (valinnainen) return-osa suoritetaan kerran kutakin (where-osan ehdot täyttävää) syötevirran alkiota kohden 111

5.16 FLWOR-lausekkeista (1/3): for Huomaa että for ja let -osat ovat aidosti erilaisia Esimerkki, for -kysely: for $s in (<one/>, <two/>, <three/>) return <out>{$s}</out> Tulos: <out> <one/> </out> <out> <two/> </out> <out> <three/> </out> Ts. return arvioidaan kerran kullekin silmukkamuuttujan arvolle 112

5.17 FLWOR-lausekkeista (2/3): let Esimerkki, let -kysely: let $s := (<one/>, <two/>, <three/>) return <out>{$s}</out> Tulos: <out> <one/> <two/> <three/> </out> Ts. return arvioidaan vain kerran (koska ei silmukkaa) for ja let -osia voidaan myös yhdistellä tuloksena on varsin mutkikkaita lauseita (jotka kannattaa yleensä järjestää jotta järjestys olisi määrätty): for $x in $w, $a in f($x) let $y := g($a) for $z in p($x, $y) return q($x, $y, $z) 113

5.18 FLWOR-lausekkeista (3/3): where ja order Peruskäytössä where-osa suorittaa testin jonka syötevirran alkioiden täytyy läpäistä, esim.... where $u/rating > "C" and $i/reserve_price > 1000 and $i/offered_by = $u/userid... where $i mod 100 = 0... where contains($i/description, "Bicycle")... order -osa puolestaan näyttää esim. tältä: for $e in $employees order by $e/salary descending (: tai esim. ascending empty least :) return $e/name 114

5.19 Funktiosta (1/2): itse määritellyt funktiot Esimerkki: "A local function that accepts a sequence of employee elements, summarizes them by department, and returns a sequence of dept elements." declare function local:summary($emps as element(employee)*) as element(dept)* { for $d in fn:distinct-values($emps/deptno) let $e := $emps[deptno = $d] return <dept> <deptno>{$d}</deptno> <headcount> {fn:count($e)} </headcount> <payroll> {fn:sum($e/salary)} </payroll> </dept> }; (: Prepare a summary of employees that are located in Denver :) local:summary(fn:doc("acme_corp.xml")//employee[location = "Denver"]) Funktioiden yhteydessä vaaditaan aina nimiavaruuden käyttöä 115

5.20 Funktiosta (2/2): funktiokirjasto XQuery (1.0) hyödyntää laajennettua XPath (2.0) -funktiokirjastoa - ks. http://www.w3.org/tr/xquery-operators/ fn:function-name($parameter-name as parameter-type,...) as return-type Funktioiden käytön perusidea ja syntaksi on sama kuin XPath 1.0:ssa, eroja: - nimiavaruuksien käyttö - tietotyyppien määrä (!) (XML-skeemoista) - funktioiden määrä (!) - XQuery mahdollistaa omien funktioiden määrittelyn (!) XQuery-funktiokirjasto on nyt ilahduttavan laaja, erityisesti: kirjasto sisältää monia XML-skeemojen esimääriteltyjä datatyyppejä käsitteleviä funktioita 116

5.21 Esimerkkiprosessori: Saxon XSLT-sovelluksista tuttu Saxon(-B)-prosessori tarjoaa hyvän XQuery-toteutuksen - ks. http://www.saxonica.com/ Olkoon annettuna lähdedokumentti bib.xml ja kysely find.xq, esim. xquery version "1.0" encoding "iso-8859"; <root> <!-- books including string in their title "nt"... --> { for $s in //title where fn:contains($s,"nt") return $s } </root> Komento java -classpath... net.sf.saxon.query -s bib.xml find.xq...suorittaa halutun kyselyn 117

5.22 XML-sarjallistus XQuery-kyselyt voidaan esittää myös XML-muodossa (XQueryX), esim.: <bib> { for $b in doc("http://bstore1.example.com/bib.xml")/bib/book where $b/publisher = "Addison-Wesley" and $b/@year > 1991 return <book year="{ $b/@year }"> { $b/title } </book> } </bib> Ks. http://www.w3.org/tr/2005/wd-xqueryx-20050915/#example1...tuloksena 129 riviä koodia(!) Ts. käsin työhön ei tee mieli ryhtyä, mutta mahdollisuus kyselyiden käsittelyyn XML-rajapinnan läpi on toki paikallaan (esim. XSL-muunnoksin) 118

5.23 Lopuksi, huomioita Relaatiotietokantajärjestelmien suuri suosio perustuu eittämättä abstraktin relaatiotietokanta-kyselykieli -ratkaisumallin yleisyyteen: tietokanta voidaan "löytää" keskeisestä roolista miltei mistä tahansa sovelluksesta XQuery-prosessoreita voidaankin analogisesti pitää yhtenä keskeisimmistä XML-tekniikosta ( XML-kehitystyön tehokkuuden parantuminen) Melko pian huomataan että XQuery ja XSLT-tekniikat ovat tietyssä mielessä melko samanlaisia; tuntuu luonnolliselta olettaa että (iso) osa käyttötapauksista joihin nykyään sovelletaan XSL-muunnoksia voidaan tulevaisuudessa toteuttaa luontevammin XQuery-kyselyinä (funktiot & lausekielinen ohjelmointi...) Huom! Olemme vain esitelleet perusteet: XQuery-teknologian opiskeluun voisi perustellusti käyttää kokonaisen peruskurssin verran aikaa 119