XPath & XQuery Standardisierte Abfragesprachen für XML-Dokumente. Sebastian Apel

Ähnliche Dokumente
Seminar: XML und intelligente Systeme

XPath Lokalisierspfade Achsen in Lokalisierungsschritten

Datenbanksysteme. XML und Datenbanken. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS XML Anfragen: XPath. Dr. Christian Senger XML 1

Gruppe 3 / 5 / 10. Tutorübung zu Einsatz und Realisierung von Datenbanksystemen (SS 17) Michael Schwarz

XML Datenbanken Quickstart für die Anfragesprachen XPath und XQuery

INVENTARNR NAME BENUTZNR

Anfragen an XML-Dokumente mit XPath

XQuery Tutorial. Student: Anke Bremer Betreuer: Dr. Sosna

Implementierung der XPath-Anfragesprache für XML-Daten in RDBMS unter Ausnutzung des Nummerierungsschemas DLN

XML-Datenbanken. Autor: Nan Zhang Veranstaltung: XML in Bioinformatik

Projektseminar Texttechnologische Informationsmodellierung

Entwicklung eines Tutorials für XQuery

XPATH (XPATH) Lernziele

Textnavigation mit XPath. Daniel Schopper

XSL. extended Stylesheet Language. Die Stylesheet Sprache für XML

Gliederung / Inhaltsüberblick

Dokumentverarbeitung

Mit XQuery auf eine Oracle-Datenbank

XPath 1.0 Pfadausdrücke zur Adressierung von XML-Fragmenten

XSL Transformation. Eine praxisorientierte Einführung Philip Heck

Anfragen & Transformation

XML 1. Einführung, oxygen. Ulrike Henny. IDE Summer School 2013, Chemnitz

Semistrukturierte Daten

Seminar Dokumentenverarbeitung

Weiterführende Literatur: M. Knobloch, M. Kopp: Web-Design mit XML, dpunkt-verlag 2001

7.3 XML-Anfragesprache XQuery

VU Semistrukturierte Daten 2. XQuery (Teil 2) Inhalt

XML Path Language (XPath)

Speicherung von XML in (objekt-)relationalen Datenbanken. Burkhard Schäfer

XML-Praxis. XPath. Jörn Clausen.

DOM Document Object Model

XPath und XQuery. Robert Tolksdorf Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme

Index. Index CDATA 113, 183. Achse 430. child 425. all 191. choice 187, 191, 197, 393. ancestor 428. choose 272. Anwendung 351; Beispiel 302

XQuery. Jan Woschofius

Inhalt. Beispiel: XML Dokument. Beispiel: Dokumentenbaum. XPath VU Semistrukturierte Daten 1. Datenmodell

XPath XML Path Language

XML-Verarbeitung. XPath XSL die extensible Stylesheet Language. Torsten Schaßan SCRIPTO Modul 4: EDV Wolfenbüttel

XQuery. XML Query Language. eine Abfragesprache für XML. Ulrike Henny. IDE Autumn School 2012, Chemnitz

