Content Analysis Standards development Heterogeneity MEtadata REtrieval Newsletters
   
Latest Newsletter
12.08.2005
XPath & XQuery
XPath & XQuery

Newsletter Discussion


Zusammenfassung

XQuery, basierend auf XPath Expressions, ist eine Sprache, mit der XML-Daten abgefragt werden können. Dieser Newsletter behandelt die Erstellung von XPath Expressions, diskutiert die Syntax von XQuery und stellt schließlich die Formulierung von Anfragen durch die Kombination der XQuery Syntax mit XPath Expressions dar.

XPath & XQuery

Einführung

Extendable Markup Language oder XML, wie es am häufigsten genannt wird, ist eine Markup-Sprache zur Kodierung und Beschreibung von Daten. XML kann diverse Datenquellen wie z.B. strukturierte und semi-strukturierte Dokumente, relationale Datenbanken und Objektspeicher, auszeichnen. Demzufolge ist XML schnell die Methode der Wahl geworden, um Dokumente aller Art zu repräsentieren, von Produktkatalogen über digitale Bibliotheken bis hin zu wissenschaftlichen Datenbanken etc. Hierbei wird XML nicht nur zur Repräsentation der Dokumente herangezogen, sondern es dient auch als zugrundeliegende Technologie für viele Anwendungen. Zum Beispiel nutzt SOAP XML-Nachrichten als Kommunikationsmittel. RDF kann ebenfalls mit Hilfe von XML geschrieben werden. XML agiert als Beschleuniger in der Gestaltung neuer Vernetzungsformen, die als Semantic Web bekannt sind. All dieses zusammen zeigt, dass ein riesiger Datenpool vorhanden ist, der mit XML repräsentiert wird. So ergibt sich der Bedarf nach einem einfachen, aber dennoch leistungsfähigen und effektiven Mittel zur Durchsuchung der XML Daten. XQuery basierend auf XPath Expressions ist ein solches Tool.

XPath

XPath ist eine Sprache, um Informationen in einem XML Dokument zu finden. Der Hauptzweck von XPath ist es, Elemente in XML Dokumenten zu adressieren. Doch neben diesem Hauptzweck stellt XPath auch grundlegende Möglichkeiten zur Verarbeitung von Strings, Zahlen und booleschen Ausdrücken zur Verfügung. XPath benutzt Path Notationen, um die hierarchischen Strukturen von XML Dokumenten darzustellen. Hier findet der Name XPath seinen Ursprung. XPath ist ein Hauptelement des XSLT Standards von W3C. XPointer und XQuery basieren auf XPath Expressions.

Was ist Path Expression?

  • XPath nutzt Path Ausdrücke, um Knoten oder Knotensätze in XML-Dokumenten auszuwählen. Diese Path Ausdrücke haben eine Syntax, die ähnlich wie die traditionellen Dateisystemnotationen gestaltet ist.
  • z.B.: /book/price

XPath Terminologie

Knoten

XPath stellt ein XML Dokument wie einen Baum aus Knoten dar. In XPath gibt es sieben Arten von Knoten: Element, Attribut, Text, Namespace, Verarbeitungsanweisung, Kommentar und Dokumentknoten. Die Wurzel des Baumes wird Dokumentknoten oder Wurzelknoten (root-node) genannt. Es folgt ein Beispiel zum besseren Verständnis dieser Knoten:

	<?xml version="1.0" encoding="ISO-8859-1"?>
	<bookstore>
		<book>
			<title lang="en">Harry Potter</title>
			<author>J K. Rowling</author>
			<year>2005</year>
			<price>29.99</price>
		</book>
	</bookstore>
    
Beispiel 1.0
  • <bookstore> ist der Dokumentknoten bzw. der Wurzelknoten dieses Dokuments.
  • Alle nachfolgenden Knoten sind Elementknoten, z. B. <book>, <title lang="en">Harry Potter</title>, etc.
  • Die Information innerhalb des Tags wird durch Attribute qualifiziert/spezifiziert, z.B. lang="en".

Beziehungen zwischen den Knoten

Die verschiedenen Knoten im XML Dokument stehen in bestimmten Beziehungen zueinander. Die einzelnen möglichen Beziehungen sind: Eltern, Kind, Geschwister, Vorfahren und Nachkommen mit der offensichtlichen Semantik der Alltagssprache. Jedes Element hat einen Elternknoten. Elementknoten können null, einen oder mehrere Kindknoten haben. Knoten, die dasselbe Elternelement haben, sind Geschwister. Vorfahrenknoten sind die Eltern eines Knotens, die Großeltern usw. Gleichermaßen sind Nachkommenknoten die Kinder von Knoten, die Enkel usw.

Auswahl von Knoten

Die Auswahl von Knoten in einem XML Dokument ist ein wesentlicher Teil von XPath. XPath benutzt Path Expressions um Knoten auszuwählen. Die nützlichsten Path Expressions zur Knotenauswahl sind im folgenden aufgelistet.

