Dotazování nad XML, XML databáze Obsah Dotazovací jazyky pro XML .........................................................................................1 Dotazování nad XML ..........................................................................................................1 XQuery .....................................................................................................................2 Charakteristika ...................................................................................................................2 Charakteristika (2)...............................................................................................................2 Kde se XQuery použije (a nepoužije) ......................................................................................2 Příklad - zdrojový dokument .................................................................................................2 Příklad - jednoduchý dotaz XPath...........................................................................................3 Příklad - spuštění v Saxon 8.4b ..............................................................................................3 Příklad - výsledek ...............................................................................................................4 XQuery konstrukce .....................................................................................................5 FLWOR ............................................................................................................................5 FL WOR - jednoduchý příklad ...............................................................................................5 Implementace XQuery .................................................................................................5 SAXON od verzí 7.x............................................................................................................5 Nativní XML databáze .........................................................................................................6 Základní problémy efektivního ukládání a zpracování XML dat ...........................................6 Základy efektivního ukládání XML dat ...................................................................................6 Rozhraní pro práci s XML databázemi ............................................................................6 Rozhraní XML :DB..............................................................................................................6 Vrstvy XML:DB API...........................................................................................................7 Ukázka XML:DB programu..................................................................................................7 Použití XUpdate v databázích s XML :DB ................................................................................8 Implementace XML:DB rozhraní ...................................................................................8 Apache Xindice ..................................................................................................................9 Ukázka interakce s Xindice ...................................................................................................9 Ukázka interakce s Xindice (2) ..............................................................................................9 Ukázka interakce s Xindice (3) ............................................................................................10 eXist...............................................................................................................................10 eXist: instalace a spuštění ...................................................................................................10 eXist: použití přes webové rozhraní ......................................................................................11 eXist: vložení dokumentu do kolekce....................................................................................11 eXist: dotazování - zadání dotazu .........................................................................................11 eXist: dotazování - sumarizovaný výsledek dotazu ..................................................................11 eXist: dotazování - prohlížení jednotlivých výsledků dotazu......................................................11 Dotazovací jazyky pro XML Dotazování nad XML i Dotazování nad XML, XML databáze J../../PB 13 8-2003 -XML.Databaze.pdf XQuery Charakteristika • Jazyk pro specifikaci dotazů k vyhledání a extrakci uzlů XML (elementy, atributy) z dokumentů a konstrukci výstupního XML dokumentu. Charakteristika (2) • V současnosti (a zdá se i budoucnosti) je XQuery základním dotazovacím jazykem nad XML dokumenty. Definován konsorciem W3C, stane se specifikací - momentálně ve stavu Last Call Working Draft, viz http://www.w3.org/XML/Query. • Založen na XPath 2.0 datovém modelu, operátorech a funkcích • Podporují ho hlavní producenti databázových strojů (IBM, MS, Oracle a další) Kde se XQuery použije (a nepoužije) XQuery se typicky použije např. pro: • dotazy, kde je složitější extrakční (selekční) část a jednodušší konstrukční část • v opačném případě je lépe použít XSLT • nebo dokonce zpracování obecnějším programovacím prostředím - např. manipulaci s (DOM) objektovým stromem dokumentu. Příklad - zdrojový dokument Ukázka zdrojového dokumentu, XQuery dotazů nad nimi a jejich výsledku. Příklad 1. Zdrojový dokument Petr 2 Dotazování nad XML, XML databáze Novák 19 69-05-14 novak@myfriends.com characteristics lang="en">Very good friend Jaroslav Nováěek 19 68-0 6-14 novacek@myfriends.com Another good friend Jan Horák 197 0-02-0K/date-of-birth> horak@mycompany.com Characteristics lang="en">Just colleague Erich Polák 19 8 0-02-2 8 erich@myfriends.com Good friend Příklad -jednoduchý dotaz XPath Ukázka XQuery dotazu nad výše uvedeným zdrojovým dokumentem. Úloha: "extrakce všech příjmení v adresáři". Dotaz je v podstatě XPath výrazem - vybere tedy všechny elementy lastname. Příklad 2. XQuery doc('myaddresses.xml')/addressbook/person/lastname Příklad - spuštění v Saxon 8.4b XSLT procesor Saxonje od verzí 8.x rovněž XQuery procesorem. K vykonání XQuery dotazuje třeba: 3 Dotazování nad XML, XML databáze • instalovat Saxon, např. 8.4b ("b" značí open-source větev) rozbalením do adresáře - např. c:\devel\saxon8.4b I n i. n r, tW [■ h [http://www.instantweb.com/foldoc/foldoc.cgi?c:\devel\saxon8.4b]WlKIPFniA Thr tni- Fit ■■ Lnifai [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=c:\devel\saxon8.4b] • přepnout se do tohoto adresáře: cd c:\devel\saxon8.4b In^untWeb [http://www.instantweb.com/foldoc/foldoc.cgi?c:\devel\saxon8.4b]VťlPCIPFľJlA Ihr pni" r i L i. int ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=c:\devel\saxon8.4b] I n ?>La ntW clr [http://www.instantweb.com/foldoc/foldoc.cgi7cd ] Vťl KIIM-. I JI A Tlip Pni- Fil i. L-aanL i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=cd] uložit výše uvedený dotaz např. do souboru lastnames.xq InüuritWeb [http://www.instantweb.com/foldoc/foldoc.cgi71astnames.xq] Wl fCIPRIll A Tlir rnvl.L..LrL [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=lastnames.xq]. • výše uvedený dokument s "addressbook" uložíme do myaddresses. xml InüuntWeb [http://www.instantweb.com/foldoc/foldoc.cgi7myaddresses.xmljWlKIPRDlA ill p F pit r i h ■ ■ L nikl [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=myaddresses.xml] ve stejném adresáři. • z příkazové řádky spustit: java -classpath saxon8.jar netsf.saxon.Query -o result.xml lastnames.xq InjiTjntWEb [http://www.instantweb.com/foldoc/foldoc.cgi7java -classpath saxon8.jar net. sfsaxon. Query -o result.xml lastnames.xq] Wl fCIPEfll A Tpip ppi*1 Fil i. 1'Baih ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=java -classpath saxon8.jar net. sfsaxon. Query -o result.xml lastnames.xq] Příklad - výsledek Uvedený XQuery dotaz vrátí do souboru result.xml |nSm-|ti [http://www.instantweb.com/foldoc/foldoc.cgi7result.xml] Wrl KIPI-. I )l A Hir Fm- Fii m L-^a-ib i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=result.xml] nad zmíněným dokumentem toto: Příklad 3. Výsledek aplikace dotazu Novák Nováček Horák Polák 4 Dotazování nad XML, XML databáze XQuery konstrukce FLWOR FLWOR je zkrácené označení pro strukturu XQuery dotazů. Je to akronym z: (F)or Úvodní část dotazu specifikuje cyklus vč. řídicí proměnné, do níž jsou postupně přiřazo- vány jednotlivé hodnoty vybrané XPath výrazem za klíčovým slovem "in". (L)et V této sekci lze provést přiřazení do dalších proměnných použitelných následně. (W)here Specifikuje selekční podmínku, tzn. které uzly (hodnoty) vybrané ve "for" budou skutečně použity. V podmínce lze použít i proměnné vázané v sekci "let". (O)rder Takto vybrané uzly (hodnoty) lze výrazem v této sekci uspořádat. (R)eturn Co bude vráceno, zkonstruováno ze získaných uzlů (hodnot). FLWOR -jednoduchý příklad Selekci uzlů lze specifikovat buďto přímo v XPath výrazu ve "for" nebo až v selekčním "where". "Vrať datum narození Poláka." Příklad 4. FLWOR for $person in doc('myaddresses.xmľ)/addressbook/person where $person/lastname='Polák' return $person/date-of-birth Spuštění vrátí: 19 8 0-02-2 8 Implementace XQuery SAXON od verzí 7.x 5 Dotazování nad XML, XML databáze • instalovat (rozbalit) Saxon od verze 7.x (lze i 8.x) rozbalením do libovolného adresáře • přepnout se do tohoto adresáře a • z příkazové řádky spustit: java -classpath saxon8.jar net.sf.saxon.Query -o result.xml query.xq InsuntWeb [http://www.instantweb.com/foldoc/foldoc.cgi7java -classpath saxon8.jar net. sf. saxon. Query -o result.xml query.xq]WlTCIPEľJlA lir r ni1 Fib ■■ Lnibi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=java -classpath saxon8.jar net.sf.saxon.Query -o result.xml query.xq] Nativní XML databáze Nativní XML databázové systémy často podporují dotazování přes XQuery. Patří mezi ně např.: • Berkeley DB XML [http://www.sleepycat.com/products/index.shtml] • eXist [http://exist.sourceforge.net/] Základní problémy efektivního ukládání a zpracování XML dat Základy efektivního ukládání XML dat Přednáška Petra Adámka (PDF) [../../../PB138-2003-XML.Databaze.pdf] Rozhraní pro práci s XML databázemi Rozhraní XML:DB Specifikováno konsorciem XML:DB [http://xmldb.org] • Podobná koncepce jako JDBC [http://java.sun.com/products/jdbc/] • Rozhraní je specifikováno na poměrně abstraktní úrovni, implementační detaily jsou skryty. • Základní objekty: Driver - podobně jako JDBC Driver - abstrahuje přístup ke konkrétnímu DBS, implementuje rozhraní Database 6 Dotazování nad XML, XML databáze DatabaseManager - řídí zavádění a správu jednotlivých ovladačů (Driver) databázových systémů Collection - kolekce XML dokumentů v databázi. Konceptuálne srovnatelné s relační tabulkou (či celou databází). Kolekce totiž mohou být libovolně vnořené. Services - rozhraní konkrétních služeb. Bez nich by XML:DB takřka nemělo smysl - teprve služby definují, co databáze „umí". Typickou službou je např. XPathQueryService na vyhledávání dokumentů a jejich částí přes XPath. Další službou je např. XUpdateQueryService. Resource - zhruba odpovídá JDBC resource. Obecně „nějaký" zdroj - nemusí být jen XML, ale i binární. Je-li XML, pak např. SAX, DOM, XML text... Vrstvy XML:DB API Rozhraní XML:DB je pro pohodlí programátora členěno do úrovní. Vždy si jednu z nich vybereme a využíváme j ej í nabídky: XML:DB Core Level 0 - musí implementovat všechny DBS. Obsahuje základní rozhraní pro kolekce (collections), zdroje (resources), and služby (services). XML:DB Core Level 1 - navíc obsahuje XPathQueryService. Ukázka XML:DB programu Příklad 5. Příklad programu využívajícího XML:DB import org.xmldb.api.base.*; import org.xmldb.api.modules.* ; import org.xmldb.api.* ; public class Query { public static void main(String[] args) throws Exception { Collection col = null; try { String driver = null; String prefix = null; if ( ( args.length == 1 ) && args[0].equals("dbxml") ) { driver = "org.dbxml.client.xmldb.Databaselmpl"; prefix = "xmldb:dbxml:///db/"; } else { driver = "org.xmldb.api.reference.Databaselmpl"; prefix = "xmldb:ref:///" ; 7 Dotazování nad XML, XML databáze } Class c = Class.forName(driver); Database database = (Database) c.newlnstance(); if ( ! database.getConformanceLevel().equals("1") ) { System.out.println("This program requires a Core Level 1 XML:DB " System.exit(1); } DatabaseManager.registerDatabase(database); col = DatabaseManager.getCollection(prefix + "addresses"); String xpath = "/address[@id = 1]"; XPathQueryService service = (XPathQueryService) col.getService("XPathQ ResourceSet resultSet = service.query(xpath); Resourcelterator results = resultSet.getlterator(); while (results.hasMoreResources()) { Resource res = results.nextResource(); System.out.println((String) res.getContent()); } } catch (XMLDBException e) { System.err.println("XML:DB Exception occurred " + e.errorCode + " " + } finally { if (col != null) { col.close(); } } } } Použití XUpdate v databázích s XML:DB Příklad 6. Příklad modifikace pomocí XUpdate Herman Tento XUpdate dotaz nahradí příjmení za „Herman". Implementace XML:DB rozhraní Dotazování nad XML, XML databáze Apache Xindice Open-source referenční implementace XML:DB. • Původně nazývána dbXML. • Velmi dobré úvodní informace lze získat v Introduction to Xindice [http://www-106.ibm.com/developerworks/web/library/wa-xindice.html] Ukázka interakce s Xindice Kolekce mohou nebo nemusí mít XML Schema. Příklad 7. Vytvoření a manipulace s kolekcí „mojedok" xindiceadmin ac -a /db -n mo systém odpoví Created: /db/mojedok dotaz na seznam kolekcí (Listing Collection - lc) v /db xindiceadmin lc -c /db zrušení kolekce (Delete Collection - de) v /db xindiceadmin dc -c /db -n mojedok Ukázka interakce s Xindice (2) Příklad 8. Přidání, získání, zrušení dokumentu do/z kolekce „mojedok" Přidání souboru (-Add Document, -File [filename], -n specifikuje klíč): xindice ad -c /db/mojedok -f c:/devel/mojedokumenty/md.xml -n mujklic Získání dokumentu zpět (-Retrieve Document, -File) xindice rd -c /db/mojedok -f c:/devel/mojedokumenty/md.out.xml 9 Dotazování nad XML, XML databáze Zrušení dokumentu z databáze (-Delete Document) xindice dd -c /db/mojedok -n muj klič Ukázka interakce s Xindice (3) Příklad 9. Dotazování na kolekci „mojedok" zrušení kolekce (Delete Collection - de) v /db xindice xpath -c /db/mojedok -q /parts/part[@sku="101"] eXist eXist je podobně jako Xindice open-source databáze podporující XML:DB. Je možné ji provozovat jako: samostatně běžící (standalone) server, přístupný soketovým spojením (XML-RPC, HTTP) • jako in-process (embedded) -server běžící v témže běhu JVM jako aplikace, která jej používá • jako webová aplikace - .war archív, který se instaluje (deploy) na servletovy kontejner (např. Tomcat, Jetty, Bajie...) • eXist má Jetty server přibalen v instalačním balíku, viz eXist download [???]. eXist: instalace a spuštění Je možno instalovat na Win NT/2000, Linuxu... Postupujeme přesně podle instrukcí v eXist Quickstart [http://exist-db.org/quickstart.html]. Doporučuji (odzkoušeno na Win 2000 Pro): spustit Java -jar eXist-0.9.1-install.jar in^untWeb [http://www.instantweb.com/foldoc/foldoc.cgi7java -jar eXist-0.9.1-installjar]Wrllil Pľ.lJI A [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=java -jar eXist- 0.9.1-install.jar] • řídit se instalačními pokyny, instalovat např. do \devel\eXist |nsLanti 10 Dotazování nad XML, XML databáze [http://www.instantweb.com/foldoc/foldoc.cgi?\devel\eXist]WlKIPRDlA ill r r n t Fib ■■ '" *■ ni [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=\devel\eXist]. • přepnout se do instalačního adresáře, otevřít Command Shell/Prompt a spustit eXist přes Jetty webo-vý server: bin\startup.bat InimntWeb [http://www.instantweb.com/foldoc/foldoc.cgi?bin\startup.bat] Wl K IPFIll A [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=bin\startup.bat]. • eXist ohlásí, že se spustil. Případné chybové hlášky loggeru ignorovat. eXist: použití přes webové rozhraní Pokud se v konfiguracích nic neměnilo, je služba eXist dostupná přes URL podobné tomuto: http://kleopatra.fi.muni.cz:8080/exist/. (tj. port 8080, cesta/exist) Nyní můžeme vytvořit kolekci, přidat soubor, dotazovat se... eXist: vložení dokumentu do kolekce Vytvoříme kolekci mydocs a do ní přidáme dokument databases .xml IntTjritWeb [http://www.instantweb.com/foldoc/foldoc.cgi7databases.xml] Vťl KI Pí: 131A T i r p m ■ ml i. L ■ ■ "i L ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=databases.xml] (tyto slídy): eXist: dotazování - zadání dotazu Zadáme XPath dotaz, specifikujeme rozsah (ve které koleci hledat), uvedeme, kolik vyhovujících dokumentů v odpovědi vrátit. eXist: dotazování - sumarizovaný výsledek dotazu eXist sdělí, ve kterých kolekcích které dokumenty vyhovují dotazu: eXist: dotazování - prohlížení jednotlivých výsledků dotazu eXist pro každý vyhovující dokument vrátí uzly, které dotazu vyhovují 11