DTD i Encje

Dzisiaj ćwicznymy encje parametryczne, ogólne, dzielenie dtd oraz sekcje warunkowe i piszemy projekt z dtd. Encje służą do zastępowania części dokumentu "skrótem". Są przydatne gdy pewne części dokumentu się powtarzają. Encje dzielą się na ogólne i parametryczne . Ogólne można wykorzystywać w całym dkoumencie XML, zaś parametryczne tylko w jego części deklaracji DTD. Każdy z tych 2 rodzajów encji dzieli się na zewnętrzną i wewnętrzną. Zewnętrzna encja ogólna służy do załączenia zewnętrznego pliku xml, zaś zewnętrzna encja parametryczna suży do załączenia zewnętrznego pliku zawierającego DTD. Natomiast wewnętrzne encje są używane tylko w jednym pliku.

Zad 1 (encja ogólna wewnętrzna)

W dowolnym pliku z poprzednich zajęć sprawdź działanie encji ogólnej, poprzez zastąpienie powtarzających się części xml jedną encją. 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

Kiedy pomiędzy tagami xmla mamy zarówno tekst jaki i podelementy, mówimy, że zawartość węzła jest mieszana. Dokończ poniższy kod sprawdzając która kolejność PCDATA, nazwa, dyrektor_działu powoduje, że poniższy plik xml jest zgody z tym DTD:

W DTD:

<!ELEMENT sklep (dzial)+>
<!ELEMENT dzial (...|...|...)*>
<!ELEMENT nazwa (#PCDATA)>
<!ELEMENT dyrektor_działu (#PCDATA)>

W XML:

<sklep>
  <dzial>
   <nazwa> Nazwa Działu </nazwa>
   <dyrektor_działu> Nazwisko Dyrektora Działu </dyrektor_działu>
	Tutaj jest jakiś luźny tekst o węźle dział.
  </dzial>
</sklep>

Uwaga: w powyższym DTD musi być na końcu znak *, zaś element PCDATA może wystąpić tylko raz i jego miejsce jest tu ściśle określone.

Zad 7 Uwaga: w przykładzie poniżej brakowało nawiasu [ który
teraz dostawiłem. Sorry za typo

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 8 - 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ść 4 i szerokość 5.
Termin
To zadanie możesz oddać w przyszłym tygodniu. Ocenię je w trakcie zajęć. W ciągu tygodnia umieszczę plik z "samooceną" który proszę o wypełnenie przed zajęciami. Będzie to plik aruksza Exel z polami w których wpisujemy odpowiednią liczbę punktów jeśli element DTD opisany w polu jest w Państwa projekcie obecny.



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 : 13.03.2018

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