Datenbanksysteme 2 Frühjahr-/Sommersemester April Darf man in der XML Declaration die Versionsnummer weglassen? (d.h.

XML. XML-Abfrage- und Transformationssprachen. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

XML. XML-Datenmodellierung / XML-Schemasprachen. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

06 Formatierungssprachen, XSL. Manuel Burghardt Lehrstuhl für Medieninformatik

FileMaker Konferenz 2010 XML / XSLT. Ein Workshop mit [x] cross solution Armin Egginger

Prof. Dr. Martin Leischner Fachbereich Informatik XML. Prof. Dr. Martin Leischner Fachbereich Informatik. Anwendungen (SOAP,WSDL, ) Verknüpfungen XSL

XSLT Beispiele. Cooktop -

Datenbanksysteme. Einführung in XML, XPath und XQuery Martin Gieseking

Textnavigation mit XPath

5. Programmierschnittstellen für XML

XQuery 2013 S Seite 1 h_da S

XML Path Language (XPath)

Projektseminar "Texttechnologische Informationsmodellierung"

XPath Accelerator Zusammenfassung

XML-Abfrage- und Transformationssprachen. (Weiter-) Entwicklung der Standards. XQuery 1.0. bisher betrachtet. XPath 2.0. XPath 1.0 XSLT 2.0 XSLT 1.

Projektseminar "Texttechnologische Informationsmodellierung"

Fragestunde: Neuerungen in XQuery und XSLT

Datenbankadministration

5. Programmierschnittstellen für XML

XML und Dokumentenmanagement

XSLT, XPath und XQuery Marco Skulschus Marcus Wiederstein Sarah Winterstone

Referat 11: Einführung in XPath

Vorstellung des Streamkonzepts

PRÜFUNG IN SEMI-STRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

DOM und XPath 05. G. Görz, J. Schneeberger Department Informatik KI.

7. Semistrukturierte Daten und XML

XML Anfragen und Transformation XPath und XQuery

4 Publikation relationaler Daten

Gliederung. Dokumentverarbeitung. XQuery: XQuery: XQuery

Schemadefinition für XML-Dokumente Dokumenttypdefinitionen XML-Schema

IT-Zertifikat: Daten- und Metadatenstandards. Transformation von XML-Dokumenten mit XSLT (und XPATH) XSLT kurz und knackig. XSLT und die Praxis

Universität zu Köln Informationsverarbeitung WS 2009/10. Datenbanken vs. Markup Prof. Dr. M.Thaller XML als Datenbank

Grundzüge und Vorteile von XML-Datenbanken am Beispiel der Oracle XML DB

Web Technologien XML, XQuery, XPath und XSLT

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Index. Symbols <$nopage>wsdl -> s. Web Service Description Language 326 FOR XML XMLDATA 365.NET Serialisierung 369

Inhalt. 1 Einleitung Warum dieses Buch? Der rote Faden Danksagung URL zum Buch 4. TEIL I Einführung 5

Gliederung. Service Oriented Architecture - XML Technologies. 1 von 11

10. XML und XQuery. Prof. Dr.-Ing. Wolfgang Lehner

Kapitel 6: SQL und XML

Oracle PL/SQL und XML. Marco Skulschus Marcus Wiederstein

Datenbanksysteme 2015 Kapitel 10

In diesem Abschnitt wollen wir uns mit dem Thema XML Datenbank beschäftigen. Das Ziel ist, herauszufinden, was XML Datenbank überhaupt sind und was

Ein XML Dokument zeichnet sich im Wesentlichen durch seine baumartige Struktur aus:

Institut für Dokumentologie und Editorik. XML-Datenbanken und XQuery

XQuery Implementation in a Relational Database System

XML Vorlesung ETHZ SS XQuery XML Vorlesung ETHZ SS XML Vorlesung ETHZ SS

1. Übung zur Vorlesung Service-orientierte Architekturen

VU Semistrukturierte Daten 2

7. Semistrukturierte Daten und XML

Datenbanksysteme I XML & Datenbanken Dr. Gjergji Kasneci (Folien von Prof. Dr. Felix Naumann)

Datenbanksysteme. Kapitel 9. Einführung in XML, XPath, XQuery und XSLT. Martin Gieseking

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

7. Semistrukturierte Daten und XML

Document Type Definition (DTD)

Semistrukturierte Daten

Gegeben ist das folgende XML-Dokument.

XQuery eingesetzt zur Generierung von Webseiten für Vorlesungsmaterialien. Studienarbeit für den integrierten Studiengang Informatik von Falk Eitzen

Konzepte für die Einbettung von XQuery in eine Wirtssprache (Java)

Standards II : XQuery

Transkript:

XPath & XQuery Standardisierte Abfragesprachen für XML-Dokumente Sebastian Apel

Inhalt Die Geschichte XPath 1.0 Das Datenmodell Pfadausdrücke Anwendung von XPath XPath 2.0 & XQuery Neues in XPath 2.0 Wozu dient XQuery FLWOR Anwendung von XQuery Was die Zukunft bringt

Die Geschichte XML 1.0 DOM Level 1 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 <seminar> XML... <thema titel= XML Infoset /> <thema titel= XPath & XQuery /> <thema titel= XQuery-Datenmodell />... </seminar>

Die Geschichte XML 1.0 DOM Level 1 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 <seminar> XML... <thema titel= XML Infoset /> <thema titel= XPath & XQuery /> <thema titel= XQuery-Datenmodell />... </seminar> DOM seminar thema thema thema titel titel titel

Die Geschichte XML 1.0 DOM Level 1 XPath 1.0 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 <seminar> XML... <thema titel= XML Infoset /> <thema titel= XPath & XQuery /> <thema titel= XQuery-Datenmodell />... </seminar> XPath 1.0 /seminar/thema[@titel= XPath & XQuery ]

Die Geschichte XML 1.0 DOM Level 1 XPath 1.0 XML Schema XML 1.1 DOM Level 3 XPath 2.0 XQuery Datenmodell 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 <seminar> XML... <thema titel= XML Infoset /> <thema titel= XPath & XQuery /> <thema titel= XQuery-Datenmodell />... </seminar> XPath 2.0 & XQuery for $x in /seminar/thema[@titel= XPath... ] return <tollethemen>{ $x }</tollethemen>

XPath 1.0 1999 von W3C als offizielle Empfehlung verabschiedet Ziel: soll Teile eines XML-Dokumentes adressieren und auszuwählen eigenes Datenmodell Auffassung des XML-Dokumentes als Baum Ähnlichkeiten zum DOM, aber nicht das selbe! Abfrage erfolgt über Pfadausdrücke Unterstützte Datentypen: node-set, boolean, number, string

XPath 1.0 Das Datenmodell - Beispiel <Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> </Cafeteria>

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> </Cafeteria> XPath 1.0 Das Datenmodell Dokument Wurzelknoten

XPath 1.0 Das Datenmodell Dokument <Cafeteria> <Angestellte Bereich= Service > Cafeteria <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> </Cafeteria> Wurzelknoten Elementknoten

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> </Cafeteria> XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellte Wurzelknoten Elementknoten

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> </Cafeteria> XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellte Wurzelknoten Elementknoten Attributknoten Bereich = Service

<Cafeteria> <Angestellte Bereich= Service > Cafeteria <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> XPath 1.0 Das Datenmodell Angestellte Dokument <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> </Cafeteria> Angestellter Angestellte Angestellter Wurzelknoten Elementknoten Attributknoten Bereich = Service

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Ist noch unbewertet! Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> Kommentarknoten </Cafeteria> XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellter Angestellte Angestellter Wurzelknoten Elementknoten Attributknoten Bereich = Service

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Ist noch unbewertet! Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> Kommentarknoten </Cafeteria> XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellter Angestellte Angestellter Wurzelknoten Elementknoten Attributknoten Bereich = Service Name = Klaus Niemand

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Ist noch unbewertet! Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> Kommentarknoten </Cafeteria> XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellter Angestellte Bewertung Angestellter Wurzelknoten Elementknoten Attributknoten Bereich = Service Name = Klaus Niemand

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Ist noch unbewertet! Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> Kommentarknoten </Cafeteria> Textknoten XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellter Angestellte Bewertung Angestellter Ist ohne Ende faul! Wurzelknoten Elementknoten Attributknoten Bereich = Service Name = Klaus Niemand

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Ist noch unbewertet! Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> Kommentarknoten </Cafeteria> Textknoten Namensraumknoten XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellter Angestellte Bewertung Angestellter Ist ohne Ende faul! Wurzelknoten Elementknoten Attributknoten Bereich = Service Name = Klaus Niemand

<Cafeteria> <Angestellte Bereich= Service > <Angestellter name= Klaus Niemand > <Bewertung> Ist ohne Ende faul! </Bewertung> </Angestellter> <Angestellter name= Hans Musterman /> <Angestellter name= Frieda Ungut /> </Angestellte> Ist noch unbewertet! Angestellter <Angestellte Bereich= Küche > <!-- Ist noch unbewertet! --> <Angestellter name= Lisa Toll /> <Angestellter name= Frank Kachel /> <Angestellter name= Richard Funk /> </Angestellte> Kommentarknoten </Cafeteria> Textknoten Namensraumknoten Anweisungsknoten XPath 1.0 Das Datenmodell Angestellte Dokument Cafeteria Angestellter Angestellte Bewertung Angestellter Ist ohne Ende faul! Wurzelknoten Elementknoten Attributknoten Bereich = Service Name = Klaus Niemand

XPath 1.0 Pfadausdrücke Grundlegendes Werkzeug zum Zugriff auf XML Inhalte

XPath 1.0 Pfadausdrücke Grundlegendes Werkzeug zum Zugriff auf XML Inhalte Dient zum lesen, jedoch nicht zum schreiben!

XPath 1.0 Pfadausdrücke Grundlegendes Werkzeug zum Zugriff auf XML Inhalte Dient zum lesen, jedoch nicht zum schreiben! Grundaufbau eines Pfadausdruckes wird mit der Definition für PathExpr gezeigt PathExpr ::=! ( / RelativePathExpr? ) ( // RelativePathExpr) RelativePathExpr RelativePathExpr ::= StepExpr ( ( / // ) StepExpr ) *

XPath 1.0 Pfadausdrücke Grundlegendes Werkzeug zum Zugriff auf XML Inhalte Dient zum lesen, jedoch nicht zum schreiben! Grundaufbau eines Pfadausdruckes wird mit der Definition für PathExpr gezeigt PathExpr ::=! ( / RelativePathExpr? ) ( // RelativePathExpr) RelativePathExpr RelativePathExpr ::= StepExpr ( ( / // ) StepExpr ) * /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr

XPath 1.0 Pfadausdrücke (Schritte) Es wird bei jeder StepExpr unterschieden zwischen Achsenschritt und Filterschritt

XPath 1.0 Pfadausdrücke (Schritte) Es wird bei jeder StepExpr unterschieden zwischen Achsenschritt und Filterschritt StepExpr ::= AxisStep FilterStep AxisStep ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep

XPath 1.0 Pfadausdrücke (Schritte) Es wird bei jeder StepExpr unterschieden zwischen Achsenschritt und Filterschritt StepExpr ::= AxisStep FilterStep AxisStep ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr

XPath 1.0 Pfadausdrücke (Schritte) Es wird bei jeder StepExpr unterschieden zwischen Achsenschritt und Filterschritt StepExpr ::= AxisStep FilterStep AxisStep ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr / AxisStep / AxisStep / AxisStep / AxisStep / AbbrevForwardStep / AbbrevForwardStep...

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: following-sibling :: following ::

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) self:: ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: following-sibling :: following ::

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) self:: ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: following-sibling :: following :: child::

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) self:: ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: following-sibling :: following :: child:: descendant::

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) self:: child:: ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: descendant:: following-sibling :: following :: descendant-or-self::

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) self:: following-sibling:: child:: ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: descendant:: following-sibling :: following :: descendant-or-self::

