XPath 2.0
XPath 2.0 to wersja języka XPath zdefiniowana przez World Wide Web Consortium , W3C. Stało się rekomendacją 23 stycznia 2007 r. Jako rekomendacja W3C została zastąpiona przez XPath 3.0 w dniu 10 kwietnia 2014 r.
XPath jest używany głównie do wybierania części dokumentu XML . W tym celu dokument XML jest modelowany jako drzewo węzłów. XPath umożliwia wybieranie węzłów za pomocą hierarchicznej ścieżki nawigacji w drzewie dokumentu.
Język jest znacznie większy niż jego poprzednik, XPath 1.0 , a niektóre podstawowe koncepcje, takie jak model danych i system typów, uległy zmianie. W związku z tym obie wersje językowe zostały opisane w osobnych artykułach.
XPath 2.0 jest używany jako podjęzyk XSLT 2.0 i jest również podzbiorem XQuery 1.0. Wszystkie trzy języki mają ten sam model danych ( XDM ), system typów i bibliotekę funkcji, zostały opracowane razem i opublikowane tego samego dnia.
Model danych
Każda wartość w XPath 2.0 jest sekwencją elementów . Elementami mogą być węzły lub wartości atomowe . Pojedynczy węzeł lub wartość atomowa jest uważana za sekwencję o długości jeden. Sekwencje nie mogą być zagnieżdżane.
Istnieje siedem rodzajów węzłów, odpowiadających różnym konstrukcjom w składni XML : elementy, atrybuty, węzły tekstowe, komentarze, instrukcje przetwarzania, węzły przestrzeni nazw i węzły dokumentów. (Węzeł dokumentu zastępuje węzeł główny XPath 1.0 , ponieważ model XPath 2.0 pozwala na zakorzenienie drzew w innych rodzajach węzłów, zwłaszcza w elementach).
Węzły mogą być wpisane lub niewpisane. Węzeł uzyskuje typ w wyniku walidacji ze schematem XML . Jeśli element lub atrybut zostanie pomyślnie zweryfikowany pod kątem określonego typu złożonego lub typu prostego zdefiniowanego w schemacie, nazwa tego typu jest dołączana jako adnotacja do węzła i określa wynik operacji zastosowanych do tego węzła: na przykład, kiedy sortowanie, węzły, które są opisane jako liczby całkowite, zostaną posortowane jako liczby całkowite.
Wartości atomowe mogą należeć do dowolnego z 19 typów pierwotnych zdefiniowanych w specyfikacji XML Schema (na przykład string, boolean, double, float, decimal, dateTime, QName itd.). Mogą również należeć do typu pochodzącego z jednego z tych typów pierwotnych: wbudowanego typu pochodnego, takiego jak liczba całkowita lub nazwa, lub typu pochodnego zdefiniowanego przez użytkownika, zdefiniowanego w schemacie napisanym przez użytkownika.
System typów
System typów XPath 2.0 jest godny uwagi ze względu na fakt, że łączy silne i słabe pisanie w jednym języku.
Operacje takie jak porównania arytmetyczne i logiczne wymagają wartości atomowych jako operandów. Jeśli operand zwraca węzeł (na przykład @price * 1.2
), wówczas węzeł jest automatycznie atomizowany w celu wyodrębnienia wartości atomowej. Jeśli dokument wejściowy został zweryfikowany pod kątem schematu, węzeł zazwyczaj będzie miał adnotację typu, która określa typ wynikowej wartości niepodzielnej (w tym przykładzie atrybut price może mieć
typ decimal
). Jeśli żaden schemat nie jest używany, węzeł będzie bez typu, a typ wynikowej wartości niepodzielnej będzie bez typu . Atomic
. Wpisane wartości atomowe są sprawdzane, aby upewnić się, że mają odpowiedni typ dla kontekstu, w którym są używane: na przykład nie jest możliwe pomnożenie daty przez liczbę. Z kolei wartości atomowe bez typu są zgodne ze słabą dyscypliną pisania: są automatycznie konwertowane na typ odpowiedni do operacji, w której są używane: na przykład w przypadku operacji arytmetycznej wartość atomowa bez typu jest konwertowana na typ double
.
Wyrażenia ścieżki
Ścieżki lokalizacji w XPath 1.0 są określane w XPath 2.0 jako wyrażenia ścieżki . Nieformalnie wyrażenie ścieżki jest sekwencją kroków oddzielonych operatorem " /
", na przykład a/b/c
(co jest skrótem od child::a/child::b/child::c
). Jednak bardziej formalnie „ /
” jest po prostu operatorem binarnym, który stosuje wyrażenie po prawej stronie do każdego elementu kolejno wybranego przez wyrażenie po lewej stronie. Zatem w tym przykładzie wyrażenie a
wybiera wszystkie elementy podrzędne węzła kontekstu o nazwach <a>
; wyrażenie child::b
jest następnie stosowane do każdego z tych węzłów, wybierając wszystkie elementy potomne <b> elementów
<a>
; a wyrażenie child::c
jest następnie stosowane do każdego węzła w tej sekwencji, która wybiera wszystkie dzieci <c>
tych elementów <b>
.
„ /
” został uogólniony w XPath 2.0, aby umożliwić użycie dowolnego wyrażenia jako operandu: w XPath 1.0 prawa strona była zawsze krokiem osi. Na przykład wywołanie funkcji może być użyte po prawej stronie. Reguły wpisywania operatora wymagają, aby wynikiem pierwszego operandu była sekwencja węzłów. Operand po prawej stronie może zwracać węzły lub wartości atomowe (ale nie mieszaninę). Jeśli wynik składa się z węzłów, wówczas duplikaty są eliminowane, a węzły są zwracane w kolejności dokumentu , która jest zdefiniowana na podstawie względnych pozycji węzłów w oryginalnym drzewie XML.
W wielu przypadkach operandy " /
" będą krokami osi: są one w dużej mierze niezmienione od XPath 1.0 i są opisane w artykule o XPath 1.0 .
Inni operatorzy
Inni operatorzy dostępni w XPath 2.0 to:
Operatorzy | Efekt |
---|---|
+, -, *, div, mod, idiv | Arytmetyka liczb, dat i czasów trwania |
=, !=, <, >, <=, >= | Ogólne porównanie: porównaj dowolne sekwencje. Wynik jest prawdziwy, jeśli jakakolwiek para elementów, po jednym z każdej sekwencji, spełnia porównanie |
eq, ne, lt, gt, le, ge | Porównanie wartości: porównaj pojedyncze elementy |
Jest | Porównaj tożsamość węzła: prawda, jeśli oba operandy są tym samym węzłem |
<<, >> | Porównaj pozycję węzła na podstawie kolejności dokumentów |
związek, przecięcie, z wyjątkiem | Porównuj sekwencje węzłów, traktując je jako zbiory, zwracając sumę zbioru, przecięcie lub różnicę |
i, lub | koniunkcja i dysjunkcja logiczna. Negację uzyskuje się za pomocą not() . |
Do | definiuje zakres liczb całkowitych, na przykład od 1 do 10
|
wystąpienie | określa, czy wartość jest instancją danego typu |
Obsada jako | konwertuje wartość na dany typ |
nadający się do odlewania jak | sprawdza, czy wartość jest konwertowalna na dany typ |
Wyrażenia warunkowe można pisać przy użyciu składni if (A) then B else C
.
XPath 2.0 oferuje również wyrażenie for
, które jest małym podzbiorem wyrażenia FLWOR z XQuery . Wyrażenie dla $ x w X return Y
ocenia wyrażenie Y
dla każdej wartości w wyniku wyrażenia X
po kolei, odwołując się do tej wartości za pomocą odwołania do zmiennej $x
.
Biblioteka funkcji
Biblioteka funkcji w XPath 2.0 jest znacznie rozszerzona w stosunku do biblioteki funkcji w XPath 1.0. ( Pogrubione elementy są dostępne w XPath 1.0)
Dostępne funkcje obejmują:
Zamiar | Przykładowe funkcje |
---|---|
Ogólna obsługa ciągów | małe litery, wielkie litery, podłańcuch , podłańcuch przed , podłańcuch po , tłumacz , zaczyna się od , kończy się na zawiera , długość łańcucha , konkat , znormalizuj przestrzeń , znormalizuj unikod |
Wyrażenia regularne | dopasowuje, zamienia, tokenizuje |
Arytmetyka | liczba , suma , średnia, min, maks, okrąg , podłoga , sufit , abs |
Daty i godziny | dostosuj datęCzas do strefy czasowej, bieżącą datęCzas, dzień-od-datyCzas, miesiąc-od-datyCzas, dni-od-czasu, miesiące-od-czasu itd. |
Właściwości węzłów | nazwa , nazwa-węzła, nazwa-lokalna , przestrzeń-nazw-uri , baza-uri, zero |
Obsługa dokumentów | doc, doc-dostępny, dokument-uri, kolekcja, id , idref |
identyfikatory URI | encode-for-uri, escape-html-uri, iri-to-uri, solve-uri |
QNazwy | QName, przestrzeń nazw-uri-z-QName, przedrostek-z-QName, rozstrzyganie-QName |
Sekwencje | wstaw przed, usuń, podsekwencję, indeks, odrębne wartości, odwróć, nieuporządkowane, puste, istnieje |
Sprawdzanie typu | jeden lub więcej, dokładnie jeden, zero lub jeden |
Kompatybilność wsteczna
Ze względu na zmiany w modelu danych i systemie typów, nie wszystkie wyrażenia mają dokładnie taki sam efekt w XPath 2.0 jak w wersji 1.0. Główna różnica polega na tym, że XPath 1.0 był bardziej swobodny w kwestii konwersji typów, na przykład porównanie dwóch łańcuchów ( „4” > „4.0”
) było całkiem możliwe, ale wykonałoby porównanie numeryczne; w XPath 2.0 jest to zdefiniowane w celu porównania dwóch wartości jako łańcuchów przy użyciu zdefiniowanej w kontekście kolejności zestawiania.
Aby ułatwić przejście, XPath 2.0 definiuje tryb wykonywania, w którym semantyka jest modyfikowana tak, aby była jak najbardziej zbliżona do zachowania XPath 1.0. Podczas korzystania z XSLT 2.0 tryb ten jest aktywowany przez ustawienie version="1.0"
jako atrybutu elementu xsl:stylesheet
. To nadal nie zapewnia 100% kompatybilności, ale wszelkie pozostałe różnice można napotkać tylko w nietypowych przypadkach.
Wsparcie
Wsparcie dla XPath 2.0 jest nadal ograniczone.