Expression Beschreibung
Knotenname Wählt alle Kindknoten des Knotens aus
/ Wählt vom Wurzelknoten
// Wählt vom gegenwärtigen Knoten aus diejenigen Knoten im Dokument, die der Auswahl entsprechen, egal wo sie sich befinden
. Wählt den gegenwärtigen Knoten aus
.. Wählt den Elternknoten des gegenwärtigen Knotens
@ Wählt Attribute aus

Hier einige Formulierungen zur Knotenauswahl:


	bookstore: 		Wählt alle Kindknoten des Elements bookstore aus.
	/bookstore: 		Wählt das Wurzelelement bookstore.
	/bookstore/book: 	Wählt alle book Elemente, die Kindknoten von bookstore sind.
	//book: 		Wählt alle book Elemente aus, egal wo sie sich im Dokument befinden.
	//@lang: 		Wählt alle Attribute mit dem Namen lang aus.

     

Prädikate

Prädikate werden benutzt, um bestimmte Knoten zu finden oder Knoten, die einen bestimmten Wert haben. Prädikate werden auch benutzt, um die Ergebnisse von Path Expressions auf bestimmte Werte zu reduzieren. Prädikate sind immer in quadratischen Klammern eingebettet.

Beispiel von Prädikaten angewendet auf die o.g. Path Expressions

	/bookstore/book[1]: 	 Wählt das erste book Element, das ein Kind des bookstore Elements ist.
	/bookstore/book[last()]: Wählt das letzte book Element, das ein Kind des bookstore Elements ist.
	//title[@lang]: 	 Wählt alle title Elemente mit dem Attribut lang.

    

In XPath können auch Wildcards benutzt werden. XPath Wildcards können dazu dienen unbekannte Knoten in einem XML Dokument auszuwählen. Als Wildcards stehen *, @* und node() zur Verfügung. Zwei Path Expressions können mit dem | Operator verknüpft werden.

Auswertung von XPath Expressions

Die Auswertung einer XPath Expression gibt einen der folgenden Typen zurück:

  • Knotensätze (eine ungeordnete Ansammlung von Knoten ohne Kopien)
  • Boolesche Ausdrücke (wahr oder falsch)
  • Nummer (eine Gleitpunkt-Nummer)
  • String (eine Abfolge von UCS Zeichen)

Location Path

Ein Location Path ist ein wichtiger Ausdruckstyp. Er wählt einen Knotensatz in Bezug auf den Kontextknoten aus. Das Ergebnis von Auswertungen der Ausdrücke in Location Paths ist jener Knotensatz, der Knoten enthält wie sie im Location Path definiert sind. Location Paths können rekursiv auch Ausdrücke enthalten um die resultierenden Knotensätze zu filtern. Jeder Location Path kann in der unkomplizierten aber ziemlich wortreichen Syntax ausgedrückt werden.

Beispiel Location Path
    	Child::text(): 		Wählt alle text Knoten-Kinder des Kontextknotens.
	Child::node(): 		Wählt alle Kinder des Kontextknotens, unabhängig von ihrem Knotentyp.
	Descendant::para: 	Wählt die para Element Nachkommen des Kontextknotens.
    

Ein Location Path kann sowohl relativ wie auch absolut sein. Ein relativer Location Path besteht aus einer Sequenz von einem oder mehreren Location Paths die durch / getrennt sind. Die Schritte in Location Path sind von links nach rechts zusammengestellt. Jeder Schritt wählt wiederum einen Knotensatz bezüglich eines Kontextknotens aus. Ein absoluter Location Path besteht aus /, wahlweise gefolgt von einem relativen Location Path. Ein alleinstehender / wählt den Wurzelknoten des Dokuments, welcher den Kontextknoten enthält.

Operatoren

XPath unterstützt alle wichtigen Operatoren wie z.B. +, -, *, /, <, <=, >, >=, =, !=, and, or, mod.

XQuery

XQuery ist eine Abfragesprache, die die Struktur von XML intelligent nutzt, um Abfragen über Daten zu formulieren, die entweder physisch in XML gespeichert sind oder über eine Middleware als XML betrachtet werden können. Es soll eine Sprache sein, in der Abfragen prägnant und leicht verständlich sind. XQuery ist flexibel genug, um XML Daten in Dokumenten und Datenbanken abzufragen. XQuery wurde von der XML-Abfragesprache Quilt abgeleitet, die wiederum einige Features von verschiedenen Programmiersprachen wie XPath, XQL, SQL etc. entliehen hat. XQuery wird vom W3C definiert und wird von allen bedeutenden Datenbankentwicklern wie IBM, Microsoft, Oracle, Software AG unterstützt. Am treffendsten kann XQuery folgendermaßen beschrieben werden: "XQuery ist für XML was SQL für Datenbanktabellen ist." Folglich ist XQuery eine Sprache zur Suche und Extraktion von Elementen und Attributen in XML Dokumenten.

Grundlagen

