DTD i Encje

Dzisiaj ćwicznymy encje parametryczne, ogólne, dzielenie dtd oraz sekcje warunkowe i piszemy projekt z dtd. O encjach można poczytać tutaj: encje i sekcje warunkowe

Zad 1 (encja ogólna wewnętrzna)

Napisz dtd i xml do zbioru obrazów w galerii. Każdy obraz ma autora, datę utworzenia, muzeum w którym przebywa, autor ma imę, nazwisko, datę ur, opcjonalnie datę zgonu, miasto pochodzenia i kraj pochodzenia. W części xmlowej która ma mieć conajmniej 5 elementów nazwy muzeum powinny się powtarzać tak samo jak kraj pochodzenia. Użyj encji ogólnej tak by zamiast przepisywać powtarzające się nazwy, przepisywać odpowiednio podstawianą (krótką) nazwę encji Przykład:

w części DTD:

<!ENTITY JK "Jan Kowalski" >

w części XML:

<imie_nazwisko> &JK; </imie_nazwisko>

Sprawdź czy podstawowy plik się waliduje.

Zad 2 (encja ogólna wewnętrzna)

Sprawdź czy w treści encji ogólnej można użyć innej encji ogólnej

tj. czy <!ENTITY nazwa_encji "bla bla &skrot;"> jest poprawna

o ile zadeklarowano wcześniej encję o nazwie skrot.

(Sprawdź czy odpowiedni plik się waliduje)

zad 3 (encje ogólne zewnętrzne)

Sprawdź na dowolnym przykładzie działanie encji ogólnych zewnętrznych. Przykład:

W części dtd jest wpisane:

<!ENTITY nazwa_encji SYSTEM "plik_zewn.xml">

Zaś w części xml mamy na przykład:

<document >
&nazwa_encji;
</document >

Co powoduje, że treść pliku plik_zewn.xml jest wstawiona w pomiędzy znaczniki dokument

Zad 4 (encja parametryczna zewnętrzna)

Podziel plik z ćwiczenia 3 z ostatnich zajęć na 2 tak by element artykuly oraz artykul i jego potomne znalazły się w oddzielnym pliku artykuly.dtd a pozostałe elementy zostały w oryginalnym pliku.

W tym celu do pliku artykuly.dtd przenieś odpowiednie elementy a w pliku wyjściowym wpisz w miejsce usuniętych elementów:

<!ENTITY % nazwa SYSTEM "artykuly.dtd" >
%nazwa;

Zad 5

Użyj encji parametrycznych aby zamiast #PCDATA wpisywać tylko %pc; w pliku artykuly.dtd, kieruj się przykładem Przykład:

w pliku wyjściowym wpisane jest:

<!ELEMENT elem (%skrot;)>

w pliku artykuly.dtd wpisane jest:

<!ENTITY % skrot "bla bla bla zamiast skrot">
Uwaga: encja parametryczna jest akceptowana tylko w *zewnętrznym* DTD.

Zad 6

Użyj sekcji warunkowych w jakimkolwiek

pliku dtd. Sprawdź działanie zagnieżdżania sekji warunkowych.

W realistycznej sytuacji warto robić tak:

definiujemy encję parametryczną:

<!ENTITY % cale_dtd "IGNORE">

a potem wyłączamy elementy przez konstrukcję:

< ! [ %cale_dtd;

deklaracje dtd
które teraz łatwo włączać
i wyłączać przez zmianę
IGNORE na INCLUDE w definicji
encji cale_dtd

] ] >

Dzięki temu aby włączyć elementy wystarczy zmienić IGNORE w definicji encji na INCLUDE. Sprawdź działanie tego mechanizmu.

Zad 7 - Projekt

Utwórz przykładowy duży dokument XML (inny od przerabianych na ćwiczniach) oraz jego DTD opisujący jakieś dane. Np. portal internetowy allegro. Minimalna dopuszczalna wielkość pliku XML to głębokość 3 i szerokość 5 To zadanie możesz oddać w przyszłym tygodniu. Możesz (ale nie jest to wymagane) wykorzystać plik z projektu CSS, jeśli taki wystarczy aby wszystko zademonstrować



WYMAGANIA DOTYCZĄCE PROJEKTU I OCENA

Uwaga1: Wymagane jest aby w pliku: xml był atrybut ID oraz odwołanie do niego przez IDREF (odowołanie do ID)

Uwaga2: Termin projektu : 21.03.2017

Uwaga3: Punktacja

1) atrybuty - jeżeli są 1 punkt

2) element opcjonalny (?) 1 pkt

3) głębokość min 4 (wtedy 4pkt)

4) szerokość min 5 (wtedy 5pkt)

6) elementy wykluczające się (|) 1 pkt

7) encja ogólna wewnętrzna - ampersant nazwa średnik 1 pkt

8) dtd podzelone na 2 części 1 pkt

9) encja parametryczna - procent nazwa średnik 1 pkt

10) dodatkowe tj. takie jak empty,notation, nmtoken, fixed,+,* po 1pkt

Uwaga4: pamiętaj, że encja parametryczna jest akceptowana tylko w zewnętrznym DTD.