Udostępnij za pomocą


Określanie predykatów wyboru w ścieżce lokalizacji (SQLXML 4.0)

Dotyczy:programu SQL ServerAzure SQL Database

Predykat filtruje zbiór węzłów względem osi (podobnie jak klauzula WHERE w instrukcji SELECT). Predykat jest określony między nawiasami. Dla każdego węzła w zbiorze węzłów, który ma być filtrowany, wyrażenie predykatowe jest oceniane z tym węzłem jako węzłem kontekstowym, a liczba węzłów w zbiorze węzłów określa się jako rozmiar kontekstu. Jeśli wyrażenie predykatu jest dla tego węzła wartościowe jako PRAWDA, węzeł ten zostaje uwzględniony w powstałym zbiorze węzłów.

XPath umożliwia także filtrowanie oparte na pozycji. Wyrażenie predykatowe wyliczające się do liczby wybiera ten węzeł porządkowy. Na przykład ścieżka Customer[3] lokalizacji zwraca trzeciego klienta. Takie predykaty liczbowe nie są wspierane. Obsługiwane są tylko wyrażenia predykatowe zwracające wynik boolowski.

Uwaga / Notatka

Aby uzyskać informacje o ograniczeniach tej implementacji XPath oraz różnicach między nią a specyfikacją W3C, zobacz Wprowadzenie do korzystania z zapytań XPath (SQLXML 4.0).

Predykat selekcji: Przykład 1

Poniższe wyrażenie XPath (ścieżka lokalizacji) wybiera z bieżącego węzła kontekstowego wszystkie potomstwo <elementów Customer> , które mają atrybut CustomerID z wartością ALFKI:

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

W tym zapytaniu child XPath i attribute są nazwami osi. Customerjest testem węzła (PRAWDA, jeśli Customer jest węzłem> elementowym<, ponieważ <element> jest głównym typem węzła dla child osi). attribute::CustomerID="ALFKI" jest predykatem. W predykacie jest osią, attribute a CustomerID jest testem węzła (PRAWDA, jeśli CustomerID jest atrybutem węzła kontekstowego, ponieważ <atrybut> jest głównym typem osi atrybutu ).

Korzystając ze skróconej składni, zapytanie XPath można również określić jako:

/Customer[@CustomerID="ALFKI"]  

Predykat selekcji: Przykład 2

Poniższe wyrażenie XPath (ścieżka lokalizacji) wybiera z bieżącego węzła kontekstowego wszystkie <wnuki Order> , które mają atrybut SalesOrderID o wartości 1:

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

W tym wyrażeniu child XPath i attribute są nazwami osi. Customer, Order, oraz SalesOrderID są testami węzłów. attribute::OrderID="1" jest predykatem.

Korzystając ze skróconej składni, zapytanie XPath można również określić jako:

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

Predykat selekcji: Przykład 3

Następujący wyrażenie XPath (ścieżka lokalizacji) wybiera z bieżącego węzła kontekstowego wszystkie <dzieci klientów> , które mają jednego lub więcej potomków <ContactName> :

child::Customer[child::ContactName]  

Ten przykład zakłada, że <ContactName> jest elementem potomnym elementu <Customer> w dokumencie XML, co jest określane jako mapowanie skoncentrowane na elementach w annotowanym schemacie XSD.

W tym wyrażeniu XPath jest child nazwą osi. Customerjest testem węzła (PRAWDA, jeśli Customer jest węzłem elementowym<>, ponieważ <element> jest głównym typem węzła dla child osi). child::ContactName jest predykatem. W predykacie jest osią, child a ContactName jest testem węzła (PRAWDA, jeśli ContactName jest węzłem elementu<>).

To wyrażenie zwraca tylko potomstwo <elementów Customer> węzła kontekstowego, które mają <potomstwo elementów ContactName> .

Korzystając ze skróconej składni, zapytanie XPath można również określić jako:

Customer[ContactName]  

Predykat selekcji: Przykład 4

Następujący wyraz XPath wybiera <potomstwa elementów klienta> węzła kontekstowego, które nie mają <potomków elementów ContactName> :

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

Ten przykład zakłada, że <ContactName> jest elementem potomnym elementu <Customer> w dokumencie XML i pole ContactName nie jest wymagane w bazie danych.

W tym przykładzie child jest osią. Customerjest testem węzła (PRAWDA, jeśli Customer jest węzłem elementowym<>). not(child::ContactName) jest predykatem. W predykacie jest osią, child a jest testem węzła (PRAWDA, jeśli ContactName jest węzłem elementu<>).ContactName

Korzystając ze skróconej składni, zapytanie XPath można również określić jako:

Customer[not(ContactName)]  

Predykat selekcji: Przykład 5

Poniższe wyrażenie XPath wybiera z bieżącego węzła kontekstowego wszystkie potomne Customer>, które< mają atrybut CustomerID:

child::Customer[attribute::CustomerID]  

W tym przykładzie jest osią, child a Customer jest testem węzła (PRAWDA, jeśli Customer jest węzłem elementowym<>). attribute::CustomerID jest predykatem. W predykacie jest osią, attribute a CustomerID jest predykatem (PRAWDA, jeśli CustomerID jest węzłem atrybutu<>).

Korzystając ze skróconej składni, zapytanie XPath można również określić jako:

Customer[@CustomerID]  

Predykat selekcji: Przykład 6

Microsoft SQLXML 4.0 obsługuje zapytania XPath, które zawierają produkt krzyżowy w predykacie, jak pokazano na następującym przykładzie:

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

To zapytanie wybiera wszystkich klientów z dowolnym, Order dla których jest równe OrderDate dowolnemu OrderShipDate .

Zobacz też

Wprowadzenie do annotowanych schematów XSD (SQLXML 4.0)
Formatowanie XML po stronie klienta (SQLXML 4.0)