Der Hauptbaustein von XQuery ist die Expression, ein String von Unicode Buchstaben. Es ist mit verschiedenen Arten von Expressions ausgestattet, die aus Schlüsselwörtern, Symbolen und Operanden bestehen. Wie auch XML ist XQuery eine Sprache, in der Groß-Klein-Schreibung relevant ist. XQuery 1.0 und XPath 2.0 haben dasselbe Datenmodell und unterstützen dieselben Funktionen und Operatoren. XQuery ist mit verschiedenen W3C Standards wie z. B. XML, Namespaces, XSLT, XPath und XML Schema kompatibel. XQuery 1.0 ist ein stabiles W3C Candidate-Recommendation.

Query Formulierung

Funktionen

XQuery benutzt Funktionen, um Daten aus XML Dokumenten zu extrahieren. Es stellt eine große Auswahl an eingebauten Funktionen zur Verfügung, die von Stringverarbeitung, Daten- und Zeitkonvertierung, Knotenverarbeitung, booleschen Operatoren bis hin zu numerischen Werten reichen.

Path Expressions

XQuery benutzt Path Expressions um ein XML Dokument zu erschließen. Die Path Expressions werden gemeinsam mit den Funktionen auf das XML Dokument angewandt, um Daten abzurufen.

Prädikat

XQuery benutzt Prädikate um die aus XML-Dokumenten extrahierten Daten einzuschränken. Prädikate werden mit Path Expressions kombiniert.

FLWOR

In XQuery können Elemente entweder mit Path Expressions kombiniert mit Prädikaten oder mit FLOWR Expressions selektiert und gefiltert werden. FLOWR ist ein Akronym für:

  • For - bindet eine Variable an jedes Element das mit dem [in]-Ausdruck abgerufen wird
  • Let -ermöglicht die Verwendung von Variablen (optional)
  • Where - präzisiert ein Kriterium (optional)
  • Order by - präzisiert die Sortierreihenfolge des Ergebnisses (optional)
  • Return - präzisiert, was im Ergebnis zurückgeliefert werden soll

Der Vorteil bei der Benutzung von FLOWR Expressions ist, dass es eine SQL-ähnliche Syntax besitzt und mehr Funktionalität und Flexibilität hinzufügt.

    	for $x in doc("book.xml")/bookstore/book
	where $x/price>30
	order by $x/title
	return $x/title
    

Die Übersetzung der oben angeführten FLOWR Expression in einfaches Deutsch wäre: Für die Variable x im Dokument "Book.xml" sollen alle Titel Elemente abgerufen werden, wobei der Preis des Buches größer als 30 ist und die Ergebnisse sollen dem Titel nach geordnet sein..

Grundlegende Syntaxregeln

  • XQuery ist groß-/klein-sensitiv, was bedeutet dass kleingeschriebene Variablen nicht dieselben sind wie die großgeschriebenen Variablen.
  • XQuery Elemente, Variablen müssen gültige XML Namen sein.
  • Ein XQuery String Wert kann in Einzel- oder Doppelanführungsstrichen stehen.
  • Eine XQuery Variable wird definiert mit $ gefolgt von einem Namen, z. B. $bookstore.
  • XQuery Kommentare werden beschränkt durch (: und :), z. B. (:XQuery Comment:).

Bedingte Ausdrücke (Expressions) in XQuery

XQuery ermöglicht auch den Gebrauch des bedingten Ausdruckes if-then-else. Der if-then-else Satz kann nach dem Return-Ausdruck der FLOWR Expression hinzugefügt werden.

Vergleiche in XQuery

In XQuery gibt es zwei Möglichkeiten, Werte zu vergleichen:

  • Allgemeiner Vergleich: =, !=, <, <=, >, >=. Wenn diese Operatoren für einen Vergleich herangezogen werden, wird die Bedingung als wahr ausgegeben falls beliebige Attribute die Bedingung erfüllten.
  • Wertevergleich: eq, ne, lt, le, gt, ge. Wenn diese Operatoren für einen Vergleich herangezogen werden, wird die Bedingung als wahr ausgegeben, genau dann wenn ein Attribut die Bedingung erfüllt.

Typenbeschreibung

  • XQuery ist eine streng typisierte Programmiersprache.
  • Wie Java, C# und andere Programmiersprachen kennt es eine Mischung aus statischen und dynamischen Typisierungen.
  • Typen in XQuery unterscheiden sich von Klassen in OOPS.
  • Typen entsprechen dem XQuery Datenmodell.

Schlussfolgerung

  • XQuery ist ein leistungsfähiges und komfortables Tool zur Analyse und Erzeugung von XML.
  • XQuery ist protokollunabhängig und kann daher auf jedem System mit vorhersehbaren Ergebnissen angewandt werden.
  • Es gibt keine Standardimplementationen, aber es befindet sich eine Liste mit den bekannten Implementationen auf der XQuery-Site.
  • XQuery ist kompatibel mit anderen W3C-Standards, nämlich XML 1.1, Namespaces, XML Schema, XPath.

Quellen und weiterführende Literatur

   
Impressum
Cashmere - int RSS Feed
 
Valid XHTML 1.0!
Newsletters
Webmaster