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