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



Podobné dokumenty
Ukládání a vyhledávání XML dat

PRG036 Technologie XML

PRG036 Technologie XML

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:

XQuery: dotazovací jazyk nad XML

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

Dotazování nad stromem abstraktní syntaxe

Dotazování nad XML daty a jazyk XPath

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

Využití XML v DB aplikacích

Tvorba informačních systémů

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

MBI - technologická realizace modelu

XSLT extensible Stylesheet Language Transformation

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

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

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ů

Maturitní otázky z předmětu PROGRAMOVÁNÍ

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

Oracle XML DB. Tomáš Nykodým

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

Operátory ROLLUP a CUBE

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

Jazyky XQuery a XPath 1

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.

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

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

XML databáze. Přednáška pro kurz PB138 Moderní značkovací jazyky Ing. Petr Adámek

Použití databází na Webu

Syntaxe XML XML teorie a praxe značkovacích jazyků (4IZ238)

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

Implementace XML signatur

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

API pro práci s XML. Jirka Kosek. Poslední modifikace: $Date: 2014/12/17 17:15:28 $ Copyright Jiří Kosek

Základní přehled SQL příkazů

Software602 Form Designer

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

Další XML technologie

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Základy umělé inteligence

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

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

Algoritmy a datové struktury

KAPITOLA 1 Představení platformy Microsoft SQL Server 2008

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

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Značkovací jazyky a spol. HTML/XHTML XML JSON YAML Markdown, Texy!

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

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

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Kurz je rozdělen do čtyř bloků, které je možné absolvovat i samostatně. Podmínkou pro vstup do kurzu je znalost problematiky kurzů předešlých.

Databázové systémy I

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

Úvod do databázových systémů 3. cvičení

Příprava dat v softwaru Statistica

1. Webový server, instalace PHP a MySQL 13

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Úvod 9

Tvorba informačních systémů

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Obsah prezentace. Co je to XML? Vlastnosti. Validita

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

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

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

8.2 Používání a tvorba databází

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

Modul IRZ návod k použití

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

NSWI096 - INTERNET JavaScript

Práce se soubory opakování

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

1 Webový server, instalace PHP a MySQL 13

Úvod do XSLT 2.0. Jirka Kosek Copyright Jiří Kosek

Funkcionální programování. Kristýna Kaslová

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

RELAČNÍ DATABÁZE ACCESS

VISUAL BASIC. Přehled témat

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

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Databáze I. 5. přednáška. Helena Palovská

Tovek Tools. Tovek Tools jsou standardně dodávány ve dvou variantách: Tovek Tools Search Pack Tovek Tools Analyst Pack. Připojené informační zdroje

Import a export dat EU peníze středním školám Didaktický učební materiál

Slučování tabulek. Sloučení dvou tabulek

Materializované pohledy

InterSystems Caché Post-Relational Database

Aplikace pro srovna ní cen povinne ho ruc ení

Průzkumník IS DP. Návod k obsluze informačního systému o datových prvcích (IS DP) vypracovala společnost ASD Software, s. r. o.

RDF a RDF Query. Jakub Nerad 1. prosince Nerad () RDF a RDF Query 1. prosince / 16

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Algoritmizace a programování

Kontingenční tabulky v MS Excel 2010

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

POPIS TECHNICKÉHO ŘEŠENÍ INFORMAČNÍHO SYSTÉMU PRO SBĚR DAT V PROJEKTU SLEDOVÁNÍ DEKUBITŮ JAKO INDIKÁTORU KVALITY OŠETŘOVATELSKÉ PÉČE NA NÁRODNÍ ÚROVNI

Úvod. Programovací paradigmata

KOMPONENTY APLIKACE TreeINFO. Petr Štos ECM Business Consultant

Ukazka knihy z internetoveho knihkupectvi

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

ALGORITMIZACE A PROGRAMOVÁNÍ

Transkript:

XQuery Jirka Kosek Visual FoxPro DevCon 21. 23. června 2005 Praha

