XML – Zadanie zaliczeniowe nr 4

Wprowadzenie

Tematem zadania jest program telewizyjny (w sensie TeleTydzień, Gazeta Telewizyjna itp.; dobre przykłady elektroniczne to np. Telemagazyn i Gazeta Telewizyjna).

Głównym celem zadania jest napisanie programu w Javie, który będzie operował na tzw. „lokalnej bazie danych” i wykonywał podane polecenia: importu, eksportu i wizualizacji danych oraz „zapominania”.

Alternatywnie, zamiast programu command-line można stworzyć „webserwis” o takiej samej funkcjonalności (ale nie będzie za to dodatkowych punktów).

W skład rozwiązania wchodzą także schematy XML Schema, przykładowe dokumenty XML (z danymi do zaimportowania), arkusze XSLT (i pewnie CSS) oraz skrypt Anta służący do budowania aplikacji. I prosta dokumentacja.

W poniższym opisie za napis ab123456 należy wstawić własny login na students.

Słowniczek

  • lokalna baza danych – plik lub zestaw plików (dokumentów XML), w których system przechowuje informacje o programie telewizyjnym,
  • kanał – taki pojedynczy :), np. TVP1,
  • stacja – właściciel jednego lub kilku kanałów, np. TVP,
  • audycja – pojedynczy wpis w programie, np. "Teleekspres",
  • program – ciąg audycji w jakimś przedziale czasu dla jednego lub wielu kanałów.

Typy dokumentów i schematy

Program będzie czytał / pisał / modyfikował opisane poniżej rodzaje dokumentów XML. Dla każdego typu dokumentu należy opracować i zapisać w XML Schema jego schemat.

Schematy powinny być napisane w sposób modularny, wspólne i powtarzające się typy zawartości powinny być (w miarę możliwości) zdefiniowane w jednym miejscu i używane wielokrotnie. Dopuszczalne jest utożsamienie rozdzielonych tutaj typów dokumentów.

Zdefiniowane w schematach obiekty (elementy, typy, grupy itp.) powinny znajdować się w przestrzeniach nazw np. (ale niekoniecznie) takich: http://students.mimuw.edu.pl/%7Eab123456/xml_zad4/import.

Lokalna baza danych

Dokument lub dokumenty, w których system przechowuje lokalną kopię danych o programach telewizyjnych. Może to być jeden lub wiele dokumentów jednego lub wielu typów.

Przy projektowaniu „lokalnej bazy danych” należy wziąć pod uwagę wykonalność i efektywność operacji. Można przyjąć, że przechowywane dane nie będą przekraczały 50 kanałów i 3 miesięcy czasu. Ponadto należy przyjąć realistyczne założenia na temat średniej długości audycji, wielkości (i częstości występowania) opisów itp.

Importowane dane

Dokument, w którym dostawcy treści przesyłają do systemu cząstkowe dane.

Dostawcą treści będzie zwykle stacja telewizyjna, która jednorazowo może przysłać informacje o programie jednego lub wielu kanałów w określonym przedziale czasu.

Typ dokumentu powinien umożliwiać przesłanie do systemu:

  • programu jednego lub wielu kanałów w określonym przedziale czasu,
  • aktualizacji wcześniej wysłanego programu (usunięcie i dodanie audycji, zmiana nazwy lub opisu, być może zmiana godziny emisji).

Z każdą audycją związane mogą być pewne informacje, co najmniej:

  • czas rozpoczęcia,
  • czas zakończenia (chyba, że da się to wyliczyć; tak jak w gazetowym programie nie trzeba uwzględniać przerw na reklamy),
  • czytelna nazwa,
  • krótki opis, do drukowania bezpośrednio w programie,
  • długi opis, do drukowania w osobnych ramkach / wyświetlenia po kliknięciu w link.

Należy rozważyć wzbogacenie opisu o bardziej specyficzne struktury, np. odcinek serialu, reżyseria, obsada i kraj(e) produkcji filmu itp. Dla audycji cyklicznych można też rozważyć sposoby na uniknięcie redundancji opisów itp.

Ponadto niezbędne może być przekazywanie informacji specyficznych dla przyjętej implementacji, np. identyfikatorów kanałów czy audycji.

Przykładowe dane