XPath 1.0 Pfadausdrücke (Vorwärtsachsen) following:: self:: following-sibling:: child:: ForwardAxis ::= child :: descendant :: attribute :: self :: descendant-or-self :: descendant:: following-sibling :: following :: descendant-or-self::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ReverseAxis ::= parent :: ancestor :: preceding-sibling :: preceding :: ancestor-or-self ::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ReverseAxis ::= parent :: ancestor :: preceding-sibling :: preceding :: ancestor-or-self :: following:: self:: following-sibling:: child:: descendant:: descendant-or-self::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ReverseAxis ::= parent :: ancestor :: preceding-sibling :: preceding :: ancestor-or-self :: following:: preceding-sibling:: self:: following-sibling:: child:: descendant:: descendant-or-self::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ReverseAxis ::= parent :: ancestor :: preceding-sibling :: preceding :: ancestor-or-self :: preceding:: following:: preceding-sibling:: self:: following-sibling:: child:: descendant:: descendant-or-self::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ReverseAxis ::= parent :: ancestor :: preceding-sibling :: preceding :: ancestor-or-self :: preceding:: parent:: following:: preceding-sibling:: self:: following-sibling:: child:: descendant:: descendant-or-self::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ancestor:: ReverseAxis ::= parent :: ancestor :: preceding-sibling :: preceding :: ancestor-or-self :: preceding:: parent:: following:: preceding-sibling:: self:: following-sibling:: child:: descendant:: descendant-or-self::

