Laboratorium XML
wtorek 11.00—12.30
»Home
»Materiały
  »DTD & co.
  »SAX
  »DOM
  »Zadanie 2
  »XPath
  »XSLT
  »Simple
  »JDOM
  »JS
»Odnośniki
  »Xerces2
»Zadania

Błędy, zapytania i niejasności na lukpank at o2.pl

Wybór zadania

  1. Wyboru będzie można dokonać począwszy od czwartku 20 kwietnia od godziny 20.00 wysyłając na adres lukpank at o2.pl list o tytule pasującym do wyrażenia regularnego:

    r'\[xml-wtorek\] select (\w+)(,\w+)*'

    przykładowo aby wybrać w pierwszej kolejności BIBL, ewentualnie LUDZIE, ewentualnie KONF należy wysłać list o temacie

    [xml-wtorek] select BIBL,LUDZIE,KONF
  2. Listy będą przetwarzane w kolejności dostrczenia, przy czym listy wysłane lub odebrane wcześniej niż podany termin będą odsyłane jako falstart.

  3. W odpowiedzi zwrócona zostanie informacja, które zadanie zostało wybrane lub lista dostępnych zadań, jeśli żadne z nich.

  4. Aktualną listę dostępnych zadań będzie można uzyskać wysyłając list o temacie [xml-wtorek] select --list.

  5. Jeśli zamierza się realizować zadanie spoza poniższej listy należy użyć tematu [xml-wtorek] select --other i w treści opisać zadanie.

  6. Jedno zadanie mogą zarezerwować maksymalnie 3 osoby.

  7. W przypadku ponownego wysłania listu zostanie wybrane nowe zadanie (jeśli któreś z podanej jest wolne), a wcześniej wybrane zostanie zwolnione.

Proponowane zadania

Poniżej lista zadań wraz ze słowami kluczowymi do wyboru zadań. Klient może otrzymywać dedykowany XML i przetwarzać go lokalnie (AJAX) albo otrzymywać XUL lub XHTML wygenerowany za pomocą XSLT z jakiegoś innego języka XML.

1. BIBL: Biblioteka wzajemna.

Mamy grono przyjaciół, każdy z nich ma książki, których opisy może umieścić na serwerze. Dalej każdy z nich może przeszukiwać informacje o książkach, wybrać książkę i wysłać z serwera list z pytaniem do właściciela czy pożyczy mu zadaną książkę.

Komunikacja między klientem, a serwerem musi odbywać się za pomocą XML, mile widziane użycie transformacji XSLT. Klientem może być przeglądarka XHTML lub XUL.

{Klient} <--XML--> {Serwer}

Serwer powinien zapisywać bazę, albo w pliku XML, albo w bazie relacyjnej.

2. LUDZIE: Baza danych postaci historycznych.

Mamy bazę danych postaci historycznych (imię, nazwisko, czas życia, komentarz), chcemy dodawać postacie oraz wyświetlić listę osób które żyły w danym roku, albo które żyły w tym samym czasie co wskazana postać (możliwość filtrowania po komentarzu).

Program musi generować informację w postaci wykresu wykonanego dowolną techniką, najprostrzy która mi przychodzi głowy to pewien trik HTMLowy.

{Klient} <--XML--> {Serwer}

lub

{GUI} <--XML--> Dysk

3. SKLEPIK: Sklepik internetowy

Sklep pozwalający wyszukać artykuły, wybrać i złożyć zamówienie, serwer powinien wysłać potwierdzenie przyjęcia zamówienia mailem.

{Klient} <--XML--> {Serwer}

4. CENNIK: Zbieracz cen

Program zbierający informacje o artykułach z jakiś sklepów internetowych (np. kilku komputerowych) udostępniający tą informację dalej w postaci XML z możliwością wyszukiwania/filtrowania.

{Klient} <--XML--> {Serwer} <--XML<--NastyHTML Cenniki

lub

{GUI} <--XML-- NastyHTML2XML <--NastyHTML-- Cenniki

Być może trzeba będzie użyć jakiegoś konwertera HTML do XML. Może pomoże:

5. XHMS: XHTML + MathML + SVG

Konwerter dukumentów XHTML + MathML + SVG zamieniający MathML i SVG na PNG, na potrzeby przeglądarki która nie obsługuje SVG ani MathML.

W przypadku SVG można użyć dowolnego zewnętrznego konwertera:

  • apachowa Batik — biblioteka Java'owa umożliwiająca taką konwersję

  • librsvg zawiera konwerter SVG do PNG, komenda rsvg na mancie

W przypadku MathML trzeba by napisać konwerter obsługujący indeksy górne, dolne oraz ułamki: 1. do LaTeXa a dalej komendą dvipng do PNG lub 2. do HTML z użyciem tabeli do uzyskania kreski ułamkowej.

Interesujące byłoby zrealizowanie tego zadania jako serwer pośredniczący (HTTP proxy), ale można je wykonać jako program uruchamiany z linii poleceń.

6. FAKTURA: Generator faktur

Generator faktur pozwalający wpisywać wszelkie dane do faktury

{GUI} <--XML--> {generator} -> PDF

