RTOWEB - laboratoria

UWAGA: Treść tej strony NIE jest dostępna na licencji Creative Commons, lecz jest chroniona standardowym prawem autorskim. Powód jest taki, że redaktorzy serwisu nie są autorami tych dokumentów, zatem nie posiadają praw, by rozpowszechniać je pod wybraną licencją, a jedynie udostępniają je innym studentom do wglądu na wypadek gdyby zgubili udostępnione im wersje papierowe.

Laboratorium 2.

Zadanie 1.

Na podstawie poniższego dokumentu xml należy utworzyć opis strukturalny DTD.

<?xml version="1.0" encoding="iso-8859-2"?>
 
<menu>
        <stolik nr="2">
                <miejsce nr="1">
                         <starter>
                                <napoj>cola</napoj>
                                <potrawa>ser</potrawa>
                         </starter>
                         <danie1>
                                <napoj>wino</napoj>
                                <potrawa>zupa marchwiowa</potrawa>
                         </danie1>
                         <danie2>
                                <potrawa>makaron w sosie</potrawa>
                                <potrawa>wieprzowina</potrawa>
                         </danie2>
                 </miejsce>
                 <miejsce nr="2">
                         <danie2>
                                <napoj>piwo</napoj>
                         </danie2>
                 </miejsce>
         </stolik>
         <stolik nr="5">
                 <inne funkcja="bar salatkowy" />
         </stolik>
</menu>

Zadanie 2.

Należy utworzyć dokument XML i definicję DTD dla wzoru matematycznego (a w zasadzie format do opisu wzorów matematycznych) zaproponowanego poniżej:

UWAGA: Wszystkie dokumenty i ich opisy muszą być poprawnie zwalidowane przez dostępne narzędzia.

Laboratorium 5.

Zadanie 1.

Należy napisać program, który na podstawie pliku konfiguracyjnego XML tworzy strukturę plików i katalogów. Format pliku XML opisany jest następującą definicją DTD:

