Hohde Consulting 2004

Samankaltaiset tiedostot
Helsingin yliopisto/tktl XML-metakieli XPath

13. Loogiset operaatiot 13.1

XQuery tietokannan kyselykielenä

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 4: XPath ja XLink

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Web-teknologiat. XML-datan kysely Topi Sarkkinen

Hohde Consulting 2004

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

ITKP102 Ohjelmointi 1 (6 op)

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

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

Java-kielen perusteita

13. Loogiset operaatiot 13.1

Luento 3: Tietorakenteiden esittäminen

Algoritmit 2. Luento 7 Ti Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

1. Omat operaatiot 1.1

Loppukurssin järjestelyt

11. Javan valintarakenteet 11.1

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Loppukurssin järjestelyt C:n edistyneet piirteet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Tutoriaaliläsnäoloista

Muuttujien määrittely

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

Yhdiste, leikkaus, erotus ym.

Ehto- ja toistolauseet

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmointiharjoituksia Arduino-ympäristössä

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Hohde Consulting 2004

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

Javan perusteita. Janne Käki

ITKP102 Ohjelmointi 1 (6 op)

Olio-ohjelmointi Syntaksikokoelma

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

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

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Ohjelmoinnin perusteet Y Python

Sisältö. 2. Taulukot. Yleistä. Yleistä

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Harjoitus 2 (viikko 45)

HELIA 1 (14) Outi Virkki Tiedonhallinta

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

11. Javan valintarakenteet 11.1

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Ohjelmoinnin perusteet Y Python

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Algoritmit 1. Luento 4 Ke Timo Männikkö

05/04/2004. Digitaalisen median tekniikat, k2004 HY/TKTL, javascript_1. Harri Laine 1. JavaScript

Digitaalisen median tekniikat JavaScript

Digitaalisen median tekniikat JavaScript Harri Laine 1

Ohjelmoinnin peruskurssien laaja oppimäärä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Algoritmit 2. Luento 2 Ke Timo Männikkö

Sisältö. 22. Taulukot. Yleistä. Yleistä

SELECT-lauseen perusmuoto

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 2 To Timo Männikkö

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Luento 12: XML ja metatieto

Ohjelmoinnin perusteet Y Python

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ehto- ja toistolauseet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Python-ohjelmointi Harjoitus 5

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

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

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

JavaScript alkeet Esimerkkikoodeja moniste 2

Ohjelmoinnin peruskurssien laaja oppimäärä

ITKP102 Ohjelmointi 1 (6 op)

Kieliteknologian ATK-ympäristö Kuudes luento

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Kielioppia: toisin kuin Javassa

TAMPEREEN TEKNILLINEN YLIOPISTO

Transkriptio:

Luento 5: XQuery AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XQuery XQuery uudet funktiot sekvenssit muuttujat Iterointi järjestys suodatus järjestäminen Ehtorakenteet Muita toimintoja www.hohde.com Hohde Consulting 2004 2 1

XQuery XQuery on helposti ymmärrettävä kyselykieli, jolla voidaan poimia tietoa XML-dokumenteista XQuery on XPath 2.0 suosituksen laajennus tarkalleen ottaen molemmat suositukset ovat vielä kesken XQuery käyttää XPathin funktioita ja pystyy hyödyntämään myös XPath-lausekkeita tyypitykseltään XQuery tukeutuu XML Schemaan XQueryyn on laadittu sekä ihmisille että koneille sopivat syntaksit tässä käsitellään ihmisille sopivaa koneille sopivassa syntaksissa XQuery-lausekkeet ilmaistaan XML:na www.hohde.com Hohde Consulting 2004 3 Uudet funktiot XPath 2.0 määrittelee joukon funktioita, esimerkiksi: doc(uri) palauttaa URI:n perusteella haettavan dokumentin solmujoukon (node-set) empty(ns) tarkistaa, onko annettu joukko tyhjä max(ns) palauttaa suurimman annetusta joukosta min(ns) palauttaa pienimmän annetusta joukosta Näiden lisäksi määritellään suuri joukko ajan käsittelyyn liittyviä funktioita Muihinkin tyyppeihin liittyviä funktioita on lisätty www.hohde.com Hohde Consulting 2004 4 2

Sekvenssit XQuery pohjautuu pitkälti sekvenssien käsittelyyn sekvenssit voidaan ymmärtää järjestetyksi oliojoukoksi XPath-lausekkeet ja funktiot palauttavat solmujoukon sekvenssinä sekvenssi määritellään kirjoittamalla sen sisältämät kohteet sulkujen sisään (1, 2, 3) sekvenssit voivat olla sisäkkäisiä (1, (2, 3), 4) tyhjä sekvenssi merkitään () www.hohde.com Hohde Consulting 2004 5 Sekvenssien luonti Sekvenssejä voidaan luoda myös määrittelemällä sarja (1 to 5) -> (1, 2, 3, 4, 5) reverse(1 to 5) -> (5, 4, 3, 2, 1) Mikäli sekvenssiin sijoitetaan XPath-lausekkeita, sekvenssin alkioita tulee lausekkeiden solmujoukot www.hohde.com Hohde Consulting 2004 6 3