úvod do XQuery základy XPath 2.0 FLWOR výrazy typový systém implementace XQuery Agenda 2 / 38

Úvod 3 / 38

Proč potřebujeme XQuery? XML se nepoužívá jen pro přenos dat, ale i jako úložiště strukturovaných dat data je potřeba prohledávat, vybírat z nich dílčí údaje, počítat statistiky, datový model XML je strom SQL nejde využít, protože je navržené pro relační model dat XPath je příliš jednoduchý a mnoho věcí neumí je potřeba nový dotazovací jazyk pro XML = XQuery Úvod 4 / 38

Kořeny XQuery funkcionalita inspirovaná několika jazyky: XPath navigace po stromové struktuře dokumentu SQL agregace dat, filtrování dat XSLT možnost definování struktury výsledného dokumentu a vytváření nových elementů Quilt, XML-QL, OQL prototypy jazyků pro dotazování nad XML vyvíjeno od roku 1999 v rámci W3C Úvod 5 / 38

Standardizace XQuery v současné době je ve fázi poměrně stabilního pracovního návrhu finální verze se očekává na začátku roku 2006 XQuery je definováno několika dílčími normami: XQuery 1.0 and XPath 2.0 Data Model 1 XSLT 2.0 and XQuery 1.0 Serialization 2 XQuery 1.0 and XPath 2.0 Formal Semantics 3 XQuery 1.0: An XML Query Language 4 XML Path Language (XPath) 2.0 5 XQuery 1.0 and XPath 2.0 Functions and Operators 6 v současné době je XQuery jen dotazovací jazyk v budoucnu bude XQuery rozšířeno o další funkcionalitu např. možnost aktualizace dat, fulltextové prohledávání 1 http://www.w3.org/tr/xpath-datamodel/ 2 http://www.w3.org/tr/xslt-xquery-serialization/ 3 http://www.w3.org/tr/xquery-semantics/ 4 http://www.w3.org/tr/xquery/ 5 http://www.w3.org/tr/xpath20/ 6 http://www.w3.org/tr/xpath-functions/ Úvod 6 / 38

XPath 1.0 standard od roku 1999 využívá jej mnoho dalších jazyků XSLT, XML Schema, XML Encryption, XML Signature, Schematron, XSLT 1.0 jazyk pro transformaci dokumentů XML jako dotazovací jazyk používá XPath 1.0 XSLT 2.0 nová verze transformačního jazyka vyžaduje silnější dotazovací jazyk než XPath 1.0 XQuery 1.0 dotazovací jazyk, který je bohatší než XPath XPath 2.0 XPath XQuery XSLT zabraňuje rozštěpení dotazovacích jazyků pro XML jedná se o podstatně rozšířený XPath 1.0 s XPath 1.0 je skoro zpětně kompatibilní využívá se jako dotazovací jazyk v XSLT 2.0 a je základem XQuery 1.0 XQuery 1.0 je nadmnožina XPath 2.0 každý XPath 2.0 je tedy XQuery 1.0 dotaz Úvod 7 / 38

Základní rysy jazyka funkcionální jazyk výrazy lze libovolně kombinovat dohromady výsledek jednoho výrazu může sloužit jako parametr dalšího výrazu funkce nemají vedlejší efekt uzavřenost nad datovým modelem výsledkem XQuery dotazu je vždy instance datového modelu úzké provázání s W3C XML Schema datové typy jsou definovány na základě schématu silná typová kontrola větší bezpečnost někdy více psaní statické typování mnoho kontrol správnosti dotazu lze provést ještě před spuštěním dotazu při jeho analýze Úvod 8 / 38

XPath 2.0 9 / 38

XPath 2.0 jednoduchý dotazovací jazyk nad dokumenty XML operuje nad stromovou strukturou dokumentu XML <osoba> <jméno>pepa</jméno> <syn>pankrác</syn> <syn>servác</syn> </osoba> / osoba jméno syn syn Pepa Pankrác Servác výsledkem dotazu je posloupnost složená z uzlů stromu dokumentu nebo hodnot velmi úsporná syntaxe zaměřená především na navigaci a výběr hodnot ze stromu dokumentu XPath 2.0 10 / 38

