XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.



Hasonló dokumentumok
Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Az XQuery szabvány elemei rendszer

XML technikák II Kovács, László

Adatkezelési mőveletek az XML nyelvben XQuery - XML dokumentumok lekérdezésére szolgáló lekérdezınyelv kifejezı ereje az OQL nyelvével egyenértékő.

Adatbázisok I. Az SQL nyelv

Adatbázisok I A relációs algebra

34. Elsődleges kulcs megadása XMLSchema-ban Idegen kulcs megadása XMLSchema-ban Típusok kategóriái és saját típus megadásának

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Adatbázisok* tulajdonságai

SQLServer. DB Recovery modes

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Adatbázis-kezelés. Harmadik előadás

BEVEZETÉS Az objektum fogalma

B I T M A N B I v: T M A N

BASH script programozás II. Vezérlési szerkezetek

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK

Programozás és adatbázis kezelés PHP ben

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Adatbázis Rendszerek II. 2. Gyakorló környezet

Általános lekérdezési feladatok


Körkörös listák. fej. utolsó. utolsó. fej

ADATBÁZISKEZELÉS ADATBÁZIS

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

117. AA Megoldó Alfréd AA 117.

XPath. dr. Paller Gábor. XML technológiák

Programozási módszertan. Dinamikus programozás: Nyomtatási feladat A leghosszabb közös részsorozat

INFORMATIKAI ALAPISMERETEK

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

BASH SCRIPT SHELL JEGYZETEK

Kriptográfiai algoritmus implementációk időalapú támadása Endrődi Csilla, Csorba Kristóf BME MIT

GEIAL Kovács László. GEIAL Kovács László

XML adatkezelés. 5. témakör. Nincs explicit névtér kijelölve. <?xml version="1.0"?> <xs:schema xmlns:xs="

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

Egyszerű programozási tételek

Adatbázis használat I. 2. gyakorlat

Példa: Aktuális könyvtár tartalmának fájlba mentése, melynek neve az aktuális dátum és idő: ls l > `date+%f_%h-%m`.txt

Géptermi zh-írás forgatókönyve

Programozás I gyakorlat. 5. Struktúrák

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

S z á m í t ó g é p e s a l a p i s m e r e t e k

INFORMATIKAI ALAPISMERETEK

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

3. Gyakorlat Ismerkedés a Java nyelvvel

Óravázlat. az ECDL oktatócsomaghoz. 5. modul. Adatbáziskezelés. Krea Kft Budapest, Szőlő u 21. Tel/fax: / krea@krea.

5. modul - Adatbázis-kezelés

Adatbázis-kezelés, információs-rendszerek

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

A félév során előkerülő témakörök

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

Paraméteres-, összesítı- és módosító lekérdezések

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Információ Európa országairól (összetett alkalmazás)

Szkriptnyelvek. 1. UNIX shell

Hozzunk ki többet abból amink van. Fehér Lajos

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Adatbázis másolás Slony-I segítségével

Algoritmizálás és adatmodellezés tanítása 1. előadás

Programozás burritokkal

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Matematikai alapok. Dr. Iványi Péter

Az F# nyelv erőforrásanalízise

JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Bevezetés a programozásba. 12. Előadás: 8 királynő

Bevezetés a programozásba 2

XML-HMTL Beadandó Dolgozat. Avagy, mit sikerült validálnunk fél év alatt

Algoritmusok vektorokkal keresések 1

Funkcionális Nyelvek 2 (MSc)

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

XML és XSLT (a színfalak mögül)

Gyártórendszerek Dinamikája. Irányítástechnikai alapfogalmak

Lekérdezések az SQL-ben 1.rész

Komputeralgebra Rendszerek

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Programozás alapjai óra. Morvai Flórián, 2010 Dr. Dévényi Károly előadásvázlata alapján

Lekérdezések az SQL-ben 1.rész

S z á m í t ó g é p e s a l a p i s m e r e t e k

Az XML dokumentumok adatmodellje

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatszerkezetek 7a. Dr. IványiPéter

Operációs rendszerek 2 3. alkalom - Reguláris kifejezések, grep, sed. Windisch Gergely windisch.gergely@nik.uni-obuda.hu

Algoritmizálás + kódolás C++ nyelven és Pascalban

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

Országzászlók (2015. május 27., Sz14)

14. Mediánok és rendezett minták

Átírás:

XML adatkezelés 11. témakör Az nyelv alapjai ME GEIAL dr Kovács Lászl szló célja egy imperatív lekérdező nyelv biztosítása SQL XPath XSLT (nem XML) XDM Forrás XML processzor Eredmény XML 1

jellemzői -- W3C szabvány 2007 óta -- halmazorientált -- gazdag kifejezőerő -- XML bemeneti adat és XML kimeneti adat -- a parancsok nem XML formátumban adottak -- XPath alapú -- SQL-hez hasonló (de laza a kapcsolat) -- XSLT vetélytársa -- procedurális elemeket is tartalmaz minta for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending <car> $x/@rsz $x/tipus/text() $x/ar ll:felez($x/ar)</car> <adatbazis> <autok> <auto rsz= > <tipus> opel</tipus> <ar>214 </ar> </auto> </autok> <emberek> </emberek> </adatbazis> <car rsz=> opel 214 107 </car> 2

