XPath and XQuery

References for subject 9

Generation 1.0:

Generation 2.0:

Generation 3.0:

Preparation

  1. Saxon – download JAR directly from here
  2. eXist DB – if you like, you can install it using this installation JAR
  3. 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):

  1. The third employee (person) from the second department.
  2. The third employee from each department.
  3. The twentieth employee overall.
  4. The employees, who have exactly three phone numbers defined (count is the appropriate function).
  5. The employee with the highest salary.
  6. Employees with salary greater than the average salary.
  7. The employees who have the same first name as some other employee.
  8. 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):

  1. jego pensję,
  2. wszystkich znajdujących się za nim / przed nim,
  3. 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!

  1. startując z pewnego towaru, wszystkich późniejszych, mających takie samo stanowisko,
  2. wszystkich pracowników mających pensję wyższą niż ich bezpośredni następnik,
  3. 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):

  1. średnia pensja wszystkich pracowników (w XQuery jest funkcja avg),
  2. suma pensji w departamencie podanym w parametrze zapytania (external variable)
  3. liczba pracowników o pensji wyższej niż średnia na jego stanowisku,
  4. 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.

Task 7.

To samo, ale dla pliku sklep-bez-kategorii.xml. Tak, żeby kategorie się nie powtarzały!


Valid XHTML 1.1Valid CSS