====== Bazy danych i XML ======
===== PostgreSQL =====
PostgreSQL umożliwia zarówno generację dokumentów XML na podstawie danch relacyjnych, jak i gromadzenie i przetwarzanie dokumentów XML.
Opis funkcji umożliwiających dostęp do danych XML znajduje się pod adresem:
http://www.postgresql.org/docs/9.1/static/functions-xml.html
==== Publikacja XML ====
Dana jest tabela ''kompozycje'' w bazie danych Internetowej Kwiaciarni:
Table "public.kompozycje"
Column | Type | Modifiers
--------------+------------------------+-----------
idkompozycji | character(5) | not null
nazwa | character varying(40) | not null
opis | character varying(100) |
cena | numeric(7,2) |
minimum | integer |
stan | integer |
Napisz odpowiednie zapytanie tworzące w/w tabelę.
Wykonaj skrypt {{:pl:ztb:kwiaciarnia-kompozycje.sql}} umieszczający przykładowe dane w w/w tabeli.
Napisz odpowiednie zapytanie, które zwróci kompletny dokument XML reprezentujący kompozycje, których stan jest większy niż 4.
Dokument ma być zgodny z przykładem poniżej.
Kosz rozyczek
tuzin czerwonych rozyczek, molucella, gips, sizal, koszyk czerwony z palakiem
...
==== Przechowywanie XML ====
Utwórz tabelę ''printers'' umożliwiającą przechowywanie informacji o drukarkach tj. nazwę oraz dokument XML opisujący jej parametry. Zbuduj również odpowiedni klucz główny.
Informacje o drukarkach dane są w postaci {{:pl:ztb:printer.tgz|zbioru plików XML}}.
Załaduj w/w dokumenty XML do tabeli ''printers''.
Możesz zainspirować się poniższym skryptem:
#!/bin/bash
for i in *.xml
do
cat <
Sprawdź czy operacja ładowania się powiodła i informacje o drukarkach znajdują sie w tabeli.
Uwaga: używając powyższej metody może pojawić się problem z apostrofami w dokumentach XML! Aby problem rozwiązać można zamienić wszystkie apostrofy na podwójne apostrofy przy tworzeniu odpowiednich zapytań INSERT.
==== Przetwarzanie XML ====
Posłuż się przykładem z wykładu, aby zbudować odpowiednie wyrażenia XPath mające zastosowanie poniżej.
Napisz zapytanie, które znajdzie nazwy i rozdzielczości poziome wszystkich drukarek.
Rozdzielczość reprezentowana jest przez element ''x'' w ''dpi'' w ''resolution'' w ''mechanism'' w ''printer''
Napisz zapytanie, które znajdzie nazwy i rozdzielczości poziome wszystkich drukarek i uporządkuj je rosnąco z uwagi na rozdzielczość zakłądająć, że rozdzielczość jesty typu ''text'' (dokonaj odpowiedniego rzutowania).
Rozdzielczość reprezentowana jest przez element ''x'' w ''dpi'' w ''resolution'' w ''mechanism'' w ''printer''
Napisz zapytanie, które znajdzie nazwy i rozdzielczości poziome wszystkich drukarek i uporządkuj je rosnąco z uwagi na rozdzielczość zakłądająć, że rozdzielczość jesty typu ''int'' (dokonaj odpowiedniego rzutowania).
Rozdzielczość reprezentowana jest przez element ''x'' w ''dpi'' w ''resolution'' w ''mechanism'' w ''printer''
Napisz zapytania, które znajdzie nazwy wszystkich kolorowych drukarek o rozdzielczości poziomej większej niż 1200.
Rozdzielczość reprezentowana jest przez element ''x'' w ''dpi'' w ''resolution'' w ''mechanism'' w ''printer''
Drukarka kolorowa będzie zawierała element ''color'' w ''mechanism'' w ''printer''.
==== Indeksowanie XML ====
Zweryfikuj wydajność zapytań z poprzedniego ćwiczenia z użyciem EXPLAIN.
Utwórz indeks na wartości rozdzielczości poziomej (skorzystaj z przykładu z wykładu).
Zweryfikuj wydajność zapytań z poprzedniego ćwiczenia.
Uwaga, może zaistnieć konieczność przekonania bazy danych o użyciu indeksów:
SET ENABLE_SEQSCAN TO OFF;
Uwaga, zwróć uwagę na typ danych tworzonego indeksu i typ danych używany w zapytaniach. Indeks zostanie użyty jedynie gdy typy będą takie same.