feldolgozás váza XML alapadat parsing előfeldolgozás infoset validation XMLSchema post-schema validation infoset tree generation XDM lekérdezés végrehajtás feldolgozás váza XML alapadat előfeldolgozás parsing műveleti gráf statikus elemzés OS kontexus meghatározás kontexus leíró külső dinamikus elemzés modulok betöltése névfeloldás, normalizálás normalizált műveleti gráf 3

feldolgozás váza előfeldolgozás statikus elemzés műveleti lépések meghatározás kifejezések kiértékelés kimenti atomok eredmény előállítás dinamikus elemzés XML sorosítás XDM lekérdezés struktúrája (FLOWER) FOR elem LET elem ORDER BY elem WHERE elem RETURN elem : ciklus : értékadás : rendezés : szelekció : projekció for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending GEIAL <car> Kovács László $x/@rsz $x/tipus/text() $x/ar ll:felez($x/ar)</car> 4

XPath-ra épülő kifejezések: nyelvi alapok - element() : bármely csomópont - element(a,b) : A nevű, B típusú csomópont - attribute(a,b) : A nevű, B típusú elemjellemző - text() : szövegcsomópont - node() : bármely csomópont - node() * : bármely csomópont akárhányszor - attribute() + : egy vagy több elemjellemző - element(*,b)? : opcionális B típusú elem - derives-from(a,b) : A típus a B-ből származik-e - item() : csomópont vagy érték - comment() : megjegyzés XPath-ra épülő kifejezések: nyelvi alapok szekvencia : (1,2,5,,8) tartomány : 1 to 6 érték összehasonlítás : eq ne lt le gt ge szekvencia, tartomány összehasonlítás: =,<, >,!= csomópont összehasonlítás : is << >> kifejezés megadása kiértékelésre: kif statikus eredmény XML struktúra felépítése: <nev> <auto> Fiat, melynek ara 2+4 </auto> 5

Egyértékű változó LET $v := ertek RETURN kifejezes let $x := ( a, b, s ) <a> $x </a> let $x := ( a, b, s ) <a> $x </a> Többértékű változó FOR $v IN lista RETURN kifejezes A változó végigfut a megadott halmaz elemein Implicit ciklus for $x in ( a, b, s ) <a> $x </a> 6

XML dokumentum kijelölés fn:doc(file-specifikáció) Részfa kijelölés (XPath) fn:doc(file-specifikáció)/p1/p2/ for $x in fn:doc("xx9.xml")/adatbazis/autok/auto <a> $x </a> Descartes-szorzat képzése for $x in ('a','b') for $y in ('c','d') let $z := 'e' <a> $x $y $z </a> FOR $v1 IN lista1 FOR $v2 IN lista2 LET $w1 := kifejezes1 LET $w2 := kifejezes1.. RETURN kifejezes 7

Descartes-szorzat képzése for $x in doc('xx9.xml')/adatbazis/autok/auto for $y in doc('xx9.xml')/adatbazis/emberek/ember <a> $x $y </a> let $b := doc('xx9.xml')/adatbazis for $x in $b/autok/auto for $y in $b/emberek/ember <a> $x $y </a> Descartes-szorzat képzése let $b := doc('xx9.xml')/adatbazis for $x in $b/autok/auto for $y in $b/emberek/ember <a> <car>$x/tipus/text()</car> <owner>$y/nev/text()</owner> </a> <a> <car>$x/@rsz$x/tipus/text()</car> <owner>$y/nev/text()</owner> </a> 8

Szelekcio FOR $v IN lista LET $w := kifejezes WHERE feltetel RETURN kifejezes for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar > 222 <a> <car>$x/@rsz$x/tipus/text()</car> </a> Csomópontok létrehozása* FOR $v IN lista RETURN ELEMENT nev ertek ATTRIBUTE nevertek TEXTertek for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar > 222 <a> element car text$x/@rsz </a> 9

Elemek rendezese FOR $v IN lista LET $w := kifejezes WHERE feltetel ORDER BY kifejezes mod RETURN kifejezes or $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending <a> <car> $x/@rsz $x/tipus/text() </car> </a> Minta a 200-nál drágább autok rendszáma for $v in fn:doc('xx9.xml')//auto where $v/ar>200 element eredmeny $v/@rsz Auto rendszama es a tulaj neve for $a in fn:doc('xx9.xml')//auto for $e in fn:doc('xx9.xml')//ember where $a/@tulaj eq $e/@kod element eredmeny element auto $a, element tulaj $e 10