Częścią rozwiązania mają być przykładowe dokumenty XML zawierające dane do zaimportowania. Wymagane są co najmniej:

  1. import programu trzech kanałów z dwóch dni, można wziąć dane z internetowych programów TV, nie trzeba przepisywać dokładnie wszystkich audycji,
  2. import danych (np. z jednego dnia) kilku kanałów, z których co najmniej jeden jest nowy a co najmniej jeden się powtarza w stosunku do poprzedniego dokumentu, program dotyczy innej daty (ale najlepiej sąsiedniej),
  3. import danych modyfikujący wprowadzone wcześniej dane (usuwający dwie audycje i w jej miejsce wstawiający trzy inne, zmieniający opis innej audycji).

Eksportowane dane

Dokument, w którym system może wysłać dane do odbiorcy treści, np. wysłać do „drukarni” tygodniowy program polskich kanałów.

W jednym dokumencie mają znaleźć się dane o programie jednego lub wielu kanałów w określonym przedziale czasu, wraz z nazwami, opisami itp. (jak przy imporcie).

Funkcjonalność programu

Klasą wykonywalną musi być pl.edu.mimuw.ab123456.xml_zad4.Main. Katalogiem bieżącym, w którym program będzie uruchamiany, będzie workspace (patz Budowa).

Program będzie uruchamiany z co najmniej jednym parametrem. Pierwszy parametr będzie nazwą polecenia, które należy wykonać. Kolejne parametry programu, jeśli podane, będą parametrami podanego polecenia.

Dla większości poleceń program czyta ze standardowego wejścia i/lub pisze na standardowe wyjście. Komunikaty o błędach i ostrzeżenia należy wypisywać na standardowe wyjście błędów lub do pliku z logami. Wersja „produkcyjna” podczas normalnego działania (bez błędów) nie powinna wypisywać nic na standardowe wyjście błędów, a do ewentualnego pliku z logami co najwyżej stałą liczbę wierszy dla jednego uruchomienia.

Dla parametrów oznaczających czas dopuszczalne są następujące formaty:

Inicjalizacja

Polecenie jest opcjonalne i ma służyć tylko do zbudowania pustej lokalnej bazy danych przez skrypt Ant.

Nazwa polecenia

initialize

Parametry, wejście i wyjście

Zależne od przyjętej implementacji.

Lokalna baza danych

Pozostawia zainicjowaną, pustą lokalną bazę danych.

Import danych

Nazwa polecenia

import

Parametry

Brak.

Wejście

Dokument XML z danymi do zaimportowania.

Wyjście

Brak

Lokalna baza danych

Aktualizuje program, dodając, usuwając lub modyfikując audycje. W szczególności może dodać nowe kanały (a także inne dane współdzielone przez wiele audycji, jeśli rozwiązanie to przewiduje).

Eksport danych

Nazwa polecenia

export

Parametry

  1. początek okresu,
  2. koniec okresu,
  3. jednoznaczne identyfikatory kolejnych kanałów telewizyjnych (w kolejnych parametrach).

Wejście

Brak.

Wyjście

Dokument XML z eksportowanymi danymi. Powinien zawierać audycje rozpoczynające się w podanym przedziale czasu, wraz z ich opisami.

Lokalna baza danych

Bez zmian.

Wizualizacja

Nazwa polecenia

show

Parametry

  1. początek okresu,
  2. koniec okresu,
  3. jednoznaczne identyfikatory kolejnych kanałów telewizyjnych (jeden lub więcej parametrów).

Wejście

Brak.

Wyjście

Poprawny dokument HTML lub XHTML wizualizujący wybrany fragment programu telewizyjnego (tzn. audycje wybranych kanałów rozpoczynające się w podanym przedziale czasu). Dla każdej audycji należy podać godzinę rozpoczęcia, nazwę i krótki opis. Warto też jakoś uwzględnić koniec ostatniego programu danego dnia (inaczej mówiąc przerwy w programie).

Można przyjąć ograniczenie na liczbę wyświetlanych kanałów (minimum trzy). Pozostałe parametry można zignorować.

Można przyjąć ograniczenie na długość dokumentu (nie krótsze niż trzy doby).

Bardzo zalecane jest formatowanie przy pomocy CSS. Ścieżki do zewnętrznych arkuszy CSS należy pisać tak, aby poprawnie wyświetlał się dokument zapisany w katalogu workspace.

W przypadku webserwisu audycje powinny zawierać odnośniki do zapytania zwracającego opis audycji.

Lokalna baza danych

Bez zmian.

Uwagi

Wynik tego polecenia ma zostać uzyskany w wyniku przekształcenia XSLT. Nie precyzuję, na jakim dokumencie / dokumentach to przekształcenie ma zostać wykonane.

Opis audycji

Nazwa polecenia

details

Parametry

  1. jednoznaczna identyfikacja audycji (może to być jeden lub więcej parametrów w zależności od przyjętej implementacji).

Wejście

Brak.

Wyjście

Poprawny dokument HTML lub XHTML z pełnym opisem wybranej audycji. Założenia co do CSS takie same jak dla show.

W skład opisu mają wchodzić:

  • nazwa kanału,
  • nazwa audycji,
  • czas rozpoczęcia i zakończenia (także data i może dzień tygodnia..., w programach nocnych warto napisać noc z ... na ...),
  • opis audycji: długi, jeśli nie ma to krótki, jeśli też nie ma to brak opisu.

Lokalna baza danych

Bez zmian.

Uwagi

Wynik tego polecenia ma zostać uzyskany w wyniku przekształcenia XSLT. Nie precyzuję, na jakim dokumencie / dokumentach to przekształcenie ma zostać wykonane.

Zapominanie

Nazwa polecenia

forget

Parametry

Data (format 2007-02-20).

Wejście

Brak.

Wyjście

Brak.

Lokalna baza danych

Usuwa program telewizyjny sprzed podanej daty. Należy przyjąć, że polecenie to będzie wykonywane stosunkowo rzadko przez administratora systemu w celu zwolnienia miejsca na dysku i zwiększenia efektywności systemu.

Polecenie nie musi usuwać danych dokładnie co do minuty, dopuszczalna jest dokładność rzędu doby: Po wykonaniu polecenia z datą 2007-02-20 w bazie mogą zostać lub nie dane dotyczące dowolnych programów kończących się po 2007-02-19 00:00 a rozpoczynających się przed 2007-02-21 00:00. Ważne jest, aby pozostały dane wszystkich programów rozpoczynających się od 2007-02-21 00:00.

Standardy

Java

Program należy napisać w Javie w wersji 5.0 lub 6.0.

Jeśli program korzysta z bibliotek nie zawartych w dystrybucji Java SE, należy opisać to w dokumentacji.

Jeśli program korzysta z bibliotek innych niż składniki Java EE 5, JWSDP 2.0, Log4J, Ant, Xerces, Xalan i Saxon – należy także podać adres strony z tym oprogramowaniem.

JAXP i JAXB

W rozwiązaniu można korzystać ze sposobów przetwarzania XML zawartych w standardach JAXP (DOM, SAX, StAX, a także transformacje, walidacje i XPath) oraz JAXB.

Jeśli program używa StAX lub JAXB, lub piszesz webserwis zamiast programu, zalecam (ale nie wymagam) pisanie w Javie 6.0. Program będzie testowany z najnowszymi wersjami Xerces, Xalan i Saxon (dla XSLT 2.0)

Należy użyć co najmniej jednego sposobu parsowania (DOM, SAX, StAX, JAXB), a przekształcenia XSLT wykonywać poprzez klasy i interfejsy z pakietu javax.xml.transform. Należy dokonywać walidacji przetwarzanych dokumentów względem schematów.

Nie należy stosować innych metod dostępu do treści XML ani odwoływać się bezpośrednio do klas z konkretnych implementacji.

Arkusze XSLT

W skład rozwiązania wchodzą arkusze XSLT. Obowiązkowe jest wykorzystanie XSLT to wizualizacji danych (polecenia show i details). Można także użyć XSLT do innych celów.

Można używać standardu XSLT 1.0 lub XSLT 2.0, najlepiej konsekwentnie tego samego we wszystkich arkuszach.

Format rozwiązania

Wszystkie klasy należy umieścić w pakiecie pl.edu.mimuw.ab123456.xml_zad4 lub podpakietach.

Paczka

Należy wysłać archiwum ZIP lub TGZ, o nazwie równej loginowi studenta, zawierające katalog o następującej strukturze:

  • plik z opisem rozwiązania (tekstowy, (X)HTML lub PDF),
  • skrypt Ant build.xml,
  • podkatalog src zawierający:

    • w podkatalogu java kod źródłowy klas Javy (w podkatalogach odzwierciedlających pakiety),
    • w podkatalogu xsd schematy XML Schema,
    • w podkatalogu xsl arkusze XSLT,
    • w podkatalogu css arkusze CSS,
    • być może inne podkatalogi ze źródłami innego rodzaju, w szczególności wzorcowe pliki .properties jeśli są używane przez program, lub dokumenty XML służące do budowy lokalnej bazy danych.
  • podkatalog examples z przykładowymi dokumentami XML.

