Table of Contents
Specifikováno konsorciem XML:DB
Podobná koncepce jako 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álně 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...
Rozhraní XML:DB je pro pohodlí programátora členěno do úrovní. Vždy si jednu z nich vybereme a využíváme její 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.
Example 1.1.
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.DatabaseImpl"; prefix = "xmldb:dbxml:///db/"; } else { driver = "org.xmldb.api.reference.DatabaseImpl"; prefix = "xmldb:ref:///"; } Class c = Class.forName(driver); Database database = (Database) c.newInstance(); if ( ! database.getConformanceLevel().equals("1") ) { System.out.println("This program requires a Core Level 1 XML:DB " + "API driver"); System.exit(1); } DatabaseManager.registerDatabase(database); col = DatabaseManager.getCollection(prefix + "addresses"); String xpath = "/address[@id = 1]"; XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = service.query(xpath); ResourceIterator results = resultSet.getIterator(); 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 + " " + e.getMessage()); } finally { if (col != null) { col.close(); } } } }
Open-source referenční implementace XML:DB.
Původně nazývána dbXML.
Velmi dobré úvodní informace lze získat v Introduction to Xindice
Kolekce mohou nebo nemusí mít XML Schema.
Example 1.4. 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
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 servletový kontejner (např. Tomcat, Jetty, Bajie...)
eXist má Jetty server přibalen v instalačním balíku, viz eXist download.
Je možno instalovat na Win NT/2000, Linuxu...
Postupujeme přesně podle instrukcí v eXist Quickstart.
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 webový server: bin\startup.bat.
eXist ohlásí, že se spustil. Případné chybové hlášky loggeru ignorovat.
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...
Vytvoříme kolekci mydocs a do ní přidáme dokument databases.xml (tyto slidy):
Zadáme XPath dotaz, specifikujeme rozsah (ve které koleci hledat), uvedeme, kolik vyhovujících dokumentů v odpovědi vrátit.
eXist sdělí, ve kterých kolekcích které dokumenty vyhovují dotazu: