Sdílet prostřednictvím


Specifikace výběrových predikátů v cestě k umístění (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Predikát filtruje množinu uzlů vzhledem k ose (podobně jako klauzule WHERE v příkazu SELECT). Predikát je určen mezi závorkami. Pro každý uzel v množině uzlů, která má být filtrována, je výraz predikátu vyhodnocován s tímto uzlem jako kontextovým uzlem, přičemž počet uzlů v množině uzlů je velikost kontextu. Pokud je predikátový výraz pro daný uzel vyhodnocen jako PRAVDA, uzel je zahrnut do výsledné sady uzlů.

XPath také umožňuje filtrování podle pozice. Predikátový výraz vyhodnocující na číslo vybere tento ordinální uzel. Například cesta Customer[3] k umístění vrací třetího zákazníka. Takové numerické predikáty nejsou podporovány. Podporovány jsou pouze predikátové výrazy, které vracejí Booleovský výsledek.

Poznámka:

Informace o omezeních této implementace XPath a rozdílech mezi ní a specifikací W3C naleznete v článku Úvod k používání dotazů XPath (SQLXML 4.0).

Výběrový predikát: Příklad 1

Následující výraz XPath (cesta k lokalizaci) vybírá z aktuálního kontextového uzlu všechny <potomky prvků zákazníka> , které mají atribut CustomerID s hodnotou ALFKI:

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

V tomto dotazu child XPath a attribute jsou názvy os. Customerje test uzlu (PRAVDA, pokud Customer je prvek> uzelem<, protože <prvek> je hlavní typ uzlu pro child osu). attribute::CustomerID="ALFKI" je predikát. V predikátu attribute je osa a CustomerID je test uzlu (PRAVDA, pokud je CustomerID atributem kontextového uzlu, protože <atribut> je hlavní typ uzlu osy atributu ).

Pomocí zkrácené syntaxe lze dotaz XPath také specifikovat jako:

/Customer[@CustomerID="ALFKI"]  

Výběrový predikát: Příklad 2

Následující výraz XPath (cesta k lokalizaci) vybírá z aktuálního kontextového uzlu všechny vnuky <Order> , které mají atribut SalesOrderID s hodnotou 1:

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

V tomto XPath výrazu child jsou attribute a názvy os. Customer, Order, a SalesOrderID jsou testy uzlů. attribute::OrderID="1" je predikát.

Pomocí zkrácené syntaxe lze dotaz XPath také specifikovat jako:

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

Výběrový predikát: Příklad 3

Následující výraz XPath (cesta k lokalizaci) vybírá z aktuálního kontextového uzlu všechny potomky <zákazníků> , které mají jednoho nebo více <potomků ContactName> :

child::Customer[child::ContactName]  

Tento příklad předpokládá, že <ContactName> je podřízený prvek <>Customer v XML dokumentu, což se v anotovaném XSD schématu označuje jako element-centrické mapování.

V tomto XPath výrazu child je název osy. Customerje test uzlu (PRAVDA, pokud Customer je prvek uzlem<>, protože <prvek> je hlavní typ uzlu pro child osu). child::ContactName je predikát. V predikátu child je osa a ContactName je test uzlu (PRAVDA, pokud ContactNameje prvkový<> uzel).

Tento výraz vrací pouze <děti prvků Customer> z kontextového uzlu, které mají <děti prvků ContactName> .

Pomocí zkrácené syntaxe lze dotaz XPath také specifikovat jako:

Customer[ContactName]  

Výběrový predikát: Příklad 4

Následující výraz XPath vybírá <děti členů prvků Customer> z kontextového uzlu, které nemají <děti prvků ContactName> :

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

Tento příklad předpokládá, že <ContactName> je podprvek <>Customer v XML dokumentu a pole ContactName není v databázi vyžadováno.

V tomto příkladu child je osa. Customerje test uzlu (PRAVDA, pokud Customer je prvkový <> uzel). not(child::ContactName) je predikát. V predikátu child je osa a ContactName je test uzlu (PRAVDA, pokud ContactName je prvkový <> uzel).

Pomocí zkrácené syntaxe lze dotaz XPath také specifikovat jako:

Customer[not(ContactName)]  

Výběrový predikát: Příklad 5

Následující výraz XPath vybírá z aktuálního kontextového uzlu všechny potomky <zákazníků> , které mají atribut CustomerID :

child::Customer[attribute::CustomerID]  

V tomto příkladu child je osa a Customer je test uzlu (PRAVDA, pokud Customer je prvkový <> uzel). attribute::CustomerID je predikát. V predikátu attribute je osa a CustomerID je predikát (PRAVDA, pokud CustomerID je atributový<> uzel).

Pomocí zkrácené syntaxe lze dotaz XPath také specifikovat jako:

Customer[@CustomerID]  

Výběrový predikát: Příklad 6

Microsoft SQLXML 4.0 zahrnuje podporu dotazů XPath, které obsahují v predikátu křížový produkt, jak je ukázáno v následujícím příkladu:

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

Tento dotaz vybírá všechny zákazníky s libovolným Order , pro které je rovno OrderDate libovolnému OrderShipDate .

Viz také

Úvod do anotovaných XSD schémat (SQLXML 4.0)
Formátování XML na straně klienta (SQLXML 4.0)