<!DOCTYPE filesystem [
<!ELEMENT filesystem (file+) >
<!ELEMENT file (name, mode, file*) >
<!ATTLIST file type (dir | file) "file" >
<!ELEMENT name (#PCDATA) >
<!ELEMENT mode (#PCDATA) >
]>
  • file - podstawowy węzeł mogący być plikiem lub katalogiem w zależności od wartości atrybutu type,
  • name - nazwa pliku lub katalogu,
  • mode - uprawnienia do pliku lub katalogu opisane w postaci ósemkowej,
  • type - atrybut elementu file określający, czy element jest plikiem ("file"), czy katalogiem ("dir").

Wymagania:

  1. Program do parsowania i przetwarzania pliku XML wykorzystuje interfejs SAX i bibliotekę języka Python xml.sax.
  2. Program do operacji na plikach wykorzystuje bibliotekę os języka Python, przy czym należy korzystać z niej w sposób gwarantujący niezależność od systemu operacyjnego.
  3. Program musi poprawnie współpracować z każdym plikiem konfiguracyjnym, którego definicja jest zgodna z DTD.

Ocena:

  • Ocena 3,4 - należy napisać program tworzący strukturę katalogów na podstawie pliku wejściowego bez zmiany uprawnień poszczególnych węzłów.
  • Ocena 5 - należy spełnić wymagania na ocenę 4 i dodatkowo uwzględniać znacznik mode (zmiana uprawnień węzła).

Laboratorium 6.

Zadanie 1.

Nalezy napisać program klienta i serwera w języku Python przy użyciu modułów xmlrpclib i SimpleXMLRPCServer realizujących funkcję listowania (polecenie ls) podanego jako argument katalogu. Do obsługi plików i ścieżek należy wykorzystać moduły os i os.path.

Przykład działania:

[/opt/lab6/] python ./klient.py ls /opt/lab6
klient_xmlrpc.py [plik]
serwer_xmlrpc.py [plik]
zadania.sxw [plik]
.klient.py.swp [plik]
testowy_link [link]
[/opt/lab6/]

Proszę zwrócić uwagę, że należy rozróżnić zawartość listowanego katalogu i podać, czy dany węzeł jest plikiem, katalogiem, czy linkiem (moduł os.path zawiera odpowiednie funkcje).

Zadanie 2.

Zmodyfikować kod serwera tak, aby nie można było wyświetlić zawartości katalogu /etc.

Zadanie 3.

Dodać do klienta i serwera obsługę polecenia user, które będzie podawać listę użytkowników komputera i ich domyślne powłoki (shell). Aby uzyskać informację o użytkownikach należy przetworzyć plik /etc/passwd.

Ocena:

  • Ocena 3 - zadanie 1.
  • Ocena 4 - zadanie 1, 2.
  • Ocena 5 - zadanie 1, 2, 3.

Laboratorium 7.

Nalezy napisać program, który na podstawie słów kluczowych odszuka dostępne kanały informacyjne feed (rss, rdf itd.) Program ma być napisany w języku Python przy użyciu modułu xmlrpclib. Adres serwera XML_RPC udostępniającego usługę to http://www.syndic8.com/xmlrpc.php.

Uwaga: Opis API XML-RPC znajduje się pod adresem http://www.syndic8.com/services.php.

Zadanie 1.

Program po uruchomieniu ma zapytać użytkownika o słowa kluczowe na podstawie których będzie szukany kanał informacyjny (funkcja języka Python raw_input). Za pomocą funkcji syndic8.FindFeeds udostępnianej przez serwer XML-RPC należy wyszukać numery ID kanałów informacyjnych zawierających wpisane przez użytkownika słowa kluczowe. Program ma wydrukować liczbę odnalezionych kanałów.

Zadanie 2.

Dla każdego odnalezionego numeru ID kanału informacyjnego (zadanie 1) należy pobrać jego opis za pomocą funkcji syndic8.GetFeedInfo serwera XML-RPC i wyświetlić informację: numer ID kanału informacyjnego i adres URL kanału. Przed pobraniem informacji o kanałach należy spytać użytkownika o maksymalną liczbę przeszukiwanych kanałów. Należy podawać małą liczbę (np. 20) w celu uniknięcia długiego czasu przetwarzania informacji.

Zadanie 3.

Należy wzbogacić program o pasek postępu informujący o obecnym stanie przetwarzania informacji (tzw. progress bar). Pasek powinien być narysowany w konsoli i może wyglądać np. tak:

[ *****..........] 45%

Wskazówka: w każdym kroku rysuj pasek od nowa i użyj znaku kontrolnego (escape character) powrotu karetki (carriage return) żeby na początku następnego kroku powrócić na początek linijki.

Ocena:

  • 3 - zadanie 1
  • 4 - zadanie 1, 2
  • 5 - zadanie 1, 2, 3

Laboratorium 8

Należy napisać schemat (definicję) XML Schema opisujący plik menu.xml (podany przez prowadzącego) zgodnie z poniższymi punktami.

Uwaga: Do sprawdzenia poprawności schematu XML Schema należy użyć walidatora W3C, którego adres podany jest na stronie ćwiczenia. Do sprawdzenia poprawności dokumentu XML włącznie ze schematem opisującym go XML Schema należy użyć walidatora DecisionSoft, którego adres również znajduje się na stronie WWW ćwiczenia. Poszczególne zadania zostają uznane za skończone poprawnie, jeśli zrealizowane są wszystkie wymagania i dokumenty przechodzą test poprawności.

Zadanie 1.

Należy napisać schemat XML Schema do dokumentu menu.xml. Schemat opisany ma być przy pomocy stylu "płaskiego" (nie hierarchicznego).

Zadanie 2.

Należy zdefiniować własny typ danych dla atrybutu nr dziedziczący po typie xsd:integer i ograniczający wartość atrybutu nr do wartości z przedziału od 1 do 20.

Zadanie 3.

Należy zdefiniować własny typ danych dla atrybutu funkcja, który jest typem wyliczeniowym (enumeration) i zawiera elementy "bar salatkowy", "stol wiejski", "ciasta". Przykład podobnej definicji można znaleźć w poradniku na stronie w3schools.

Ocena:

  • 3 - zadanie 1.
  • 4 - zadanie 1, 2.
  • 5 - zadanie 1, 2, 3.
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-Share Alike 2.5 License.