XPath 1.0 Pfadausdrücke (Rückwärtsachsen) ReverseAxis ::= parent :: ancestor-or-self:: ancestor :: preceding-sibling :: ancestor:: preceding :: ancestor-or-self :: preceding:: parent:: following:: preceding-sibling:: self:: following-sibling:: child:: descendant:: descendant-or-self::

XPath 1.0 Pfadausdrücke /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr / AxisStep / AxisStep / AxisStep / AxisStep / AbbrevForwardStep / AbbrevForwardStep...

XPath 1.0 Pfadausdrücke /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr / AxisStep / AxisStep / AxisStep / AxisStep / AbbrevForwardStep / AbbrevForwardStep... /child::cafeteria/child::angestellte/child::angestellter/child::bewertung

XPath 1.0 Pfadausdrücke /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr / AxisStep / AxisStep / AxisStep / AxisStep / AbbrevForwardStep / AbbrevForwardStep... /child::cafeteria/child::angestellte/child::angestellter/child::bewertung Vorwärts und Rückwärtsschritte bestehen zusätzlich zur Achsenbewegung aus einem Knotentest

XPath 1.0 Pfadausdrücke /Cafeteria/Angestellte/Angestellter/Bewertung / RelativPathExpr / StepExpr / StepExpr / StepExpr / StepExpr / AxisStep / AxisStep / AxisStep / AxisStep / AbbrevForwardStep / AbbrevForwardStep... /child::cafeteria/child::angestellte/child::angestellter/child::bewertung Vorwärts und Rückwärtsschritte bestehen zusätzlich zur Achsenbewegung aus einem Knotentest Bei einem Knotentest kann der Typ oder Name des Knotens abgefragt werden

