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