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

Hierarchia typów XDM

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.

Linki zewnętrzne