XML- und relationale Daten integrieren mit XQuery - eine Einführung

Ideal-Kandidat XQuery

Jonathan Robie

XQuery ist eine vom World Wide Web Consortium (W3C) standardisierte Abfragesprache für XML-Daten. Da sich die meisten Datenarten auch im XML-Format darstellen lassen, ist XQuery der ideale Kandidat, um in Applikationen Informationen aus unterschiedlichsten Datenquellen zu integrieren.

Was SQL als Abfragesprache für relationale Datenbanksysteme bietet, stellt XQuery für die XML-Welt bereit. Das ist jedoch nicht alles: Während SQL auf die relationale Datenbankwelt beschränkt ist, ermöglicht es XQuery, XML- und relationale Datenbestände zusammenzuführen und zu bearbeiten. Für Entwickler bedeutet das einen enormen Fortschritt. Denn lange Zeit war es enorm aufwendig, Applikationen zu erstellen, die unterschiedlichste Datenbestände integrieren. Oft war dazu der Einsatz verschiedener proprietärer und nicht skalierbarer Sprachen und Softwaresysteme nötig.
XQuery dagegen vereinfacht die gemeinsame Bearbeitung von XML- und relationalen Datenbeständen und ermöglicht beispielsweise Java-Entwicklern, direkt aus ihren Applikationen XQuery-Abfragen in relationalen Datenbanken wie Oracle, Microsoft SQL Server und IBM DB2 zu starten. Dieser leistungsfähige Ansatz bedeutet nicht nur, dass Entwickler deutlich weniger Programmcode schreiben müssen: Das Verfahren ist zugleich einfacher in der Anwendung und schneller zu erlernen, denn es basiert auf Standards; letztlich spart dies viel Zeit und Geld in Softwareprojekten.

Mehr als eine einfache Abfragesprache

Um die Unterschiede zu SQL noch einmal zu verdeutlichen: XQuery geht weit über die Funktionalität einer relationalen Abfragesprache hinaus und enthält eine Reihe von Features wie sie aus der funktionalen Programmierung bekannt sind. XQuery ermöglicht, umfangreiche XML-Dokumente mit Path Expressions (XPath) zu durchsuchen, es lassen sich komplexe XML-Strukturen anlegen und so genannte FLOWR-Ausdrücke (mit den Konstrukten for, let, order by, where und return) einsetzen. Schließlich vereinfacht XQuery viele Aufgaben bei Arbeit mit XML Namespaces und Data Types.
Eines der wichtigsten Einsatzgebiete von XQuery ist die Datenintegration. Selbst wenn die Daten physikalisch nicht im XML-Format vorliegen, lässt sich mit XQuery eine View der Daten erzeugen. Denkbar ist etwa folgendes Szenario, in dem via SOAP Daten aus unterschiedlichen Quellen zusammengetragen werden und XQuery dann genutzt wird, um die SOAP-Messages mit weiteren Ergebnissen aus relationalen Datenbanken zusammen zuführen.
Die Spezifikationen für XQuery werden aktuell in der Version 1.0 (Candidate Recommendation vom 8. Juni 2006) vom World Wide Web Consortium diskutiert. Detaillierte Informationen dazu sind unter www.w3.org/XML/Query/ erhältlich.
Es sind jedoch auch bereits einige Implementierungen auf dem Markt verfügbar, z.B. etwa DataDirect XQuery: eine datenbankunabhängige XQuery-Komponente zur Verarbeitung und Aufbereitung von XML-, relationalen und Legacy-Datenformaten wie EDI und CSV. Als XQuery-Engine arbeitet die Software unabhängig vom Server auf jeder Java-Plattform, unterstützt das XQuery für Java API (XQJ) und lässt sich in Java-Programme einbetten. Software-Entwickler und unabhängige Softwarehersteller können XML damit im Rahmen heterogener Datenquellen oder als Zielformat ihrer Datenintegrations-Applikationen einsetzen.

...
//import the XQJ classes
import com.ddtek.xquery.*;
import com.ddtek.xquery.xqj.mediator.DDXQDataSource;

// establish a connection to a data source
DDXQDataSource ds = new DDXQDataSource( );
ds.setJdbcUrl("jdbc:xquery:sqlserver://server1:1433;databaseName=stocks");
XQConnection conn = ds.getConnection("myuserid", "mypswd");

// create an expression object that is used to execute an XQuery query
XQExpression expr = conn.createExpression();

// the XQuery query
String es = "for $h in collection('holdings')/holdings " +
     "where ($h/stockticker='AMZN'" +
     "return $h";

// execute the XQuery query
XQResultSequence result = expr.executeQuery(es);
System.out.println(result.getSequenceAsString());

// free all resources
result.close();
expr.close();
conn.close();

Das XQuery API für Java (XQJ) ist eine Programmierschnittstelle, die speziell für die XQuery-Abfragesprache entwickelt wurde. Dadurch soll ein Pendant zum Java-API für relationale Datenbanken (JDBC = Java Database Connectivity) geschaffen werden. XQJ basiert auf dem XQuery Data Model, ermöglicht Java-Applikationen-XQuerys an jede XML- oder relationale Datenquelle abzusetzen und die Ergebnisse weiterzuverarbeiten. Der XQJ-Standard (JSR 225) entsteht im Rahmen des Java Community Process und befindet sich derzeit noch im Definitionsstadium. Nähere Details sind verfügbar unter: www.datadirect.com/developer/xquery/topics/xqj_tutorial/.

Jonathan Robie ist XML Program Manager bei DataDirect Technologies, einem Tochterunternehmen von Progress Software, in Bedford, Massachusetts.

Geschrieben von
Jonathan Robie
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.