XQuery: dotazovací jazyk nad XML



Podobné dokumenty
PRG036 Technologie XML

XQuery. Jirka Kosek. Visual FoxPro DevCon června Praha. Copyright 2005 Jiří Kosek

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

PRG036 Technologie XML

Ukládání a vyhledávání XML dat

Využití XML v DB aplikacích

KIV/ZIS cvičení 5. Tomáš Potužák

Dotazování nad stromem abstraktní syntaxe

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY TEMPORÁLNÍ XML DATABÁZE TEMPORAL XML DATABASES

Úvod do databázových systémů

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Databáze SQL SELECT. David Hoksza

TÉMATICKÝ OKRUH Softwarové inženýrství

Dolování v objektových datech. Ivana Rudolfová

Z n a č k o v a c í j a z y k y. XPath, XLink, XQuery, XPointer, XLinkTime, XForms

Tvorba informačních systémů

Úvod do databázových systémů

Operátory ROLLUP a CUBE

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Databáze I. Přednáška 6

Úvod do programovacích jazyků (Java)

Databázové systémy I

Distanční opora předmětu: Databázové systémy Tématický blok č. 5: Dotazovací jazyk XPath Autor: RNDr. Jan Lánský, Ph.D.

Tvorba informačních systémů

6. blok část C Množinové operátory

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Jazyk PL/SQL Úvod, blok

Oracle XML DB. Tomáš Nykodým

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

NSWI096 - INTERNET JavaScript

Dotazování v relačním modelu a SQL

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

Jazyky XQuery a XPath 1

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

Multi-dimensional expressions

Algoritmizace a programování

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Programovací jazyk Pascal

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Dotazování nad XML daty a jazyk XPath

Vstupní požadavky, doporučení a metodické pokyny

Informační systémy ve zdravotnictví. 8. cvičení

Dotazovací jazyky I. Datová krychle. Soběslav Benda

Informační systémy ve zdravotnictví. 6. cvičení

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Algoritmizace prostorových úloh

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Základy XML struktura dokumentu (včetně testových otázek)

ODMG OQL. Jan Forch. Dotazovací jazyky, MFF UK

OQL. (Object Query Language) Michal Bartoš Filip Bureš

MBI - technologická realizace modelu

Datové typy strana 29

PB161 Programování v jazyce C++ Přednáška 9

Deskripční logika. Petr Křemen FEL ČVUT. Petr Křemen (FEL ČVUT) Deskripční logika 37 / 157

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Kapitola 4: SQL. Základní struktura

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Základy programování (IZP)

Formuláře. Internetové publikování. Formuláře - příklad

Algoritmizace prostorových úloh

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Sada 1 - PHP. 03. Proměnné, konstanty

Software602 Form Designer

Objektově orientované programování

J. Zendulka: Databázové systémy 4 Relační model dat 1

l Kontakt s klientem SSP Popis automatizované komunikace s ÚP ČR v součinnosti a exekuci

OQL. Jakub Kýpeť, Ondřej Heřmánek

Databázové systémy Cvičení 5.3

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Databázové systémy. Cvičení 6: SQL

Databázové systémy Cvičení 5

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

PŘETĚŽOVÁNÍ OPERÁTORŮ

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Popis souboru pro generování reportů *.report

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Temporální databáze. Jan Kolárik Miroslav Macík

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

typová konverze typová inference

7.3 Diagramy tříd - základy

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

Transkript:

XQuery: dotazovací jazyk nad XML Jakub Lysák Tomáš Hradecký XML vs. relační model dat XML nepravidelná struktura metadata jsou uložena společně s vlastními daty stromová struktura data mají určené pořadí v dokumentu které může nést informaci data jsou často řídká chybějící informace se řeší vypuštěním elementu Relační model pravidelná struktura metadata uložena zvlášť data jsou plochá data jsou nesetříděná lze je třídit až podle hodnot data jsou obvykle hustá většina sloupců má hodnotu 2 XQuery: úvod se vzrůstajícím používáním XML dokumentů vznikla potřeba vytvořit nový dotazovací jazyk hlavní požadavky: výběr částí dokumentu podle podmínek kombinace dat z různých dokumentů 10/1999 začátek návrhu jazyka konsorcium W3C zatím (6/2002) není dokončen vychází ze stávajících jazyků na dotazování nad XML daty hlavně XPath a Quilt ten je zase ovlivněn XML-QL, ale i SQL 3 XQuery: úvod (2) dvě syntaxe: zapisovaná v XML optimalizovaná pro lidi zatím je jazyk navržen pro získávání informací z dokumentů neposkytuje možnosti pro změnu XML dokumentů s tím se počítá až po dokončení první verze funkcionální jazyk říká, co se má udělat, ne jak se to má udělat možnost optimalizací XML dokument se chápe jako uspořádaný les stromů 4 Příklad (1) items.xml <items> <item status="prodáno"> <itemno> 1234 </itemno> <seller> Jakoubek ze Stříbra </seller> <description> Středověké záchodové prkýnko </description> <reserve-price> 12 345.60 </reserve-price> <end-date> 1. 1. 2003 </end-date> </item> <item> </item> </items> Příklad (2) bids.xml <bids> <bid> <itemno> 1234 </itemno> <bidder> John Smith </bidder> <bid-amount> 9876.50 </bid-amount> <bid-date> 3. 1. 2003 </bid-date> </bid> <bid> </bid> </bids> 5 6

