Document Type Definition
DTD (ang. document type definition) – rodzaj dokumentu definiujący formalną strukturę dokumentów XML, HTML, XHTML lub innych pochodzących z rodziny SGML lub XML. Definicje DTD mogą być zawarte w pliku dokumentu, którego strukturę definiują, przeważnie jednak zapisane są w osobnym pliku tekstowym, co pozwala na zastosowanie tego samego DTD dla wielu dokumentów.
DTD określa składnię konkretnej aplikacji XML lub SGML, np. XHTML, EAD, TEI lub innej, zdefiniowanej dla potrzeb użytkownika. Zazwyczaj DTD definiuje każdy dopuszczalny element dokumentu, jego zbiór atrybutów i dopuszczalne wartości. DTD określa także zagnieżdżanie i wymagalność poszczególnych elementów w dokumencie. W praktyce DTD przeważnie składa się z definicji ELEMENT i definicji ATTLIST.
W praktyce ze względu na małe możliwości obecnie DTD jest wypierane przez nowocześniejsze XML Schema, które posiada znacznie większe możliwości oraz nie wymaga stosowania dodatkowej, nie-XML-owej składni.
Przykład bardzo prostego użycia DTD osadzonego wewnątrz dokumentu XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE osoba [
<!ELEMENT osoba (imie, drugieimie, nazwisko)>
<!ELEMENT imie (#PCDATA)>
<!ELEMENT drugieimie (#PCDATA)>
<!ELEMENT nazwisko (#PCDATA)>
]>
<osoba>
<imie>Amadeusz</imie>
<drugieimie>Zenon</drugieimie>
<nazwisko>Kowalski</nazwisko>
</osoba>
Dokument pokazany powyżej jest poprawny składniowo (ang. well-formed) oraz strukturalnie (ang. valid). Użyte wcięcia są „dobrym zwyczajem” mającym na celu uwypuklenie drzewiastej struktury dokumentu, a kodowanie UTF-8 w systemie Unicode jest zalecane przez konsorcjum W3C i „zdrowy rozsądek”.
Stosowanie zewnętrznych DTD
Oprócz metody umieszczania DTD bezpośrednio w dokumencie XML można także stosować odwołanie zewnętrzne na dwa sposoby:
- identyfikator systemowy
- identyfikator publiczny
Zasada identyfikatora systemowego jest podobna do umieszczania stylu CSS wewnątrz HTML-a, tzn. należy podać nazwę elementu głównego (root element) oraz adres URI (np. URL), np.:
<!DOCTYPE osoba SYSTEM "naszaDefinicja.dtd">
W identyfikatorze publicznym dodatkowo umieszcza się tzw. formalny identyfikator publiczny (formal public identifier, FPI), określony w normie ISO 9070. FPI jest zbudowany na zasadzie -//właściciel//opis//język, np.:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Jest to standardowy budulec stron WWW w XHTML 1.0 Strict. FPI jest informacją dla parsera (np. przeglądarki WWW), który posiada zapisane w pamięci definicje DTD dla „dobrze znanych” FPI. Jeśli parser nie rozpozna zadanego FPI, to posłuży się adresem URI celem pobrania pliku DTD. Inne „dobrze znane” deklaracje DTD, to:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Określanie liczebności
W DTD istnieją cztery sposoby definiowania kardynalności (liczebności) elementów (zbioru elementów):
| Symbol | Znaczenie |
|---|---|
| bez symbolu | Element lub zbiór elementów występują tylko jeden raz. Jest to sposób domyślny. |
| ? | Element lub zbiór elementów występują co najwyżej raz. |
| + | Element lub zbiór elementów występują przynajmniej raz. |
| * | Element lub zbiór elementów występują dowolną ilość razy. |
Przykładowo dla tak skonstruowanego DTD umieszczonego w pliku o nazwie pracownicy.dtd:
<!ELEMENT pracownicy (pracownik+)>
<!ELEMENT pracownik (daneOsobowe, dział?)>
<!ELEMENT daneOsobowe (imie, drugieimie?, nazwisko)>
<!ELEMENT imie (#PCDATA)>
<!ELEMENT drugieimie (#PCDATA)>
<!ELEMENT nazwisko (#PCDATA)>
<!ELEMENT dział (#PCDATA)>
prawidłowym dokumentem XML jest:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE pracownicy SYSTEM "pracownicy.dtd">
<pracownicy>
<pracownik>
<daneOsobowe>
<imie>Izabela</imie>
<nazwisko>Nowakowska-Jasnorzębska</nazwisko>
</daneOsobowe>
</pracownik>
<pracownik>
<daneOsobowe>
<imie>Zygfryd</imie>
<drugieimie>Zenobiusz</drugieimie>
<nazwisko>Wawrzyniak</nazwisko>
</daneOsobowe>
<dział>Public Relations</dział>
</pracownik>
</pracownicy>
Zgodnie z zasadami budowy poprawnego składniowego XML-a dokument posiada jeden element główny pracownicy, w którym zgodnie z DTD musi znaleźć się co najmniej jeden element <pracownik>. Idąc dalej, <pracownik> musi posiadać jeden element <daneOsobowe>, dział może wystąpić raz albo wcale. W danych osobowych musi wystąpić raz element <imie> i <nazwisko>, <drugieimie> może raz, ale nie musi. Opcjonalny atrybut standalone dodatkowo informuje, że dokument nie występuje „w izolacji”, a jest związany z konkretnym DTD. Ważne jest także zachowanie odpowiedniej kolejności np. element <nazwisko> nie może wystąpić przed elementem <imie>.
Określanie kardynalności przez DTD w praktyce może okazać się za mało elastyczne, np. jeśli chce się określić, że dany element ma wystąpić dokładnie 12 razy lub co najwyżej 200 razy. Należy wtedy zastosować inne rozwiązanie np. XML Schema.
Bibliografia
- Praca zbiorowa: Beginning XML, 4th Edition. Wydawnictwo Wrox, 2007.
Linki zewnętrzne
- Kurs DTD na stronach W3Schools. w3schools.com. [zarchiwizowane z tego adresu (2003-12-07)]. (ang.).
- Fragment rekomendacji W3C XML 1.0 dot. DTD (ang.)
- Przykładowy DTD dla danych klimatycznych z serwisu WeerOnline (ang.)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.