XPath 1.0 Pfadausdrücke (Prädikate)

XPath 1.0 Pfadausdrücke (Prädikate) zusätzlich zur Achse und zum Knotentest kann optional ein oder mehrere Prädikate angegeben werden

XPath 1.0 Pfadausdrücke (Prädikate) zusätzlich zur Achse und zum Knotentest kann optional ein oder mehrere Prädikate angegeben werden StepExpr ::= AxisStep FilterStep AxisStep ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep

XPath 1.0 Pfadausdrücke (Prädikate) zusätzlich zur Achse und zum Knotentest kann optional ein oder mehrere Prädikate angegeben werden Predicates ::= ( [ Expr ] ) * StepExpr ::= AxisStep FilterStep AxisStep ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep

XPath 1.0 Pfadausdrücke (Prädikate) zusätzlich zur Achse und zum Knotentest kann optional ein oder mehrere Prädikate angegeben werden Predicates ::= ( [ Expr ] ) * /Cafeteria/Angestellte[@Bereich= Küche ] StepExpr ::= AxisStep FilterStep AxisStep ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep

XPath 1.0 Pfadausdrücke (Prädikate) zusätzlich zur Achse und zum Knotentest kann optional ein oder mehrere Prädikate angegeben werden für Prädikate gibt es viele Funktionen mit denen sich Werte vergleichen lassen Predicates ::= ( [ Expr ] ) * StepExpr ::= AxisStep FilterStep AxisStep /Cafeteria/Angestellte[@Bereich= Küche ] ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep

