| Hajautettu dokumenttien hallinta: Johdatus tekstin ja dokumenttien käsittelyyn tietoverkoissa | ||
|---|---|---|
| Edellinen | Luku 5 SGML, XML ja rakenteiset dokumentit | Seuraava |
SGML:n käyttöönottamisessa tärkein ja eniten työtä vaativa tehtävä on dokumentin tyyppimäärittelyn tekeminen — ellei sitten jokin olemassaolevista tyyppimäärittelyistä kelpaa sellaisenaan. Tavalliselle tekstin kirjoittajalle tyyppimäärittely on abstraktin ja oudon tuntuinen asia. Sen rooli dokumentin rakenteen kuvaamisessa on kuitenkin aivan oleellinen ja siksi perusideat on syytä oppia ymmärtämään.
Dokumentin tyyppimäärittely (DTD, Document Type Definition) on SGML-standardin mukaisesti laadittu muodollinen kuvaus dokumenttien rakenteesta. Tyyppimäärittely laaditaan yleensä niin, että se kattaa johonkin tiettyyn aihapiiriin tai käyttötarkoitukseen kuuluvat, tai jonkin organisaation käyttämät dokumentit. Yhden organisaation dokumenttityyppejä voivat olla esimerkiksi pöytäkirjat, muistiot, selvitykset, pysyväismääräykset, ohjeet ja tiedotteet. Jokaisen dokumenttityypin mukaisia dokumentteja on vaihteva määrä ja dokumentit voivat keskenään olla tietyissä rajoissa vaihtelevan näköisiä.
Dokumentin tyyppimäärittely on eräänlainen formaali kielioppi. Kun jokin dokumentti on koodattu tämän tyyppimäärityksen edellyttämällä tavalla, tietokoneella voidaan yksikäsitteisesti tarkistaa, onko dokumentti todella kyseisen tyyppimäärityksen mukainen. Ohjelma lukee ensin muistiin tyyppimäärityksen ja sen jälkeen käy dokumentin yksityiskohtaisesti läpi. Ohjelma havaitsee, jos dokumentissa on sellaisia rakenneosia, joita tyyppimääritys ei tunne. Ohjelma havaitsee myös, jos dokumentista puuttuu jokin osa, joka on tyyppimäärityksessä määritelty pakolliseksi tai jos rakenneosat esiintyvät väärässä järjestyksessä.
Dokumentin tyyppimäärityksessä määritellään:
dokumentin rakenneosien eli elementtien nimet,
kuinka usein elementit voivat esiintyä dokumentissa,
missä järjestyksessä elementtien on oltava,
ovatko elementtien alku- ja loppuerottimet pakollisia, vai voidaanko jompi kumpi niistä tai molemmat tunnistaa välillisesti,
jokaisen elementin sisältö, joka voi koostua toisista elementeistä ja lopulta varsinaisesta tekstistä,
attribuutit ja niiden oletusarvot, joiden avulla täsmennetään elementtien luonnetta,
entiteetit, joilla viitataan tyyppimäärityksen sisäisiin rakenteisiin tai tyyppimäärityksen ulkopuolella oleviin, ohjelmien hyvin tuntemiin ‘‘tosiasioihin’’ ja
dokumentin kirjoittamisessa käytettävät säännöt, kuten kappalejaon tunnistaminen tyhjän rivin perusteella ilman alku- ja loppuerottimien käyttöä.
Yksinkertainen artikkeleita koskeva dokumentin tyyppimäärittely (document.dtd) näyttää seuraavalta:
<!DOCTYPE dokumentti
[
<!ELEMENT article - - (titlepag, abstract?, toc?, p*, sect+,
(appendix, sect+)?, biblio?) +(footnote) >
<!ATTLIST article id ID #IMPLIED
opts CDATA "null" >
<!ELEMENT titlepag - - (title, author, date?) >
<!ELEMENT title - O (#PCDATA) >
<!ELEMENT author - O (name, inst?, (and, name, inst?)*) >
<!ELEMENT name O O (#PCDATA) >
<!ELEMENT and - O (#PCDATA) >
<!ELEMENT inst - O (#PCDATA) >
<!ELEMENT date - O (#PCDATA) >
<!ENTITY % sect "heading, p* " >
<!ELEMENT heading - - (#PCDATA) >
<!ELEMENT sect - O (%sect, (p+ | sect1*)) >
<!ELEMENT sect1 - O (%sect, (p+ | sect2*)) >
<!ELEMENT sect2 - O (%sect, p+) >
<!ELEMENT p - - (#PCDATA) >
]> |
Tyyppimäärittely ei ole aivan täydellinen. Se antanee kuitenkin riittävän hyvän mielikuvan asiasta. Tyyppimäärittely on tarkoitettu aiemmin esitetyn esimerkin mukaisen dokumentin määritykseksi. Käyn seuraavassa pääpiirteissään läpi esimerkkidokumentin rinnastamalla sitä tyyppimääritykseen. Käytännössä tyyppimäärittelyt ovat paljon pidempiä ja täynnä vaikeaselkoisia, teknisen tuntuisia yksityiskohtia.