Rozhraní pro práci s XML databázemi

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

  • Simple XML Manipulation Language (SiXDML)

  • Definuje syntax a semantiku pro nejobvyklejší akce nad XML úložišti.

  • XML:DB definovala dále jazyk pro aktualizaci XML Dat

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".