XPath 1.0 Pfadausdrücke (Prädikate) zusätzlich zur Achse und zum Knotentest kann optional ein oder mehrere Prädikate angegeben werden für Prädikate gibt es viele Funktionen mit denen sich Werte vergleichen lassen Reihenfolge der Prädikate ist von Bedeutung! Predicates ::= ( [ Expr ] ) * StepExpr ::= AxisStep FilterStep AxisStep /Cafeteria/Angestellte[@Bereich= Küche ] ::= (ForwardStep ReverseStep) Predicates FilterStep ::= PrimaryExpr Predicates ForwardStep ::= (ForwardAxis NodeTest) AbbrevForwardStep ReverseStep ::= (ReverseAxis NodeTest) AbbrevReverseStep

XPath 1.0 Abkürzungen child:: kann wegfallen für Referenzen auf Attributknoten reicht das @-Symbol achse::knotentest[fn:position() < 3 or fn:position() > fn:last()-2] kann durch achse::knotentest[3] abgekürzt werden mit // getrennte Lokalisierungsschritte werden ersetzt durch /descendant-or-self::fn:node()/

XPath 1.0 Anwendung von XPath Was zum angucken...

XPath 2.0 & XQuery Neues in XPath 2.0 2007 von W3C als offizielle Empfehlung verabschiedet neues Datenmodell: XQuery-Datenmodell XPath 2.0 ist mächtiger in Hinblick auf eine höhere Anzahl von Datentypen (19 Typen) Verknüfpung von XML Schema und XPath Wurzelknoten werden nun Dokumentknoten genannt Abfragen liefern keine Liste mehr, sondern eine Teilsequenz des Datenmodells

XPath 2.0 & XQuery Wozu dient XQuery XPath 2.0 ist eine Teilmenge an Funktionalitäten von XQuery XQuery parallel zu XSLT entwickelt, Schnittmenge beider Abfragesprachen in XPath 2.0 zusammen geführt XQuery hat eine SQL Select From Where ähnliche Sprache FLWOR Nur lesen! Änderungen sind (noch) nicht möglich

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen for/let

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen for/let where

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen for/let where order by

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen for/let where order by return

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen for/let where order by return

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen for/let where order by return FLWOR - Ausdruck

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen Ausdrücke können verschachtelt sein! for/let where order by return FLWOR - Ausdruck

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen Ausdrücke können verschachtelt sein! FLWOR Ausdruck for/let where order by return FLWOR - Ausdruck

XPath 2.0 & XQuery FLWOR FLWOR setzt auf XPath 2.0 auf es ist möglich aus einer Eingabe Sequenz eine komplett neue Sequenz zu bauen Ausdrücke können verschachtelt sein! FLWORExpr ::= (ForClause LetClause)+ WhereClause? OrderByClause? return ExprSingle FLWOR Ausdruck for/let where order by return FLWOR - Ausdruck

XPath 2.0 & XQuery FLWOR (For/Let) let- und for-klauseln ermöglichen die Bindung von Variabeln an Ergebnisse von beliebigen XQuery-Ausdrücken

XPath 2.0 & XQuery FLWOR (For/Let) let- und for-klauseln ermöglichen die Bindung von Variabeln an Ergebnisse von beliebigen XQuery-Ausdrücken let: Ergebnis des Ausdrucks wird vollständig als Sequenz an die Variable gebunden

XPath 2.0 & XQuery FLWOR (For/Let) let- und for-klauseln ermöglichen die Bindung von Variabeln an Ergebnisse von beliebigen XQuery-Ausdrücken let: Ergebnis des Ausdrucks wird vollständig als Sequenz an die Variable gebunden for: Ergebnis des Ausdrucks wird elementweise als Sequenz an die Variable gebunden und die nachfolgenden Konstrukte auf jedes einzeln angewendet

