Plan Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 03 T. Romańczukiewicz Jagiellonian University 2009/2010
Plan Plan 1 XPath 2 XQuery 3 Podsumowanie
Plan XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie 1 XPath Wstęp Węzły, wyrażenie i typy Działania i instrukcje Osie 2 XQuery 3 Podsumowanie
XPath XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie XPath XPath (ang. XML Path Language, w wolnym tłumaczeniu Język Ścieżek XML, Język Ścieżek Rozszerzalnego Języka Znaczników) język służacy do adresowania części dokumentu XML. XPath został oryginalnie zaprojektowany dla XSLT i XPointer, ale znajduje zastosowanie także w DOM oraz językach bazujacych na XML, np. XQuery, XUL. XPath pozwala na definiowanie części dokumentu XML XPath pozwala na nawigowanie w dokumencie XML tak jak nawiguje się w strukturze katalogów XPath zawiera bibliotekę standardowych funkcji XPath jest głównym elementem XSLT XPath jest rekomendowane przez W3C
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Wyrażenia Wyrażenia służa do wybierania węzłów i zbiorów w dokumentach XML. Wyrażenia sa bardzo podobne do wyrażeń stosowanych w tradycyjnych systemach komputerowych /Catalog/Artist/Album, /Catalog/Artist[2]/Album XPath zawiera około 100 wbudowanych funkcji. Pozwalaja one na operację na ciagach znakowych, wartościach liczbowych, obsługuja czas i daty, typy Boolen itp. fn:day-from-datetime(datetime), fn:upper-case(string), fn:ceiling(num), fn:true () Bez znajomości XPath trudno byłoby tworzyć dokumenty XSLT
Przykład XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Listing 1: Przykład1.js (uproszczony) 1 function loadxmldoc(dname) 2 { 3 xhttp=new XMLHttpRequest(); 4 xhttp.open("get",dname,false); 5 xhttp.send(""); 6 return xhttp.responsexml; 7 } 8... 9 xml=loadxmldoc("catalog.xml"); 10 path="/catalog/artist/album" 11 12 var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 13 var result=nodes.iteratenext(); 14 15 while (result) 16 { 17 document.write(result.childnodes[0].nodevalue); 18 document.write("<br />"); 19 result=nodes.iteratenext(); 20 }
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Dokument jako drzewo. Uwzględnianie przestrzeni nazw. Możliwość uwzględniania schematu (w wersji 2.0). Rozwinięte sekcje CDATA oraz referencje do encji i znaków. Brak sasiaduj acych węzłów tekstowych. Atrybut nie jest dzieckiem elementu. Korzeń lub inaczej węzeł jest osobnym węzłem, różnym od elementu głównego.
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Rodzaje węzłów: węzeł dokumentu (korzeń), element atrybut, węzeł tekstowy, instrukcja przetwarzania, komentarz, węzeł przestrzeni nazw. brak sekcji CDATA, brak encji i referencji do encji. Elementy: węzły wartości atomowe
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Podstawowe wyrażenia nodename Wybiera wszystkie dzieci węzła o podanej nazwie - ścieżka względna / Wybiera korzeń - ścieżka bezwzględna // Wybiera węzły w dokumencie, nie ważne gdzie się one znajduja. Wybiera aktualny węzeł.. Wybiera węzeł rodzica @ Wybiera atrybuty Przykłady: bookstore Wybiera wszystkie węzły w elemencie bookstore /bookstore Wybiera główny element bookstore Jeśli ścieżka zaczyna się od ukośnika (/) to zawsze musi reprezentować element główny bookstore/book Wybiera wszystkie elementy book, które sa dziećmi bookstore //book Wybiera wszelkie elementy o nazwie book bez względu na to gdzie się znajduja bookstore//book Wybiera wszelkie elementy o nazwie book bez względu na to gdzie się znajduja o ile sa one umieszczone w elemencie bookstore //@lang Wybiera wszystkie atrybuty lang
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Podstawowe wyrażenia nodename Wybiera wszystkie dzieci węzła o podanej nazwie - ścieżka względna / Wybiera korzeń - ścieżka bezwzględna // Wybiera węzły w dokumencie, nie ważne gdzie się one znajduja. Wybiera aktualny węzeł.. Wybiera węzeł rodzica @ Wybiera atrybuty Przykłady: bookstore Wybiera wszystkie węzły w elemencie bookstore /bookstore Wybiera główny element bookstore Jeśli ścieżka zaczyna się od ukośnika (/) to zawsze musi reprezentować element główny bookstore/book Wybiera wszystkie elementy book, które sa dziećmi bookstore //book Wybiera wszelkie elementy o nazwie book bez względu na to gdzie się znajduja bookstore//book Wybiera wszelkie elementy o nazwie book bez względu na to gdzie się znajduja o ile sa one umieszczone w elemencie bookstore //@lang Wybiera wszystkie atrybuty lang
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie /bookstore/book[1] Wybiera pierwszy element book, który jest dzieckiem elementu głównego bookstore Uwaga na IE5! /bookstore/book[last()] Wybiera ostatni element book, który jest dzieckiem elementu głównego bookstore /bookstore/book[last()-1] Element przedostatni /bookstore/book[position()<3] Pierwsze dwa elementy //title[@lang] Wybiera wszelkie elementy title, które posiadaja element o nazwie lang //title[@lang= eng ] Wybiera wszelkie elementy title, które posiadaja element o nazwie lang, którego wartościa jest eng /bookstore/book[price>35.00] Wybiera elementy book, które posiadaja element price o wartości większej niż 35.00 /bookstore/book[price>35.00]/title Wybiera elementy title spośród tych elementów /bookstore/book, które posiadaja element price o wartości większej niż 35.00 Wieloznaczniki (wildcards)path Expression Result * Znaczy każdy element @* Każdy atrybut node() Każdy rodzaj węzła
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie /bookstore/* Wszystkie podelementy bookstore //* Wszystkie elementy dokumentu //title[@*] Wszystkie elemety title, które posiadaja jakikolwiek argument Wybór kilku ścieżek na raz poprzez użycie operatora //book/title //book/price Wybiera elementy title i price //title //price Wybiera elementy title i price z całego dokumentu /bookstore/book/title //price...
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Typy Typy pierwotne XML Schema. Dodatkowo: xs:untyped xs:untypedatomic xs:anyatomictype xs:daytimeduration xs:yearmonthduration Możliwość używania typów zdefiniowanych w schemacie (prostych i złożonych), a także innych typów wyprowadzonych (nie zawsze dostępne) Sekwencje Wartości w XPath 2.0 sekwencje. Elementy (items) sekwencji: węzły (z drzew dokumentów) wartości atomowe Element równoważny jest jednoelementowej sekwencji "Hello" ("Hello") Zagnieżdżone sekwencje sa spłaszczane - zamieniane w jedna sekwencję (("Hello", 2), 5, (3.14, 2.78))=("Hello", 2, 5, 3.14, 2.78)
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Effective Boolean Value Zamiana sekwencji na wartość logiczna (np w C: jeśli int był równy 0 to fałsz pozostałe wartości prawda) EBV Pusta sekwencja sekwencja z węzłem na pierwszej pozycji pojedyncza wartość boolowska pojedynczy pusty napis pojedynczy niepusty napis pojedyncza liczba równa 0 lub NaN inna pojedyncza liczba inna wartość fałsz prawda wartość fałsz prawda fałsz prawda bład typu
Atomizacja XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Atomizacja - operacja majaca na celu zastapienie dowolnej sekwencja jako sekwencji wartości prostych (nie zawsze wykonalna) Atomizacja wartość atomowa węzeł o (znanym) typie atomowym węzeł typu lista węzeł nieznanego typu prostego, z mieszana zawartościa lub typu xs:untypedatomic lub xs:anysimpletype element o zawartości elementowej ta wartość wartość węzła sekwencja elementów listy zawartość tekstowa jako jeden atom bład typu
Zmienne XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Zmienne w XPath Napisy: "Hello world", "12.3", 1726.2376 Liczby: 3.1415, 137.23 Odwołania do zmiennych: $x, $napis Konstrukcje, które wprowadzaja zmienne np. for, some, every Rzutowanie typów xs:date("2001-08-25") - typy np. z XSL xs:float("nan") adresy:kod-pocztowy("48-200") (o ile schemat dostepny) string(//obiekt[4]) Operator cast as: "2001-08-25"cast as xs:date
Operatory XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Operatory Arytmetyka: + - *div idiv mod na datach i duration: + i - zgodnie z typami. Sekwencje wezłów (w 1.0 zbiory wezłów ): union intersect except nie-wezły w sekwencjach bład typu, wynik: sekwencja bez powtórzeń, porzadek dokumentu Porównania atomowe (XPath 2.0): eq ne lt le gt ge argumenty poddawane sa atomizacji jeśli któryś z argumentów jest sekwencja pusta to wynik też jest sekwencja pusta typy atomowe intuicyjnie normalne porównanie, jeśli sekwencje wielo-elementowe to bład
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Porównania ogólne Porównania ogólne Porównanie odpowiednich elementów sekcji: =!= < <= > >= prawda jeśli istnieje taka para z sekwencji prawej i lewej, że relacja jest dla nich spełniona! Przykłady (1,2) = (1,2) = true (1,2) = (2,3) = true (1,2)!= (1,2) = true ()!= () = false () = () = false wnioski: Równość nie jest przechodnia Nierówność nie jest zaprzeczeniem równości
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Instrukcje warunkowe W XPath 2.0 można używać także instrukcji sterujacych takich jak instrukcje warunkowe: if 1 if WARUNEK 2 then WYNIK1 3 else WYNIK2 Warunek jest spełniony jeśli Effective Boolean Value ma wartość true Obliczana jest tylko jedna gałaź Przykład 1 if informacje/cena 2 then 3 if informacje/cena >= 1000 4 then Przesylka wartosciowa 5 else Przesylka zwykla 6 else Brak danych
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Pętla po sekwencji 1 for $ZMIENNA in SEKWENCJA 2 return WYNIK Zmiennej ZMIENNA przypisywane kolejne wartości z SEKWENCJI, WYNIK obliczany jest na podstawie wartości ZMIENNEJ, Wynik jest sekwencja wyników na poszczególnych wartościach Przykłady 1 for $i in (1 to 10) 2 return $i * $i 3 for $o in //obiekt 4 return concat( Nazwa obiektu:, $o/@nazwa)
Kwalifikatory XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie W XPath 2.0 można używać również kwalifikatorów every ( ) i some ( ) 1 some $ZMIENNA in SEKWENCJA 2 satisfies WYNIK 3 4 every $ZMIENNA in SEKWENCJA 5 satisfies WYNIK Sprawdzany jest warunek Effective Boolean Value Kolejność przechodzenie po sekwencji jest dowolna Przykłady 1 some $i in (1 to 10) satisfies $i > 7 2 every $o in //obiekt satisfies $o/@nazwa
Osie XPath XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Ścieżki moga być bezwzględne: /krok1/krok2/ lub względne krk1/krok2. Ogólnie można kroki definiować przy użyciu osi czyli kierunków w drzewie dokumentu: os::test-wezlow [predykat1][predykat2]... oś kierunek w drzewie dokumentu, test-węzłów wybór węzłów po rodzaju, typie, nazwie, predykat opcjonalny dodatkowy filtr Przykład: /descendant::dzial[attribute::id = ksi ]/child::pracownik[1]/child::text()
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie child descendant parent ancestor following-sibling preceding-sibling following preceding attribute namespace self descendand-or-self ancestor-or-self
XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Testy węzłów i Predykaty Testy węzłów moga wybierać węzły ze względu na ich rodzaj, poprzez odpowiednie funckje: node(), text(), comment(), element(), attribute() lub poprzez nazwę węzła: Album, Artist/*, Artist/*/Year Predykaty [...] Obliczane sa dla każdego węzła Każdy predykat filtruje sekwencje można używać poza ścieżkami: 1 /child::osoby/child::osoba[child::imie = Tomasz ] 2 child::osoba[child::imie = Tomasz ]/child::nazwisko 3 //obiekt[attribute::nazwa][3] 4 (1 to 10)[. mod 2 = 0]
Skróty XPath XQuery Podsumowanie Wstęp Węzły... Działania i instrukcje Osie Niektóre wyrażenia można skrócić: oś child można pominać zamiast attribute można użyć po prostu @. zamiast self::node()... zamiast parent::node(). // zamiast /descendant-or-self::node()/. Ścieżki obliczane sa od lewej do prawej dla każdego węzła z bieżacej sekwencji kolejny krok wraz z predykatami po każdym predykacie cała sekwencja przekazywana jest do kolejnego predykatu
Plan XPath XQuery Podsumowanie 1 XPath 2 XQuery 3 Podsumowanie
XPath XQuery Podsumowanie Język XQuery Język zapytań podobny do SQL, ale zamiast bazy korzysta z XML. Zbudowany na podstawie XPath. Wyciaganie danych z XML Sortowanie, grupowanie,... Zapis wyniku jak w XSLT (XML / HTML / tekst). Konstruowanie nowych węzłów. Definiowanie własnych funkcji.
XPath XQuery Podsumowanie Zastosowania Wyciaganie danych z XML do użytku w serwisach WWW Do generowania raportów Transformowanie danych z XML do XHTML Przeszukiwanie dokumentów sieciowych Podstawowe możliwości Otwieranie pliku doc("books.xml") Można poruszać się po pliku xml jak w przypadku XPath doc("books.xml")/bookstore/book[price<30]
FLWOR XPath XQuery Podsumowanie FLWOR Skrót od "For, Let, Where, Order by, Return". 1 for $x in doc("books.xml")/bookstore/book 2 where $x/price>30 3 order by $x/title 4 return $x/title for wybiera wszystkie elementy i wynik zapisuje w zmiennej $x where wybiera te elementy spośród $x, które posiadaja element price o wartości większej niż 30 order określa sortowanie wyniku return Określa co tak naprawdę zostanie zwrócone let użyte zamiast for wybiera wszystkie elementy, ale w wyniku nic więcej się nie powtarza
for vs let XPath XQuery Podsumowanie 1 for $x in (1 to 3) 2 return <test>{$x}</test> 3 4 <test>1</test> 5 <test>2</test> 6 <test>3</test> 1 let $x in (1 to 3) 2 return <test>{$x}</test> 3 4 <test>1 2 3</test>
Funkcje XPath XQuery Podsumowanie 1 declare function prefix:function_name($parameter AS datatype) 2 AS returndatatype 3 { 4...function code here... 5 } 6 7... 8 9 <name>{uppercase($booktitle)}</name> 10 doc("books.xml")/bookstore/book[substring(title,1,5)= Harry ] 11 let $name := (substring($booktitle,1,4))
Plan XPath XQuery Podsumowanie 1 XPath 2 XQuery 3 Podsumowanie
XPath XQuery Podsumowanie XPath jest to język, który Pozwala na posługiwanie się dokumentem XML jak drzewem katalogowym Posiada możliwość korzystania ze zmiennych, atomizacji, obliczeń, sekwencji, kwalifikatorów, funkcji Posiada możliwość definiowania osi, testów i predykatów Jest używany w innych zastosowaniach XQuery, XSLT, DOM... XQuery jest to język, który Jest rozszerzeniem XPath Posiada zapytania "bazodanowe", podobnie jak SQL Można definiować dodatkowo funkcje