Sekvenssien yhdistäminen Sekvenssejä voidaan yhdistää seuraavilla operaatioilla union - palauttaa sekvenssin, jossa on kaikki alkiot, jotka ovat jommassa kummassa yhdistettävässä sekvenssissä (a, b) union (b, c) -> (a, b, c) intersect palauttaa sekvenssin, jossa on kaikki alkiot, jotka ovat molemmissa yhdistettävissä sekvenseissä (a, b) intersect (b, c) -> (b) except palauttaa sekvenssin, jossa on kaikki alkiot, jotka ovat ensimmäisessä, mutta eivät ole toisessa yhdistettävässä sekvenssissä (a, b) except (b, c) -> (a) www.hohde.com Hohde Consulting 2004 7 Muuttujat XQuery mahdollistaa muuttujien määrittelyn ja käytön muuttujat ovat tyypitettyjä sama tyyppisysteemi käytössä kuin XPathissa (boolean, number, string, node-set) Muuttujaan viitataan merkinnällä $nimi Muuttuja asetetaan lausekkeella let let $s := "testi" tämän jälkeen muuttuja on käytettävissä muuttuja voi sisältää myös sekvenssin let $d := doc('testi.xml') www.hohde.com Hohde Consulting 2004 8 4

Iterointi Iterointi XQueryn yleisin käyttötapa on käydä tietty solmujoukko läpi solmujoukon sisältä poimitaan arvoja, jotka palautetaan kyselyn vastauksessa Solmujoukko käydään läpi lausekkeella for: for $p in doc('testi.xml')//para yllä muuttujaan $p sijoitetaan dokumentin 'testi.xml' jokainen para-elementti, yksi kerrallaan www.hohde.com Hohde Consulting 2004 10 5

