References for subject 9
Generation 1.0:
Generation 2.0:
Generation 3.0:
Preparation
- Saxon – download JAR directly from here
- eXist DB – if you like, you can install it using this installation JAR
- when in our laboratory, you can run the installation jar directly from my account:
java -jar ~czarnik/xml/eXist-db-setup-2.2.jar
XPath
Open a new project (General / Project) in Eclipse and change the perspective to XML
.
You should see the "XPath" window in the bottom-left corner.
Open the file staff.xml and type as "XPath expression" //department[2]
.
Task 1.
Write some XPath queries for the staff.xml example. Select (if possible):
- The third employee (
person
) from the second department. - The third employee from each department.
- The twentieth employee overall.
- The employees, who have exactly three phone numbers defined (
count
is the appropriate function). - The employee with the highest salary.
- Employees with salary greater than the average salary.
- The employees who have the same first name as some other employee.
- The employees who have unique first names.
Task 2.
Ustawiając się (tzn. kursor) w jednym z pracowników, wpisz ścieżki względne wybierające (względem bieżącego):
- jego pensję,
- wszystkich znajdujących się za nim / przed nim,
- pracownika znajdującego się bezpośrednio za nim / przed nim.
Task 3.
Spróbuj napisać następujące wyrażenia. Niektórych się nie da!
- startując z pewnego towaru, wszystkich późniejszych, mających takie samo stanowisko,
- wszystkich pracowników mających pensję wyższą niż ich bezpośredni następnik,
- pracowników mających pensję wyższą niż średnia na jego stanowisku / w jego departamencie.
XQuery
Technikalia
Do wykonywania zapytań można XQuery użyć Saxona.
Należy pobrać plik saxon9he.jar. Następnie można uruchamiać Saxona w command-line np. w poniższy sposób:
- java -cp saxon9.jar net.sf.saxon.Query {2+2} – Obliczenie ścieżki/zapytania
2+2
. - java -cp saxon9.jar net.sf.saxon.Query zapytanie.xq – Obliczenie zapytania z pliku zapytanie.xq.
- java -cp saxon9.jar net.sf.saxon.Query -s:zródło.xml -o:wynik.xml zapytanie.xq – Jak wyżej, ale źródło.xml jest domyślnym kontekstem dla wyrażeń, a wynik zapisywany jest do pliku wynik.xml.
- java -cp saxon9.jar net.sf.saxon.Query zapytanie.xq param=Wartosc inny='Ala ma kota' – Przypisanie parametrowi param wartości napisowej
Wartosc
.
Jeśli napis zawiera spacje lub podejrzane znaki, najlepiej ująć go w apostrofy. - java -cp saxon9.jar net.sf.saxon.Query zapytanie.xq +param=plik.xml – Przypisanie parametrowi param jako wartości węzła (korzenia) dokumentu odczytanego z pliku plik.xml.
- java -cp saxon9.jar net.sf.saxon.Query -o:wynik.txt zapytanie.xq '!method=text' '!encoding=iso-8859-2' – Przekazywanie parametrów serializacji. Tu wynik zostanie zapisany jako tekst w kodowaniu iso-8859-2.
- java -cp saxon9.jar net.sf.saxon.Transform -s:plik.xml -o:wynik.html arkusz.xsl – Uruchomienie procesora XSLT 2.0. Większość parametrów tak samo jak dla XQuery.
Można też zainstalować "XML-ową bazę danych" eXist (link i instrukcje na początku strony).
Task 4.
Zadaj kilka z powyższych zapytań XPath jako zapytania XQuery.
Task 5.
Zapytania zwracające wartości liczbowe lub teksty (ustaw metodę serializacji na text
):
- średnia pensja wszystkich pracowników (w XQuery jest funkcja
avg
), - suma pensji w departamencie podanym w parametrze zapytania (
external variable
) - liczba pracowników o pensji wyższej niż średnia na jego stanowisku,
- nazwisko najlepiej zarabiającego.
W XQuery można tworzyć nowe elementy, np. elementy HTML. Wykorzystaj to w poniższych zadaniach.
Task 6.
Weź plik sklep.xml
Napisz zapytanie, które wypisuje kolejno wszystkie kategorie i dla każdej kategorii wszystkie towary z tej kategorii.
Użyj elementów HTML (np. ul
, li
) do sformatowania wyniku.