Zdroje dat data lze číst přímo ze souboru pomocí funkce doc() doc('katalog.xml')/katalog/polozka v praxi bude XML uloženo v databázi podporující XML funkce collection() umožňuje definovat implementačně závislé zdroje dat collection('obchod/katalogy') funkce může vracet několik dokumentů najednou v některých případech je zdroj dat určen mimo XPath například když se XPath používá uvnitř XSLT XPath 2.0 11 / 38

Cesty v dokumentu nejčastější typ dotazu prochází strom dokumentu po jednotlivých úrovních a vybírá uzly výsledku (: Výběr všech názvů položek v katalogu :) doc('katalog.xml')/katalog/polozka/nazev syntaxe je analogická zápisu cesty k souboru na disku lze použít i známé zkratky. (aktuální uzel) a.. (rodič) výsledné uzly jsou vždy vráceny v pořadí, v jakém se vyskytují v dokumentu ze seznamu uzlů výsledku jsou odstraněny duplicitní uzly XPath 2.0 12 / 38

Divoké znaky neznáme-li přesně hloubku elementu, můžeme použít // (: Výběr všech elementů název :) doc('katalog.xml')/katalog//nazev výběr elementu s jakýmkoliv názvem (*) (: Výběr všech elementů uvnitř položky :) doc('katalog.xml')/katalog/polozka/* XPath 2.0 13 / 38

Predikáty umožňují snadné filtrování uzlů (: Výběr první položky :) doc('katalog.xml')/katalog/polozka[1] (: Výběr poslední položky :) doc('katalog.xml')/katalog/polozka[last()] (: Výběr názvů položek dražších než 10000 :) doc('katalog.xml')/katalog/polozka[cena > 10000]/nazev XPath 2.0 14 / 38

Funkce lze používat v predikátech (: Výběr názvů položek, které obsahují text "MiniDisc" :) doc('katalog.xml')//polozka/nazev[contains(., 'MiniDisc')] nebo samostatně pro výpočet hodnoty (: Spočítání počtu položek v katalogu :) count(doc('katalog.xml')//polozka) (: Zjištění průměrné ceny položky v katalogu :) avg(doc('katalog.xml')//polozka/cena) XPath 2.0 15 / 38

Přehled funkcí práce s řetězci regulární výrazy základní matematické operace práce s datem, časem a intervaly agregační funkce (count, sum, avg, min, max) práce s posloupnostmi práce se stromem dokumentu XML a jeho uzly XPath 2.0 16 / 38

Osy lomítko v XPathu výrazu odděluje jednotlivé části cesty a hledá další uzly mezi dětmi XPath umožňuje prohledávat i jiné uzly než jen děti (: Výběr položek, za kterými následuje položka s reproduktorem :) doc('katalog.xml')//polozka[following-sibling::polozka[1][kategorie = 'Reproduktory']] podporované osy: ancestor ancestor-or-self attribute child descendant descendant-or-self following following-sibling parent preceding preceding-sibling self XPath 2.0 17 / 38

mohou vzniknout výběrem uzlů se stromu dokumentu nebo uměle vytvoření posloupnosti obsahujících 100 čísel od jedné do sta je velmi jednoduché: 1 to 100 Posloupnosti posloupnosti lze dále zpracovávat pomocí příkazu for (: Vygenerování poslupnosti čísel od 1 do 10 a jejich mocnin :) for $i in (1 to 10) return ($i, $i * $i) XPath 2.0 18 / 38

