Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Plan
Przetwarzanie dokumentów XMLi zaawansowane techniki WWW
Wykład 03
T. Romanczukiewicz
Jagiellonian University
2009/2010
T. Romanczukiewicz XML 03
Plan
Plan
1 XPath
2 XQuery
3 Podsumowanie
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Plan
1 XPathWstepWezły, wyrazenie i typyDziałania i instrukcjeOsie
2 XQuery
3 Podsumowanie
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
XPath
XPath
XPath (ang. XML Path Language, w wolnym tłumaczeniu Jezyk Sciezek XML, JezykSciezek Rozszerzalnego Jezyka Znaczników) – jezyk słuzacy do adresowania czescidokumentu XML.XPath został oryginalnie zaprojektowany dla XSLT i XPointer, ale znajdujezastosowanie takze w DOM oraz jezykach bazujacych na XML, np. XQuery, XUL.
XPath pozwala na definiowanie czesci dokumentu XML
XPath pozwala na nawigowanie w dokumencie XML tak jak nawiguje sie wstrukturze katalogów
XPath zawiera biblioteke standardowych funkcji
XPath jest głównym elementem XSLT
XPath jest rekomendowane przez W3C
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Wyrazenia Wyrazenia słuza do wybierania wezłów i zbiorów w dokumentachXML. Wyrazenia sa bardzo podobne do wyrazen stosowanych w tradycyjnychsystemach komputerowych/Catalog/Artist/Album, /Catalog/Artist[2]/Album
XPath zawiera około 100 wbudowanych funkcji. Pozwalaja one na operacje naciagach znakowych, wartosciach liczbowych, obsługuja czas i daty, typy Boolenitp.fn:day-from-dateTime(datetime), fn:upper-case(string), fn:ceiling(num), fn:true
()
Bez znajomosci XPath trudno byłoby tworzyc dokumenty XSLT
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Przykład
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"1112 var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);13 var result=nodes.iterateNext();1415 while (result)16 {17 document.write(result.childNodes[0].nodeValue);18 document.write("<br />");19 result=nodes.iterateNext();20 }
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Dokument jako drzewo.
Uwzglednianie przestrzeni nazw.
Mozliwosc uwzgledniania schematu (w wersji 2.0).
Rozwiniete sekcje CDATA oraz referencje do encji i znaków.
Brak sasiadujacych wezłów tekstowych.
Atrybut nie jest dzieckiem elementu.
Korzen lub inaczej wezeł jest osobnym wezłem, róznym od elementu głównego.
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Rodzaje wezłów:
wezeł dokumentu (korzen),
element
atrybut,
wezeł tekstowy,
instrukcja przetwarzania,
komentarz,
wezeł przestrzeni nazw.
brak sekcji CDATA,
brak encji i referencji do encji.
Elementy:
wezły
wartosci atomowe
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Podstawowe wyrazenia
nodename Wybiera wszystkie dzieci wezła o podanej nazwie - sciezka wzgledna
/ Wybiera korzen - sciezka bezwzgledna
// Wybiera wezły w dokumencie, nie wazne gdzie sie one znajduja
. Wybiera aktualny wezeł
.. Wybiera wezeł rodzica
@ Wybiera atrybuty
Przykłady:
bookstore Wybiera wszystkie wezły w elemencie bookstore
/bookstore Wybiera główny element bookstore Jesli sciezka zaczyna sie odukosnika (/) to zawsze musi reprezentowac element główny
bookstore/book Wybiera wszystkie elementy book, które sa dziecmi bookstore
//book Wybiera wszelkie elementy o nazwie book bez wzgledu na to gdzie sieznajduja
bookstore//book Wybiera wszelkie elementy o nazwie book bez wzgledu na to gdziesie znajduja o ile sa one umieszczone w elemencie bookstore
//@lang Wybiera wszystkie atrybuty lang
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Podstawowe wyrazenia
nodename Wybiera wszystkie dzieci wezła o podanej nazwie - sciezka wzgledna
/ Wybiera korzen - sciezka bezwzgledna
// Wybiera wezły w dokumencie, nie wazne gdzie sie one znajduja
. Wybiera aktualny wezeł
.. Wybiera wezeł rodzica
@ Wybiera atrybuty
Przykłady:
bookstore Wybiera wszystkie wezły w elemencie bookstore
/bookstore Wybiera główny element bookstore Jesli sciezka zaczyna sie odukosnika (/) to zawsze musi reprezentowac element główny
bookstore/book Wybiera wszystkie elementy book, które sa dziecmi bookstore
//book Wybiera wszelkie elementy o nazwie book bez wzgledu na to gdzie sieznajduja
bookstore//book Wybiera wszelkie elementy o nazwie book bez wzgledu na to gdziesie znajduja o ile sa one umieszczone w elemencie bookstore
//@lang Wybiera wszystkie atrybuty lang
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
/bookstore/book[1] Wybiera pierwszy element book, który jest dzieckiem elementugłównego bookstore
Uwaga na IE5!
/bookstore/book[last()] Wybiera ostatni element book, który jest dzieckiemelementu 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 onazwie lang
//title[@lang=’eng’] Wybiera wszelkie elementy title, które posiadaja element onazwie lang, którego wartoscia jest ’eng’
/bookstore/book[price>35.00] Wybiera elementy book, które posiadaja elementprice o wartosci wiekszej niz 35.00
/bookstore/book[price>35.00]/title Wybiera elementy title sposród tychelementów /bookstore/book, które posiadaja element price o wartosci wiekszej niz35.00
Wieloznaczniki (wildcards)Path Expression Result
* Znaczy kazdy element
@* Kazdy atrybut
node() Kazdy rodzaj wezła
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezł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 sciezek na raz poprzez uzycie 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 ...
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Typy
Typy pierwotne XML Schema. Dodatkowo:xs:untyped xs:untypedAtomic xs:anyAtomicType xs:dayTimeDurationxs:yearMonthDuration
Mozliwosc uzywania typów zdefiniowanych w schemacie (prostych i złozonych), atakze innych typów wyprowadzonych (nie zawsze dostepne)
Sekwencje
Wartosci w XPath 2.0 – sekwencje.Elementy (items) sekwencji:
wezły (z drzew dokumentów)wartosci atomowe
Element równowazny jest jednoelementowej sekwencji "Hello"⇔ ("Hello")
Zagniezdzone sekwencje sa spłaszczane - zamieniane w jedna sekwencje(("Hello", 2), 5, (3.14, 2.78))=("Hello", 2, 5, 3.14, 2.78)
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Effective Boolean Value
Zamiana sekwencji na wartosc logiczna (np w C: jesli int był równy 0 to fałsz pozostałewartosci prawda)
EBV
Pusta sekwencja fałsz
sekwencja z wezłem na pierwszej pozycji prawda
pojedyncza wartosc boolowska wartosc
pojedynczy pusty napis fałsz
pojedynczy niepusty napis prawda
pojedyncza liczba równa 0 lub NaN fałsz
inna pojedyncza liczba prawda
inna wartosc bład typu
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Atomizacja
Atomizacja - operacja majaca na celu zastapienie dowolnej sekwencja jako sekwencjiwartosci prostych (nie zawsze wykonalna)
Atomizacja
wartosc atomowa ta wartosc
wezeł o (znanym) typie atomowym wartosc wezła
wezeł typu lista sekwencja elementów listy
wezeł nieznanego typu prostego, z mie-szana zawartoscia lub typuxs:untypedAtomic lubxs:anySimpleType zawartosc tekstowa jako jeden atom
element o zawartosci elementowej bład typu
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Zmienne
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
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Operatory
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órzen, porzadek dokumentu
Porównania atomowe (XPath 2.0):
eq ne lt le gt ge
argumenty poddawane sa atomizacji
jesli którys z argumentów jest sekwencja pusta to wynik tez jest sekwencja pusta
typy atomowe – intuicyjnie „normalne” porównanie,
jesli sekwencje wielo-elementowe to bład
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Porównania ogólne
Porównania ogólne
Porównanie odpowiednich elementów sekcji:= !=< <=> >= prawda jesli istnieje taka para z sekwencji prawej i lewej, ze relacja jest dlanich spełniona!
Przykłady
(1,2) = (1,2) = true
(1,2) = (2,3) = true
(1,2) != (1,2) = true
() != () = false
() = () = false
wnioski:
Równosc nie jest przechodnia
Nierównosc nie jest zaprzeczeniem równosci
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Instrukcje warunkowe
W XPath 2.0 mozna uzywac takze instrukcji sterujacych takich jak instrukcjewarunkowe:
if
1 if WARUNEK2 then WYNIK13 else WYNIK2
Warunek jest spełniony jesli Effective Boolean Value ma wartosc trueObliczana jest tylko jedna gałaz
Przykład
1 if informacje/cena2 then3 if informacje/cena >= 10004 then ’Przesylka wartosciowa’5 else ’Przesylka zwykla’6 else ’Brak danych’
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Petla po sekwencji
1 for $ZMIENNA in SEKWENCJA2 return WYNIK
Zmiennej ZMIENNA przypisywane kolejne wartosci z SEKWENCJI,WYNIK obliczany jest na podstawie wartosci ZMIENNEJ,Wynik jest sekwencja wyników na poszczególnych wartosciachPrzykłady
1 for $i in (1 to 10)2 return $i * $i3 for $o in //obiekt4 return concat(’Nazwa obiektu:’, $o/@nazwa)
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Kwalifikatory
W XPath 2.0 mozna uzywac równiez kwalifikatorów every (∀) i some (∃)
1 some $ZMIENNA in SEKWENCJA2 satisfies WYNIK34 every $ZMIENNA in SEKWENCJA5 satisfies WYNIK
Sprawdzany jest warunek Effective Boolean ValueKolejnosc przechodzenie po sekwencji jest dowolnaPrzykłady
1 some $i in (1 to 10) satisfies $i > 72 every $o in //obiekt satisfies $o/@nazwa
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Osie XPath
Sciezki moga byc bezwzgledne:/krok1/krok2/ lub wzgledne krk1/krok2.Ogólnie mozna kroki definiowac przy uzyciu osi czyli kierunków w drzewiedokumentu: os::test-wezlow [predykat1][predykat2]...
os – kierunek w drzewie dokumentu,test-wezłów – wybór wezłów po rodzaju, typie, nazwie,predykat – opcjonalny dodatkowy filtr
Przykład:/descendant::dzial[attribute::id =’ksi’]/child::pracownik[1]/child::text()
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezł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
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Testy wezłów i Predykaty
Testy wezłów
moga wybierac wezły ze wzgledu na ich rodzaj, poprzez odpowiednie funckje:node(), text(), comment(), element(), attribute()
lub poprzez nazwe wezła: Album, Artist/*, Artist/*/Year
Predykaty [...]
Obliczane sa dla kazdego wezła
Kazdy predykat filtruje sekwencje
mozna uzywac poza sciezkami:
1 /child::osoby/child::osoba[child::imie = ’Tomasz’]2 child::osoba[child::imie = ’Tomasz’]/child::nazwisko3 //obiekt[attribute::nazwa][3]4 (1 to 10)[. mod 2 = 0]
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie Wstep Wezły... Działania i instrukcje Osie
Skróty
Niektóre wyrazenia mozna skrócic:
os child mozna pominac
zamiast attribute mozna uzyc po prostu @
. zamiast self::node().
.. zamiast parent::node().
// zamiast /descendant-or-self::node()/.
Sciezki obliczane sa
od lewej do prawej
dla kazdego wezła z biezacej sekwencji kolejny krok wraz z predykatami
po kazdym predykacie cała sekwencja przekazywana jest do kolejnego predykatu
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
Plan
1 XPath
2 XQuery
3 Podsumowanie
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
Jezyk XQuery
Jezyk zapytan 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 wezłów.
Definiowanie własnych funkcji.
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
Zastosowania
Wyciaganie danych z XML do uzytku w serwisach WWW
Do generowania raportów
Transformowanie danych z XML do XHTML
Przeszukiwanie dokumentów sieciowych
Podstawowe mozliwosci
Otwieranie pliku doc("books.xml")
Mozna poruszac sie po pliku xml jak w przypadku XPathdoc("books.xml")/bookstore/book[price<30]
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
FLWOR
FLWOR
Skrót od "For, Let, Where, Order by, Return".
1 for $x in doc("books.xml")/bookstore/book2 where $x/price>303 order by $x/title4 return $x/title
for wybiera wszystkie elementy i wynik zapisuje w zmiennej $x
where wybiera te elementy sposród $x, które posiadaja element price o wartosciwiekszej niz 30
order okresla sortowanie wyniku
return Okresla co tak naprawde zostanie zwrócone
let uzyte zamiast for wybiera wszystkie elementy, ale w wyniku nic wiecej sie niepowtarza
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
for vs let
1 for $x in (1 to 3)2 return <test>{$x}</test>34 <test>1</test>5 <test>2</test>6 <test>3</test>
1 let $x in (1 to 3)2 return <test>{$x}</test>34 <test>1 2 3</test>
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
Funkcje
1 declare function prefix:function_name($parameter AS datatype)2 AS returnDatatype3 {4 ...function code here...5 }67 ...89 <name>{uppercase($booktitle)}</name>
10 doc("books.xml")/bookstore/book[substring(title,1,5)=’Harry’]11 let $name := (substring($booktitle,1,4))
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
Plan
1 XPath
2 XQuery
3 Podsumowanie
T. Romanczukiewicz XML 03
XPath XQuery Podsumowanie
XPath jest to jezyk, który
Pozwala na posługiwanie sie dokumentem XML jak drzewem katalogowym
Posiada mozliwosc korzystania ze zmiennych, atomizacji, obliczen, sekwencji,kwalifikatorów, funkcji
Posiada mozliwosc definiowania osi, testów i predykatów
Jest uzywany w innych zastosowaniach XQuery, XSLT, DOM ...
XQuery jest to jezyk, który
Jest rozszerzeniem XPath
Posiada zapytania "bazodanowe", podobnie jak SQL
Mozna definiowac dodatkowo funkcje
T. Romanczukiewicz XML 03