XPath 2.0 & XQuery FLWOR (For/Let) let- und for-klauseln ermöglichen die Bindung von Variabeln an Ergebnisse von beliebigen XQuery-Ausdrücken let: Ergebnis des Ausdrucks wird vollständig als Sequenz an die Variable gebunden for: Ergebnis des Ausdrucks wird elementweise als Sequenz an die Variable gebunden und die nachfolgenden Konstrukte auf jedes einzeln angewendet LetClause ::= let $ VarName TypeDeclaration? := ExprSingle (, $ VarName TypeDeclaration? := ExprSingle )* ForClause ::= for $ VarName TypeDeclaration? PositionalVar? in ExprSingle (, $ VarName TypeDeclaration? PositionalVar? in ExprSingle )*

XPath 2.0 & XQuery FLWOR (Unterschied zwischen For und Let) LetClause ::= let $ VarName TypeDeclaration? := ExprSingle (, $ VarName TypeDeclaration? := ExprSingle )* ForClause ::= for $ VarName TypeDeclaration? PositionalVar? in ExprSingle (, $ VarName TypeDeclaration? PositionalVar? in ExprSingle )*

XPath 2.0 & XQuery FLWOR (Unterschied zwischen For und Let) let $x := (<Angestellter name= Heinz />, <Angestellter name= Ketchup />) return <Angestellte>{ $x }</Angestellte> LetClause ::= let $ VarName TypeDeclaration? := ExprSingle (, $ VarName TypeDeclaration? := ExprSingle )* ForClause ::= for $ VarName TypeDeclaration? PositionalVar? in ExprSingle (, $ VarName TypeDeclaration? PositionalVar? in ExprSingle )*

XPath 2.0 & XQuery FLWOR (Unterschied zwischen For und Let) let $x := (<Angestellter name= Heinz />, <Angestellter name= Ketchup />) return <Angestellte>{ $x }</Angestellte> <Angestellte> <Angestellter name= Heinz /> <Angestellter name= Ketchup /> </Angestellte> LetClause ::= let $ VarName TypeDeclaration? := ExprSingle (, $ VarName TypeDeclaration? := ExprSingle )* ForClause ::= for $ VarName TypeDeclaration? PositionalVar? in ExprSingle (, $ VarName TypeDeclaration? PositionalVar? in ExprSingle )*

XPath 2.0 & XQuery FLWOR (Unterschied zwischen For und Let) let $x := (<Angestellter name= Heinz />, <Angestellter name= Ketchup />) return <Angestellte>{ $x }</Angestellte> <Angestellte> <Angestellter name= Heinz /> <Angestellter name= Ketchup /> </Angestellte> for $x in (<Angestellter name= Heinz />, <Angestellter name= Ketchup />) return <Angestellte>{ $x }</Angestellte> LetClause ::= let $ VarName TypeDeclaration? := ExprSingle (, $ VarName TypeDeclaration? := ExprSingle )* ForClause ::= for $ VarName TypeDeclaration? PositionalVar? in ExprSingle (, $ VarName TypeDeclaration? PositionalVar? in ExprSingle )*

XPath 2.0 & XQuery FLWOR (Unterschied zwischen For und Let) let $x := (<Angestellter name= Heinz />, <Angestellter name= Ketchup />) return <Angestellte>{ $x }</Angestellte> <Angestellte> <Angestellter name= Heinz /> <Angestellter name= Ketchup /> </Angestellte> for $x in (<Angestellter name= Heinz />, <Angestellter name= Ketchup />) return <Angestellte>{ $x }</Angestellte> <Angestellte> LetClause ::= let $ VarName TypeDeclaration? := ExprSingle <Angestellter name= Heinz /> </Angestellte> (, $ VarName TypeDeclaration? := ExprSingle )* ForClause <Angestellte> ::= for $ VarName TypeDeclaration? PositionalVar? in ExprSingle <Angestellter (, name= Ketchup $ VarName TypeDeclaration? /> PositionalVar? in ExprSingle )* </Angestellte>

XPath 2.0 & XQuery FLWOR (Where-Klausel) WhereClause ::= where Expr

XPath 2.0 & XQuery FLWOR (Where-Klausel) WhereClause ::= where Expr for $b in /Cafeteria/Angestellte/Angestellter where $b/@name = Klaus Niemand return <AngestellteDesMonats> { $b } </AngestellteDesMonats>

