Kapitola 1. XQuery, 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 - spustení v Saxon 8.4b ..............................................................................3
Příklad - výsledek ...............................................................................................4
XQuery konstrukce .....................................................................................................4
FLWOR ............................................................................................................4
FL WOR - jednoduchý příklad ...............................................................................5
Implementace XQuery .................................................................................................5
SAXON od verzí 7.x............................................................................................5
Nativní XML databáze .........................................................................................5
Základní problémy efektivního ukládání a zpracování XML dat ...........................................5
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...........................................................................................6
Ukázka XML:DB programu..................................................................................6
Použití XUpdate v databázích s XML :DB ................................................................8
Implementace XML:DB rozhraní ...................................................................................8
Apache Xindice ..................................................................................................8
Ukázka interakce s Xindice ...................................................................................8
Ukázka interakce s Xindice (2) ..............................................................................9
Ukázka interakce s Xindice (3) ..............................................................................9
eXist.................................................................................................................9
eXist: instalace a spuštění .....................................................................................9
eXist: použití přes webové rozhraní ......................................................................10
eXist: vložení dokumentu do kolekce....................................................................10
eXist: dotazování - zadání dotazu .........................................................................10
eXist: dotazování - sumarizovaný výsledek dotazu ..................................................10
eXist: dotazování - prohlížení jednotlivých výsledků dotazu......................................10
Dotazovací jazyky pro XML
Dotazování nad XML
i
XQuery, 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.1. Zdrojový dokument
Petr
2
XQuery, XML databáze
Novák
19 69-05-14
novak@myfriends.com
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
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 1.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
XQuery, XML databáze
• instalovat Saxon, např. 8.4b ("b" značí open-source větev) rozbalením do adresáře - např.
c:\devel\saxon8.4b
• přepnout se do tohoto adresáře: cd c: \devel\saxon8 . 4b
• uložit výše uvedený dotaz např. do souboru las tname s.xq.
• výše uvedený dokument s "addressbook" uložíme do myaddr e s ses. xml ve stejném adresáři.
• z příkazové řádky spustit: java -classpath saxon8.jar netsf.saxon.Query -o result.xml lastna-mes.xq
Příklad - výsledek
Uvedený XQuery dotaz vrátí do souboru result. xml nad zmíněným dokumentem toto: Příklad 1.3. Výsledek aplikace dotazu
Novák Nováček Horák Polák
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).
4
XQuery, XML databáze
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 1.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
• 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 netsf.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
5
XQuery, XML databáze
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
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 O - 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 1.5. Příklad programu využívajícího XML:DB
6
XQuery, XML databáze
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:///" ; }
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(); } }
7
XQuery, XML databáze
Použití XUpdate v databázích s XML:DB
Příklad 1.6. Příklad modifikace pomocí XUpdate
Herman
Tento XUpdate dotaz nahradí příjmení za „Herman".
Implementace XML:DB rozhraní
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 1.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
8
XQuery, XML databáze
Ukázka interakce s Xindice (2)
Příklad 1.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
Zrušení dokumentu z databáze (-Delete Document)
xindice dd -c /db/mojedok -n mujklic
Ukázka interakce s Xindice (3)
Příklad 1.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í
9
XQuery, XML databáze
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
• řídit se instalačními pokyny, instalovat např. do \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.
• 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 (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í
10