Dokument SGML składa się z kilku części:
-
deklaracji SGMLa
gdzie opisuje się klasę dokumentu, podstawowe parametry jego budowy i
przetwarzania: używane zestawy znaków, dopuszczalne długości literałów
(np. nazwy znaczników czy długość atrybutów), opcje minimalizacji (np. czy
możliwe jest i w jakiej postaci pomijanie znaczników kończących element).
-
Definicji Typu Dokumentu
---
DTD
, Document Type Definition
--- gdzie jest zakodowana hierarchia elementów wraz z dopuszczalnymi
atrybutami, ich dopuszczalnymi i domyślnymi wartościami, możliwą
zawartością DTD jednoznacznie określa składnie danego typu dokumentu.
-
zawartości dokumentu
--- tzw.
DOCUMENT INSTANCE
(w wypadku wielu typów dokumentów zawierające także ,,zewnętrzne''
elementy sterujące tzw. ,,processing intructions'' (np. <?php
Date?>))
W wielu wypadkach deklarację stosuje się domyślną, a zamiast całego
DTD umieszcza się Formal Public Indentifier (rozwiązywany zwykle przez
parsery na właściwie DTD katalogu
zawierającego zbiór dopuszczalnych deklaracji wraz z odsyłaczami do
poszczególnych plików). Przy czym istnieje rozróżnienie na identyfikatory
publiczne: czyli
zarejestrowane
i systemowe np.: tworzone ad hoc.
Parser SGML (jak sama nazwa wskazuje) jest programem analizującym składnię
dokumentu i to --- jeśli mowa o tzw.
validating parsers
--- nie tylko samą jednorazową dawkę informacji ale również deklarację
SGML i DTD (wraz z jego składnią). Wyjście z parsera --
ESIS,
czyli
Element Structure Information Set
--- może stanowić podstawę konwersji czy jakiejkolwiek obróbki
dokumentu (łącznie z (re)formatowaniem, przy wykorzystaniu np. arkuszy
stylistycznych
DSSSL.
Składnia DTD:
- <ELEMENT nazwa otwarcie zamknięcie (zawartość) > na przykład
<!element linuxdoc o o (sect | chapt | article | report | book |
letter | telefax | slides | notes | manpage ) >
deklarujemy że element linuxdoc (nie obowiązkowy - pozycje ,,otwarcie''
i ,,zamknięcie'' (,,-'' to obowiązkowy, ,,o'' nie obowiązkowy ) może w
sobie zawierać alternatywnie elementy
sect
,
chapt
,
article
i inne.
- ENTITY --- ,,drobinka'': forma makroinstrukcji
- ATTLIST --- lista atrybutów ELEMENTU wraz z opcjami:
<ATTLIST linuxdoc LANG (CDATA) #REQUIRED>
- #FIXED
- #REQUIRED
- #CURRENT - z poprzedniego użycia
- #CONFREF - referencje
- #IMPLIED
- Typy danych
- PCDATA - parsed character data - zwykłe dane tekstowe (z rozwijaniem
entitles)
- RCDATA - replaceable chracter data
- CDATA - character data - zwykłe tekstowe --- nie przewidywana dalsza
obróbka
- ANY - może zawierać PCDATA i inne elementy
- EMPTY
- ID - identyfikator SGMLowy
- IDREF - odwołanie do tegoż