XPath 2.0 & XQuery FLWOR (OrderBy - Klausel) OrderByClause ::= ( order by stable order by ) OrderSpecList OrderSpecList ::= OrderSpec (, OrderSpec )* OrderSpec ::= ExprSingle OrderModifier OrderModifier ::= ( ascending descending )? ( ( empty greatest ) ( empty least ) )? ( collation StringLiteral )?

XPath 2.0 & XQuery FLWOR (OrderBy - Klausel) OrderByClause ::= ( order by stable order by ) OrderSpecList OrderSpecList ::= OrderSpec (, OrderSpec )* OrderSpec ::= ExprSingle OrderModifier OrderModifier ::= ( ascending descending )? ( ( empty greatest ) ( empty least ) )? ( collation StringLiteral )? for $b in /Cafeteria/Angestellte/Angestellter where $b/@name = Klaus Niemand order by $b/@name return <AngestellteDesMonats> { $b } </AngestellteDesMonats>

XPath 2.0 & XQuery FLWOR (Return-Klausel) Return-Klausel gibt Schablone für die Ausgabesequenz an

XPath 2.0 & XQuery FLWOR (Return-Klausel) Return-Klausel gibt Schablone für die Ausgabesequenz an Dereferenzierung durch Einbettung in neuen Auswertungskontext

XPath 2.0 & XQuery FLWOR (Return-Klausel) Return-Klausel gibt Schablone für die Ausgabesequenz an Dereferenzierung durch Einbettung in neuen Auswertungskontext for $b in /Cafeteria/Angestellte/Angestellter return <AngestellteDesMonats> $b </AngestellteDesMonats>

XPath 2.0 & XQuery FLWOR (Return-Klausel) Return-Klausel gibt Schablone für die Ausgabesequenz an Dereferenzierung durch Einbettung in neuen Auswertungskontext for $b in /Cafeteria/Angestellte/Angestellter return <AngestellteDesMonats> $b </AngestellteDesMonats> <AngestellteDesMonats><Angestellter /></AngestellteDesMonats> <AngestellteDesMonats><Angestellter /></AngestellteDesMonats> <AngestellteDesMonats><Angestellter /></AngestellteDesMonats>...

XPath 2.0 & XQuery FLWOR (Return-Klausel) Return-Klausel gibt Schablone für die Ausgabesequenz an Dereferenzierung durch Einbettung in neuen Auswertungskontext for $b in /Cafeteria/Angestellte/Angestellter return <AngestellteDesMonats>{ $b }</AngestellteDesMonats>

XPath 2.0 & XQuery FLWOR (Return-Klausel) Return-Klausel gibt Schablone für die Ausgabesequenz an Dereferenzierung durch Einbettung in neuen Auswertungskontext for $b in /Cafeteria/Angestellte/Angestellter return <AngestellteDesMonats>{ $b }</AngestellteDesMonats> <AngestellteDesMonats> <Angestellter /> <Angestellter /> <Angestellter />... </AngestellteDesMonats>

XPath 2.0 & XQuery FLWOR (Return-Klausel) innerhalb eines Auswertungskontextes kann jede Form von Ausdruck auftreten

XPath 2.0 & XQuery FLWOR (Return-Klausel) innerhalb eines Auswertungskontextes kann jede Form von Ausdruck auftreten <AktuellesImMonat> { for $b in /Cafeteria/Angestellte/Angestellter return <AngestellteDesMonats> { $b } { for $c in $b/bewertung[text() = Toll ] return <AbsolutBester>{$c}</AbsolutBester> } </AngestellteDesMonats> } </AktuellesImMonat>

Was die Zukunft bringt XQuery Update Facility (Modifizieren von XML Daten) http://www.w3.org/tr/xquery-update-10/ XQuery 1.1 (Nachfolger von XQuery) http://www.w3.org/tr/xquery-11-requirements/

Vielen Dank für die Aufmerksamkeit...