Iterointi useassa tasossa For-lauseke voi yhdistää useita iterointeja, esimerkiksi for $i in (1,2), $j in (3,4) tällöin iteroidaan seuraavasti: $i = 1, $j =3 $i = 1, $j = 4 $i = 2, $j = 3 $i = 2, $j = 4 www.hohde.com Hohde Consulting 2004 11 Iteroinnin järjestys Iterointi voidaan suorittaa joko järjestettynä (ordered) tai ei-järjestettynä (unordered) Järjestetyssä iteroinnissa alkiot käydään läpi aina dokumenttijärjestyksessä ei-järjestetyssä iteroinnissa XQuery-sovellus voi säätää järjestyksen haluamakseen mahdollistaa kyselyjen optimoinnin unordered { for $p in doc('testi.xml')//para, $t in doc('reviews.xml')//review... } www.hohde.com Hohde Consulting 2004 12 6

Sekvenssin järjestys Myös sekvenssin järjestys voidaan vapauttaa tällöin XQuery-prosessori saa päättää sekvenssin alkioiden käsittelyjärjestyksen let $p := unordered(doc('testi.xml')//para) www.hohde.com Hohde Consulting 2004 13 Järjestysmuuttujat For-lausekkeessa voidaan määritellä ylimääräinen järjestysmuuttuja (positional variable), joka kertoo iteraatiokierrosten lukumäärän: for $p at $i in doc('testi.xml')//para tässä muuttuja $i sisältää kappaleen järjestysnumeron Järjestysmuuttujia on mahdollista käyttää jokaisessa iteraatiotasossa www.hohde.com Hohde Consulting 2004 14 7

Suodatus for- ja let-lauseiden toimintaa voidaan ohjata lisäämällä lauseeseen suodatus tällöin käsiteltävästä joukosta poimitetaan vain ehdot täyttävät kohteet suodatus tapahtuu where-lausekkeella: for $p in doc('testi.xml')//para where $p[@level='1'] yllä valitaan ainoastaan ne para-elementit, joiden titleattribuutin arvo on 1 sama olisi tosin saatu aikaan pelkällä XPath-lausekkeellakin for $p in doc('testi.xml')//para[@level='1'] www.hohde.com Hohde Consulting 2004 15 Unioni Suodatuksen perinteisimpiä käyttöjä on unionin muodostaminen luetaan kaksi dokumenttia sisään ja poimitaan niistä tietyllä tavalla samanlaiset elementit näistä elementeistä koostetaan vastaus, yhdistellen tietoa molemmista dokumenteista: for $i in doc('testi.xml')//para, $j in doc('toimittajat.xml')//editor where $i/@author=$j/@editor www.hohde.com Hohde Consulting 2004 16 8

Järjestäminen Iteroitavat kohteet voidaan järjestää yhdellä tai useammalla järjestysehdolla järjestämistä säädetään lausekkeella order by: for $p in doc('testi.xml')//para order by $para/@title järjestyksen suunta voidaan kääntää lisäämällä loppuun avainsana 'descending' jos halutaan, että yhtä suurten kohteiden järjestys ei muutu, lausekkeen alkuun täytyy lisätä avainsana 'stable' for $p in doc('testi.xml')//para stable order by $para/author descending www.hohde.com Hohde Consulting 2004 17 Vastauksen palauttaminen Vastaus palautetaan return-lausekkeella lauseke voi sisältää XML-koodia, joka liitetään mukaan vastaukseen mahdolliset XQuery-lausekkeet täytyy kirjoittaa aaltosulkuihin { } for $i in doc('testi.xml')//para return <editor> {$i/@author} </editor> www.hohde.com Hohde Consulting 2004 18 9

Elementtien luonti Elementtejä voidaan luoda myös dynaamisesti: element $author-el { element first { "Janne" } element last { "Kalliola" } } Samoin muut XML:n rakennepalaset voidaan luoda dynaamisesti (comment, text, processinginstruction, yms.) www.hohde.com Hohde Consulting 2004 19 Attribuuttien luonti Vastaukseen voidaan myös luoda attribuutteja käytetään element ja attribute-lausekkeita: return { element editor { attribute name { $p/@author } } } tai kirjoitetaan attribuutit suoraan XML-koodiin return <editor name="{$p/@author}"/> www.hohde.com Hohde Consulting 2004 20 10

Ehtorakenteet Ehtolauseet XQueryssa on if then else rakenne: if ($value) then $true else $false kuten muissakin ohjelmointikielissä, vain toinen haaroista evaluoidaan molemmat haarat ovat pakollisia jos ei haluta tehdä toimenpiteitä, käytetään tyhjää sekvenssiä () www.hohde.com Hohde Consulting 2004 22 11

Case-lauseke Myös case-lauseke on määritelty: typeswitch($customer/billingaddress) case $a as element(*, USAddress) return $a/state case $a as element(*, CanadaAddress) return $a/province default return "unknown" vertailu pohjautuu ainoastaan kohteiden tyyppeihin www.hohde.com Hohde Consulting 2004 23 Määreiset lausekkeet XQuery mahdollistaa testien suorittamisen solmujoukolle määreisillä lausekkeilla (quantified expression) määreinen lauseke palauttaa aina totuusarvon: every $p in //para satisfies $p/@author palauttaa true, jos jokaisella para-elementillä on attribuutti author some $p in //para satisfies $p/author='kalliola' palauttaa true, jos yksikin para-elementin author-attribuutin arvo on 'Kalliola' www.hohde.com Hohde Consulting 2004 24 12

Iterointi määreisillä lausekkeilla Määreinen lauseke voi saada käsiteltäväkseen useampia solmujoukkoja ehto liittyy tällöin molempien joukkojen kohteisiin kaikki kombinaatiot käydään läpi some $x in (1, 2, 3), $y in (3, 2, 1) satisfies $i + $j = 4 -> true every $x in (1, 2, 3), $y in (3, 2, 1) satisfies $i + $j = 4 -> false www.hohde.com Hohde Consulting 2004 25 Muita toimintoja 13

Erillisyys Sekvenssiä luotaessa voidaan vaatia, että sekvenssissä ei saa olla duplikaatteja käytetään funktiota distinct-values: for $i in distinct-value(doc('testi.xml')//para/@author) www.hohde.com Hohde Consulting 2004 27 Funktiot Käyttäjä voi määrittää omia funktioita funktioiden argumenttien ja paluuarvon tyypit täytyy määrittää declare function local:depth($e as node()) as xs:integer { if(empty($e/*)) then 1 else max(for $c in $e return local:depth($c)) + 1 }; Funktioita kutsutaan samalla tavalla kuin kielen omia funktioita local:depth(doc('testi.xml')) www.hohde.com Hohde Consulting 2004 28 14

XQueryn liittäminen XML-dokumenttiin XQuery-lausekkeet voidaan sijoittaa XML-dokumentin sisään tämä XML-dokumentti toimii syötteenä XQuery-sovellukselle sovellus suorittaa XQuery-lausekkeet ja korvaa ne niiden paluuarvoilla XQuery-lausekkeet sijoitetaan aaltosulkuihin { } (vrt. return): <authors> { for $p in doc('testi.xml')//para return <author> { $p/@author </author> } </authors> www.hohde.com Hohde Consulting 2004 29 Dokumenttien luonti XQuery-kysely voi myös luoda XML-dokumentin tällöin kysely ei sijaitse XML-dokumentin sisässä document { <paragraphs> { doc('testi.xml')//para } </paragraphs> } huomaa, että esimerkkirakenteessa ei ole erityistä returnlausetta mikään ei toki estä sellaisen käyttöä www.hohde.com Hohde Consulting 2004 30 15

Kommentit XQueryn kommentit kirjoitetaan merkkien (: ja :) väliin kommentit jätetään huomiotta XQuery-lausekkeita suoritettaessa XML-kommentit sen sijaan kopioidaan tuotettavaan dokumenttiin www.hohde.com Hohde Consulting 2004 31 Kysymyksiä? Kommentteja? 16