Zastanawiałeś się kiedyś skąd przeglądarka wie czego spodziewać się po dokumencie i jak działa walidator stron? A może chcesz w kilka minut dowiedzieć się jak zbudowany jest dowolny język opisowy oparty o SGML? Przyjrzyj się informacjom o DTD.
Niepozorny odnośnik umieszczony na początku źródła prawie każdej strony internetowej nie jest tylko ozdobnikiem. Zawiera szczegółowe informacje o tym jak przeglądarka ma interpretować umieszczone niżej tagi.
Plik ten nazywany jest „definicją typu dokumentu” (Document Type Definition DTD) i definiuje poprawną budowę bloków dokumentu XML. Określa listę dopuszczalnych elementów i ich atrybutów, dzięki czemu przeglądarka może renderować strony. Oczywiście twórcy przeglądarek wzięli pod uwagę strony, które nie mają zdefiniowanego znacznika {html}!DOCTYPE{/html} i potrafią automatycznie rozpoznać popularne standardy.
Jeśli jednak decydujemy się na opracowanie własnego dokumentu lub przygotowujemy aplikację mającą interpretować pliki oparte o XML lub SGML powinniśmy skorzystać z dokumentów DTD. A może chcemy zbudować własny walidator?
XHTML od podstaw
Definicje mogą być umieszczone bezpośrednio w znaczniku {html}!DOCTYPE{/html} lub w zewnętrznym pliku. Przyjrzyjmy się jak wyglądają na podstawie dokumentu definiującego znany typ XHTML 1.0 (http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd). Tylko na początku wygląda on na skomplikowany. W rzeczywistości można go opanować w kilka minut posługując się prostymi zasadami.
XML Schema
DTD to nie jedyny standard opisujący dokumenty. Jego alternatywą jest XML Schema 1.1. Dokument XML Schema definiuje dokumenty XML i sam jest poprawnym plikiem XML. Daje większe możliwości niż DTD. Więcej informacji znajduje się na stronie W3C (http://www.w3.org/XML/Schema).
Dokument składa się z kilku części. Na początku, w komentarzu, znajdują się informacje o opisywanym standardzie. Po nich umieszczono listę encji (entity). Możemy je traktować jako zmienne służących do definiowania skrótów do standardowego tekstu lub znaków specjalnych. Dokument zawiera kilka zdefiniowanych encji, np. używane później CDATA. Każda encja ma formę {html}{/html}. Wszystkie nazwy encji użyte w dokumencie poprzedzone procentem i zakończone średnikiem (%encja;) zostaną zamienione na zdefiniowane wartości.
Definicje elementów
Za listą encji umieszczono informacje o elementach (w tym przypadku tagach), jakie mogą wystąpić w dokumencie. Element ma składnię {html}{/html}, gdzie dzieci są innymi elementami. Zamiast dzieci może pojawić się słowo EMPTY oznaczające, że element nie może zawierać żadnych dzieci (np. IMG).
Przy dzieciach może pojawić się kilka dodatkowych znaków (+, *, ?, ). Kod {html}{/html} oznacza, że element musi mieć dokładnie jedno dziecko „jeden”, więcej niż jedno dziecko „dwa” (oznaczone plusem), zero lub więcej dzieci „trzy” oznaczonych gwiazdką, maksymalnie jedno dziecko „cztery” (z pytajnikiem) i dokładnie jedno z dwóch: „piec” albo „szesc”.
Atrybuty elementów
Z elementami związana jest lista ich atrybutów. Każdy atrybut opisany jest w postaci: {html}{/html}. Nazwa-elementu określa do jakiego elementu odnosi się atrybut o nazwie nazwa-atrybutu. Domyslna-wartosc to łańcuch znaków w cudzysłowie albo jedna z wartości: {html}#REQUIRED{/html} (atrybut wymagany), {html}#IMPLIED{/html} (niewymagany) i {html}#FIXED{/html} „wartosc” (ustalona wartość, której nie można zmienić). Typy atrybutów zostały szczegółowo opisane na stronie w3schools (http://www.w3schools.com/dtd/dtd_attributes.asp).
To wszystko!
Mimo że składnia dokumentu wydaje się ciężka do opanowania, to przedstawione powyżej zasady są wszystkim co konieczne do odczytania definicji typu dokumentu. Przy odrobinie praktyki okazuje się to dobrym sposobem na poznanie składni każdego języka opartego o XML lub SGML bez potrzeby przeglądania długich, opisowych dokumentacji.