Minta Autok rendszam es ar, ar szerint rendezve for $a in fn:doc('xx9.xml')//auto order by $a/ar element auto $a/tipus, $a/ar A 200-nal dragabb autok rendszamai rsz sorrendben for $a in fn:doc('xx9.xml')//auto where $a/ar > 200 order by $a/@rsz <aa> $a/@rsz </aa> Minta Auto elemek rendszam tartalommal for $a in fn:doc('xx9.xml')//auto element auto text$a/@rsz Autokhoz olyan elemek, melynek neve a rendszam erteke, tartalma: tipus, jellemzoje: ar for $a in fn:doc('xx9.xml')//auto element $a/@rsz attribute a $a/ar, text$a/tipus 11

Gyökérelem létrehozása a ciklus köré <elem> FOR $v IN lista RETURN kifejezes </elem> <adatok> for $a in fn:doc('xx9.xml')//auto element car $a/tipus </adatok> Feltételes végrehajtás FOR $v IN lista RETURN IF (kifejezes) THEN kifejezes ELSE kifejezes for $x in doc('xx9.xml')/adatbazis/autok/auto <a> <car> $x/@rsz $x/tipus/text() $x/ar if ($x/ar>151) then 'sok' else 'keves' </car> </a> 12

<a> for $x in doc('xx9.xml')/adatbazis/autok/auto <car> $x/@rsz if ($x/ar>151) then 'sok' else 'keves'</car> </a> <adatok> for $a in fn:doc('xx9.xml')//auto element car text $a/tipus, element ar if ($a/ar/@valuta eq 'USD') then text 250*$a/ar else text $a/ar </adatok> Gyári függvények doc() uppercase() substring() max() min() avg() sum() count() distinct-values() every $x in kif1 satisfies kif2 some $x in kif1 satisfies kif2 13

Autotipusok es autoik <adatok> for $t in fn:distinct-values( fn:doc('xx9.xml')//auto/tipus ) element tipus attribute tip $t, element autok for $a in fn:doc('xx9.xml')//auto where $a/tipus eq $t element auto $a/@rsz </adatok> <adatok> for $t in fn:distinct-values( fn:doc('xx9.xml')//auto/tipus ) element tipus attribute tip $t, attribute db count( for $a in fn:doc('xx9.xml')//auto where $a/tipus eq $t element auto $a/@rsz ) </adatok> Tipusok es darabszamuk 14

Gyári függvények for $x in doc('xx9.xml')/adatbazis/autok <atlagar> fn:avg($x//ar) </atlagar> <db> fn:count( for $x in doc("xx9.xml")/adatbazis/autok/auto where $x/ar > 211 $x ) </db> Gyári függvények Akiknek nincs autoja for $e in fn:doc('xx9.xml')//ember let $a := fn:doc('xx9.xml')//auto[@tulaj = $e/@kod] where fn:count($a) eq 0 element ember $e/nev for $e in fn:doc('xx9.xml')//ember where not (some $x in fn:doc('xx9.xml')//auto satisfies $e/@kod eq $x/@tulaj) element ember text $e/nev 15

Saját függvények létrehozása DECLARE NAMESPACE prefix=kifejezes; DECLARE FUNCTION prefix:fnev ($p1 AS t1,..) AS rtip utasitasok RETURN kifejezes Saját függvény declare namespace ll="http:me.kl"; declare function ll:felez($x as xs:decimal) as xs:decimal let $c:=2 $x div $c ; for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending <car> $x/@rsz $x/tipus/text() $x/ar ll:felez($x/ar)</car> 16

Elso n szam osszege declare namespace ll="http:me.kl"; declare function ll:ossz($r as xs:integer) as xs:integer let $x := 1 ( if ($r > 0) then $r + ll:ossz($r -1) else 0 ) ; let $x := 5 <ered> ll:ossz($x)</ered> A függvény argumentuma és visszatérési értéke lehet csomópont típusú is declare function local:order-value ($po as element(purchase-order)) as xs:double sum($po/order-item/(@price * @quantity)) ; node() element() element(nev) attribute() attribute(nev) Any node Any element node Any element with name nev 17

declare namespace ll="http:me.kl"; declare function ll:felez($x as element(auto)) as element(mind) let $c:=2 element mind $x/tipus ; for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending <car> ll:felez($x)</car> Az exp(x) kiszamitasa Rekurziv algoritmus exp(x) = 1 + exp2(x, 1, s, n, m) exp2(x, i, s, n, m) = (s*x)/(n*i) + exp2(x,i+1,s*x, n*i, m), ha i<m 18

Az exp(x) kiszamitasa declare function ll:exp($x as xs:decimal) as xs:decimal let $s := 1 let $n := 1 let $m := 10 let $i:=1 1 + ll:exp2($x,$i,$s,$n,$m) ; let $x := 2 <ered> ll:exp($x)</ered> Az exp(x) kiszamitasa declare function ll:exp2($x as xs:decimal, $i as xs:integer, $s as xs:integer, $n as xs:integer, $m as xs:integer) as xs:decimal let $us := $s*$x let $un := $n*$i ( if ($i < $m) then $us div $un + ll:exp2($x,$i+1,$us,$un,$m) else $us div $un ) ; 19