podmíněné výrazy (if then else ) kvantifikátory Další možnosti existenční kvantifikátor ( some $x in poslupnost satisfies podmínka všeobecný kvantifikátor ( every $x in posloupnost satisfies podmínka (: Výpis prvočísel mezi 1 a 100 :) for $i in (2 to 100) return if (every $j in (2 to $i - 1) satisfies $i mod $j ne 0) then $i else () XPath 2.0 19 / 38

FLWOR výrazy 20 / 38

FLWOR výrazy XPath 2.0 je celkem silný dotazovací jazyk, ale zápis složitějších podmínek je někdy nepřehledný výsledek dotazu nejde seřadit na výstupu nejde generovat nové elementy FLWOR [flaur] výrazy tyto nevýhody XPathu odstraňují XQuery = XPath 2.0 + FLWOR výrazy + výrazy konstruující nové elementy + uživatelsky definované funkce + několik dalších direktiv FLWOR výrazy 21 / 38

Struktura FLWOR výrazu FOR výběr posloupnosti uzlů k dalšímu zpracování LET přiřazení proměnných pro každý prvek posloupnosti WHERE filtrování uzlů v posloupnosti ORDER BY seřazení vybraných a odfiltrovaných uzlů RETURN specifikace výstupu pro každý vybraný a odfiltrovaný uzel FLWOR výrazy 22 / 38

Ukázkový dotaz (: Vypsání názvů všech minidisků do elementu minidisk :) for $p in doc('katalog.xml')//polozka where $p/kategorie = 'MiniDisc' order by $p/cena return <minidisk cena="{ $p/cena }"> { string($p/nazev) } </minidisk> FLWOR výrazy 23 / 38

Seskupování dat přímá podpora není, ale pomocí funkce distinct-value lze jednoduše simulovat (: Vypsání kategorií, průměrné ceny a počtu výrobků v každé kategorii :) for $k in distinct-values(doc('katalog.xml')//polozka/kategorie) let $p := doc('katalog.xml')//polozka[kategorie = $k] return <kategorie> <nazev>{ $k }</nazev> <prcena>{ avg($p/cena) }</prcena> <pocetv>{ count($p) }</pocetv> </kategorie> FLWOR výrazy 24 / 38

Zanořování dotazů XQuery je funkcionální jazyk a proto je možné jednotlivé výrazy navzájem kombinovat a zanořovat (: Vypsání všech kategorií a výrobků, které do ní patří :) for $k in distinct-values(doc('katalog.xml')//polozka/kategorie) return <kategorie> <nazev>{ $k }</nazev> { for $p in doc('katalog.xml')//polozka[kategorie = $k] return <vyrobek>{ string($p/nazev) }</vyrobek> } </kategorie> FLWOR výrazy 25 / 38

Spojení dat jeden dotaz může sahat do libovolného množství dokumentů XML spojení dat se provede ručně, pomocí podmínky s využitím predikátu a proměnné funguje podobně jako OUTER JOIN (: Spojení dvou XML dokumentů pomocí predikátu :) for $p in doc('katalog.xml')//polozka let $v := doc('vyrobci.xml')//vyrobce[nazev = $p/vyrobce] return <polozka> { $p/nazev, $p/vyrobce, $v/web } </polozka> s využitím where funguje jako INNER JOIN (: Spojení dvou XML dokumentů pomocí where :) for $p in doc('katalog.xml')//polozka for $v in doc('vyrobci.xml')//vyrobce where $v/nazev = $p/vyrobce return <polozka> { $p/nazev, $p/vyrobce, $v/web } </polozka> FLWOR výrazy 26 / 38

Konstruování nových elementů dotaz může přímo obsahovat fragmenty kódu XML uvnitř fragmentů lze používat XQuery podvýrazy uzavřené do { } <pozdrav>ahoj</pozdrav>, 1 to 3, <osoba><jméno>pepa</jméno><věk>30</věk></osoba>, <prcena>{ avg(doc('katalog.xml')//polozka/cena) }</prcena> FLWOR výrazy 27 / 38

Generování HTML kódu konstruování nových fragmentů lze výhodně využít například pro generování kódu HTML <html> <head> <title>přehled výrobků</title> </head> <body> <table> <tr> <td>název</td> <td>cena</td> </tr> { for $p in doc('katalog.xml')//polozka order by $p/nazev return <tr> <td> { string($p/nazev) } </td> <td> { string($p/cena) } </td> </tr> } </table> </body> </html> FLWOR výrazy 28 / 38

Typový systém 29 / 38

Typový systém dokumenty XML mohou datové typy využívat různě XQuery proto musí nabízet velmi flexibilní práci s typovými informacemi datové typy vůbec nepoužíváme využíváme datové typy až při provádění dotazu datové typy využíváme tak, že typovou kontrolu lze provést ještě před spuštěním dotazu kombinujeme předchozí přístupy k dispozici jsou typy XML schémat a uživatelsky definované typy v importovaných schématech Typový systém 30 / 38

Nepoužíváme typy pro dokumenty XML nemáme schéma v dotazech neprovádíme přetypování všechny hodnoty se pak chápou jako textové řetězce a pouze u funkcí, které očekávají jako parametr jiný typ (třeba číslo), se provede pokus o automatické přetypování špatně se řadí a porovnávají například čísla nebo datumy (: Seřazení položek podle jejich ceny. Bez informace o typu se provede lexikografické sařezení. :) for $p in doc('katalog.xml')//polozka order by $p/cena return <vyrobek> { $p/nazev, $p/cena } </vyrobek> Typový systém 31 / 38

Ruční přetypování v případě potřeby můžeme hodnotu ručně přetypovat na nějaký jiný datový typ (: Pomocí ručního přetypování dosáhneme korektního seřazení :) for $p in doc('katalog.xml')//polozka order by xs:decimal($p/cena) return <vyrobek> { $p/nazev, $p/cena } </vyrobek> Typový systém 32 / 38

Automatické přiřazení typů pro dokument máme schéma, kde jsou definovány typy <xs:element name="cena" type="xs:decimal"/> toto schéma naimportujeme do dotazu import schema "urn:x-pokus:schemas:katalog" at "katalog.xsd" jakékoliv dotazy na uzel odpovídající elementu cena nyní budou vracet číselný typ, a ne textový řetězec (: Naimportováním schématu zajistíme validaci dokumentu a přiřazení datových typů jednotlivým uzlům. Seřazení podle elementu cena tak bude fungovat správně. :) import schema "urn:x-kosek:schemas:katalog" at "katalog.xsd"; declare namespace k = "urn:x-kosek:schemas:katalog"; for $p in doc('katalog-s-typy.xml')//k:polozka order by $p/k:cena return <vyrobek> Typový systém 33 / 38

Automatické přiřazení typů (Pokračování) { $p/k:nazev, $p/k:cena } </vyrobek> jedná se nepovinnou funkcionalitu XQuery implementací Typový systém 34 / 38

Využití typů a schémat validace a otypování vstupních dat validace generovaných dat signatury funkcí určení typů proměnných (: Nenalezne-li se výrobce ohlásí dotaz chybu, protože proměnná $v nebude obsahovat právě jeden element :) for $p in doc('katalog.xml')//polozka let $v as element() := doc('vyrobci.xml')//vyrobce[nazev = $p/vyrobce] return <polozka> { $p/nazev, $p/vyrobce, $v/web } </polozka> některé implementace nabízejí statickou typovou kontrolu Typový systém 35 / 38

Další informace 36 / 38

Implementace XQuery standard XQuery ještě není finalizovaný většina výrobců databází již ve stávajících nebo připravovaných produktech podporuje návrhy XQuery většinou je možné v jednom dotazu míchat SQL a XQuery existují i samostatné XQuery enginy nebo middlewarové produkty podporující XQuery přehled implementací http://www.w3.org/xml/query.html#products Další informace 37 / 38

Další zdroje informací stránky W3C o XQuery 7 pěkný tutoriál základů XQuery 8 PDF verze těchto slidů 9 zdrojové texty příkladů 10 7 http://www.w3.org/xml/query 8 http://www.datadirect.com/developer/xquery/xquerybook/index.ssp 9 http://www.kosek.cz/xml/2005devcon/xquery.pdf 10 http://www.kosek.cz/xml/2005devcon/priklady.zip Další informace 38 / 38