Lub wpisywać tylko dane adresowe (lub wybierać z listy zapamiętanych), a zasadniczą treść faktury (nazwy artykułów ich ilości ceny) otrzymywać jako zewnętrzny dokument XML (np. od innego programu o nazwie kasa)

XML --> {GUI} <--XML--> {generator} --XSL-FO--> FOP --> PDF

Generator powinien konwertować faktury do postaci plików PDF np. za pomocą jakiej biblioteki XML2PDF:

7. SER: Generator listów seryjnych

Generator listów seryjnych składający wzorzec listu content.xml z formatu OpenDocument z plikiem danych adresowych itp. z plikiem XML zawierającym te dane i zapisujący wynik szereg listów do jednego z formatów (do wyboru): XHTML, PDF (sposoby jak w zadaniu faktura) lub do nowego pliku OpenDocument.

Informacje o formacie OpenDocument wykorzystywanym przez OpenOffice.org

8. SKONF: Serwer konfiguracji

Serwer konfiguracji przechowujący dane konfiguracyjne w postaci drzewa XML w pliku (podstawowe typy danych). Do ktorego można zgłaszać zapytania (serwer nasłuchuje na sokecie) o wartości zmiennych konfiguracyjnych np. /apps/przeglądarka/print/left-margin i zmieniać ich wartości, do tego przykładowy klient odczytujący lub zapisujący dane do serwera konfiguracji według argumentów z linii poleceń.

{Klient} <--soket:XML--> {Serwer} <--XML--> Dysk

9. RSS: Klient RSS/Atom

Prosty klient RSS/Atom client — zbierający dane z kanałów RSS lub ATOM zapisujący w jednym pliku XMLowym wraz z jakimś interfejsem użytkownika (tekstowym lub graficznym).

10. AUT: Baza danych informacji o artykułach automatycznych.

Baza danych informacji o artykułach automatycznych. Artykułami są urządzenia automatyczne dla których dział konstrukcyjny może dorzucać firmware (mogą być linki).

Dwa widoki:

  • Klienta — ogląda bazę danych bez wewnętrznych linków do firmware'u

  • Działu produkcji — dla każdego artykułu widzi dodatkowo link do najnowszego firmware'u.

{Klient} <--XML--> {Serwer}

12. TRANSFER: Szacowanie oszczędności transferu

Mając statystykę odsłon dla poszczególnych stron pewnej witryny oszacować ile można zaoszczędzić miesięcznej przepustowości: konwertując obrazki do wyświetlanego rozmiaru pliku, zmieniając format plików z obrazkami, optymalizując obrazki bezstratnie (np. przy wykorzystaniu optipng), konwertując pliki z ludzkim głosem MP3 i Ogg Vorbis do paramterów nie wpływających na utratę jakości odsłuchu.

Statystyka zadana jako format XML.

13. PKONF: Konfigurator programu

Napisać program konwertujący zaprojektowany język XMLowy na format konfiguracyjny programu fetchmail (lub wybranego programu) oraz edytor konfiguracji zapisujący dane w tym formacie XMLowym i eksportujący do formatu konfiguracyjnego fetchmail (lub wybranego programu).

{GUI} <--XML--> Dysk
      --format-programu--> Dysk

14. CHROOT: Konwerter korzenia drzewa

na ocenę 3

Napisać program/konwerter zmieniający korzeń drzewa dokumentu XML.

  • Wejście: na wejściu drzewo (dokument XMLowy) z węzłami posiadającymi identyfikatory oraz identyfikator węzła, który ma zostać nowym korzeniem.

  • Wyjście: Nowy dokument XML ze wskazanym węzłem jako nowym korzeniem.

*. --other: inna aplikacja typu AJAX

Zaproponować będziemy się targować.

Przykładowe Zadania

Celem zadań jest posmakowanie przetwarzania XML w praktyce. Naturalnymi zadaniami są wszelkiego typu konwertery języków XMLowych (przetwarzanie) oraz aplikacje wykorzystujące format XML (projektowanie i przetwarzanie), zwłaszcza takie dla których wybór języka XML jest naturalny (dlaczego?).

Jeśli ktoś wymyśli inne ciekawe (lub mniej) zadanie i chciałby je realizować — do ustalenia.

Konwertery tekstowe lub wizualizacja

  • OpenDocument <==> (La)TeX

  • ew. OpenDocument <==> XHTML

  • MathML <==> wzór (La)TeX

  • SVG ==> (Display|PostScript|PDF)

  • SVG ==> PDF, może wykorzystując FOP

  • Odnośniki na stronie (zadana głębokość) ==> (Display|Graphviz)

  • xml diff/patch

  • [5] Napisać w TeXu/LaTeXu konwerter XHTML2DVI, który da sensowny wynik dla rekomendacji http://www.w3.org/TR/xml11/.

  • Zdalny edytor XML napisany przy użyciu AJAXu (Asynchronous JavaScript And XML (AJAX)

Aplikacje rozproszone komunikujące się za pomocą nie trywialnego języka XML.

  • Serwer/klient gry typu Szachy/Warcaby (serwer tylko poprawność ruchów) komunikujący się za pomocą dokumentów XMLowych (może XML-RPC?).

Drobiazgi