Delen via


Het specificeren van selectiepredicaten in het locatiepad (SQLXML 4.0)

Van toepassing op:SQL ServerAzure SQL Database

Een predicaat filtert een knooppuntset ten opzichte van een as (vergelijkbaar met een WHERE-clausule in een SELECT-instructie). Het predicaat wordt tussen haakjes gespecificeerd. Voor elke knoop in de knooppuntset die gefilterd moet worden, wordt de predicaatexpressie geëvalueerd met die knoop als contextknoop, met het aantal knopen in de knooppuntenset als contextgrootte. Als de predicaatexpressie voor die knoop naar WAAR geëvalueerd wordt, wordt de knoop opgenomen in de resulterende knoopset.

XPath maakt ook positiegebaseerde filtering mogelijk. Een predicaatexpressie die een getal uitreikt, selecteert die ordinaalknoop. Bijvoorbeeld, het locatiepad Customer[3] retourneert de derde klant. Dergelijke numerieke predicaten worden niet ondersteund. Alleen predicaatexpressies die een Booleaans resultaat teruggeven, worden ondersteund.

Opmerking

Voor informatie over de beperkingen van deze XPath-implementatie van XPath en de verschillen ertussen en de W3C-specificatie, zie Introduction to Use XPath Queries (SQLXML 4.0).

Selectiepredicaat: Voorbeeld 1

De volgende XPath-expressie (locatiepad) selecteert uit de huidige contextknoop alle <Customer-elementkinderen> die het CustomerID-attribuut met de waarde ALFKI hebben:

/child::Customer[attribute::CustomerID="ALFKI"]  

In deze XPath-query child zijn en attribute asnamen. Customer is de knooptest (WAAR als Customer een <elementknoop> is, omdat <element> het hoofdknooptype voor de child as is). attribute::CustomerID="ALFKI" is het predicaat. In het predicaat attribute is de as en CustomerID is de knooptest (WAAR als CustomerID een attribuut van de contextknoop is, omdat <attribuut> het hoofdknooptype van de attribuutas is).

Met behulp van de verkorte syntaxis kan de XPath-query ook worden gespecificeerd als:

/Customer[@CustomerID="ALFKI"]  

Selectiepredicaat: Voorbeeld 2

De volgende XPath-expressie (locatiepad) selecteert uit de huidige contextknoop alle <Order-kleinkinderen> die het SalesOrderID-attribuut hebben met de waarde 1:

/child::Customer/child::Order[attribute::SalesOrderID="1"]  

In deze XPath-uitdrukking child zijn en attribute de namen van de as. Customer, Order, en SalesOrderID zijn de knooppunttesten. attribute::OrderID="1" is het predicaat.

Met behulp van de verkorte syntaxis kan de XPath-query ook worden gespecificeerd als:

/Customer/Order[@SalesOrderID="1"]  

Selectiepredicaat: Voorbeeld 3

De volgende XPath-expressie (locatiepad) selecteert uit de huidige contextknoop alle <Klantkinderen> die één of meer <ContactName-kinderen> hebben:

child::Customer[child::ContactName]  

Dit voorbeeld gaat ervan uit dat ContactName< een kindelement is van het Customer-element>>in het XML-document, wat in een geannoteerd XSD-schema wordt aangeduid als elementcentrische mapping.<

In deze XPath-uitdrukking child is de naam van de as. Customer is de knooptest (WAAR als Customer een <elementknoop> is, omdat <element> het hoofdknooptype voor child as is). child::ContactName is het predicaat. In het predicaat child is de as en ContactName is de knooptest (WAAR als ContactName een <elementknoop> is).

Deze expressie geeft alleen de <Customer-elementkinderen> van de contextknoop terug die ContactName-elementkinderen> hebben<.

Met behulp van de verkorte syntaxis kan de XPath-query ook worden gespecificeerd als:

Customer[ContactName]  

Selectiepredicaat: Voorbeeld 4

De volgende XPath-expressie selecteert <Klant-elementkinderen> van de contextknoop die geen ContactName-elementkinderen> hebben<:

child::Customer[not(child::ContactName)]  

Dit voorbeeld gaat ervan uit dat <ContactName een kindelement is van het Customer-element>>in het XML-document, en dat het ContactName-veld niet vereist is in de database.<

In dit voorbeeld child is de as. Customer is de knooptest (WAAR als Customer een <elementknoop> is). not(child::ContactName) is het predicaat. In het predicaat child is de as en ContactName is de knooptest (WAAR als ContactName een <elementknoop> is).

Met behulp van de verkorte syntaxis kan de XPath-query ook worden gespecificeerd als:

Customer[not(ContactName)]  

Selectiepredicaat: Voorbeeld 5

De volgende XPath-expressie selecteert uit de huidige contextknoop alle <Customer-kinderen> die het CustomerID-attribuut hebben:

child::Customer[attribute::CustomerID]  

In dit voorbeeld child is de as en Customer is de knooptest (WAAR als Customer een <elementknoop> is). attribute::CustomerID is het predicaat. In het predicaat attribute is de as en CustomerID is het predicaat (WAAR als CustomerID een <attribuutknoop> is).

Met behulp van de verkorte syntaxis kan de XPath-query ook worden gespecificeerd als:

Customer[@CustomerID]  

Selectiepredicaat: Voorbeeld 6

Microsoft SQLXML 4.0 ondersteunt XPath-queries die een cross-product in het predicaat bevatten, zoals getoond in het volgende voorbeeld:

Customer[Order/@OrderDate=Order/@ShipDate]  

Deze query selecteert alle klanten met een voor welke Order de gelijk OrderDate is aan de ShipDate van elk Order.

Zie ook

Inleiding tot geannoteerde XSD-schema's (SQLXML 4.0)
Client-side XML-opmaak (SQLXML 4.0)