Einführung in die Verwendung von XPath-Abfragen (SQLXML 4.0)
XPath (XML Path Language)-Abfragen können als Teil einer URL oder in einer Vorlage angegeben werden. Das Zuordnungsschema bestimmt die Struktur des resultierenden Fragments, und die Werte werden aus der Datenbank abgerufen. Dieser Vorgang ähnelt prinzipiell dem Erstellen von Sichten mit der CREATE VIEW-Anweisung und dem Schreiben von SQL-Abfragen für diese Sichten.
Hinweis |
---|
Um XPath-Abfragen in SQLXML 4.0 verstehen zu können, müssen Sie XML-Sichten und verwandte Konzepte wie Vorlagen und Zuordnungsschemas kennen. Weitere Informationen finden Sie unter Einführung in XSD-Schemas mit Anmerkungen (SQLXML 4.0) und in dem vom World Wide Web Consortium (W3C) definierten XPath-Standard. |
Ein XML-Dokument besteht aus Knoten, z. B. Elementknoten, Attributknoten, Textknoten usw. Betrachten Sie z. B. folgendes XML-Dokument:
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
In diesem Dokument ist <Customer> ein Elementknoten, cid ein Attributknoten und "Important" ein Textknoten.
XPath ist eine Diagrammnavigationssprache, die verwendet wird, um eine Gruppe von Knoten aus einem XML-Dokument auszuwählen. Jeder XPath-Operator wählt eine Knotengruppe aus, die auf einer von einem vorherigen XPath-Operator ausgewählten Knotengruppe basiert. Wenn beispielsweise eine Gruppe von <Customer>-Knoten gegeben ist, können mit einer XPath-Abfrage alle <Order> -Knoten mit dem date-Attributwert "7/14/1999" abgefragt werden. Die resultierende Knotengruppe enthält alle Bestellungen mit dem Bestelldatum 14.7.1999.
Die XPath-Sprache wurde vom World Wide Web Consortium (W3C) als Standardnavigationssprache definiert. SQLXML 4.0 implementiert eine Teilmenge der XPath-Spezifikation des W3C, die Sie unter der Adresse http://www.w3.org/TR/1999/PR-xpath-19991008.html finden.
Nachfolgend werden die Hauptunterschiede zwischen der XPath-Implementierung des W3C und der SQLXML 4.0-Implementierung beschrieben.
Abfragen des Stammelements
In SQLXML 4.0 werden Abfragen des Stammelements (/) nicht unterstützt. Jede XPath-Abfrage muss mit einem <ElementType> der obersten Ebene im Schema beginnen.
Erstellen von Fehlerberichten
Die XPath-Spezifikation des W3C definiert keine Fehlerbedingungen. XPath-Abfragen, die keine Knoten auswählen, geben eine leere Knotengruppe zurück. In SQLXML 4.0 kann eine Abfrage viele Arten von Fehlermeldungen zurückgeben.
Dokumentreihenfolge
In SQLXML 4.0 ist die Dokumentreihenfolge nicht immer bestimmt. Daher sind numerische Prädikate und Achsen, welche die Dokumentreihenfolge verwenden (z. B. following), nicht implementiert.
Das Fehlen einer Dokumentreihenfolge bedeutet auch, dass der Zeichenfolgenwert eines Knotens nur dann ausgewertet werden kann, wenn der betreffende Knoten nur einer Spalte in nur einer Zeile zugeordnet werden kann. Ein Element mit untergeordneten Elementen oder einem IDREFS-Knoten oder NMTOKENS-Knoten kann nicht in eine Zeichenfolge konvertiert werden.
Hinweis In einigen Fällen können die key-fields-Anmerkung oder Schlüssel aus der relationship-Anmerkung in einer deterministischen Dokumentreihenfolge resultieren. Dies ist jedoch nicht der primäre Verwendungszweck dieser Anmerkungen. Weitere Informationen hierzu finden Sie unter Identifizieren von Schlüsselspalten mithilfe von sql:key-Feldern (SQLXML 4.0) und Angeben von Beziehungen mit 'sql:relationship' (SQLXML 4.0)
Datentypen
SQLXML 4.0 weist Einschränkungen hinsichtlich der Implementierung der XPath-Datentypen string, number und boolean auf. Weitere Informationen hierzu finden Sie unter XPath-Datentypen (SQLXML 4.0).
Produktübergreifende Abfragen
SQLXML 4.0 unterstützt keine produktübergreifende XPath-Abfragen wie Customers[Order/@OrderDate=Order/@ShipDate]. Mit dieser Abfrage werden alle Order-Datensätze aus der Datenbank Customers ausgewählt, bei denen der OrderDate-Wert dem ShipDate-Wert entspricht.
Allerdings unterstützt SQLXML 4.0 keine Abfragen wie Customer[Order[@OrderDate=@ShippedDate]], mit der alle Customer-Datensätze ausgewählt werden, für die Order-Datensätze vorhanden sind, bei denen der OrderDate-Wert dem ShipDate-Wert entspricht.
Fehlerbehandlung und Sicherheit
Je nachdem, welches Schema und welcher XPath-Abfrageausdruck verwendet werden, können Transact-SQL-Fehler unter bestimmten Bedingungen für die Benutzer verfügbar gemacht werden.
Die Tabellen in den folgenden Abschnitten enthalten nähere Angaben dazu, in welcher Hinsicht sich die Implementierung von XPath-Abfragen in SQLXML 4.0 von der betreffenden W3C-Spezifikation unterscheidet.
Unterstützte Funktionalität
In der folgenden Tabelle werden die Funktionen der XPath-Sprache aufgeführt, die in SQLXML 4.0 implementiert sind.
Funktion |
Element |
Link zu Beispielabfragen |
---|---|---|
Achsen |
attribute-, child-, parent und self-Achsen |
|
Prädikate mit booleschen Werten einschließlich aufeinander folgender und geschachtelter Prädikate |
|
Angeben von arithmetischen Operatoren in XPath-Abfragen (SQLXML 4.0) |
Alle relationalen Operatoren |
=, !=, <, <=, >, >= |
Angeben von relationalen Operatoren in XPath-Abfragen (SQLXML 4.0) |
Arithmetische Operatoren |
+, -, *, div |
Angeben von arithmetischen Operatoren in XPath-Abfragen (SQLXML 4.0) |
Explizite Konvertierungsfunktionen |
number(), string(), Boolean() |
Angeben von expliziten Konvertierungsfunktionen in XPath-Abfragen (SQLXML 4.0) |
Boolesche Operatoren |
AND, OR |
Angeben von booleschen Operatoren in XPath-Abfragen (SQLXML 4.0) |
Boolesche Funktionen |
true(), false(), not() |
Angeben von booleschen Funktionen in XPath-Abfragen (SQLXML 4.0) |
XPath-Variablen |
|
Nicht unterstützte Funktionalität
In der folgenden Tabelle werden die Funktionen der XPath-Sprache aufgeführt, die in SQLXML 4.0 nicht implementiert sind.
Funktion |
Element |
---|---|
Achsen |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
Prädikate mit numerischen Werten |
|
Arithmetische Operatoren |
mod |
Knotenfunktionen |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
Zeichenfolgenfunktionen |
string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
Boolesche Funktionen |
lang() |
Numerische Funktionen |
sum(), floor(), ceiling(), round() |
UNION-Operator |
| |
Bei der Angabe von XPath-Abfragen in einer Vorlage ist Folgendes zu beachten:
- XPath kann Zeichen wie < oder & enthalten, die in XML (und eine Vorlage ist ein XML-Dokument) eine spezielle Bedeutung haben. Sie müssen diese Zeichen mittels XML &-Codierung mit Escapezeichen versehen oder XPath in der URL angeben.