Einführung in die Verwendung von XPath-Abfragen (SQLXML 4.0)
Gilt für: SQL Server Azure SQL-Datenbank
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 in der Einführung in kommentierte XSD-Schemas (SQLXML 4.0) und den 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 "Wichtig" ist 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. Bei einer Reihe von <Kundenknoten> kann XPath beispielsweise alle< Order-Knoten> mit dem Datumsattributwert "7.14.1999" auswählen. 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 W3C XPath-Spezifikation, die sich in http://www.w3.org/TR/1999/PR-xpath-19991008.htmlder Datei befindet.
Nachfolgend werden die Hauptunterschiede zwischen der XPath-Implementierung des W3C und der SQLXML 4.0-Implementierung beschrieben.
Stammabfragen
In SQLXML 4.0 werden Abfragen des Stammelements (/) nicht unterstützt. Jede XPath-Abfrage muss mit einem ElementType> der obersten Ebene <im Schema beginnen.
Melden von Fehlern
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 werden numerische Prädikate und Achsen, die die Dokumentreihenfolge (z . B. die folgende) verwenden, 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 kann die Anmerkung oder schlüssel aus der Beziehungsanmerkung zu einer deterministischen Dokumentreihenfolge führen. Dies ist jedoch nicht die primäre Verwendung dieser Anmerkungen. Weitere Informationen finden Sie unter Identifizieren von Schlüsselspalten mit sql:key-fields (SQLXML 4.0) und Angeben von Beziehungen mithilfe von sql:relationship (SQLXML 4.0)
Data types
SQLXML 4.0 hat Einschränkungen bei der Implementierung der XPath-Zeichenfolge, -Zahlen- und booleschen Datentypen. Weitere Informationen 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
Abhängig vom verwendeten Schema- und XPath-Abfrageausdruck können Transact-SQL-Fehler benutzern unter bestimmten Bedingungen 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 | Artikel | Link zu Beispielabfragen |
---|---|---|
Achsen | attribut, child, parent, and self axes | Angeben von Achsen in XPath-Abfragen (SQLXML 4.0) |
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) |
Arithmetic operators (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 | Angeben von XPath-Variablen in XPath-Abfragen (SQLXML 4.0) |
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 | Artikel |
---|---|
Achsen | vorgänger, vorgänger-oder-selbst, descendant, descendant-or-self (/), following, following-sibling, namespace, preceding, preceding-sibling |
Prädikate mit numerischen Werten | |
Arithmetic operators (Arithmetische Operatoren) | mod |
Knotenfunktionen | vorgänger, vorgänger-oder-selbst, descendant, descendant-or-self (/), following, following-sibling, namespace, preceding, preceding-sibling |
Zeichenfolgenfunktionen | string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), substring(), string-length(), normalize(), translate() |
Boolesche Funktionen | lang() |
Numeric-Funktionen | summe(), 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 besondere Bedeutungen in XML haben (und Die Vorlage ist ein XML-Dokument). Sie müssen diese Zeichen mit XML-Codierung escapen oder den XPath in der URL angeben.