XQuery: syntaxe jazyk je case-sensitive klíčová slova se ale mohou psát velkými i malými písmeny znaky mezi {-- a --} jsou komentáře proměnné začínají znakem $ přiřazení hodnoty: let $p1 := 1, $p2 := 3 posloupnosti: 1 to 3, 1, 2, 3 XQuery: Path Expressions výrazy určující cestu slouží k navigaci v dokumentu postaveny na syntaxi XPath výraz začíná určením uzlu nebo skupiny uzlů funkce document("bids.xml") vrací kořen daného dokumentu pokud výraz začíná /, znamená to implicitní kořen v daném kontextu výraz se skládá z jednotlivých kroků, oddělených lomítkem (/) každý krok znamená přesun ve směru jisté osy např. child, parent, self, XQuery jich podporuje celkem 6 7 8 XQuery: Path Expressions (2) výsledkem každého kroku je posloupnost navzájem různých uzlů ale výsledek může obsahovat stejné hodnoty výsledkem výrazu je posloupnost uzlů z posledního kroku nebo (primitivních) hodnot výsledky jsou vráceny podle pořadí v dokumentu stručná vs. rozšířená syntaxe prezentace výsledků uživateli závisí na implementaci XQuery: Path Expressions (3) Najdi popis všech položek, které nabízí k prodeji pan Smith rozšířená verze document("items.xml")/child::* /child::item[child::seller = "Smith"] /child::decription stručná document("items.xml") /*/item[seller = "Smith"]/description dále budeme používat jen stručnou verzi 9 10 XQuery: Path Expressions (4) Seznam všech elementů descriptions, které se nacházejí v dokumentu items.xml document("items.xml")//description výsledkem je posloupnost uzlů, které se obecně mohou nacházet na různých hladinách Najdi atribut status k položce jejíž popis je zadán proměnnou $description/../@status.. odkazuje na rodiče daného uzlu,. na daný uzel @ znamená jméno atributu 11 XQuery: výběr uzlů predikáty pro výběr píšeme do hranatých závorek závorka může obsahovat podmínku uzel je vybrán, pokud splňuje podmínku item[seller = "Smith"] číslo nebo interval je vybrán uzel, jehož pořadí v dokumentu na dané úrovni odpovídá číslu item[5] jméno uzlu uzel je vybrán, pokud má potomka s daným jménem (nezávisle na hodnotě tohoto potomka) item[reserve-price] 12

Operátory v predikátech (1) porovnání hodnot eq, ne, lt, le, gt, ge porovnávají pouze skalární hodnoty pro posloupnost způsobí chybu item[reserve-price gt 1000] vybere uzel item, pokud má právě jednoho potomka reserve-price s hodnotou >1000 obecné porovnání =,!=, >, >=, <, <= item[reserve-price > 1000] vybere uzel item, pokud má aspoň jednoho potomka reserve-price s hodnotou >1000 13 Operátory v predikátech (2) porovnání uzlů is a isnot $node1 is $node2 je true, pokud obě proměnné odkazují na tentýž uzel porovnání pořadí uzlů v dokumentu $node1 << $node2 je true, pokud se uzel, na nějž ukazuje první proměnná vyskytuje v dokumentu před uzlem, na nějž ukazuje druhá proměnná logické operátory pro kombinaci jednotlivých podmínek lze použít and, or a not item[not(reserve-price)] vybere uzel item, pokud nemá žádného potomka reserve-price 14 Vytváření elementů (1) pokud jsou všechny hodnoty elementu konstantní, vytváří se element zápisem stejným jako v XML: <highbid status="pending"> <itemno>4871</itemno> <bid-amount>250.00</bid-amount> </highbid> pokud jsou hodnoty elementu počítané, použijeme následující zápis: <highbid status="{$s}"> <itemno> {$i} </itemno> <bid-amount> { max($bids[itemno=$i]/bid-amount) } </bid-amount> Vytváření elementů (2) uvnitř vytvářeného elementu můžeme vyrobit posloupnost uzlů následujícím způsobem: <highbid> { $b/@status $b/itemno $b/bid-amount } </highbid> nově vytvořené hodnoty a atributy jsou kopie hodnot uzlů, z nichž byly odvozeny elementy a atributy vytvářené uvnitř elementu se stávají jeho součástí </highbid> 15 16 Vytváření elementů (3) pokud potřebujeme vytvořit element, jehož jméno i obsah se počítají, použijeme následující zápis: element {name($e)} {$e/@*, data($e)*2} výraz v první závorce udává jméno elementu výraz ve druhé závorce specifikuje obsah elementu $e ukazuje na element X obsahující číselnou hodnotu, v příkladu se tedy vytvoří element téhož jména jako X, bude mít tytéž atributy, a obsah vytvořeného elementu bude dvojnásobek hodnoty obsahu X potřebujeme-li vytvořit atribut, jehož jméno i obsah se počítají, použijeme následující zápis: attribute {if $p/sex="m" then "otec" else "matka"} {$p/name} výraz v první závorce udává jméno atributu Iterace a třídění nejjednodušší podoba: for $n in (2, 3) return $n + 1 výsledkem je (3, 4) lze iterovat i přes více proměnných for $m in (2, 3), $n in (5, 10) return <fakt>{$m} krát {$n} je {$m*$n}</fakt> výsledkem je: <fakt>2 krát 5 je 10</fakt> <fakt>2 krát 10 je 20</fakt> <fakt>3 krát 5 je 15</fakt> <fakt>3 krát 10 je 30</fakt> výraz ve druhé závorce specifikuje obsah atributu 17 18

FLWR výrazy (1) Pro každý předmět dražby, který má více než 10 nabídek, vytvořte element popular-item obsahující číslo draženého předmětu, jeho popis a počet nabídek: for $i in document("items.xml")/*/item let $b := document("bids.xml") /*/bid[itemno = $i/itemno] where count ($b) > 10 return <popular-item> { $i/itemno $i/description <bid-count> {count ($b)} </bid-count> } </popular-item> 19 FLWR výrazy (2) FLWR výraz se skládá z jedné více FOR a/nebo LET složek FOR váže proměnnou s posloupností hodnot (která je obvykle určená pomocí path expression) a iteruje přes všechny hodnoty této posloupnosti LET také váže proměnné, ale bez iterace následuje nepovinná složka WHERE za WHERE následuje libovolný výraz RETURN obvykle obsahuje konstrukce nových elementů a proměnné RETURN se volá pro každou sadu uzlů daných FOR/LET/WHERE složkami FLWR výrazy lze řetězit 20 FLWR výrazy (3) ve výrazech lze použít funkce distinct(), avg(), sum(), count() pokud nám na pořadí výstupu nezáleží, můžeme dát před výraz operátor unordered pro třídění výsledků výrazů použijeme sortby pokud bychom chtěli výsledky předchozího dotazu setříděné, stačilo by za něj dopsat sortby bid-count descending Poznámka: sortby lze použít pro setřídění libovolné posloupnosti, nejen u FLWR výrazů Příklad dotazu v XQuery <bib> { for $b in document("http://www.bn.com/bib.xml")/bib/book where $b/publisher = "Addison-Wesley" and $b/@year > 1991 return <book year="{ $b/@year }"> { $b/title } </book> } </bib> 21 22 Výsledek tohoto dotazu <bib> <book year="1994"> <title>tcp/ip Illustrated</title> </book> <book year="1992"> <title>advanced Programming in the Unix environment</title> </book> </bib> XML -> HTML příklad <html><head><title>knihy a autoři</title></head> <body> <table> <tr> <th>název</th> <th>autoři</th> </tr> { for $b in document("bib.xml")/bib/book return <tr> <td>{ $b/title/text() }</td> <td>{ $b/author/last/text()} </td> </tr> } </table> </body> </html> 23 24

Aritmetika v XML Aritmetické operace +, -, *, div, mod unární +, - Logické operace or, and, not Agregační funkce sum, avg, count, max, min Aritmetika - příklad for $e in $emps return <emp> {$e/name <pay> { $e/salary + $e/commission + $e/bonus} </pay>} </emp> SORTBY(pay) 25 26 Typy v XQuery Xquery je typovaný jazyk Základní typy (integer, decimal, float,double,string, ) Uživatelské typy (např. ze schémat) (např. typ address) Elementy a jejich názvy jako typy (např. element book) Typeswitch TYPESWITCH($animal) CASE element pes RETURN haf($animal) CASE element kocka RETURN mnau($animal) DEFAULT RETURN no sound 27 28 Další operace s typy Instance of 57 INSTANCE OF integer $z INSTANCE OF element pes Přetypování CAST AS y:double ($x div 5) Seznamy (výraz, výraz, ) Pro čísla možnost použití mezí: (10, 1 to 4) == (10, 1, 2, 3, 4) Seznamy mohou obsahovat duplikace Prvkem nemůže být jiný seznam (10, (1, 2), (), (3, 4)) == (10, 1, 2, 3, 4) 29 30

Operace se seznamy Sjednocení - union Průnik - intersect Rozdíl - except Tyto operátory ve výsledku také odstraní duplikace Podmínkové výrazy if, then, else Příklad test na existenci atributu if ($img/@alt) then $img/@alt else alternativni text chybi 31 32 Kvantifikace SOME a EVERY Test na splnění podmínky: SATISFIES Příklad: SOME $n IN (5, 7, 9, 11) SATISFIES $n > 10 Kvantifikace příklad Kino s nejvyšším počtem míst <nejvetsi_kino> for $k in document( kina.xml ) where every $k2 in document( kina.xml ) satisfies $k/mista >= $k2/mista return $k </nejvetsi_kino> 33 34 Definování vlastních funkcí define function jméno (typ param, typ param, ) returns typ návratový typ i typy parametrů mohou být vynechány Definování funkcí příklad define function hloubka(element $e) returns xs:integer { if (empty($e/*)) then 1 else max(for $c in $e/* return hloubka($c)) + 1 } hloubka(document("partlist.xml")) 35 36

Struktura dotazu Dvě základní části: Query Prolog (úvodní deklarace) Query Body (vlastní dotaz) Query Prolog Přiřazování prostoru jmen do proměnné: NAMESPACE x= http://www.foo.com Přiřazování defaultních prostorů jmen DEFAULT ELEMENT NAMESPACE= http://www.foo.com DEFAULT FUNCTION NAMESPACE= http://www.lib.com Schema importuje XML schéma SCHEMA http://www.w3.org/1999/xhtml AT http://www.w3org./1999/xhtml/xhtml.xsd 37 38 Budoucí vývoj XQuery XQuery je ve fázi Working Draft Ještě to není přijatý standard Je perspektivním jazykem pro dotazování nad XML Odkazy na implementace Microsoft http://xqueryservices.com X-Hive http://x-hive.com/xquery XML Global http://www.xmlglobal.com 39 40 Odkazy na informace Xquery 1.0: An XML Query Language http://www.w3.org/tr/xquery Perfect XML: An introduction to Xquery http://www.perfectxml.com/articles/xml/xquery.as p XML Query Use Cases http://www.w3.org/tr/xmlquery-use-cases XML Query Language Demo http://xmlqueryservices.com Fin 41 42