eXists - zadania

Transkrypt

eXists - zadania
eXists – Zadania
I.
Czynności początkowe
1. Wejdź na stronę http://<host>:8080/exist/index.html
2. Znajdź znajdujący się po lewej stronie przycisk "Launch" i uruchom aplikację
eXists Admin Client.
3. W oknie logowania podaj nazwę uŜytkownika zsbd_user i hasło (podane przez
prowadzącego), a następnie kliknij przycisk OK
4. Na początku znajdujesz się w głównej kolekcji /db.
5. Przejdź do kolekcji /db/shakespeare/plays – w dalszej części ćwiczeń będzie ona
nazywana kolekcją shakepeare.
6. Przejdź do kolekcji /db/mondial – będziemy ją nazywali mondial.
7. Przejdź do kolekcji /db/pds/test – ta kolekcja zawiera zestaw dokumentów, który
będziesz mógł skopiować do swojej kolekcji domowej.
8. Przejdź do kolekcji /db/ pds /<typ_studiów>/<czas_sesji>/INFXXXXX – jest to
twoja kolekcja domowa, przeznaczona przede wszystkim do ćwiczeń z XUpdate i
XQuery Update.
9. Skasuj wszystkie dokumenty i kolekcje wewnętrzne ze swojej kolekcji domowej,
jeśli takie są.
10. Przejdź do kolekcji shakepeare a następnie wybierz z menu ToolsFind. W
nowo otworzonym oknie "Query Dialog" będziesz mógł wykonywać polecenia na
dokumentach zawartych w bazie danych. Na liście rozwijanej Context moŜesz
zmienić kontekst swoich zapytań.
II.
Na dokumentach w kolekcji shakespeare wykonaj poniŜsze zapytania.
Dokumenty w tej kolekcji są zgodne z poniŜszym DTD:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
PLAY (TITLE, FM, PERSONAE, SCNDESCR, PLAYSUBT, INDUCT?, PROLOGUE?, ACT+, EPILOGUE?)>
FM (P+)>
PERSONAE (TITLE, (PERSONA | PGROUP)+)>
PGROUP (PERSONA+, GRPDESCR)>
INDUCT (TITLE, SUBTITLE*, (SCENE+|(SPEECH|STAGEDIR|SUBHEAD)+))>
ACT (TITLE, SUBTITLE*, PROLOGUE?, SCENE+, EPILOGUE?)>
SCENE (TITLE, SUBTITLE*, (SPEECH | STAGEDIR | SUBHEAD)+)>
PROLOGUE (TITLE, SUBTITLE*, (STAGEDIR | SPEECH)+)>
EPILOGUE (TITLE, SUBTITLE*, (STAGEDIR | SPEECH)+)>
SPEECH (SPEAKER+, (LINE | STAGEDIR | SUBHEAD)+)>
LINE (#PCDATA | STAGEDIR)*>
1. Wyświetl tytuły sztuk.
<?xml version="1.0" encoding="UTF-8"?>
<WYNIK>
<TITLE>The Tragedy of Romeo and Juliet</TITLE>
<TITLE>The Tragedy of Hamlet, Prince of Denmark</TITLE>
<TITLE>The Tragedy of Macbeth</TITLE>
<TITLE>The Tragedy of Antony and Cleopatra</TITLE>
. . .
<WYNIK>
2. Dla kaŜdej sztuki podaj jej tytuł oraz krótką statystkę
<wynik>
<sztuka>
<TITLE>The Tragedy of Romeo and Juliet</TITLE>
<postaci>19</postaci>
<aktow>5</aktow>
<scen>24</scen>
</sztuka>
<sztuka>
<TITLE>The Tragedy of Hamlet, Prince of Denmark</TITLE>
<postaci>19</postaci>
<aktow>5</aktow>
<scen>20</scen>
</sztuka>
<sztuka>
<TITLE>The Tragedy of Macbeth</TITLE>
<postaci>18</postaci>
<aktow>5</aktow>
<scen>28</scen>
</sztuka>
. . .
3. Dla kaŜdej sztuki podaj jej tytuł oraz listę osób wypowiadających sekwencję 'O,
my good lord'
<?xml version="1.0" encoding="UTF-8"?>
<wynik>
<sztuka>
<TITLE>The Tragedy of Romeo and Juliet</TITLE>
<OMyGoodLord/>
</sztuka>
<sztuka>
<TITLE>The Tragedy of Hamlet, Prince of Denmark</TITLE>
<OMyGoodLord/>
</sztuka>
<sztuka>
<TITLE>The Tragedy of Macbeth</TITLE>
<OMyGoodLord/>
</sztuka>
<sztuka>
<TITLE>The Tragedy of Antony and Cleopatra</TITLE>
<OMyGoodLord>
<SPEAKER>OCTAVIA</SPEAKER>
</OMyGoodLord>
</sztuka>
. . .
III.
Wykorzystując kolekcję mondial wykonaj poniŜsze zapytania. Dokument
mondial.XML zawarty w tej kolekcji jest zgodny dokumentem modial.DTD
(a takŜe mondial.XSD) zawartym w tej samej kolekcji. Wszelkie "połączenia"
pomiędzy róŜnymi elementami realizuj za pomocą identyfikatorów i
referencji.
4. Wyświetl nazwy krajów znajdujących się w europie oraz nazwy ich stolic
<wynik>
<country>
<name>Albania</name>
<capital>Tirana</capital>
</country>
. . .
5. Dla kaŜdego kontynentu wyświetl jego nazwę oraz liczbę krajów, jakie się w nim
znajdują.
<wynik>
<continent>
<name>Europe</name>
<country_num>??</country_num>
</continent>
. . .
6. Dla kaŜdego kontynentu znajdź trzy kraje z największym odsetkiem osób
wyznających "Roman Catholic". Zastosuj funkcję subsequence.
<wynik>
<continent>
<name>Europe</name>
<MostRomanCatolicCountries>
<country>
<name>Andorra</name>
<religions percentage="100">Roman Catholic</religions>
</country>
<country>
<name>Spain</name>
<religions percentage="99">Roman Catholic</religions>
</country>
. . .
7. Znajdź państwa sąsiadujące z Polską. Wyświetl długości granic.
<wynik>
<neighborhoods>
<name>Poland</name>
<borders>
<country>
<name>Czech Republic</name><length>658</length>
. . .
8. Wyświetl następujące statystyki dotyczące morza o nazwie 'Baltic Sea'
•
10 najdłuŜszych rzek wpadających do niego
•
Kraje mające do niego dostęp
•
Graniczne morza
<sea_statistics>
<name>Baltic Sea</name>
<rivers>
<river>
<name>Weichsel</name><length>1068</length>
. . .
</river>
</rivers>
<countries>
<country>
<name>Poland</name>
. . .
<boarding>
<name>North Sea</name>
</boarding>
</sea_statistics>
IV.
XQuery Update Extensions. Zapoznaj się z poleceniami modyfikacji XQuery
Update występującymi w bazie danych eXists (są one nieco odmienne od
standardu), a następnie wykonaj poniŜsze polecenia.
9. Korzystając z programu eXists Admin Client w Twojej domowej kolekcji stwórz
własną kolekcję bib, a następnie umieść w niej dokument bib.xml znajdujący się
na stronie przedmiotu.
10. Otwórz ponownie "Query Dialog". Zadaj zapytanie wyświetlające tytuły ksiąŜek
zawartych w obu dokumentach Twojej kolekcji.
<title>TCP/IP Illustrated</title>
<title>Advanced Programming in the Unix environment</title>
<title>Data on the Web</title>
<title>The Economics of Technology and Content for Digital TV</title>
<title>Early Adopter XQuery</title>
11. Wejdź na stronę http://<host>:8080/exist/admin/admin.xql. Zaloguj się, a
następnie sprawdź istnienie zaimportowanych przez Ciebie dokumentów.
12. Zmień imię autora „TCP/IP Illustrated” z „W.” na „W. Richard”. Sprawdź jak
wygląda zmodyfikowana przez Ciebie ksiąŜka.
<book year="1994">
<title>TCP/IP Illustrated</title>
<author>
<last>Stevens</last>
<first>W. Richard</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
<photo>tcpip.jpg</photo>
</book>
13. Do ksiąŜki o tytule „Data on the Web” dodaj atrybut ISBN o wartości
„1-55860-622-X”. Sprawdź efekt. Podpowiedź: będziesz musiał skorzystać z
jawnego konstruktora
<book ISBN="1-55860-622-X" year="2000">
<title>Data on the Web</title>
<author>
<last>Abiteboul</last>
. . .
14. Do ksiąŜki o tytule „Data on the Web” dodaj poniŜej elementu „price” nowy
element „weight” o zawartości „1.50 lbs”. Sprawdź efekt.
<book ISBN="1-55860-622-X" year="2000">
<title>Data on the Web</title>
<author>
<last>Abiteboul</last>
<first>Serge</first>
</author>
. . .
<publisher>Morgan Kaufmann Publishers</publisher>
<price>39.95</price>
<weigth>1.50 lbs</weigth>
<photo>data.jpg</photo>
</book>
15. Przed pierwszą z ksiąŜek napisanych w 2002 roku dodaj swoją własną propozycję
ksiąŜki
(book) składającą się, z co najmniej czterech elementów w zadanej kolejności
(title, author, cena, publisher) i atrybutu rok.
<book rok="1983">|
<title>Smalltalk-80</title>
<author><last>Goldberg</last><first>Adele</first></author>
<cena>100</cena>|
<publisher>Addison-Wesley</publisher>
</book>
Postać dokumentu po powyŜszych zmianach:
<?xml version="1.0" encoding="UTF-8"?>
<bib>
<book year="1994">
<title>TCP/IP Illustrated</title>
<author>
<last>Stevens</last>
<first>W. Richard</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
<photo>tcpip.jpg</photo>
</book>
<book year="1992">
<title>Advanced Programming in the Unix environment</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
<photo>advanced.jpg</photo>
</book>
<book ISBN="1-55860-622-X" year="2000">
<title>Data on the Web</title>
<author>
<last>Abiteboul</last>
<first>Serge</first>
</author>
<author>
<last>Buneman</last>
<first>Peter</first>
</author>
<author>
<last>Suciu</last>
<first>Dan</first>
</author>
<publisher>Morgan Kaufmann Publishers</publisher>
<price>39.95</price>
<weigth>1.50 lbs</weigth>
<photo>data.jpg</photo>
</book>
<book year="1999">
<title>The Economics of Technology and Content for Digital TV</title>
<editor>
<last>Gerbarg</last>
<first>Darcy</first>
<affiliation>CITI</affiliation>
</editor>
<publisher>Kluwer Academic Publishers</publisher>
<price>129.95</price>
<photo>econ.jpg</photo>
</book>
<book rok="1983">|
<title>Smalltalk-80</title>
<author>
<last>Goldberg</last>
<first>Adele</first>
</author>
<cena>100</cena>
<publisher>Addison-Wesley</publisher>
</book>
<book year="2002">
<title>Early Adopter XQuery</title>
<author>
<last>Cagle</last>
<first>Kurt</first>
</author>
<author>
<last>Fussell</last>
<first>Mark</first>
</author>
<author>
<last>Lopez</last>
<first>Nalleli</first>
</author>
<author>
<last>Mahany</last>
<first>Dan</first>
</author>
<publisher>Wrox</publisher>
<price>34.99</price>
<photo>xquery.jpg</photo>
</book>
</bib>
16. W nowoutworzonej ksiąŜce zamień kolejność elementów cena i publisher. Czy jest
to moŜliwe za pomocą jednego polecenia? Jeśli nie, w pierwszym poleceniu
skopiuj element cena, a następnie w kolejnym poleceniu usuń jego zbędne
wystąpienie.
17. Dodaj do nowoutworzonej ksiąŜki komentarz na poziomie zawartości elementu
book przed wszystkimi innymi elementami. Treść komentarza moŜe być dowolna.
18. Jako drugi węzeł w nowoutworzonej ksiąŜce wstaw instrukcję przetwarzania o
nazwie „fordbxml” i wartości to_remove=”yes”.
19. Zmień w tym razem koniecznie jednym poleceniu nazwy wszystkich elementów
cena na price oraz nazwy wszystkich atrybutów rok na year.
Sprawdź jak wygląda nowoutworzona ksiąŜka
<book year="1983">
<!--To jest komentarz-->
<?fordbxml to_remove="yes"?>
<title>Smalltalk-80</title>
<author>
<last>Goldberg</last>
<first>Adele</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>100</price>
</book>
20. Usuń wstawiony przez Ciebie komentarz.
21. Usuń wszystkie ksiąŜki (book), które zostały napisane przez co najmniej trzech
autorów.
22. Sprawdź zawartości dokumentu bib.xml – aby wybrać z bieŜącej kolekcji tylko ten
dokument zastosuj funkcję doc.
<?xml version="1.0" encoding="UTF-8"?>
<bib>
<book year="1994">
<title>TCP/IP Illustrated</title>
<author>
<last>Stevens</last>
<first>W. Richard</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
<photo>tcpip.jpg</photo>
</book>
<book year="1992">
<title>Advanced Programming in the Unix environment</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
<photo>advanced.jpg</photo>
</book>
<book year="1999">
<title>The Economics of Technology and Content for Digital TV</title>
<editor>
<last>Gerbarg</last>
<first>Darcy</first>
<affiliation>CITI</affiliation>
</editor>
<publisher>Kluwer Academic Publishers</publisher>
<price>129.95</price>
<photo>econ.jpg</photo>
</book>
</bib>
23. Napisz polecenie, które kaŜdej z ksiąŜek w dokumencie bib.xml podniesie
zawartość elementu price o liczbę lat jaka minęła po wydaniu ksiąŜki. Datę moŜesz
uzyskać za pomocą funkcji current-dateTime() natomiast wyekstrahować rok z
daty moŜesz za pomocą funkcji year-from-date()
24. Napisz polecenie, które w ksiąŜce o tytule „TCP/IP Illustrated” usunie wszelkie
znaczniki wewnętrzne elementu author pozostawiając jedynie ich wartość
tekstową. Sprawdź zawartość dokumentu.
<bib>
<book year="1994">
<title>TCP/IP Illustrated</title>
<author>StevensW. Richard</author>
<publisher>Addison-Wesley</publisher>
<price>78.95</price>
<photo>tcpip.jpg</photo>
</book>
<book year="1992">
<title>Advanced Programming in the Unix environment</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
<publisher>Addison-Wesley</publisher>
<price>80.95</price>
<photo>advanced.jpg</photo>
</book>
<book year="1999">
<title>The Economics of Technology and Content for Digital TV</title>
<editor>
<last>Gerbarg</last>
<first>Darcy</first>
<affiliation>CITI</affiliation>
</editor>
<publisher>Kluwer Academic Publishers</publisher>
<price>137.95</price>
<photo>econ.jpg</photo>
</book>
</bib>
V.
•
•
XQuery Update Extensions – relacyjna baza danych i standard SQL/XML.
Postaraj się wykonać ćwiczenia z poprzedniego rozdziału z wykorzystaniem
poleceń XQuery, funkcji XMLQuery i bazy danych DB2.
Zaloguj się do bazy danych DB2 jako uŜytkownik ZSBD_USER
Utwórz tabelę UPDATE_XML_INFXXXXX za pomocą polecenia:
create table UPDATE_XML_INFXXXXX (DOC XML);
•
Umieść w niej jeden wiersz zawierający dokument bib.xml za pomocą polecenia:
insert into UPDATE_XML_INF00000
values ('<zawartość dokumentu bib.xml>');
•
•
VI.
•
•
Wykonaj kolejno ćwiczenia modyfikujące zawartość dokumentu kaŜdorazowo
sprawdzając efekt.
Na zakończenie usuń utworzoną przez Ciebie tabelę.
XUpdate – baza danych eXist.
Ponownie zainicjuj zawartość kolekcji bib oryginalną zawartością i postaraj się
wykonać wszystkie ćwiczenia modyfikujące zawartość dokumentu wykorzystując
tym razem polecenia XUpdate.
Czy są ćwiczenia, które wymagają uŜycia wielu poleceń XUpdate?