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.
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)
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.
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;
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.
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.
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.
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.