Kurs XML - Zadanie 10.

Treść

W pliku r_and_j.xml znajduje się treść sztuki Williama Szekspira Romeo i Julia zapisana zgodnie ze schematem play.rnc.

Ułóż zapytania XPath (1.0 lub 2.0) zwracające:

  1. listę postaci dramatu (wg. zawartości elementu PERSONAE);
  2. listę postaci zabierających głos w scenie pierwszej drugiego aktu;
  3. listę pierwszych 3 postaci zabierających głos w scenie pierwszej drugiego aktu;
  4. listę ostatnich 3 postaci zabierających głos w ostatnim akcie;
  5. ostatnie słowa Julii oraz ostatnie słowa Romeo (w sensie ostatniego LINE dla każdego);
  6. ile razy zabiera głos Julia, a ile razy Romeo (wg. elementów SPEECH);
  7. ile razy zabiera głos Julia, a ile razy Romeo (wg. elementów LINE);
  8. spis treści w postaci listy scen w porządku dokumentu (tzn. w document order);
  9. spis treści w postaci listy aktów i scen w porządku dokumentu - (czyli kolejność: akt pierwszy, lista scen aktu pierwszego, akt drugi, lista scen aktu drugiego itd.);
  10. listę postaci zabierających głos jako pierwsza w kolejnych scenach;
  11. listę postaci w kolejności w jakiej zabierają głos po raz pierwszy;
  12. listę postaci w kolejności w jakiej zabierają głos po raz ostatni;
  13. listę postaci w kolejności w jakiej zabierają głos po raz pierwszy wraz z liczbą przypadających im elementów LINE - początek mojej odpowiedzi:
14 SAMPSON 31 GREGORY 20 ABRAHAM 5 BENVOLIO 160 ...

Wskazówka: użyj pętli for Uwaga: pierwsza postać zabierająca głos jest anonimowa (pusty element SPEAKER) i dlatego odpowiedź zaczyna się od liczby 14.

Rozwiązanie

zadanie10.xml
(: doc("r_and_j.xml")/PLAY/PERSONAE/PERSONA :)
(: distinct-values(doc("r_and_j.xml")/PLAY/ACT[2]/SCENE[1]/SPEECH/SPEAKER) :)
(: doc("r_and_j.xml")/PLAY/ACT[2]/SCENE[1]/SPEECH[position()<=3]/SPEAKER :)
(: doc("r_and_j.xml")/PLAY/ACT[last()]/SCENE[last()]/SPEECH[position()>(last()-3)]/SPEAKER :)
(: (doc("r_and_j.xml")//SPEECH[SPEAKER="JULIET"]/LINE)[last()] | (doc("r_and_j.xml")//SPEECH[SPEAKER="ROMEO"]/LINE)[last()] :)
(: count(doc("r_and_j.xml")/PLAY//SPEECH[SPEAKER="JULIET"]), count(doc("r_and_j.xml")/PLAY//SPEECH[SPEAKER="ROMEO"]) :)
(: count(doc("r_and_j.xml")/PLAY//SPEECH[SPEAKER="JULIET"]/LINE), count(doc("r_and_j.xml")/PLAY//SPEECH[SPEAKER="ROMEO"]/LINE) :)
(: doc("r_and_j.xml")/PLAY/ACT/SCENE/TITLE :)
(: doc("r_and_j.xml")/PLAY/ACT//TITLE :)
(: distinct-values(doc("r_and_j.xml")/PLAY/ACT/SCENE/SPEECH[1]/SPEAKER) :)
(: distinct-values(doc("r_and_j.xml")/PLAY/ACT//SPEAKER) :)
(: distinct-values(reverse(reverse(doc("r_and_j.xml"))/PLAY/ACT//SPEAKER)) :)
for $i in distinct-values(doc("r_and_j.xml")/PLAY/ACT//SPEAKER) return (distinct-values(doc("r_and_j.xml")//SPEAKER)[. = $i], count((doc("r_and_j.xml")/PLAY/ACT//SPEECH[SPEAKER = $i]/LINE)) )
 
kurs_xml/10.zadanie10.txt · ostatnio zmienione: 2010/04/14 20:52 przez d
 
Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji:MIT License
Recent changes RSS feed