Nie należy wysyłać plików class ani jar, plików tymczasowych, przykładowych wyników testów (poza wymaganymi przykładowymi dokumentami XML).

Budowa

W katalogu uzyskanym przez rozpakowanie paczki polecenie ant powinno:

  1. utworzyć katalog workspace,
  2. Zbudować aplikację, tzn. jedno z poniższych:

    • do katalogu workspace, workspace/class lub workspace/bin wygenerować pliki class (w podkatalogach odpowiadających pakietom),
    • stworzyć archiwum jar z klasami programu (wewnątrz workspace).
  3. Przygotować środowisko do uruchomienia programu, tzn. skopiować niezbędne pliki (xsd, xsl, css, properties i inne) z katalogu scr, do workspace (lub jego podkatalogów), tak, aby katalog src nie był potrzebny do uruchomienia programu. Pliki te (lub ich część) można także umieścić w jar. Jeśli program będzie działał, nie trzeba już tych plików kopiować.
  4. Zainicjować pustą lokalną bazę danych (gdzieś wewnątrz workspace). Można to zrobić (ale nie trzeba) uruchamiając program z poleceniem initialize.

Opis

Opis rozwiązania powinien zawierać:

  • imię i nazwisko autora oraz numer indeksu,
  • wersję Javy, w której program działa,
  • biblioteki spoza Java SE, niezbędne do kompilacji i uruchomienia,
  • krótki opis struktury lokalnej bazy danych,
  • krótki opis sposobu realizacji poleceń,
  • przyjęte założenia, podjęte nietrywialne decyzje i ich uzasadnienie.

W kodzie programu należy umieścić krótkie komentarze w kluczowych miejscach, a także komentarze zgodne z konwencjami javadoc dla własnych klas i metod.

W schematach należy (krótko) udokumentować znaczenie poszczególnych elementów i atrybutów, a także opisać typy nazwane, grupy i grupy atrybutów. Opisy mają być naprawdę krótkie.

W arkuszach XSLT należy opisać (w komentarzach) znaczenie całego arkusza, jego parametry, własne funkcje i szablony nazwane, a także umieścić krótkie komentarze w kluczowych miejscach.

Webserwis

Opcjonalnie, zamiast programu command-line, można stworzyć webserwis o takiej samej funkcjonalności. Zamiast interpretacji poleceń serwer powinien udostępniać odpowiednie zapytania, o takich samych parametrach.

Część wizualizacyjna ma być „klikalna” (np. linki do szczegółowych opisów, formularz do wybierania kanałów i przedziałów czasowych).

Gdyby ktoś się zdecydował, w czasie dyskusji uszczegółowimy wymagania.

Ocena

Najważniejsze będzie poprawne działanie programu. Możliwe będzie zaliczenie jeśli np. jedno-dwa polecenia będą miały problem w pewnych szczególnych przypadkach, ale niedopuszczalne jest niedziałanie programu w najbardziej podstawowych zastosowaniach.

Aby uprościć program (obniżając ocenę, ale jeśli będzie poprawnie działać i będzie „ładnie”, ciągle będzie zaliczenie) można wprowadzić pewne ograniczenia (np. import danych tylko z jednej doby, brak nadpisywania audycji). Ważne, aby to opisać w dokumentacji.

Ważna dla oceny będzie też jakość opracowanych schematów (powinny jak najściślej kontrolować dokumenty, ale dawać im jak największą funkcjonalność), a także poprawna strukturalnie budowa schematów, arkuszy i oczywiście klas.

Dokumentacja (i komentarze) nie musi być obszerna, ale powinna wyjaśniać najważniejsze rzeczy. Za jej brak albo istotną niekompletność będą odejmowane punkty.

Jeśli chodzi o HTML i CSS, to większą wagę będzie miała struktura dokumentu (X)HTML i możliwość dopracowania jego wyglądu w CSS bez zmian w strukturze HTML, a mniejszą wagę sam wygląd. Poprawna struktura to m.in. stosowanie semantycznych znaczników tam, gdzie to właściwe, używanie tabel do robienia tabel, a nie wyrównywania, stosowanie klas dla podobnych elementów itp.

Pytania

W razie wątpliwości co do treści zadania proszę wysyłać pytania pod adres czarnik@duch.mimuw.edu.pl.

Odpowiedzi na najczęściej pojawiające się pytania i inne uzupełnienia mogą pojawić się na tej stronie. Proszę sprawdzać ją co jakiś czas, na pewno przed wysłaniem pytania.


Valid XHTML 1.1Valid CSS