Rozhraní pro práci s XML databázemi
-
XUpdate, nyní XQuery Update Facility (součást XQuery aktivit)
Rozhraní XML:DB
-
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řistup ke konkretní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ázi). Kolekce totiž mohou byt libovolné vnořené.
-
Services - rozhraní konkretní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í dokumentu a jejich částí přes XPath. Další službou je např. XUpdateQueryService.
-
Resource - zhruba odpovídá JDBC resource. Obecně "nějaký" zdroj - nemusí byt jen XML, ale i binarní. Je-li XML, pak napr. 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 její nabídky:
-
XML:DB Core Level 0 - musí implementovat všechny DBS. Obsahuje základní rozhraní pro kolekce (collections), zdroje (resources) a služby (services).
-
XML:DB Core Level 1 - navíc obsahuje XPathQueryService.
-
Ukázka XML:DB programu
Příklad 1. 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.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(); }
}
}
}
Jazyky a definované iniciativou XML:DB
SiXDML
-
Inspirován jazykem SQL
-
Má dvě části inspirované SQL:
-
Data Definition Language
-
Slouží k definici kolekcí dokumentů/dat
-
-
DML
-
Slouží k dotazům a manipulaci s dokumenty/daty
-
-
SiXDML — DDL
Základní příkazy pro CRUD operace s kolekcemi pro uchováni dat:
-
CREATE COLLECTION
-
Vytvoří kolekci na dané cestě
-
Cesta je definována pomocí XPath výrazu
-
Umožňuje definovat omezení na kolekci — využívá se XML Schéma
-
-
Příklady příkazu CREATE COLLECTION
CREATE COLLECTION school
CREATE COLLECTION school/students
CREATE COLLECTION school/teachers CONSTRAINED BY http://www.fi.muni.cz/~bar/pb138/teachers.xsd
-
SHOW COLLECTION
-
DROP COLLECTION
-
CREATE INDEX
-
SHOW INDEX
-
DROP INDEX
-
Další viz návrh standardu
SiXDML — DML
-
Slouží ke CRUD operacím nad daty v kolekcích.
-
Základní příkazy:
-
INSERT
-
INSERT {element s údaji o studentovi} IN COLLECTION http://www.fi.muni.cz/~bar/pb138/school.xml
-
Příkaz má 3 varianty
-
INSERT BEFORE — vkládá data před element definovaný pomocí XPath výrazu
-
INSERT INTO
-
INSERT AFTER — vkládá data za element definovaný pomocí XPath výrazu
-
-
SELECT
SELECT //student from http://www.fi.muni.cz/~bar/pb138/school.xml
-
RENAME
RENAME //student/@uco TO id IN COLLECTION http://www.fi.muni.cz/~bar/pb138/school.xml
-
DELETE
DELETE //student[@uco="12345678"] FROM COLLECTION http://www.fi.muni.cz/~bar/pb138/school.xml
Použití XUpdate v databazích s XML:DB
Příklad 2. Příklad modifikace pomocí XUpdate
<xupdate:modifications version="1.0" xmlns:xupdate="http://www.xmldb.org/xupdate">
<xupdate:update select="/address[@id = 1]/name/last">Herman</xupdate:update>
</xupdate:modifications>
Tento XUpdate dotaz nahradí příjmení za "Herman".