Wykład 03
Transkrypt
Wykład 03
Plan
Przetwarzanie dokumentów XML
i zaawansowane techniki WWW
Wykład 03
T. Romańczukiewicz
Jagiellonian University
2009/2010
T. Romańczukiewicz
XML 03
Plan
Plan
1
XPath
2
XQuery
3
Podsumowanie
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Plan
1
XPath
Wstep
˛
W˛ezły, wyrażenie i typy
Działania i instrukcje
Osie
2
XQuery
3
Podsumowanie
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
XPath
XPath
XPath (ang. XML Path Language, w wolnym tłumaczeniu Jezyk
˛
Ścieżek XML, Jezyk
˛
Ścieżek Rozszerzalnego Jezyka
˛
Znaczników) – jezyk
˛
służacy
˛ do adresowania cz˛eści
dokumentu XML.
XPath został oryginalnie zaprojektowany dla XSLT i XPointer, ale znajduje
zastosowanie także w DOM oraz jezykach
˛
bazujacych
˛
na XML, np. XQuery, XUL.
XPath pozwala na definiowanie cz˛eści dokumentu XML
XPath pozwala na nawigowanie w dokumencie XML tak jak nawiguje sie˛ w
strukturze katalogów
XPath zawiera bibliotek˛e standardowych funkcji
XPath jest głównym elementem XSLT
XPath jest rekomendowane przez W3C
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Wyrażenia Wyrażenia służa˛ do wybierania wezłó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 operacje˛ 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
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Przykład
Listing 1: Przykład1.js (uproszczony)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function loadXMLDoc(dname)
{
xhttp=new XMLHttpRequest();
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}
...
xml=loadXMLDoc("Catalog.xml");
path="/Catalog/Artist/Album"
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
var result=nodes.iterateNext();
while (result)
{
document.write(result.childNodes[0].nodeValue);
document.write("<br />");
result=nodes.iterateNext();
}
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Dokument jako drzewo.
Uwzglednianie
˛
przestrzeni nazw.
Możliwość uwzgledniania
˛
schematu (w wersji 2.0).
Rozwiniete
˛ sekcje CDATA oraz referencje do encji i znaków.
Brak sasiaduj
˛
acych
˛
wezłów
˛
tekstowych.
Atrybut nie jest dzieckiem elementu.
Korzeń lub inaczej wezeł
˛
jest osobnym wezłem,
˛
różnym od elementu głównego.
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Rodzaje wezłów:
˛
wezeł
˛
dokumentu (korzeń),
element
atrybut,
wezeł
˛
tekstowy,
instrukcja przetwarzania,
komentarz,
wezeł
˛
przestrzeni nazw.
brak sekcji CDATA,
brak encji i referencji do encji.
Elementy:
wezły
˛
wartości atomowe
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Podstawowe wyrażenia
nodename
/
//
.
Wybiera wezły
˛
w dokumencie, nie ważne gdzie sie˛ one znajduja˛
Wybiera aktualny wezeł
˛
..
@
Wybiera wszystkie dzieci wezła
˛
o podanej nazwie - ścieżka wzgledna
˛
Wybiera korzeń - ścieżka bezwzgledna
˛
Wybiera wezeł
˛
rodzica
Wybiera atrybuty
Przykłady:
bookstore
Wybiera wszystkie wezły
˛
w elemencie bookstore
Wybiera główny element bookstore Jeśli ścieżka zaczyna sie˛ od
ukośnika (/) to zawsze musi reprezentować element główny
/bookstore
bookstore/book
Wybiera wszystkie elementy book, które sa˛ dziećmi bookstore
Wybiera wszelkie elementy o nazwie book bez wzgledu
˛
na to gdzie sie˛
znajduja˛
//book
Wybiera wszelkie elementy o nazwie book bez wzgledu
˛ na to gdzie
sie˛ znajduja˛ o ile sa˛ one umieszczone w elemencie bookstore
bookstore//book
//@lang
Wybiera wszystkie atrybuty lang
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Podstawowe wyrażenia
nodename
/
//
.
Wybiera wezły
˛
w dokumencie, nie ważne gdzie sie˛ one znajduja˛
Wybiera aktualny wezeł
˛
..
@
Wybiera wszystkie dzieci wezła
˛
o podanej nazwie - ścieżka wzgledna
˛
Wybiera korzeń - ścieżka bezwzgledna
˛
Wybiera wezeł
˛
rodzica
Wybiera atrybuty
Przykłady:
bookstore
Wybiera wszystkie wezły
˛
w elemencie bookstore
Wybiera główny element bookstore Jeśli ścieżka zaczyna sie˛ od
ukośnika (/) to zawsze musi reprezentować element główny
/bookstore
bookstore/book
Wybiera wszystkie elementy book, które sa˛ dziećmi bookstore
Wybiera wszelkie elementy o nazwie book bez wzgledu
˛
na to gdzie sie˛
znajduja˛
//book
Wybiera wszelkie elementy o nazwie book bez wzgledu
˛ na to gdzie
sie˛ znajduja˛ o ile sa˛ one umieszczone w elemencie bookstore
bookstore//book
//@lang
Wybiera wszystkie atrybuty lang
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Wybiera pierwszy element book, który jest dzieckiem elementu
głównego bookstore
Uwaga na IE5!
/bookstore/book[1]
Wybiera ostatni element book, który jest dzieckiem
elementu głównego bookstore
/bookstore/book[last()]
/bookstore/book[last()-1]
Element przedostatni
/bookstore/book[position()<3]
//title[@lang]
Pierwsze dwa elementy
Wybiera wszelkie elementy title, które posiadaja˛ element o
nazwie lang
Wybiera wszelkie elementy title, które posiadaja˛ element o
nazwie lang, którego wartościa˛ jest ’eng’
//title[@lang=’eng’]
Wybiera elementy book, które posiadaja˛ element
o wartości wiekszej
˛
niż 35.00
/bookstore/book[price>35.00]
price
/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 wiekszej
˛
niż
35.00
Wieloznaczniki (wildcards)Path Expression Result
*
Znaczy każdy element
@*
Każdy atrybut
node()
Każdy rodzaj wezła
˛
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
/bookstore/*
//*
Wstep
˛
W˛ezły... Działania i instrukcje Osie
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
//title |//price
Wybiera elementy title i price
Wybiera elementy title i price z całego dokumentu
/bookstore/book/title |//price
...
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezł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 dostepne)
˛
Sekwencje
Wartości w XPath 2.0 – sekwencje.
Elementy (items) sekwencji:
wezł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˛ sekwencje˛
(("Hello", 2), 5, (3.14, 2.78))=("Hello", 2, 5, 3.14, 2.78)
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezł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
fałsz
sekwencja z wezłem
˛
na pierwszej pozycji
prawda
pojedyncza wartość boolowska
wartość
pojedynczy pusty napis
fałsz
pojedynczy niepusty napis
prawda
pojedyncza liczba równa 0 lub NaN
fałsz
inna pojedyncza liczba
prawda
inna wartość
bład
˛ typu
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Atomizacja
Atomizacja - operacja majaca
˛ na celu zastapienie
˛
dowolnej sekwencja jako sekwencji
wartości prostych (nie zawsze wykonalna)
Atomizacja
wartość atomowa
ta wartość
wezeł
˛
o (znanym) typie atomowym
wartość wezła
˛
wezeł
˛
typu lista
sekwencja elementów listy
wezeł
˛
nieznanego typu prostego, z mieszana˛ zawartościa˛ lub typu
xs:untypedAtomic lub
xs:anySimpleType
zawartość tekstowa jako jeden atom
element o zawartości elementowej
bład
˛ typu
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Zmienne
Zmienne w XPath
Napisy:
Liczby:
"Hello world", "12.3", ’1726.2376’
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. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezł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
nie-wezły w sekwencjach – bład typu,
wynik: sekwencja bez powtórzeń, porzadek
˛
dokumentu
except
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
˛
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezł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
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezł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
2
3
if WARUNEK
then WYNIK1
else WYNIK2
Warunek jest spełniony jeśli Effective Boolean Value ma wartość true
Obliczana jest tylko jedna gałaź
˛
Przykład
1
2
3
4
5
6
if informacje/cena
then
if informacje/cena >= 1000
then ’Przesylka wartosciowa’
else ’Przesylka zwykla’
else ’Brak danych’
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
P˛etla po sekwencji
1
2
for $ZMIENNA in SEKWENCJA
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
2
3
4
for $i in (1 to 10)
return $i * $i
for $o in //obiekt
return concat(’Nazwa obiektu:’, $o/@nazwa)
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Kwalifikatory
W XPath 2.0 można używać również kwalifikatorów every (∀) i some (∃)
1
2
3
4
5
some $ZMIENNA in SEKWENCJA
satisfies WYNIK
every $ZMIENNA in SEKWENCJA
satisfies WYNIK
Sprawdzany jest warunek Effective Boolean Value
Kolejność przechodzenie po sekwencji jest dowolna
Przykłady
1
2
some $i in (1 to 10) satisfies $i > 7
every $o in //obiekt satisfies $o/@nazwa
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Osie XPath
Ścieżki moga˛ być bezwzgledne:
˛
/krok1/krok2/ lub wzgledne
˛
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-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. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezł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. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Testy wezłów
˛
i Predykaty
Testy wezłów
˛
moga˛ wybierać 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 każdego wezła
˛
Każdy predykat filtruje sekwencje
można używać poza ścieżkami:
1
2
3
4
/child::osoby/child::osoba[child::imie = ’Tomasz’]
child::osoba[child::imie = ’Tomasz’]/child::nazwisko
//obiekt[attribute::nazwa][3]
(1 to 10)[. mod 2 = 0]
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Wstep
˛
W˛ezły... Działania i instrukcje Osie
Skróty
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 wezła
˛
z bieżacej
˛ sekwencji kolejny krok wraz z predykatami
po każdym predykacie cała sekwencja przekazywana jest do kolejnego predykatu
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Plan
1
XPath
2
XQuery
3
Podsumowanie
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Jezyk
˛
XQuery
Jezyk
˛
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 wezłów.
˛
Definiowanie własnych funkcji.
T. Romańczukiewicz
XML 03
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ć sie˛ po pliku xml jak w przypadku XPath
doc("books.xml")/bookstore/book[price<30]
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
FLWOR
FLWOR
Skrót od "For, Let, Where, Order by, Return".
1
2
3
4
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
for
wybiera wszystkie elementy i wynik zapisuje w zmiennej $x
wybiera te elementy spośród $x, które posiadaja˛ element price o wartości
wiekszej
˛
niż 30
where
order
określa sortowanie wyniku
return
Określa co tak naprawde˛ zostanie zwrócone
użyte zamiast for wybiera wszystkie elementy, ale w wyniku nic wiecej
˛
sie˛ nie
powtarza
let
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
for vs let
1
2
3
4
5
6
for $x in (1 to 3)
return <test>{$x}</test>
1
2
3
4
let $x in (1 to 3)
return <test>{$x}</test>
<test>1</test>
<test>2</test>
<test>3</test>
<test>1 2 3</test>
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Funkcje
1
2
3
4
5
6
7
8
9
10
11
declare function prefix:function_name($parameter AS datatype)
AS returnDatatype
{
...function code here...
}
...
<name>{uppercase($booktitle)}</name>
doc("books.xml")/bookstore/book[substring(title,1,5)=’Harry’]
let $name := (substring($booktitle,1,4))
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
Plan
1
XPath
2
XQuery
3
Podsumowanie
T. Romańczukiewicz
XML 03
XPath XQuery Podsumowanie
XPath jest to jezyk,
˛
który
Pozwala na posługiwanie sie˛ 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 jezyk,
˛
który
Jest rozszerzeniem XPath
Posiada zapytania "bazodanowe", podobnie jak SQL
Można definiować dodatkowo funkcje
T. Romańczukiewicz
XML 03