Takaisin DigPubin kotisivulle 5 RAKENTEISTEN DOKUMENTTIEN KÄSITTELYOHJELMIA

Seuraava Edellinen Alkuun
Seuraava Edellinen Alkuun


  • 5 RAKENTEISTEN DOKUMENTTIEN KÄSITTELYOHJELMIA

  • 5.1 Tutkimusprosessi
  • 5.2 Dokumenttityyppimäärittelyyn liittyvät työkalut
  • 5.2.1 EasyDTD
  • 5.2.2 DTD2HTML
  • 5.3 Tekstinkäsittely- ja -muokkausohjelmistot
  • 5.3.1 GNU Emacs
  • 5.3.2 PSGML
  • 5.3.3 Microsoft SGML Author for Word 1.0
  • 5.3.3.1 Työskentely-ympäristön rakentaminen
  • 5.3.3.2 Dokumentin kirjoittaminen
  • 5.3.3.3 Arviointia
  • 5.4 SGML-jäsentäjä
  • 5.5 Muunnosohjelmistot
  • 5.5.1 Sgmlspl-muunnosohjelma SGMLS- ja NSGMLS-jäsentäjien tulostuksen käsittelyyn
  • 5.5.1.1 Yleistä
  • 5.5.1.2 Perl-ohjelmointikieli
  • 5.5.1.3 Testituloksia
  • 5.5.2 CoST version 0.2 Copenhagen SGML Tool
  • 5.5.2.1 Yleistä
  • 5.5.2.2 Tcl-ohjelmointikieli
  • 5.5.2.3 Testaustuloksia
  • 5.5.3 QWERTZ-dokumentinkäsittelyjärjestelmä
  • 5.5.4 General formatter (GF)
  • 5.5.5 LaTeX2HTML
  • 5.5.6 StripSGML
  • 5.6 Selaajat
  • 5.6.1 Panorama Pro
  • 5.6.2 Olias
  • 5.6.3 HTML-selaajat
  • 5.7 Yhteenveto julkisohjelmatarjonnasta


    5 RAKENTEISTEN DOKUMENTTIEN KÄSITTELYOHJELMIA

    Edellisessä luvussa esiteltyjen rakenteisten dokumenttien käsittelyn eri vaiheisiin on tarjolla lukuisia toiminnoiltaan, käytettävyydeltään ja hinnoiltaan toisistaan poikkeavia ohjelmia. Rakenteisten dokumenttien rakennemäärittelyn suunnitteluun voidaan hyödyntää yksinkertaisia apuohjelmia, joiden avulla on mahdollista hahmottaa dokumentin rakenne graafisesti esimerkiksi rakennepuun avulla. Nämä ohjelmat tuottavat myös käyttäjän määrittelyjen mukaisia DTD-kuvauksia. Rakenteisen tekstin tuottamisvaiheeseen tarjolla olevat erilaiset tekstinkäsittelyohjelmat perustuvat yleensä joko tekstityyppien avulla tai manuaalisesti tapahtuvaan tekstitunnisteiden merkkaukseen. Rakenteisen tekstin jäsentäminen voidaan myös vaivattomasti tehdä tekstinkäsittelyohjelman yhteydessä, jolloin käyttäjä voi saada välittömästi palautteen mahdollisista virheistä tekstirakenteessa. Dokumenttien muunnokseen on tarjolla valmiita, tiettyyn dokumentin rakennemäärittelyyn (DTD:hen) perustuvia valmisohjelmia, tai vaihtoehtoisesti dokumentin tarvittavaan kohdemuotoon muuntava ohjelma voidaan ohjelmoida itse jollakin erityisesti tekstimuotoisen tiedon käsittelyyn tarkoitetulla ohjelmointikielellä.

    Tässä luvussa on esitelty tutkimuksessa evaluoidut ohjelmistot ja arvioitu niiden soveltuvuutta yliopiston julkaisutuotannon käsittelymalliin jäsenneltynä luvussa 4.5 esitetyn Jyväskylän yliopiston julkaisujen käsittelymallin mukaan. Kuten aiemminkin on mainittu, tämä tutkimus rajattiin käsittämään vain UNIX-laiteympäristöön tarjolla olevat julkisohjelmat. Tästä rajauksesta poiketen on kappaleessa 5.6 'Selaajat' esitelty HTML-selaajia lukuunottamatta kaupallisia SGML-tekstien selaajaohjelmia. HTML-merkkauskielestä poiketen SGML-selaajia ei ole tarjolla julkisohjelmina. Toinen rajauksesta poikkeava ohjelma on esitelty kappaleessa 5.3 'Tekstinkäsittely- ja muokkausohjelmistot'. Koska dokumentin kirjoittaminen tapahtuu usein PC:n tekstinkäsittelyohjelmilla, otimme mukaan esimerkinomaisesti yhden kaupallisen PC:llä toimivan SGML-tekstin tuottamista tukevan ohjelman.

    Seuraavassa on tutkimusprosessin kuvauksen jälkeen kerrottu rakenteisten dokumenttien eri käsittelyvaiheisiin tarjolla olevista julkisohjelmista (dokumenttityyppimäärittelyn käsittelyyn liittyvät työkalut, tekstinkäsittelyohjelmat, jäsentäjät, muunnosohjelmat ja niissä käytetyt ohjelmointikielet ja selaajat). Ohjelmia on testattu ja esitelty lyhyen esimerkkitekstin avulla. Ohjelmista on arvioitu myös niiden käytettävyyttä ja soveltuvuutta julkaisujen käsittelymalliin.

    5.1 Tutkimusprosessi

    Tämän tutkielman tekeminen aloitettiin kartoittamalla SGML-dokumenttien luomiseen ja hallintaan tarjolla olevia julkisohjelmia Internet-tietoverkon välityksellä. Löydetyistä ohjelmista valittiin laiteympäristövaatimuksiltaan, toiminnoiltaan ja valmiusasteiltaan sopivimmat ohjelmat testattavaksi. Niinpä tutkimuksessamme suurimman työpanoksen olemme käyttäneet eri julkisohjelmien etsimiseen, niiden asentamiseen, toiminnan testaamiseen ja muunnosohjelmien osalla ohjelmointiin. Ohjelmistojen tutkimiseen käytetty työmäärä jaettiin kolmen henkilön kesken siten, että jokainen tutki eri ohjelmia, joista tehtiin raportit muiden luettavaksi. Työtunteina arvioituna käytimme ohjelmistojen tutkimiseen aikaa noin 250 tuntia/henkilö. Ohjelmien etsiminen, siirtäminen ftp:n avulla ja niiden asentaminen veivät paljon aikaa, koska ohjelmien asennus- ja käyttöohjeet olivat usein varsin epämääräisiä ja vain tiettyyn laiteympäristöön (yleensä eri kuin käytössämme ollut) tarkoitettuja. Toisaalta, kun kyseessä olivat lähes poikkeuksetta vielä keskeneräiset julkisohjelmat, ei ohjeistuksien laadulle voinut asettaa kovin suuria odotuksia. Asennusten yhteydessä ilmenneissä ongelmissa jouduimme usein turvautumaan laboratorioinsinöörimme lisäksi myös ohjelman tekijän apuun täydentääksemme puutteellisia ohjeita.

    Testasimme useita erilaisia rakenteisten dokumenttien hallintaan tarkoitettuja ohjelmia, mutta raportoimme niistä vain sellaiset, jotka olivat pidemmälle kehitettyjä, yhteensopivia käytössämme olleen laiteympäristön kanssa ja toimivat suhteellisen moitteettomasti. Ongelmana näissä julkisohjelmissa oli yleensä, että monet ohjelmista olivat vasta alfa- tai beta-versioita tai niiden kehittäminen oli jätetty osittain käyttäjille. Monet varsin lupaavilta kuulostavat ohjelmat tuottivat testausvaiheessa pettymyksen, koska ne olivat käytettävyydeltään alkeellisia ja osittain keskeneräisiä.

    Rakenteiseen tekstiin perustuvassa julkaisumallissa keskeiseksi toimintatavoitteeksi asetettiin dokumenteista muodostettavat erimuotoiset julkaisuversiot. Tutkimuksen alussa määriteltiin, että julkaistavaksi tarkoitetusta tekstistä olisi mallin avulla saatava muodostettua paperimuotoinen ja kansainvälisen tietoverkon välityksellä julkaistava versio. Koska SGML-tekstien käsittelyyn tarjolla olleet julkisohjelmat eivät sisältäneet tekstin tulostukseen tarvittavia muotoiluominaisuuksia, paperijulkaisun muodostamiseksi SGML-muotoinen teksti piti muuntaa LaTeX-muotoon. Tietoverkon välityksellä julkaistavan tekstin osalta oli selvää, että muunnoksen pitäisi toimia myös SGML-muodosta HTML-muotoon. Nämä muunnostarpeet asettivat lähtökohdat muunnosohjelmien kartoittamiselle. Koska valmista muunnoksen tekevää automaattia ei löytynyt, muunnosohjelmiin perehtymisen lisäksi tekstimuunnoksen tekemiseen tarvittiin myös hyvää tietämystä kohdemuunnoksena olevasta tekstinmuotoilukielestä. HTML osoittautui rakenteeltaan yksinkertaiseksi ja sen omaksumista helpotti myös yhdennäköisyys muiden SGML-sovellusten kanssa. LaTeX-tekstinmuotoilukieli osoittautuikin ominaisuuksiltaan monipuoliseksi ja toisaalta myös määrittelytavoiltaan oudoksi, joten sen omaksuminen vei oletettua enemmän aikaa.

    Moitteettomasti toimivia, valmiita muunnosohjelmia emme löytäneet kuin muutaman ja osa niistä ei lopulta soveltunut kehittelemäämme malliin, koska ne asettivat liian tarkkoja rajoituksia käsiteltävän SGML-dokumentin rakenteelle. Julkaisumalliin sopivinta muunnosohjelmaa valittaessa viimeisimpään vertailuvaiheeseen otettiin kaksi eri ohjelmaa, jotka molemmat perustuivat käyttäjän määrittelemään muunnosohjelmakoodiin. Näissä ohjelmissa oli käytetty eri ohjelmointikieliä (Tcl ja Perl), joihin perehtymistä muunnoksen tekeminen edellytti. Tcl:n osalta manuaalien tai edes jonkinlaisten esimerkkiohjelmien löytäminen osoittautui hankalaksi. Perlin opiskelu onnistui helpommin jo muunnosohjelmapaketin sisältämän ohjeistuksen ansiosta. Vaikka muunnosohjelman sisältämät luokkakirjastot sisälsivät hyviä ja valmiita toimintoja muunnokseen tarvittavan määrittelytiedoston tekemiseen, ohjelmointityön aloittaminen edellytti uuden, täysin tuntemattoman ohjelmointikielen omaksumista.

    Selaaja-ohjelmia tutkiessamme tutustuimme myös alustavasti WWW:n laajennukseksi tarkoitettuun Hyper-G-ohjelmistoon. Se vaikutti erittäin mielenkiintoiselta apuohjelmalta rakenteisten dokumenttien hallinnan näkökulmasta tarkasteltuna, koska siitä kirjoitettujen artikkeleiden ja esitteiden mukaan Hyper-G mahdollistaa kaksisuuntaisten linkkien ylläpitämisen. Tämä ominaisuus puuttuu nykyisestä WWW-verkosta. Hyper-G:n esitteet lupasivat muutenkin huomattavia parannuksia nykyiseen verrattuna mm. luotettavuuden, joustavuuden, nopeuden, helppokäyttöisyyden ja turvallisuuden osalta. Hyper-G on kuitenkin niin laaja järjestelmä, että sen tarkempi tutkiminen ja raportointi rajattiin tämän tutkimuksen ulkopuolelle jo siitäkin syystä, että emme saaneet sitä itse missään vaiheessa testata. Hyper-G:stä on kuitenkin WWW:ssä runsaasti materiaalia, jota voi hyödyntää mahdollisessa jatkotutkimuksessa.

    5.2 Dokumenttityyppimäärittelyyn liittyvät työkalut

    Ellei rakenteisen dokumentin määrittelytiedostona käytetä valmista dokumenttityyppimäärittelyä, DTD voidaan määritellä myös itse, jolloin tekstin sisältämät elementit voidaan sisällyttää dokumenttityyppimäärittelyyn organisaation dokumenttirakenteiden mukaisesti kattavasti ja rakenteellisesti oikein. Dokumenttien rakenteen hahmottaminen ja jaotteleminen useisiin eritasoisiin tekstiosiin voi kuitenkin muodostua arvaamattoman työlääksi varsinkin monimutkaisten dokumenttien yhteydessä. Dokumenttityyppimäärittelyiden tekijöiden avuksi on kuitenkin kehitetty ohjelmia, joiden avulla voidaan luoda graafinen esitys tekstin rakenteesta analysointia varten. Näitä ohjelmia voidaan hyödyntää myös valmiin DTD:n käyttöönoton ja sen rakenteeseen tutustumisen yhteydessä.

    5.2.1 EasyDTD

    EasyDTD on Norman E. Smithin laatima apuohjelma, joka on tehty helpottamaan DTD:n tekoa. Ohjelmalle annetaan syötteeksi lista käytettävistä entiteeteistä, elementeistä ja attribuuteista. Lisäksi voidaan määritellä niiden esiintymistiheys sekä ryhmitellä elementit. Näiden tietojen perusteella easyDTD muodostaa DTD:n, jota joudutaan kuitenkin usein muokkaamaan käsin lopulliseen muotoonsa. EasyDTD-apuohjelman avulla voidaan luoda runko DTD:lle, josta määrittelyä on helppo lähteä työstämään eteenpäin. (EasyDTD, 1995)

    Esimerkkinä easyDTD:n käytöstä laadittiin lyhyt lista, joka muodostuu yksinkertaisesta elementti- ja entiteettimäärittelystä. Listan tarkoituksena on muodostaa runko DTD:lle, jota voidaan käyttää runokokoelman runojen merkkauksessa. Runokokoelman ajatellaan koostuvan useammista runoja, joissa valinnaisena elementtinä on otsikko ja pakollisena yksi tai useampi säe. Säkeeseen puolestaan kuuluu vähintään yksi rivi. Runoja voidaan kirjoittaa suomeksi, joten skandinaavisia merkkejä on voitava käyttää. Määrittelylista kirjoitettiin seuraavaan muotoon:

    anthol
      poem+
        title?
        stanza+
          line+
    <ENTITIES>
    ae  "\{a}"
    Ae  "\{A}"
    oe  "\{o}"
    Oe  "\{O}"
    

    Elementtien nimiä sisentämällä ilmaistaan niiden suhde toisiinsa. Sisentäminen on tehtävä välilyöntinäppäintä käyttämällä, koska ohjelma ei osaa tulkita sarkainnäppäimen avulla aikaansaatuja välilyöntejä (EasyDTD, 1995). Lista on nimettävä .ezy-loppuiseksi, jolloin DTD saadaan muodostettua komennolla

    easydtd esim.ezy esim.dtd

    Komento muodostaa seuraavanlaisen dokumenttityyppimäärittelyn:

                    <!-- ENTITIES    -->
    <!ENTITY % doctype "anthol"	-- Document type GI -->
    
    <!ENTITY ae            "\{a}" >
    <!ENTITY Ae            "\{A}" >
    <!ENTITY oe            "\{o}" >
    <!ENTITY Oe            "\{O}" >
    
                    <!-- ELEMENTS    -->
    <!--      ELEMENTS       MIN  CONTENT -->
    <!ELEMENT %doctype;      - - (poem+)  >
    <!ELEMENT poem           - - (title?,stanza+)  >
    <!ELEMENT title          - - (#PCDATA)  >
    <!ELEMENT stanza         - - (line+)  >
    <!ELEMENT line           - - (#PCDATA)  >
    
                    <!-- ATTRIBUTES  -->
    <!--      ELEMENT        NAME         VALUE          DEFAULT -->
    ]>
    

    Jotta dokumenttityyppimäärittelystä saataisiin samanlainen kuin luvussa 4.3 on kuvattu, sen minimointirajoitteet on lisättävä käsin.

    Testauksen perusteella havaitsimme easyDTD:n sopivan hyvin erityisesti yksinkertaisten ja lyhyehköjen dokumenttityyppimäärittelyjen kirjoittamisen apuohjelmaksi. Määrittelylistan kirjoittaminen elementtejä sisentämällä helpottaa elementtien välisten suhteiden hahmottamista. Ohjelma on myös helppokäyttöinen, koska se ei vaadi mitään erillistä työkalua, jolla määrittelylista pitäisi kirjoittaa, vaan kirjoitusohjelmaksi käy mikä tekstinkäsittely- tai -muokkausohjelmisto tahansa, kunhan se vain tuottaa ASCII-muotoista tekstiä.

    5.2.2 DTD2HTML

    Otettaessa uusi dokumenttityyppimäärittely käyttöön siihen täytyy aluksi tutustua, jotta tiedetään miten dokumentit merkataan kyseisen DTD:n mukaisesti. DTD:n analysoinnin avuksi on tehty DTD2HTML-ohjelma, joka muodostaa DTD:n käyttämistä elementeistä puurakenteisen hierarkkisen kuvion HTML-muotoon. Syntynyttä dokumenttia on mahdollista tutkia HTML-selaajilla.

    DTD2HTML-ohjelman muodostamat HTML-tiedostot jakaantuvat DTD:n rakenteen mukaan selviksi kokonaisuuksiksi, jolloin halutut tiedot on helppo löytää. DTD-HOME.html on syntyneen HTML-dokumentin kotisivu. TOP-ELEM.html sisältää listan yleisimmistä elementeistä ja ALL-ELEM.html listaa kaikki DTD:ssä määritellyt elementit. Yleisimmistä elementeistä on mahdollista muodostaa puurakenne, joka auttaa hahmottamaan DTD:n rakennetta. Jokaisesta elementistä ja niiden attribuuteista muodostuu oma HTML-tiedosto, jossa on kerrottu niiden rakenteesta tarkemmin. (DTD2HTML, 1994)

    Aiemmin esitetystä runokokoelmaa varten muodostetusta DTD:stä (ks. luku 4.3) DTD2HTML muodosti kuvassa 4 näkyvän puurakenteen. Kuvassa 5 on esimerkki stanza-elementistä muodostuneesta HTML-tiedostosta.

    Kuva 4. DTD2HTML:n muodostama rakennepuu runo.dtd:stä
    Kuva 5. DTD2HTML:n muodostama selite runo.dtd:n stanza-elementistä

    Jotta DTD2HTML-ohjelma olisi hyödyllinen, se vaatii dokumenttityyppimäärittelyn hyvää kommentointia. Graafisesti muodostetut rakennepuut antavat kyllä selventävän kuvan DTD:stä, mutta edellyttävät käyttäjältä ainakin perustiedot puurakenteen terminologiasta.

    5.3 Tekstinkäsittely- ja -muokkausohjelmistot

    Rakenteisen tekstin käsittelyssä tärkeimmät apuvälineet ovat tekstinkäsittelyohjelmisto ja tekstin rakenteen tarkistava jäsentäjä. Seuraavassa on esitelty rakenteisen tekstin käsittelyyn ja muokkaukseen tarjolla olevia julkisohjelmia UNIX-ympäristössä sekä esimerkkinä yksi PC-ympäristössä toimiva SGML:ää tukeva tekstinkäsittelyohjelma. Tekstinkäsittelyohjelman käytettävyyteen vaikuttavat monipuolisten tekstin muokkausominaisuuksien lisäksi myös mahdollinen SGML-tuki, jolloin SGML-tekstielementit voidaan merkata tekstin kirjoittamisen yhteydessä DTD:n salliman rakenteen mukaisesti.

    5.3.1 GNU Emacs

    GNU Emacs on UNIX-käyttöjärjestelmässä toimiva tekstinkäsittelyohjelmisto. Sen avulla voi muokata niin tavallisia tekstejä kuin SGML-muotoisia dokumenttejakin. GNU Emacs käynnistetään käyttöjärjestelmästä komennolla emacs tiedostonimi. Uuden tyhjän tiedoston saa muokattavaksi kirjoittamalla vain käskyn emacs. Jos käytössä on X window -järjestelmä, GNU Emacsin valikko-ohjausta on mahdollista hyödyntää, mutta muussa tapauksessa komennot on annettava näppäimistöltä. Yleensä toimintojen käynnistämiseen käytetään Ctrl-C tai Esc-M näppäimiä.

    Lähes kaikki GNU Emacsin toiminnot löytyvät valikoista, mutta suoraa komentonäppäintä ei ole määritelty kaikille komennoille. Valikoista löytyviä toimintoja ovat mm. kopiointi, leikkaus ja liimaus, siirtymiskäskyt tekstin sisällä sekä puskurin käsittelykomennot. Puskuria tarvitaan esimerkiksi tekstin säilytyspaikkana varsinaisten tallennusten välillä. GNU Emacs huolehtii automaattisesti tekstin tallentamisesta varmuuskopioksi järjestelmän toimintahäiriöiden varalta. (Eloranta, 1991)

    Tekstinkäsittelyohjelmiston valinta on suurelta osin maku- ja tottumuskysymys. Windows-käyttöliittymässä toteutettuihin tekstinkäsittelyohjelmistoihin tottuneelle GNU Emacsin käyttö voi olla aluksi hankalaa varsinkin, jos joutuu käyttämään pelkkiä näppäinkomentoja. Ohjelman käyttöön tottuu nopeasti ja sillä kirjoittaminen sujuu lähes yhtä joustavasti kuin PC:n tekstinkäsittelyohjelmilla.

    5.3.2 PSGML

    PSGML on SGML-dokumenttien muokkausohjelmisto. Se toimii GNU Emacs v.19.19 tai myöhemmän version kanssa parhaiten X window -järjestelmässä. Tällöin valikkokomentoja on mahdollista käyttää hiiren avulla. Komennot voidaan antaa myös näppäimistöltä. PSGML:n avulla voidaan muokata mitä tahansa DTD:tä käyttävää dokumenttia. (Staflin)

    PSGML käynnistyy automaattisesti, kun käynnistetään GNU Emacs, jos käsiteltävän tiedoston tarkennin on joko '.sgml', '.sgm' tai '.dtd'. Muita tiedostoja käsiteltäessä PSGML:n saa toimimaan GNU Emacsin käynnistyttyä komennolla 'M-x sgml-mode'. PSGML näkyy käyttäjälleen lähinnä GNU Emacsin lisääntyneinä valikko-ohjattuina toimintoina. (Staflin)

    PSGML opastaa käyttäjää juuri valikoiden avulla. Kun Markup-valikosta valitaan insert-start-tag, valittaviksi tulevat vain sillä hetkellä DTD:n mukaan mahdolliset tunnisteet. Samoin tapahtuu myös lopputunnistetta (end-tag) lisättäessä. Lisäapua tunnisteiden valintaan saa SGML-valikosta kohdasta list-valid-tags, joka näyttää kulloinkin voimassaolevan elementin sekä listan mahdollisista seuraavista elementeistä. List-valid-tags osaa myös ehdottaa vaihtoehtoja, jotka ovat mahdollisia, jos dokumentissa olevia tunnisteita muutetaan. Osatakseen ehdottaa oikeita tunnisteita, PSGML:n täytyy tietää, mitä DTD:tä dokumentissa käytetään. DTD määritellään dokumentin alussa. (Staflin)

    Kun tarvittavat tunnisteet on lisätty dokumenttiin, sen merkinnät tarkastetaan SGML-jäsentäjän avulla. PSGML tukee SGMLS-jäsentäjää, joka käynnistyy komennolla 'C-c C-v'. Jäsentäjä ilmoittaa mahdollista virheistä, jotka on korjattava. Virheen voi paikallistaa komennolla 'C-c C-o' (Move-valikon kohta 'move-next-trouble-spot'). (Staflin)

    5.3.3 Microsoft SGML Author for Word 1.0

    Vaikka tutkimuksemme rajattiin käsittämään vain UNIX-ympäristössä tarjolla olevat julkisohjelmat, meillä oli mahdollisuus tutustua myös joihinkin PC-laiteympäristöön tarjolla oleviin SGML-muotoisten tekstien käsittelyyn tarkoitettuihin ohjelmistoihin. Näistä esimerkkinä testasimme tämän tutkimuksen puitteissa Microsoft SGML Author for Word -ohjelmistoa (tässä mainittu myöhemmin vain nimellä Author). Päädyimme tämän ohjelmiston testaukseen, koska se tarjoaa erilaisen lähestymistavan SGML-muotoisen dokumentin tekemiseen kuin tutkimamme UNIX-ohjelmistot. Authorissa SGML-tekstirakenteet merkataan dokumenttiin määriteltävien tyylien avulla, kun UNIX-ohjelmistoissa ne merkataan näkyviin SGML-tunnisteina muun tekstin joukkoon. Author pystyy lisäksi muuntamaan sekä Word-muotoista tekstiä SGML-standardin mukaiseen muotoon että SGML-muotoista tekstiä Word-muotoon.

    Author tarvitsee toimiakseen Microsoft Word for Windows version 6.0 tai uudemman. Sen toimintaperiaatteena on hyödyntää Word-tekstinkäsittelyjärjestelmän tyylimuotoiluja, jotka yhdistetään erillisen tiedoston avulla käytettävän dokumenttityyppimäärittelyn elementteihin ja attribuutteihin. (Microsoft SGML Author for Word, 1994)

    5.3.3.1 Työskentely-ympäristön rakentaminen

    Ennen Authorin käyttöönottoa on määriteltävä tyylitiedosto, joka Word-ohjelmiston standardin mukaan on nimettävä DOT-loppuiseksi ja tallennettava \TEMPLATE -hakemistoon. Tyylitiedosto tehdään Word-tekstinkäsittelyohjelmalla, ja tiedostossa määritellään erillinen tyyli jokaiselle dokumentin rakenteen osalle, joka dokumentista halutaan erottaa. Tyyli määrittelee, miltä kukin rakenneosa näyttää tulostuksessa ja kuinka se asetellaan paperille/näytölle. Jokaisen eri tyylin on oltava yksilöllinen; samaa määrittely-yhdistelmää ei voi käyttää kahden eri nimisen tyylin määrittelynä. Esimerkkitapauksena käytimme edelleenkin Jukka Virtasen (1994) runoa. Testausta varten määrittelimme runolle tyylitiedoston, jossa kuvataan otsikoiden ja rivien asettelut. Otsikon määrittelimme tulostumaan Umbrella-kirjasintyypillä sivun vasemmasta laidasta alkaen. Rivi määriteltiin tulostumaan Unicorn-kirjasimella ja sisennettynä. Lisäksi hyödynsimme automaattisesti tyylitiedostoon tulevaa Normal-määrittelyä, jolla kuvasimme otsikon ja säkeiden väliset tyhjät rivit.

    Tyylitiedoston lisäksi Authorin käyttöönottoa varten tarvitaan dokumenttityyppimäärittelytiedosto (DTD-loppuinen), jossa kuvataan dokumentin rakenne SGML-standardin vaatimalla tavalla. Jos dokumentissa on tarkoitus käyttää erikoismerkkejä, kuten skandinaavisia aakkosia, ne on otettava mukaan dokumenttityyppimäärittelytiedostoon erillisestä tiedostosta (esim ISOLAT1.PUB). Näitä erikoismerkkimäärittelytiedostoja sisältyy useita erilaisia Authorin ohjelmapakettiin. Niiden sijainti on ilmaistu järjestelmälle tiedoston ENTM.CAT avulla, jonka sijainti puolestaan ilmaistaan tiedostossa nimeltä MSTXTCNV.INI. (Microsoft SGML Author for Word, 1994) Testauksemme kuitenkin osoitti, että varminta on sijoittaa kaikki tarvittavat määrittelytiedostot samaan hakemistoon (tässä tapauksessa \TEMPLATE). Testauksessa käyttämämme dokumenttityyppimäärittely oli seuraavanlainen:

    <!ENTITY % doctype "anthol">    
    <!ELEMENT %doctype;     - -     (poem+)         >
    <!ELEMENT poem          - -     (title?, stanza+)       >
    <!ELEMENT title         - O     (#PCDATA)       >
    <!ELEMENT stanza        - O     (line+)         >
    <!ELEMENT line          - O     (#PCDATA)       >     
    <!ENTITY % ISOlat1 PUBLIC       "ISO  8879-1986//ENTITIES Added Latin 1//EN">     
    %ISOlat1;
    

    Dokumenttityyppimäärittely- ja erikoismerkkimäärittelytiedoston käyttöä hankaloittaa se, että Author ei hyväksy niihin mitään erikoismerkkejä, ei edes rivinvaihtomerkkiä. Tiedostojen sisällön tulkinta myöhemmässä vaiheessa voi siten tuottaa ylimääräisiä vaikeuksia ohjelman käyttäjälle.

    Dokumenttityyppimäärittelytiedoston kirjoittamisen jälkeen on määriteltävä tiedosto, jossa kerrotaan dokumenttityyppimäärittelyn nimi sekä mainitaan mahdollinen erillinen määrittelyosa. Tämä tiedosto nimetään DCL-loppuiseksi ja tallennetaan samaan hakemistoon kuin muutkin edellä mainitut tiedostot. (Microsoft SGML Author for Word, 1994) Testitapauksessa tiedostoon kirjoitettiin seuraavaa:

    <!DOCTYPE anthol SYSTEM "d:\o\winword\template\anthol.dtd">

    Kun kaikki ennakkoon määriteltävät tiedostot ovat valmiina, Author voidaan käynnistää varsinaisen vastaavuustiedoston (mapping) määrittämiseksi. Uuden vastaavuustiedoston muokkausta aloitettaessa ohjelmalle on ensin kerrottava, missä juuri tähän vastaavuustiedostoon liittyvät DCL- ja DOT-tiedostot sijaitsevat. Tämän jälkeen voidaan aloittaa vastaavuuksien määrittely. (Microsoft SGML Author for Word, 1994)

    Author-manuaalin mukaan kannattaa ensin määritellä oletustoiminnot, joita käytetään, jos muunnosvaiheessa havaitaan tyyli tai SGML-elementti, jota ei ole yhdistetty mihinkään tiettyyn elementtiin tai tyyliin. Tyylin muunnoksen oletusarvo määritellään Tools-valikon Export Options -kohdan kautta. (Microsoft SGML Author for Word, 1994) Esimerkissämme määrittelimme oletusarvoksi SGML-kommentin, joka on ISO-standardissa määritelty merkkiyhdistelmäksi <!kommentti>. Jos tekstin merkitsemisessä on käytetty tyyliä, jota ei ole yhdistetty mihinkään SGML-elementtiin, teksti merkitään SGML-tekstissä kommentteihin. SGML-merkkien oletusarvo määritellään saman Tools-valikon Import options -kohdan avulla (Microsoft SGML Author for Word, 1994). Esimerkkitapauksessamme jätimme tämän kohdan määrittelemättä, koska yksinkertaisessa esimerkissämme ei ollut mitään sopivaa oletusarvoa.

    Seuraavaksi määrittelimme otsikkotyylin vastaamaan TITLE-elementtiä ja rivityylin vastaamaan LINE-elementtiä. Normaalityyli asetettiin vastaamaan STANZA-elementtiä, vaikkakin ohjelma ilmoitti, että STANZA-elementillä ei suoraan voi olla sisältöä, koska se ei ole rakennepuun lehtitasolla. Tällöin on mahdollista, että jossain muunnosvaiheessa voi kadota tietoa. Meidän tapauksessamme vastaavuustiedosto toimi kuitenkin toivotulla tavalla ja runon säkeistöjen rajat saatiin merkittyä myös SGML-tekstiin.

    Kun vastaavuustiedosto on valmiina, se tallennetaan .MP-loppuiseksi tiedostoksi, jota ei kuitenkaan voi sellaisenaan käyttää dokumenttien muunnoksessa, vaan vastaavuustiedosto on 'rakennettava' (build). 'Rakentaminen' tapahtuu File-valikon build-komentoa käyttämällä. Tällöin vastaavuustiedostosta muodostetaan MAP-loppuinen tiedosto, jota muunnosrutiinit pystyvät hyödyntämään. Sekä MP- että MAP-tiedostoja on mahdollista muokata myöhemmin. (Microsoft SGML Author for Word, 1994)

    5.3.3.2 Dokumentin kirjoittaminen

    Vastaavuustiedoston määrittelemisen jälkeen esimerkkiruno kirjoitettiin Word-tekstinkäsittelyohjelmalla aiemmin luotua tyylitiedostoa hyödyntäen. Kirjoittamisessa on huomioitava, että tekstin asetteluun ja muuhun ulkoasuun vaikuttavat merkinnät on tehtävä määriteltyjä tyylejä käyttäen. Jos käyttää muita määrityksiä, ne häviävät muunnosohjelmien vaikutuksesta tiedostomuunnosta tehtäessä. Kuvasta 6 käy ilmi testiesimerkissämme käytetyt tyylit.

    Kuva 6. SGML Author for Word -esimerkissä käytetyt tyylit

    Kun dokumentti on kirjoitettu valmiiksi, se tallennetaan ensin normaalisti Word-muotoon Save-komennolla. SGML-muotoon dokumentti saadaan muunnettua käyttämällä komentoa Save as SGML..., joka kysyy käytettävän vastaavuustiedoston nimeä. Kun nimi on annettu, muunnosohjelma käynnistyy. Tiedostosta tehdään SGM-loppuinen ja mahdolliset muunnoksen aiheuttamat virheilmoitukset ilmoitetaan FBK-loppuisen tiedoston yhteydessä. Nämä tiedostot tulevat automaattisesti näytölle muunnosohjelman käytyä läpi koko dokumentin. (Microsoft SGML Author for Word, 1994)

    Jos muunnos onnistui ilman virheilmoituksia, SGML-muotoinen teksti voidaan tarkistaa esimerkiksi DOS-Editorin avulla. Word ei näytä SGML-merkkejä tekstin joukossa, vaan pelkästään muotoillun tekstin.

    Tarvittaessa muunnosta voi käyttää myös toisinpäin, eli muuntaa SGML-teksti Word-tekstiksi. Tämä tapahtuu yksinkertaisesti tallentamalla SGM-loppuinen tiedosto Wordin dokumentiksi. Muunnos kumpaankin suuntaan vie yllättävän paljon aikaa, koska käyttämässämme yksinkertaisessa esimerkissä muunnos kesti useita minuutteja. Tulos oli kyllä juuri sellainen kuin oli odotettukin - jopa skandinaaviset merkit tulostuivat oikein.

    5.3.3.3 Arviointia

    Varsinaiselle dokumentin kirjoittajalle Authorin tapa käyttää tyylejä muunnosohjelman perustana on kohtuullisen helppo varsinkin, jos käyttäjä on tutustunut tyylien käyttöön ja Word-tekstinkäsittelyohjelmistoon muussakin yhteydessä. SGML:ään tottuneelle hankaluuksia saattaa tuottaa se, että SGML-merkintöjä ei voi nähdä suoraan, vaan ne on tulkittava tyylimerkinnöistä. Rakenteisen tekstin kannalta tyylien käyttö on hankalaa, koska niiden avulla joidenkin hierarkioiden ja muidenkin rakenteiden ilmaiseminen tuntuu teennäiseltä, joskus jopa mahdottomalta. Järjestelmän ylläpito on työlästä, koska erilaisia tiedostoja tarvitaan useita ja erityisesti monimutkaista ja useita elementtejä sisältävää dokumenttityyppimäärittelyä vastaavan tyylitiedoston ja vastaavuustiedoston laatiminen vie paljon aikaa.

    Microsoftin SGML Author for Word on vain yksi esimerkki PC-ympäristössä tarjolla olevista SGML-työkaluista. Sen esittämä lähestymistapa on poikkeava moneen muuhun ohjelmistoon nähden, ja siten olisi mielenkiintoista tutkia kirjoittajien suhtautumista eri merkitsemistapoihin. Se ei kuitenkaan ole mahdollista tämän tutkimuksen puitteissa, kuten ei myöskään laajempi PC-ympäristössä toimivien ohjelmistojen kartoitus.

    5.4 SGML-jäsentäjä

    Dokumenttiin merkattujen tekstirakenteiden oikeellisuuden tarkistamiseen tarvitaan SGML-jäsentäjää, jonka avulla mahdollistetaan samaa DTD:tä käyttävien dokumenttien yhtenäisyys. Dokumenttien rakenteiden merkkaaminen määrittelyiden mukaisesti ja niiden rakenteellinen yhtenäisyys ovatkin ehdoton edellytys rakenteisten dokumenttien hyödyntämiselle, koska esimerkiksi muunnosohjelmat olettavat tekstin rakenteen noudattavan määriteltyä DTD:tä, jonka mukaan muunnokset tehdään.

    Tässä tutkimuksessa keskityttiin käyttämään lähinnä SGMLS-jäsentäjää, koska useimmat elektronisten julkaisujen käsittelyyn tarkoitetut ohjelmat hyödynsivät nimenomaan SGMLS:n tuottamaa tulostiedostoa. Toinen syy SGMLS-jäsentäjään keskittymiseen oli se, että useat muista julkisohjelmina jaettavista jäsentäjistä ovat vielä varhaisessa testausvaiheessa, joten niiden dokumentointi on niukkaa tai jopa olematonta, ja toiminta virhealtista. Lisäksi suurin osa jäsentäjistä oli laadittu muille UNIX-koneille kuin HP-UNIXille, joka oli käyttämämme koneen käyttöjärjestelmä.

    SGMLS on SGML-dokumenttien jäsentäjä, jonka on kehittänyt James Clark Charles F. Goldfarbin kirjoittaman ARC-SGML:n pohjalta. SGMLS on kirjoitettu C-kielellä ja on siirrettävissä kaikkiin UNIX- ja MSDOS-ympäristöihin. Jäsentäjää käytetään dokumentin tunnisteiden oikeellisuuden tarkastamiseen määriteltyyn DTD:hen verrattuna. SGMLS muodostaa jäsennettävästä dokumentista ASCII-esityksen (nk. ESIS-muoto, Element Structure Information Set), jota voidaan käyttää myöhemmin muokattaessa SGML-dokumenttia paperille tai WWW:ssä tulostettavaksi. (SGMLS, 1994) Jukka Virtasen (1994) runon Pingviini pakastimessa ensimmäinen ja viimeinen säe näyttävät SGMLS-jäsentäjän tarkastuksen tuloksena muodostuneessa ESIS-muodossa seuraavalta:

    (ANTHOL
    (POEM
    (TITLE
    -Pingviini pakastimessa
    )TITLE
    (STANZA
    (LINE
    -Meill\|\\{a}\| on pingviini pakastimessa.
    )LINE
    (LINE
    -Mik\|\\{a}\|s sen on siell\|\\{a}\| lekotellessa,
    )LINE
    (LINE
    -asia kun on sill\|\\{a}\| tavalla,
    )LINE
    (LINE
    -ett\|\\{a}\| siell\|\\{a}\| on kylm\|\\{a}\| kuin navalla.
    )LINE
    )STANZA
    (STANZA
    (LINE
    -Jos tahdot pingviinin tavata,
    )LINE
    (LINE
    -sinun t\|\\{a}\|ytyy pakastin avata.
    )LINE
    (LINE
    -Lintu sinut s\|\\{a}\|ikytt\|\\{a}\|\|\\{a}\|
    )LINE
    (LINE
    -ja sekamehua silmille l\|\\{a}\|ikytt\|\\{a}\|\|\\{a}\|.
    )LINE
    (LINE
    -Se tuntuu kipeelt\|\\{a}\| p\|\\{a}\|\|\\{a}\|ss\|\\{a}\|
    )LINE
    (LINE
    -kun se mehu on aivan j\|\\{a}\|\|\\{a}\|ss\|\\{a}\|
    )LINE
    (LINE
    -ja siit\|\\{a}\| tulee otsaan patti,
    )LINE
    (LINE
    -suuri kuin lehm\|\\{a}\|ntatti.
    )LINE
    )STANZA
    )POEM
    )ANTHOL
    C
    

    SGMLS:ää voidaan käyttää sekä suoraan käyttöjärjestelmätasolta että PSGML-ohjelmiston kanssa GNU Emacsista. Käyttöjärjestelmätasolla SGMLS:n käynnistävä komento yksinkertaisimmillaan on 'sgmls tiedostonimi'. PSGML:stä käytettynä käynnistyskomento on 'C-c C-v'. Molemmissa tapauksissa optioilla voi määritellä lisätoimintoja tai rajoituksia. Esimerkiksi varoitusten ja virheilmoitusten määrää ja laatua on mahdollista muuttaa. Oletuksena SGMLS tulostaa virheilmoitukset, mutta ei jäsentäjän tuottamaa ASCII-tulostusta.

    Mahdollisista tulostuvista virheilmoituksista käy ilmi virheen sijaintirivi sekä ohjeellinen virheen kuvaus. Kuten ohjelmointikielissä, virhe ei välttämättä johdu ilmoitetusta syystä, vaan jostain mahdollisesti aiemmin tapahtuneesta virheestä. Virheen rivinumero antaa kuitenkin viitteitä, mistä vikaa kannattaa etsiä. Esimerkiksi tyhjät rivit kappaleiden välillä voivat aiheuttaa yllättäviä virheilmoituksia.

    5.5 Muunnosohjelmistot

    Koska SGML-merkattu teksti sellaisenaan ei sovellu tulostettavaksi luettavaan muotoon, tarvitaan muunnosohjelmia, jotka muokkaavat SGML-muotoisen tekstin kulloinkin käyttökelpoiseen muotoon. Tekstin selaamiseksi WWW:ssä tarvitaan HTML-muotoa. Paperitulosteiden tuottaminen on mahdollista LaTeX-tekstinmuotoiluohjelmalla, ellei käytettävä tekstinkäsittelyohjelma sisällä SGML-muotoisen tekstin tulostuksen muotoilemiseen liittyviä ominaisuuksia.

    SGML-tekstien muuntamiseen on tarjolla valmiita ja käyttäjän määrittelyihin perustuvia ohjelmia. Valmiit ohjelmat asettavat rajoituksia käytettävälle rakennetyyppimäärittelylle (DTD:lle), koska niiden toiminta perustuu tiettyjen tekstitunnisteiden käsittelyyn. Näiden ohjelmien etuna on muunnosprosessin automaattisuus, jolloin käyttäjän ei välttämättä tarvitse tietää kohdemuunnoksen rakenteesta ja määrittelytavoista. Toisaalta valmiit muunnosohjelmat saattavat olla joustamattomia silloin, jos käyttäjä haluaa muuttaa muunnoksen tuloksena muodostuneen tekstin ulkoasua. Joissakin ohjelmissa on tämä seikka huomioitu erilaisten parametrien avulla, jolloin käyttäjä voi vaikuttaa muunnoksen lopputulokseen. Nämä edellä mainitut haittapuolet eivät sisälly käyttäjien itse määrittelemiin muunnosohjelmiin. Tällöin kuitenkin muunnosprosessin toiminta jää käyttäjän toteutettavaksi, jolloin sen tekeminen edellyttää sekä käytettävän ohjelmointikielen että kohdemuunnoksena olevan muotoilukielen tuntemista. Nämä muunnosohjelmat tarjoavat kaikki ne mahdollisuudet tekstin muotoiluun, jotka ovat käytettävissä kohdemuunnoskielen puolesta.

    LaTeX on makrokirjasto, jonka on suunnitellut ja toteuttanut Leslie Lamport (1986) TeX-tekstinmuokkausohjelman käytön helpottamiseksi. LaTeX sisältää valmiita makroja moniin yleisiin tekstin muokkauksessa tarvittaviin toimintoihin, kuten sisällysluettelon muodostamiseen ja otsikoiden numerointiin sekä taulukoiden ja kirjallisuusviitteiden tekemiseen. Lisäksi LaTeXiin saatavilla olevat erilaiset apuohjelmat helpottavat tekstin muokkausta huomattavasti. LaTeX soveltuu monipuolisuutensa ja useiden valmiiden komentojen takia hyvin laajojen töiden, kuten väitöskirjojen, lisensiaattitutkimusten ja pro gradu -töiden muotoilemiseen. (Suhonen, 1988)

    SGML-tekstin muuntaminen LaTeX- ja HTML-muotoon tapahtuu siten, että muotoiltavaan dokumenttiin lisätään SGML-tekstitunnisteiden tilalle muunnoksen kohteena olevan tekstimuodon (LaTeX tai HTML) mukaisia komentoja. LaTeXilla muotoiltu teksti täytyy erikseen vielä ajaa LaTeX-ohjelmalla, joka tarkistaa komentojen oikeellisuuden. Jos tekstissä käytetään ristiviittauksia ja kirjallisuusviitteitä, tai LaTeXilla tehdään hakemisto tai sisällysluettelo, teksti täytyy tarkistaa LaTeXilla kaksi tai jopa kolme kertaa. Tämä johtuu siitä, että ensimmäinen ajo tekee aputiedostoja helpottamaan liikkuvien määreiden käsittelyä. Toisella tai kolmannella ajokerralla nämä viitteet tulevat tekstiin mukaan. HTML-muunnoksessa kieliopillinen tarkastus voidaan suorittaa ainoastaan HTML-selaajalla, johon muunnettu teksti tulostuu HTML-muokkauskomentojen mukaisesti.

    5.5.1 Sgmlspl-muunnosohjelma SGMLS- ja NSGMLS-jäsentäjien tulostuksen käsittelyyn

    Sgmlspl on muunnosohjelma, joka perustuu käyttäjän määrittelemiin SGML-tekstitunnisteiden käsittelyrutiineihin. Sen avulla voidaan siis muuntaa SGML-muotoinen dokumentti mihin kohdemuotoon tahansa. Ohjelma ei myöskään aseta rajoituksia käytettävälle DTD:lle.

    Sgmlspl-muunnosohjelma käyttää SGMLS.pm luokkakirjastoa. SGMLS.pm-luokkakirjasto sisältää ohjelmia SGMLS- ja NSGMLS-jäsentäjien tuottamien tulostuksien käsittelyyn (ks. luku 5.4 ESIS-muoto). Luokkakirjasto on tehty Ottawan yliopistossa, josta se myös saatiin testattavaksi. Kirjasto sisältää joitakin ohjelmia SGML-dokumenttien muunnosta varten, mutta se ei ole kuitenkaan täydellinen. SGMLS.pm luokkakirjasto on laajennettava ja sitä voidaan käyttää tarvittavan muunnosohjelman perustana. (Megginson, 1995a, 1995b)

    5.5.1.1 Yleistä

    Sgmlspl-ohjelmalla voidaan muuntaa SGML-dokumentteja määrittelytiedoston avulla, jossa määritellään elementeittäin ne toimenpiteet, joita tekstille täytyy tehdä. SGMLS.pm-luokkakirjaston lisäksi sgmlspl käyttää tulostuksen ohjaukseen Output.pm-kirjastoa, joka sisältyy ohjelmapakettiin.

    Tekstimuunnoksen tekeminen sgmlspl:n avulla tapahtuu siten, että käyttäjä määrittelee Perl5-ohjelmointikielellä määrittelytiedoston, jonka avulla muunnettava dokumentti käsitellään ja muunnetaan tavoitteena olevaan muotoon. Esimerkiksi jos LaTeX-muotoon muunnettavan SGML-dokumentin nimi on teksti.sgml ja määritelytiedoston maarittely.pl, niin muunnoksen käynnistäminen tapahtuisi seuraavasti:

    sgmls teksti.sgml | sgmlspl maarittely.pl > teksti.latex

    Tässä esimerkissä muunnoksen tulos ohjataan teksti.latex -nimiseen tiedostoon.

    Määrittelytiedostoon voidaan määritellä Perl5-kielen avulla erilaisia komentoja merkkijonojen käsittelyyn sekä aliohjelmien, muuttujien, tulostuksien, tiedostokäsittelyjen, jne. määrittelyyn. Sgmlspl sisältää valmiin käsittelyrutiinin sgml(tapahtuma, käsittely), jolla voidaan määritellä tavat erilaisten tekstielementtien käsittelyyn. Sen avulla voidaan määritellä käsittelytavat sekä yleisille (generic, esimerkiksi 'start_element') että määrätyille tapahtumille (specific, esimerkiksi PARA).

    Sgml-käsittelyrutiinin toinen parametri (käsittely) sisältää ne toimenpidemäärittelyt, joita kyseiselle tapahtumalle tehdään. Parametrina voi olla lainausmerkeissä oleva merkkijono, joka tulostetaan Output-käsittelyrutiinin avulla, tai aliohjelmakutsu, jota kutsutaan tapahtuman yhteydessä.

    Ohjelmistotoimitukseen sisältyy esimerkkeinä tolatex.pl - ja tohtml.pl -määrittelytiedostot, joilla SGMLS.pm -luokkakirjaston ja sgmlspl-muunnosohjelman käyttöohjeet on muunnettu sekä LaTeX- että HTML-muotoon. Nämä tiedostot ovat käyttökelpoisia esimerkkejä tarvittavan muunnoksen määrittelytiedoston tekemistä aloitettaessa. Näiden lisäksi ohjelmisto sisältää tiedoston nimeltä skel.pl, jonka avulla voidaan tuottaa määrittelytiedoston runko halutusta SGML-tiedostosta.

    5.5.1.2 Perl-ohjelmointikieli

    SGMLS.pm-luokkakirjasto on tehty Perl5-ohjelmointikielellä (Practical Extraction and Report Language), joka on tarkoitettu erityisesti tekstien, tiedostojen ja prosessien hallintaan. Sen avulla voidaan tehokkaasti toteuttaa aiemmin yleensä C-kielellä tehtyjä monimutkaisia ohjelmointitehtäviä. Perliä käytetään yleisimmin UNIX-ympäristössä, mutta siitä on saatavilla myös muita käyttöjärjestelmäversioita. Perl on saavuttanut suosiota sekä tehokkuutensa että myös edullisuutensa ansiosta, koska se on ilmainen ja vapaasti saatavilla verkon välityksellä. (Wall & Schwartz, 1994)

    Perl on rakenteeltaan yksinkertainen ohjelmointikieli, jolla voidaan muodostaa luettavaa ja havainnollista ohjelmakoodia. Sitä on kehuttu myös helpoksi oppia ja käyttää, koska yleensä ohjelmointitehtävän suorittamiseen ei tarvita paljoakaan ohjelmakoodia. Perlin erottaa muista perinteisistä ohjelmointikielistä se, ettei siinä tarvitse määritellä tietotyyppejä, muuttujia tai aliohjelmia etukäteen. Esimerkiksi koodinpätkä print "Howdy, world!"; on valmis ja toimiva Perl-ohjelmakoodi, joka tulostaa ruudulle print-lauseen sisällön.

    Perl ei vaadi erillistä kääntäjää ohjelmien suorittamiseksi, vaan ohjelmakoodit ovat luonteeltaan komentotiedostoja (scripts), jotka suoritetaan ilman erillistä ohjelmakäännöstä. Perl tarjoaa myös mahdollisuuksia tehokkaan ja tiivisrakenteisen koodin tekemiseen, mutta niiden hyödyntäminen vaatii jonkin verran kokemusta Perlin ominaisuuksista. Esimerkiksi ohjelma, joka tulostaa tiedoston tekstiä sisältävät rivit voitaisiin toteuttaa lyhyellä ja ytimekkäällä tavalla seuraavasti:

    while(<>) {
           s/^\n$//;
           print;
    }

    Esimerkkikoodin ensimmäinen while-toistorakenteen käsky s/^\n$//; (substitution) on yksi Perlin tehokkaista merkkijonon käsittelyyn tarkoitetuista komennoista. Sen syntaksi on s/PAT/REPL/[g][i][e][o], jossa PAT-parametrin määrittelemät tekstiosat voidaan muuntaa REPL-parametrin mukaisiksi ja viimeiset vaihtoehtoiset optiot rajaavat muunnoksen kohteet.

    Perliä on pidetty tehokkaana kielenä myös siksi, että se ei aseta rajoja rivien ja taulukoiden pituuksille tai aliohjelmien toistorakenteiden syvyyksille. Perlin sanotaan myös nopeuttavan ohjelmointityötä, koska Perl-komentotiedostojen suorittaminen antaa välittömän palautteen ohjelmakoodin oikeellisuudesta. Tämän lisäksi Perl sisältää myös symbolisen virheenjäljittimen (symbolic debugger), joka on myös tehty Perlillä. (Wall & Schwartz, 1994)

    Perl-manuaali (Wall & Schwartz, 1994) tarjoaa hyvän lähtökohdan Perlin opiskeluun. Se sisältää myös viitteitä muihin Perl-oppaisiin, osoitteita Perl-keskusteluryhmään ja -tiedostolähteisiin sekä tiedostojen haku- ja asennusohjeet.

    5.5.1.3 Testituloksia

    Sgmlspl-ohjelmapaketti sisältää DOC-hakemiston, jossa on lyhyet käsikirjat sekä SGMLS.pm-luokkakirjastosta että sgmlspl-ohjelmasta LaTeX- ja HTML-muodossa. Vastaavat oppaat löytyvät myös WWW:stä. Käyttöohjeet olettavat, että käyttäjällä on jo tietämystä SGML:stä, SGMLS- tai NSGMLS-jäsentäjästä sekä Perl5-ohjelmointikielestä, joten niihin liittyvää tietoutta tämä ohjelmapaketti ei tarjoa.

    Perl5-ohjelmointikielen manuaalin ja muun aineiston mukaan Perl5 tarjoaa kaikki mahdolliset välineet tekstien muokkaamiseen tehokkaasti ja nopeasti. Kielen kerrottiin olevan myös helppo oppia, varsinkin C- ja UNIX-taitajille. Koska sgmlspl-muunnosohjelma on täysin räätälöitävissä erilaisten muunnostarpeiden mukaiseksi Perl5-kielen avulla, muunnosohjelman määrittelytiedoston tekemiselle asettaa mahdollisia rajoja vain tekijän ohjelmointikyvyt sekä LaTeX- ja HTML-tuntemus.

    Edellä esitetty Virtasen (1994) runo muunnettiin esimerkkinä SGML-muodosta LaTeX- ja HTML-muotoon sgmlspl-ohjelman avulla. Muunnokseen tarvittavan määrittelytiedoston tekeminen aloitettiin tiedostorungon määrittelyllä, mikä tapahtui sgmlspl-ohjelmapaketin sisältämän skel.pl-tiedoston avulla. Kun esimerkkinä käytetty runo oli tallennettuna esim1.sgml-tiedostoon ja tuloksena haluttiin saada muunnosohjelmarunko LaTeX-muunnosta varten, käynnistyskomento oli seuraava:

    sgmls esim1.sgml | sgmlspl skel.pl > esim1-latex.pl.

    Muodostunut määrittelytiedostorunko esim1-latex.pl kopioitiin myös nimelle esim1-html.pl, jota käytettiin HTML-muunnoksen määrittelytiedostona. Määrittelytiedoston muodostamisen tuloksena oli seuraava tiedosto, joka sisältää runon tekstielementtikohtaiset sgml-funktiokutsut:

    ########################################################################
    # SGMLSPL script produced automatically by the script sgmlspl.pl
    #
    # Document Type: ANTHOL
    # Edited by: 
    ########################################################################
    
    use SGMLS;			# Use the SGMLS package.
    use Output;			# Use stack-based output.
    
    #
    # Document Handlers.
    #
    sgml('start', sub {});
    sgml('end', sub {});
    
    #
    # Element Handlers.
    #
    
    # Element: ANTHOL
    sgml('<ANTHOL>', "");
    sgml('</ANTHOL>', "");
    
    # Element: POEM
    sgml('<POEM>', "");
    sgml('</POEM>', "");
    
    # Element: TITLE
    sgml('<TITLE>', "");
    sgml('</TITLE>', "");
    
    # Element: STANZA
    sgml('<STANZA>', "");
    sgml('</STANZA>', "");
    
    # Element: LINE
    sgml('<LINE>', "");
    sgml('</LINE>', "");
    
    #
    # Default handlers (uncomment these if needed).
    #
    # sgml('start_element',sub { die "Unknown element: " . $_[0]->name; });
    # sgml('sdata',sub { die "Unknown SDATA: " . $_[0]; });
    # sgml('pi',sub { die "Unknown processing instruction: " . $_[0]; });
    # sgml('entity',sub { die "Unknown external entity: " . $_[0]->name; });
    # sgml('start_subdoc',sub { die "Unknown subdoc entity: " . $_[0]->name; });
    
    1;
    

    Tätä tiedostoa voidaan siis käyttää muunnokseen tarvittavan määrittelytiedoston lähtökohtana lopputuloksena tarvittavasta muunnosmuodosta (tässä tapauksessa LaTeX ja HTML) huolimatta.

    Määrittelytiedoston muodostaminen jatkui sgml-funktiokutsun toisen parametrin (käsittely) määrittelyllä. Tämän parametrin sisältö määräytyy sen mukaan, mitä kyseessä olevalle tekstielementille halutaan tehdä. Käsittelyrutiinien määrittely tapahtui pääasiassa sgmlspl-ohjelman sisältämien tulostusrutiinien avulla (pop_output, push_output), joiden avulla voidaan käsitellä SGMLS-jäsentäjän tuottamaa ESIS-muotoista pinoa (ks. kohta 5.4 SGML-jäsentäjä). Käsittelyrutiini voidaan määritellä merkkijonona, jolloin se tulostetaan sellaisenaan, tai aliohjelmana, jota kutsutaan elementin käsittelyn yhteydessä. Seuraavat kolme komentoa tuottavat samanlaiset lopputulokset:

    sgml('<LINE>', "\\hspace{2.5cm}");

    sgml('<LINE>', sub { output "\\hspace{2.5cm}"; });

    sub do_hspace { output "\\hspace{2.5cm}"; }
    sgml('<LINE>', \&do_hspace );

    Tekstielementtien lisäksi esimerkkinä käytetyn runon määrittelytiedostoon lisättiin käsittelyrutiinit erikoismerkeille, joita tässä tapauksessa oli vain yksi (ä-kirjain). Runotekstin muuntaminen LaTeX-muotoon tehtiin seuraavan määrittelytiedoston avulla:

    # Otetaan kayttoon SGMLS...
    use SGMLS;		
    # ja output-pino.
    use Output;		
    
    # SGMLS:n tuottamien alku- ja loppumerkkien kasittely.
    sgml('start', sub {});
    sgml('end', sub {});
    
    # Tekstielementtien kasittely.
    # ANTHOL-elementti aloittaa ja lopettaa dokumenttimaarittelyt.
    sgml('<ANTHOL>', "\\documentstyle[11pt]{article}\n\\parskip\\bigskipamount\n");
    sgml('</ANTHOL>', "\\end{document}");
    
    # POEM-elementti lopettaa LaTeXin verse-ympariston, joka on tarkoitettu
    # runoja varten.
    sgml('<POEM>', "");
    sgml('</POEM>', "\\end{verse}\n");
    
    # TITLE-elementin mukaan tulostetaan runon otsikko ja aloitetaan dokumentti.
    sgml('<TITLE>', "\\title{");
    sgml('</TITLE>', sub { output "}\\author{Jukka Virtanen}\\date{1994}\n";
        output "\\begin{document}\n\\maketitle\n";
        output "\\begin{verse}\n"; });
    
    # STANZA-elementti erottaa runon sakeet toisistaan. Niiden valiin tulostetaan
    # tyhjaa.
    sgml('<STANZA>', "\n");
    sgml('</STANZA>', "\n\\vspace{.5cm}\n");
    
    # LINE-elementti jakaa runon riveihin, joiden loppuun tehdaan rivinvaihto.
    sgml('<LINE>', "\\hspace{2.5cm}");
    sgml('</LINE>', "\\\\\n");
    
    # Skandinaavisten kirjaimien kasittely.
    sgml('|\{a}|', "ä");
    sgml('|\{A}|', "Ä");
    sgml('|\{o}|', "ö");
    sgml('|\{O}|', "Ö");
    1;
    

    Muunnos käynnistettiin komennolla

    sgmls esim1.sgml | sgmlspl esim1-latex.pl > esim1.tex,

    jonka tuloksena SGML-muotoisesta runotekstistä esim1.sgml muodostui LaTeX-muotoinen versio tiedostoon nimeltä esim1.tex. Muunnoksen tuloksena muodostunut .tex-tiedosto näyttää seuraavalta:

    \documentstyle[12pt]{article}
    \parskip\bigskipamount
    \l{Pingviini pakastimessa}
    \pagestyle{empty}
    \author{Jukka Virtanen}\date{1994}
    \begin{document}
    \maketitle
    \pagestyle{empty}
    \begin{verse}
    
    \hspace{2.5cm}Meillä on pingviini pakastimessa.\\
    \hspace{2.5cm}Mikäs sen on siellä lekotellessa,\\
    \hspace{2.5cm}asia kun on sillä tavalla,\\
    \hspace{2.5cm}että siellä on kylmä kuin navalla.\\
    
    \vspace{.5cm}
    
    \hspace{2.5cm}Jos tahdot pingviinin tavata,\\
    \hspace{2.5cm}sinun täytyy pakastin avata.\\
    \hspace{2.5cm}Lintu sinut säikyttää\\
    \hspace{2.5cm}ja sekamehua silmille läikyttää.\\
    \hspace{2.5cm}Se tuntuu kipeeltä päässä\\
    \hspace{2.5cm}kun se mehu on aivan jäässä\\
    \hspace{2.5cm}ja siitä tulee otsaan patti,\\
    \hspace{2.5cm}suuri kuin lehmäntatti.\\
    
    \vspace{.5cm}
    \end{verse}
    \end{document}

    Tämä muunnoksen tuloksena muodostunut .tex-tiedosto ajettiin LaTeXilla (komennolla latex esim1.tex), joka tarkastaa LaTeX-syntaksin ja muodostaa tiedostosta dvi-tiedoston, jota voidaan tarkastella esim. xdvi-ohjelman avulla. LaTeX-teksti tulostuu xdvi-ohjelmalla sen sisältämien muotoilukomentojen mukaisesti. Xdvi-ohjelma on hyvä apuväline varsinkin LaTeX-muunnosta valmisteltaessa, jolloin muotoilukomentojen vaikutus tekstiin on helposti nähtävillä. Paperitulostukseen tarvittava ps-muotoinen tiedosto muodostettiin dvi-tiedostosta dvips-ohjelmalla (dvips esim1.dvi). Tämän muunnoksen tuloksena muodostunut LaTeX-muotoinen versio aiemmin esitellystä esimerkkirunosta on esitetty liitteessä 3.

    HTML-muunnoksen tekeminen SGML-tekstistä vastaa pääperiaatteiltaan LaTeX-muunnosta, koska ne eroavat toisistaan ainoastaan määrittelytiedostoon kirjoitettavien tekstinmuotoilukomentojen osalta. Yleensäkin HTML-muunnoksen tekeminen on yksinkertaisempaa, koska HTML sisältää huomattavasti rajallisemmat mahdollisuudet tekstin muotoiluun. Lisäksi LaTeXille tyypillisten millimetrin tarkkojen mittasuhteiden määrittäminen on mahdotonta. Toisaalta HTML-muunnoksen monimutkaisuutta lisää HTML-tekstimuodossa tarvittavat tekstin sisäiset ja ulkoiset linkkiviittaukset, joita LaTeX-muotoisessa paperiversiossa ei tarvitse huomioida. Lisäksi suurempien tekstikokonaisuuksien yhteydessä teksti on usein tarpeen jakaa useampiin erillisiin tiedostoihin tekstin hallittavuuden ja luettavuuden säilyttämiseksi. Seuraavassa esitetty Virtasen (1994) runotekstistä tehty HTML-muunnoksen määrittelytiedosto edustaa yksinkertaista esimerkkiä, jossa lyhyt tekstikokonaisuus voidaan kirjoittaa yhteen tiedostoon, eikä linkkejä muihin tekstiosiin tai tiedostoihin tarvita.

    # Otetaan kayttoon SGMLS...
    use SGMLS;		
    # ja output-pino.
    use Output;		
    
    # SGMLS:n tuottamien alku- ja loppumerkkien kasittely.
    sgml('start', sub {});
    sgml('end', sub {});
    
    # Tekstielementtien kasittely.
    # ANTHOL-elementti aloittaa HTML-tiedostomaarittelyt.
    sgml('<ANTHOL>', sub { output "<HTML><HEAD>\n"; });
    sgml('</ANTHOL>', "");
    
    # POEM-elementit jatetaan huomioimatta HTML-muunnoksessa.
    sgml('<POEM>', "");
    sgml('</POEM>', "");
    
    # TITLE-elementin mukaan tulostetaan runon otsikko.
    sgml('<TITLE>', "<H2><B>");
    sgml('</TITLE>', "</B></H2>\n");
    
    # STANZA-elementti erottaa runon sakeet toisistaan.
    sgml('<STANZA>', "<P>");
    sgml('</STANZA>', "</P>\n");
    
    # LINE-elementti jakaa runon riveihin, joiden loppuun tehdaan rivinvaihto.
    sgml('<LINE>', "");
    sgml('</LINE>', "<BR>\n");
    
    # Skandinaavisten kirjaimien kasittely.
    sgml('|\{a}|', "&auml;");
    sgml('|\{A}|', "&Auml;");
    sgml('|\{o}|', "&ouml;");
    sgml('|\{O}|', "&Ouml;");
    1;

    Esimerkkirunon HTML-muunnos käynnistettiin vastaavasti kuten LaTeX-muunnos, mutta määrittelytiedoston nimi on tässä tapauksessa esim1-html.pl. Muunnoksen tuottama tulos ohjattiin .html-loppuiseen tiedostoon ja tämän esimerkin tuottama esim1.html näyttää seuraavalta:

    <HTML><HEAD>
    <H2><B>Pingviini pakastimessa</B></H2>
    <P>Meill&auml; on pingviini pakastimessa.<BR>
    Mik&auml;s sen on siell&auml; lekotellessa,<BR>
    asia kun on sill&auml; tavalla,<BR>
    ett&auml; siell&auml; on kylm&auml; kuin navalla.<BR>
    </P>
    <P>Jos tahdot pingviinin tavata,<BR>
    sinun t&auml;ytyy pakastin avata.<BR>
    Lintu sinut s&auml;ikytt&auml;&auml;<BR>
    ja sekamehua silmille l&auml;ikytt&auml;&auml;.<BR>
    Se tuntuu kipeelt&auml; p&auml;&auml;ss&auml;<BR>
    kun se mehu on aivan j&auml;&auml;ss&auml;<BR>
    ja siit&auml; tulee otsaan patti,<BR>
    suuri kuin lehm&auml;ntatti.<BR>
    </P>
    

    Muunnoksen tuloksena muodostunutta HTML-tiedostoa voidaan katsella HTML-selaajan (esim. Netscape) avulla.

    Oheisen runon lisäksi tämän tutkielman testiaineistona käytettiin tätä tutkielmatekstiä, joka muunnettiin sekä LaTeX- että HTML-muotoon. Määrittelytiedoston tekemiseen käytettiin, kuten edellä esitetyssä runoesimerkissäkin, skel.pl-ohjelmakoodia, joka muodosti määrittelytiedostorungon tekstielementtikohtaisista sgml-funktiokutsuista. Tämä määrittelytiedoston rungon automaattinen muodostaminen helpotti määrittelytiedoston tekemistä huomattavasti. Sekä LaTeX- että HTML-muunnosta varten muodostetut määrittelytiedostot ovat tutkielmatekstin liitteenä 4.

    Vaikka käyttöohjeen mukaan SGMLS.pm sisältää vielä tutkimattomia virheitä, tuotti Sgmlspl oikean tuloksen käyttämällämme testiaineistolla. Puutteena ovat lisäksi linkkiattribuuttien (link attribute, vain NSGMLS-jäsentäjässä) ja tietoattribuuttien (data attribute) käsittely, joita SGMLS.pm ei - vielä ainakaan - ota huomioon.

    5.5.2 CoST version 0.2 Copenhagen SGML Tool

    CoST (Copenhagen SGML Tool) on rakenneohjattu SGML-sovellusohjelmointiväline, joka käyttää hyväkseen SGMLS-jäsentäjän tuottamaa ESIS-muotoa (Element Structure Information Set). CoST:ssa muunnokseen tarvittava määrittelytiedosto muodostetaan Tcl-ohjelmointikielen (Tool Command Language) avulla. (Harbo, 1993a)

    5.5.2.1 Yleistä

    CoST:in toiminta perustuu siihen, että SGML-dokumentin rakenteen tarkistamisen yhteydessä SGMLS-jäsennin tuottaa tapahtumaketjun (event stream) dokumentin sisältämästä SGML-merkkauksista. Tämä tapahtumaketju välitetään tapahtumatulkille (event interpreter), joka muodostaa siitä rakennekuvauksen pinomuodossa. CoST hyödyntää tapahtumatulkin muodostamaa pinoa siten, että ohjelmoija voi käsitellä pinon sisältöä CoST:n avulla. Pinon sisältämiä elementtejä kutsutaan olioiksi, koska CoST käyttää oliokeskeistä ohjelmointimallia.

    Muunnokseen tarvittavaa määrittelytiedostoa muodostettaessa määritellään ne tapahtumat, jotka tehdään jokaiselle SGMLS:n tuottaman pinon oliolle. Jokaiselle SGML-elementille ohjelmoidaan käsittelyrutiinit, joista muodostuu tapahtumien olioluokkia. Ohjelmoimalla CoST:iin voidaan määritellä:

    CoST sisältää lisäksi komentoja attribuuttien ja elementtien sisältämien tietojen käsittelyyn sekä jäsentäjän muodostaman pinon olioiden hallintaan.

    5.5.2.2 Tcl-ohjelmointikieli

    Tcl (Tool Command Language) on John Osterhoutin kehittämä merkkijonoperusteinen komentokieli. Tcl sisältää vain muutamia perusrakenteita ja syntakseja, minkä ansiosta se on helppo oppia. Tcl:n komentojen perussyntaksi on command arg1 arg2 arg3..., jossa command on joko sisäinen käsky tai Tcl-proseduuri. Komentojen argumentit ovat merkkijonoja, kuten muutkin Tcl:n käsittelemät rakenteet. Yksinkertainen esimerkki Tcl:n tulostuskomennosta on puts stdout {Hello, World!}, jossa stdout-tulostusohjauksen lisäksi voitaisiin käyttää stderr- tai stdin-ohjausta. Kaarisulut ryhmittelevät sanat yhdeksi argumentiksi, joka on samalla myös puts-komennon toinen argumentti. (Welch, 1994)

    Muunnosohjelmissakin käytetty muuttujien arvojen asettaminen tehdään Tcl:n avulla komennolla set var val, jossa ensimmäisenä parametrina on muuttujan nimi ja toisena arvo. Tcl:ssä ei ole tarpeen esitellä käytettäviä muuttujia etukäteen, vaan ohjelmakoodin tulkki luo muuttujan samalla, kun se mainitaan ensimmäisen kerran. Esimerkiksi komento set var 5 asettaa var-muuttujan arvoksi viisi. Muuttujan sisältämä arvo saadaan lisäämällä muuttujan nimen eteen dollarimerkki ($), joten komento set b $var asettaa b:n arvoksi var-muuttujan arvon eli viisi.

    Tcl-kielen avulla voidaan muodostaa matemaattisia lausekkeita expr-komennolla, jolla voidaan käsitellä sekä kokonais- että liukulukuja. Erikoismerkit erotellaan Tcl-ohjelmakoodissa kenoviivalla (esim. \$). Lainausmerkit ovat kaarisulkujen ohella toinen tapa sanojen ryhmittelyyn. Lainausmerkit eroavat kaarisuluista kuitenkin siten, että niiden sisällä on mahdollista muokata merkkijonoja. Yksi erikoisuus Tcl-kielessä muihin kieliin verrattuna on, että Tcl käsittelee hakasulkujen sisältämät tekstit komentona. Kommenttirivi aloitetaan Tcl:ssä #-merkillä.

    Merkkijonot ovat Tcl-ohjelmointikielen perustietoelementtejä, joten Tcl:ssä on lukuisia komentoja niiden hallintaan. Yksi esimerkki lukuisista merkkijonon käsittelymahdollisuuksista on komento string operation stringvalue otherargs, jolla voidaan käsitellä (operation) tiettyä merkkijonoa (stringvalue) vaihtoehtoisten lisäargumenttien (otherargs) avulla. Merkkijonoelementtien lisäksi Tcl:ssä on kaksi korkean tason tietorakennetta, jotka ovat listat (lists) ja taulukot (arrays). Listoja käsitellään kuten merkkijonoja ja taulukot ovat muuttujia, joilla on indeksi. Taulukoiden indeksit ovat merkkijonoja, joten ne voidaan mieltää 'reittinä' merkkijonosta (indeksi) toiseen (taulukon elementin arvo). Käytännössä listat on tarkoitettu pienien tietomäärien käsittelyyn ja taulukot soveltuvat tehokkuutensa ansiosta suurempien tietomäärien käsittelyyn.

    Edellä on esitetty lyhyt kuvaus Tcl-kielestä. Tcl on monipuolinen ohjelmointikieli varsinkin merkkijonojen käsittelyyn ja sen ominaisuuksiin on mahdollisuus tutustua tarkemmin esimerkiksi WWW:n välityksellä. Sieltä löytyy manuaalin lisäksi myös keskusteluryhmiä sekä muita Tcl:n kehittyneempään käyttöön liittyviä aiheita. Tcl sisältää myös oliokeskeisen laajennuksen [incr Tcl], joka on Michael McLennan tekemä. Sitä voidaan myös hyödyntää CoST-muunnosohjelman tekemisessä, jolloin määrittelytiedostossa on mahdollisuus ottaa käyttöön olio-ominaisuuksia muunnosprosessin tehostamiseksi.

    5.5.2.3 Testaustuloksia

    CoST-muunnosohjelmasta käytettiin tässä yhteydessä betaversiota 0.2. Ohjelmasta oli kuitenkin jo saatavilla betaversio 0.4, mutta sen asennus ei onnistunut. Uudempaan versioon on tehty ainakin joitakin ohjelmavirhekorjauksia ja lisää käynnistysoptioita. Versiossa 0.2 vaaditaan muunnokseen tarvittavan määrittelytiedoston määrittelemistä SGML-tekstiin komennolla

    <?USESPEC spec-file.tcl>

    ennen SGML-tekstin dokumenttimäärittelyä. Uudemmassa versiossa määrittelytiedosto annetaan ohjelman käynnistyskomennossa optiolla -S. CoST-ohjelmapaketti sisältää lyhyen käyttöohjeen, joka alkusanojensa mukaisesti on betaversio kuten itse ohjelmakin. Uudempi ohjelmaversiokaan ei tuonut parannusta ohjeistukseen, johon olisi toivonut ainakin enemmän esimerkkejä määrittelytiedoston muodostamisesta. Toisaalta ohjeistuksessa oletetaan käyttäjän osaavan Tcl-ohjelmointikieltä, johon CoSTin toiminta perustuu.

    CoST-muunnosohjelman määrittelytiedoston tekeminen tapahtui samaan tyyliin kuin edellä esitellyssä sgmlspl-ohjelmassakin. Määrittelyn aloittamista olisi oleellisesti helpottanut vastaava aputoiminto kuin sgmlspl-ohjelmassa (ks. kohta Testituloksia kappaleessa 5.5.1), jonka avulla muodostettiin kaikki tekstielementit sisältävä ohjelmarunko määrittelytiedostolle. Lisäksi tiedoston muodostamista vaikeutti siihen käytettävä Tcl-ohjelmointikieli, jonka opettelemiseen tarvittavaa aineistoa ei juurikaan löytynyt. Seuraavassa esitetty määrittelytiedosto on muodostettu CoSTin käyttöohjeen (Harbo, 1993a) sisältämien esimerkkien perusteella sekä käyttäen apuna SGML '93 -konferenssijulkaisua (Harbo, 1993b), jossa esitetään joitakin SGML-muunnosongelmia CoSTin avulla ratkaistuna. Virtasen (1994) runon muuntamiseksi SGML-muodosta LaTeX-muotoon määriteltiin seuraavat elementtikohtaiset muunnokset:

    # SGMLS:n tuottamien alku- ja loppuelementtien kasittely.
    element start {
        start { puts "" }
        end { puts "" }
    }
    element end {
        start { puts "" }
        end { puts "" }
    }
    
    # Aloitetaan HTML-dokumentti.
    element ANTHOL {
        start { puts stdout "\\documentstyle\[11pt\]\{article\}\n" }
        end { puts "\\end\{document\}" }   
    }
    
    # POEM-elementti paattaa LaTeXin verse-ympariston.
    element POEM {
        start { puts "" }
        end { puts "\\end\{verse\}" }   
    }
    
    # Otsikko muodostetaan LaTeXin title-ominaisuuden avulla.
    element TITLE {
        start { puts "\\title\{" }
    end {
        puts "\}\\author\{Jukka Virtanen\}\\date\{1994\}"
        puts "\\begin\{document\}"
        puts "\\maketitle"
        puts "\\begin\{verse\}"
    }   }
    
    # Kappaleiden valiin tulostetaan tyhjaa.
    element STANZA {
        start { puts "\n" }
        end { puts "\\vspace\{0.5cm\}" }   
    }
    
    # Rivit tulostetaan 2.5 cm reunasta, otsikon alapuolelle.
    element LINE {
        start { puts "\\hspace\{2.5cm\}" }
        end { puts "\\\\\n" }   
    }
    
    # Erikoismerkkien kasittely.
    SDATA {
        case $data in {
      	default { set out ä }
        }
        puts stdout $out nonewline
    }

    Muunnos käynnistettiin komennolla

    cost esim1.sgml > esim1.tex,

    jolloin muunnettava teksti sisälsi viittauksen käytettävään määrittelytiedostoon (tässä tapauksessa <?USESPEC esim1-latex.tcl>) ja tuloksena muodostunut LaTeX-määrittelyt sisältävä teksti ohjattiin tiedostoon esim1.tex. Muunnoksen tuloksena saatiin runosta vastaava LaTeX-muotoinen versio kuin sgmlspl-ohjelmalla tuotettu esimerkki kohdassa Testituloksia kappaleessa 5.5.1.

    Esimerkkinä käytetyn runon muuntaminen HTML-muotoon testattiin myös CoSTin avulla. Runo muokattiin vastaavasti kuten sgmlspl-esimerkissäkin seuraavan määrittelytiedoston avulla.

    # SGMLS:n tuottamien alku- ja loppuelementtien kasittely.
    element start {
        start { puts "" }
        end { puts "" }
    }
    
    element end {
        start { puts "" }
        end { puts "" }
    }
    
    # Aloitetaan HTML-dokumentti.
    element ANTHOL {
        start { puts "<HTML><HEAD>\n" }
        end { puts "" }   
    }
    
    # POEM-elementti ei vaadi toimenpiteita HTML-muunnoksessa.
    element POEM {
        start { puts "" }
        end { puts "" }   
    }
    
    # Tulostetaan otsikko.
    element TITLE {
        start { puts "<H2><B>" }
        end { puts "</B></H2>\n" }
    }
    
    # Runon sakeet tulostetaan HTML-kappaleiksi.
    element STANZA {
        start { puts "<P>" }
        end { puts "</P>" }   
    }
    
    # Runon rivit erotetaan toisistaan rivinvaihdoilla.
    element LINE {
        start { puts " " }
        end { puts "<BR>" }   
    }
    
    # Erikoismerkkien kasittely.
    SDATA {
        case $data in {
      	default { set out "&auml;" }
        }
        puts stdout $out nonewline
    }
    
    
    

    Muunnoksen toteuttaminen vaati määrittelytiedoston viittauksen muuttamisen alkuperäiseen SGML-tekstiin, mutta käynnistyskomento vastasi LaTeX-muunnoksen komentoa.

    CoST-muunnosohjelman käytettävyyttä heikensivät oleellisesti puutteelliset käyttöohjeet ja asennukseen liittyvät ongelmat. Nämä seikat vaikuttivat myös siihen, että tässä tutkimuksessa kehitettyyn julkaisumalliin valittiin käytettäväksi muunnosohjelmaksi sgmlspl, jonka käyttöönotto ja hyödyntäminen onnistui huomattavasti helpommin. Näiden ohjelmien vertailutilanne on tulevaisuudessa varmastikin toisenlainen, kunhan ne kehittyvät käyttäjäystävällisemmiksi ainakin ohjeistuksiltaan. Siinä asiassa on varsinkin CoSTin osalta paljon parantamisen varaa.

    5.5.3 QWERTZ-dokumentinkäsittelyjärjestelmä

    QWERTZ-dokumentinkäsittelyjärjestelmä koostuu qwertz-dokumenttityypeistä sekä muutamasta UNIX-makrotiedostosta. Makrotiedostoja ovat esimerkiksi format, qtex, qroff ja biblio. Format on ohjelma, jonka avulla qwertz-dokumenttityyppimäärittelyn mukaiset dokumentit voidaan muuntaa LaTeX- tai groff-muotoon. Qtex puolestaan muuntaa LaTeX-dokumentin joko ps- tai dvi-muotoon tulostusta varten ja qroffin avulla saadaan aikaan ASCII-tiedosto, joka on sopiva esimerkiksi sähköpostiviestien lähettämistä varten. Biblio-ohjelmaa käytetään erityistä biblio-dokumenttityyppimäärittelyä käyttäen kirjoitetun lähdeluettelon kääntämiseen joko BibTeX- tai UNIXin omaan lähdeluetteloissa käytettävään refer-muotoon. (Gordon, 1992)

    Qwertz-dokumenttityypit ovat useasta DTD:stä koostuvia dokumenttityyppimäärittelyjoukkoja, jotka sopivat artikkeleiden, raporttien, kirjojen, kirjeiden, muistiinpanojen, piirtoheitinkalvojen, lähdeluetteloiden ja ohjekirjojen määrittelyyn. Qwertz-dokumenttityypit pohjautuvat suurimmalta osaltaan LaTeXissa käytettäviin tekstinosien nimityksiin, joten LaTeXin taitajille qwertzin määrittelyt ovat helppoja ymmärtää. (Gordon, 1992)

    Makrotiedostoista testasimme format-, qtex- sekä biblio-tiedostoja. Format-konvertointiohjelma tarvitsee ohjaustiedoston (mapping), jossa määritellään dokumentin ulkoasu. Ohjelmistopaketin mukana tulee ohjaustiedosto, jota käytetään, ellei muuta tiedostoa ole tähän tarkoitukseen määritelty. Käyttäjä voi muokata tätä valmista ohjaustiedostoa tai kirjoittaa kokonaan uuden, omiin tarkoituksiinsa sopivan. Qtex-ohjelmassa voidaan käyttää useita optioita, joiden avulla ohjelman toimintaa pystytään ohjailemaan. Ohjelman käynnistysvaiheessa on optioiden avulla mahdollista valita joko PostScript- tai dvi-muotoinen tulostustiedosto, väliaikaisten muunnostiedostojen tallennus (kannattaa tallentaa, jos aikoo käyttää myöhemmin LaTeX2HTML-konvertointiohjelmaa) tai jos käytetään erillistä lähdeluettelotiedostoa, siitä on kerrottava qtex-ohjelmalle. Biblio-makro on tarkoitettu käytettäväksi erityisesti erillisten lähdeluettelotiedostojen muuntamiseen sellaiseen muotoon, jota LaTeX ja HTML ymmärtävät.

    Ohjelmistoja on periaatteessa helppo käyttää, koska niiden mukana tulee varsin yksityiskohtainen ohjeistus. Valitettavasti ohjeistus ei kata ohjelmiston asennusta, mistä johtuen makrot eivät välttämättä toimi oletetulla tavalla. Testitapauksessamme viittaukset lähdeluetteloon eivät toimineet tulostettavassa LaTeX-versiossa, mutta LaTeX2HTML-ohjelman (ks. luku 5.5.5) avulla muodostetussa HTML-tiedostossa viittaukset olivat aivan oikein.

    Ohjelmaa testattaessa keskeisimmäksi ongelmaksi muodostui se, että muunnettavan SGML-muotoisen tekstin oletetaan käyttävän muunnosohjelmapaketin omaa dokumenttityyppimäärittelyä qwertz.dtd:tä, jonka perusteella muunnos tehdään. Muunnoksen lopputuloksena muodostunut LaTeX-muotoinen teksti noudatteli suurelta osin käytetyn tyylitiedoston (Artikkeli.sty) mukaisia asetuksia, joten tietyn ulkoasun mukaisen LaTeX-dokumentin muuntaminen SGML-tekstistä edellyttää ulkoasuvaatimusten mukaisesti määriteltyä tyylitiedostoa. Sgmlspl-muunnosohjelmaan verrattuna QWERTZ-ohjelma antaa vähemmän mahdollisuuksia itse muunnosprosessin muokkaamiseen, jolloin muunnoksen käyttämän LaTeX-tyylitiedoston oletetaan olevan tarkoitukseen sopiva. Tämän lisäksi QWERTZin kuvien käsittely ei ole joustavaa, sillä kuvien on oltava ps-muotoisia, eikä niiden kokoa voi määritellä enää tulostusvaiheessa.

    5.5.4 General formatter (GF)

    Gary Houstonin tekemä GF muodostaa yhdessä SGMLS:n kanssa ohjelmapaketin, jolla voidaan muuntaa SGML-muotoisia dokumentteja eri muotoihin, joista yleisin on LaTeX. Ohjelma ymmärtää tällä hetkellä seuraavat muodot: LaTeX2e, LaTeX209, rtf, TeXinfo ja ASCII. Näistä LaTeX on käyttökelpoisin, sillä muut eivät tunnista esimerkiksi PostScript-grafiikkaa. (Houston, 1994)

    GF-ohjelman käyttöä rajoittaa sen tuki vain muutamalle DTD:lle, jotka ovat general, HTML ja snafu (Houston, 1994). Entiteettien (esimerkiksi skandinaavisten aakkosten) lisääminen dokumenttityyppimäärittelyyn on myös hankalaa, koska silloin on itse muodostettava oma korvaustiedosto, jossa uudet entiteetit ja niitä vastaavat ASCII-koodit esitellään. GF:n tuottaman tuloksen ulkoasun muokkaaminen on myös varsin työlästä, koska GF käyttää vain omia tyylitiedostojaan. Tyylitiedoston muuttaminen toiseksi vaatii ylimääräisiä toimenpiteitä.

    Mielenkiintoinen piirre GF:ssä on sen tarjoama mahdollisuus nopeasti luoda uusia SGML-muotoisia dokumentteja. GF:ssä on valmiina muutamia SGML-dokumenttipohjia (general, html, smemo ja sletter), joita käyttämällä tekstieditorin näytölle tulee kuhunkin dokumenttipohjaan liittyvän DTD:n mukaiset tunnisteet sekä tarvittava DTD-ympäristön määrittely (declaration) (Houston, 1994). Esimerkki sletter-dokumenttipohjan saa näkymään GNU Emacsissa, kun ensin suorittaa komennon gf -n sletter oma.sgml, jossa oma.sgml on muokattavan dokumentin nimi. Dokumentti näyttää seuraavanlaiselta, kun sen avaa GNU Emacsiin:

    <!SGML "ISO 8879:1986"
    CHARSET
    	 BASESET  "ISO 646:1983//CHARSET
                       International Reference Version (IRV)//ESC 2/5 4/0"
    	 DESCSET  0   9	  UNUSED
    		  9   2	  9
    		  11  2	  UNUSED
    		  13  1	  13
    		  14  18  UNUSED
    		  32  95  32
    		  127 1	  UNUSED
    
    CAPACITY	SGMLREF
    		TOTALCAP	100000
      
    SCOPE	 DOCUMENT
    SYNTAX	 
    	 SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
    			   19 20 21 22 23 24 25 26 27 28 29 30 31 127 255
    	 BASESET  "ISO 646:1983//CHARSET
                       International Reference Version (IRV)//ESC 2/5 4/0"
    	 DESCSET  0 128 0
    	 FUNCTION RE	      13
    		  RS	      10
    		  SPACE	      32
    		  TAB SEPCHAR  9
    	 NAMING	  LCNMSTRT ""
    		  UCNMSTRT ""
    		  LCNMCHAR ".-"
    		  UCNMCHAR ".-"
    		  NAMECASE GENERAL YES
    			   ENTITY  NO
    	 DELIM	  GENERAL  SGMLREF
    		  SHORTREF SGMLREF
    	 NAMES	  SGMLREF
    	 QUANTITY SGMLREF
    		  NAMELEN  34
    
    FEATURES
      MINIMIZE
        DATATAG  NO OMITTAG	 YES  RANK  NO	   SHORTTAG YES 
      LINK
        SIMPLE   NO IMPLICIT NO   EXPLICIT NO
      OTHER 
        CONCUR   NO SUBDOC	 NO   FORMAL   YES  APPINFO  NONE
    >
    <!DOCTYPE sletter PUBLIC "-//Houston//DTD snafu5//EN">
    
    <sletter>
    <sender><address>
    <contact type=phone>
    <dest><name>
    <address>
    <date>
    <docnum>
    <opening>
    
    
    <closing>
    <signed>
    

    Kirjoittajan tehtäväksi jää vain täydentää itse kirjeen tekstiosat. Tunnisteen <sender> jälkeen kirjoitetaan kirjeen lähettäjän nimi, <address> osoittaa lähettäjän osoitteen paikan ja <contact type=phone> on tarkoitettu lähettäjän puhelinnumeroa varten. Seuraavat tunnisteet <dest>-tunnisteen jälkeen on varattu vastaanottajan tiedoille. Varsinainen kirjeteksti kirjoitetaan tunnisteiden opening ja closing väliin.

    5.5.5 LaTeX2HTML

    LaTeX2HTML on Drakosin (1995) laatima muunnosohjelma, joka muuttaa LaTeX-muotoisen tekstin HTML-muotoon ja siten teksti on siirrettävissä WWW:hen. LaTeX2HTML-ohjelma noudattaa LaTeX:lla määriteltyä tekstin rakennetta ja ohjelma muodostaa automaattisesti sisällysluettelon, alaviitteet, listat, kuvat, lainaukset ja ristiviittaukset. Myös HTML:n ymmärtämät muotoiluun liittyvät merkit tulevat mukaan muunnokseen. Matemaattiset kaavat samoin kuin tekstin ulkopuolella olevat kuvat konvertoidaan HTML:n ymmärtämään gif-muotoon (Graphics Interchange Format) ja niihin tehdään viittaukset tekstistä, jolloin ne näkyvät oikeilla paikoillaan. Ohjelma osaa käsitellä PostScript-, Encapsulated PostScript - ja gif-muodossa olevia kuvia. LaTeX2HTML:n avulla voidaan myös muodostaa hypertekstiviittaukset muihin dokumentteihin. Se ei huomioi HTML-versiota tehdessä paperiversiota varten tehtyjä LaTeX- määriteltyjä ja vastaavasti lukee pelkästään HTML-versiota varten merkatut kohdat.

    Käyttäjällä on mahdollisuus antaa erilaisia parametreja ohjelmaa suoritettaessa, mikä mahdollistaa ohjelman monipuolisen käytön. LaTeX2HTML-ohjelmassa pystytään määrittämään, tehdäänkö tekstistä vain yksi HTML-tiedosto vai useampi. Lukumäärä määräytyy lukujen ja kappaleiden mukaan. Mitä vähemmän HTML-tiedostoja on, sitä vähemmän dokumentissa on hypertekstiominaisuuksia, sillä tekstin ollessa yhtenäinen viittauksia toisiin lukuihin ja kappaleisiin ei tarvita. Tekstin voi ajaa myös ottamatta mukaan siihen kuuluvia kuvia, taulukoita ja kaavoja. Kuvat voidaan ohjata dokumentin ulkopuolelle, jolloin ohjelma tekee niihin linkit. Tekstissä liikkumista helpottavien ohjauspainikkeiden paikat pystytään määrittämään usealla eri tavalla. LaTeX2HTML-ohjelma vaatii toimiakseen UNIX-koneilla LaTeX- dvips- (versio 5.16 tai uudempi) tai dvipsk-, Gs- (versio 2.6.1 tai uudempi) ja Pbmplus- tai Netpbm -ohjelmat sekä Perl-ohjelmointikielen.

    LaTeX-muodossa olevan tekstin saa muutettua HTML-muotoon yksinkertaisimmillaan komennolla latex2html teksti.tex. Sgmlspl-ohjelmalla tuotettu LaTeX-muodossa oleva Virtasen (1994) runo näyttää LaTeX2HTML-ohjelman suorituksen jälkeen tällaiselta (HTML-muoto):

    <!DOCTYPE HTML PUBLIC "-//W3O//DTD W3 HTML 2.0//EN">
    <!Converted with LaTeX2HTML 95.1 (Fri Jan 20 1995) by Nikos Drakos 
    (nikos@cbl.leeds.ac.uk), CBLU, University of Leeds >
    <HEAD>
    <TITLE>Pingviini pakastimessa</TITLE>
    </HEAD>
    <BODY>
    <meta name="description" value="Pingviini pakastimessa">
    <meta name="keywords" value="esim1">
    <meta name="resource-type" value="document">
    <meta name="distribution" value="global">
    <P>
     <BR> <HR><A NAME=tex2html1 HREF="node1.html"><IMG ALIGN=BOTTOM ALT="next" 
    SRC="http://www.math.jyu.fi/kuvat/next.gif"></A> <IMG ALIGN=BOTTOM ALT="gif" 
    SRC="http://www.math.jyu.fi/kuvat/top_gr.gif"> <IMG ALIGN=BOTTOM ALT="gif" 
    SRC="http://www.math.jyu.fi/kuvat/prev_gr.gif">   <BR>
    <B> Next:</B> <A NAME=tex2html2 HREF="node1.html">   About this document </A>
    <BR> <HR> <P>
     <H1>Pingviini pakastimessa</H1>
    <P><STRONG>Jukka Virtanen</STRONG><P>
    <P><STRONG>1994</STRONG><P>
    <P>
    <P> 
    Meillä on pingviini pakastimessa.<BR> 
    Mikäs sen on siellä lekotellessa,<BR> 
    asia kun on sillä tavalla,<BR> 
    että siellä on kylmä kuin navalla.<BR> 
    Jos tahdot pingviinin tavata,<BR> 
    sinun täytyy pakastin avata.<BR> 
    Lintu sinut säikyttää<BR> 
    ja sekamehua silmille läikyttää.<BR> 
    Se tuntuu kipeeltä päässä<BR> 
    kun se mehu on aivan jäässä<BR> 
    ja siitä tulee otsaan patti,<BR> 
    suuri kuin lehmäntatti.<BR> 
    <P><BR> <HR>
    <UL> 
    <LI> <A NAME=tex2html3 HREF="node1.html#SECTION00010000000000000000">   
    About this document ... </A>
    </UL>
    <BR> <HR>
    <P><ADDRESS>
    <I>Digital Publications <BR>
    Tue Sep  5 14:56:10 GMT+0300 1995</I>
    </ADDRESS>
    </BODY>
    

    Esimerkissä on aluksi määritelty, mitä DTD:tä on käytetty ja millä ohjelmalla muunnos on tehty. Sen jälkeen on kuvattu dokumentin sisäisiä määrityksiä ja sivuille tulevien navigointipainikkeiden kuvatiedostojen sijainti. Varsinainen teksti alkaa otsikolla, joka on sijoitettu tunnisteiden <H1> ja </H1> väliin. Tunniste <BR> kuvaa rivinvaihtoa. Esimerkin loppuosassa on LaTeX2HTML-ohjelman luoma linkki tiedostoon, jossa kuvataan, millä käskyllä ja milloin käsiteltävänä oleva dokumentti on luotu. Dokumentin alalaitaan tulostetaan viimeiseksi kursiivilla tunnisteiden <I> ja </I> välinen teksti, jossa kerrotaan uudestaan tekstin kirjoittajan nimi ja päivämäärä, jolloin dokumentti kirjoitettiin HTML-muotoon.

    5.5.6 StripSGML

    Earl Hood on tehnyt Perl-ohjelmointikielellä StripSGML-ohjelman, jonka avulla SGML-merkatusta tekstistä voidaan muodostaa ASCII-teksti, jossa ei ole SGML-merkkejä ja erityismerkit on korvattu sopivilla ASCII-järjestelmän merkeillä. StripSGML osaa myös tarvittaessa jättää HTML-linkit tekstiin korvaamatta niitä millään ASCII-merkillä. (StripSGML, 1994)

    StripSGML on helppokäyttöinen ohjelma, joka käynnistetään käyttöjärjestelmätasolta komennolla stripsgml < teksti.sgml > teksti.txt. Itse ohjelman Perl-koodia on helppo muokata, jos omassa SGML-tekstissä on käyttänyt joitakin erikoismerkkejä, joita ei valmiissa koodissa ole huomioitu. Aiemmin esitelty Jukka Virtasen (1994) SGML-merkattu runo (ks. luku 4.3) muuttuu StripSGML:n suorituksen jälkeen seuraavaan muotoon:

    
      
        Pingviini pakastimessa
        
          Meillae on pingviini pakastimessa.
          Mikaes sen on siellae lekotellessa,
          asia kun on sillae tavalla,
          ettae siellae on kylmae kuin navalla.
        
        
          Jos tahdot pingviinin tavata,
          sinun taeytyy pakastin avata.
          Lintu sinut saeikyttaeae
          ja sekamehua silmille laeikyttaeae.
          Se tuntuu kipeeltae paeaessae
          kun se mehu on aivan jaeaessae
          ja siitae tulee otsaan patti,
          suuri kuin lehmaentatti.

    Ä-kirjaimet on tässä korvattu ae-kirjainyhdistelmällä, jotta ne myöhemmin olisi helppo korvata oikeilla vastineillaan.

    StripSGML-ohjelmaa voidaan käyttää esimerkiksi silloin, jos dokumentin dokumenttityyppimäärittely joudutaan vaihtamaan toiseksi, sillä dokumentin tunnisteiden merkkaaminen on helpompaa, jos aiemmat merkkaukset eivät häiritse työskentelyä. Toinen käyttötarkoitus tällaiselle ohjelmalle voisi olla luettavuuden helpottaminen kirjoitusprosessin aikana. Runsaat SGML-merkinnät saattavat vaikeuttaa tekstin ymmärtämistä, jolloin dokumentin sisältö voi kärsiä.

    5.6 Selaajat

    Seuraavassa on esitelty joitakin rakenteisten tekstien selaamiseen tarkoitettuja ohjelmia. Näistä ohjelmista vain osa (HTML-selaajat) on julkisohjelmia. Maksullisiakin ohjelmia otettiin mukaan tähän tutkimukseen, koska ne joko saatiin yliopistolle testausta varten (Olias) tai niistä oli muuten saatavilla mielenkiintoista tietoa (Panorama).

    Selaajan toiminta on kaksivaiheista: ensiksi sille annetaan osoite, joka osoittaa haettavaan tietoon, toiseksi tieto on haettava käyttäjän saataville. Useimmat selaajat pystyvät hakemaan tietoa niin http-, ftp- ja gopher-palvelimilta kuin uutisryhmistä ja sähköpostistakin. Uusin palvelu, jonka kehittyneimmät selaajat tajoavat, on mahdollisuus täyttää erilaisia lomakkeita, joiden avulla käyttäjä voi esimerkiksi tilata WWW:ssä tarjolla olevia tuotteita. (Lemay, 1995)

    5.6.1 Panorama Pro

    Panorama on SGML-selaaja, joka on saatavilla sekä julkisohjelmana että maksullisena versiona (Panorama Pro). Kumpaakaan ei ole tällä hetkellä saatavissa UNIX-ympäristöön. Julkisohjelmaversio Panoramasta UNIX-koneille julkaistaneen vuoden 1995 loppupuolella. (Panorama, 1995)

    Panorama Pro tarjoaa mahdollisuuden luoda SGML-dokumentteja ja selailla niitä WWW:ssä. Toimiakseen se tarvitsee Mosaic2.00 beta4 -selaajan, joka on oltava käynnissä, kun Panoramaa käytetään. Panoraman etuja muihin selaajiin verrattuna on esimerkiksi se, että se mahdollistaa esitetyn dokumentin ulkoasun muotoilun (vain Panorama Pro). Lisäksi on mahdollista luoda useita henkilökohtaisia linkkikerroksia, huomautuksia ja kirjanmerkkejä. (Panorama, 1995)

    Panorama on yksi osa SoftQuadin tarjoamasta ohjelmistopaketista, jonka avulla voidaan hallita koko julkaisemisen ketju dokumentin luomisesta sen jakeluun ja ylläpitoon. Ohjelmistopaketti on maksullinen, joten sen testaus ei kuulu tähän tutkimukseen.

    5.6.2 Olias

    Olias-selaaja oli ainut varsinainen SGML-selaaja, jota testasimme tutkimusprosessin aikana, tosin testauskohteena olivat vain sen HTML-dokumentteja selaavat osat. Tämä johtui siitä, että käytössämme ei ollut sellaista dokumenttia, joka olisi kirjoittu Olias-selaajan ymmärtämää dokumenttityyppimäärittelyä hyödyntäen. Tarvittavasta DTD:stä ei myöskään ollut saatavilla dokumentaatiota, joten sopivan dokumentin laatiminen olisi vaatinut kohtuuttomasti tutkimusresursseja.

    Olias on tarkoitettu sekä SGML- että HTML-muotoisten dokumenttien selaamiseen. SGML-muotoisten dokumenttien tulee olla bookcase.dtd-määrittelyn mukaisesti merkattuja, jotta selaaminen onnistuisi. Olias tarjoaa mahdollisuuden tekstin täydelliseen hakuun, hypertekstiominaisuuksien käyttöön sekä sijainnin määrittämiseen graafisen paikantimen avulla hyperavaruudessa (vain SGML-dokumentit). Graafisen käyttöliittymän vuoksi Olias vaatii X window -käyttöliittymän. Dokumenttien ulkomuodon määrittämiseen käytetään tyylitiedostoja, joille on myös laadittu oma dokumenttityyppimäärittely. (Olias, 1994)

    Olias-selaajan avulla voidaan selailla HTML-muotoisia dokumentteja samaan tapaan kuin muillakin HTML-selaajilla. Kaikki hyperlinkit eivät kuitenkaan ole käytettävissä. Esimerkiksi linkit graafisiin objekteihin tai graafisista objekteista muualle eivät testitilanteessa toimineet. Graafinen paikanninkin on hyödyllinen vain SGML-dokumentteja selatessa, ja sielläkin sijainnin voi paikantaa vain yhden kirjan sisällä. HTML-dokumentteja selattaessa graafinen paikannin pystyy näyttämään vain kulloinkin auki olevan dokumentin nimen. Muista yleisesti käytössä olevista HTML-selaajista Olias erottuu siinä, ettei siitä ole tarjolla julkisohjelmaversiota.

    5.6.3 HTML-selaajat

    Selaajia, joiden avulla voi lukea HTML-muotoista tekstiä, on saatavilla useita. Suosituimmat tällä hetkellä ovat Netscape ja Mosaic. Molempien avulla voidaan hakea tietoa http-palvelimista, Gopherista, ftp-palvelimista sekä Usernet News-uutispalvelimesta. Lisäksi molemmat selaajat voivat tehdä tekstihakuja Veronica-, Archie- ja WAIS-tietokantaympäristöihin. Haut tehdään antamalla selaajalle haettavan dokumentin URL-osoite, joka yksilöi jokaisen WWW:ssä luettavaksi tarkoitetun dokumentin.

    Sekä Netscape että Mosaic ovat saatavilla julkisohjelmina ainakin akateemisiin ympäristöihin. Netscapen nykyinen versio on 1.1N (Netscape Navigator, 1994), kun taas Mosaic on julkaissut version 2.00 beta4 (Mosaic, 1995).

    Netscapen ja Mosaicin lisäksi saatavilla on myös muita HTML-selaajia, esimerkiksi Lynx, joka tosin toimii vain merkkipohjaisessa ympäristössä (Lynx Users Guide). Merkkipohjaisuus rajoittaa multimediamaisten dokumenttien selailua ja erityisesti linkkien seuraamista, joten Netscapen ja Mosaicin suosituimmuus ei ole yllättävää.

    Tutkielmaamme kirjoitettaessa HTML-version selaamiseen käytimme Netscape-selainta, koska se oli valmiiksi asennettuna käyttämässämme UNIX-koneessa. Netscape-selaaja osoittautui varsin toimivaksi ratkaisuksi, koska sen avulla pystyi selaamaan dokumenttia, jossa on sekä tekstiä että kuvia. Taulukotkin tulostuivat ulkoasultaan siisteinä ja helposti luettavina. Kuvien tulostaminen oli paikoitellen hankalaa, koska LaTeXilla tuotettu tekstiversio vaati kuviin tietyllä kirjasimella kirjoitetut kuvatekstit, joita taas Netscape ei välttämättä pystynyt tuomaan näytölle riittävän selkeinä.

    5.7 Yhteenveto julkisohjelmatarjonnasta

    Rakenteisten dokumenttien käsittelyyn tarkoitettu julkisohjelmatarjonta osoittautui suhteellisen laajaksi, mutta pitkälle kehitettyjen ja käyttäjäystävällisten ohjelmien osuus tarjonnasta oli pieni. Useiden ohjelmien kehittäjät olivat ajan myötä luopuneet kokonaan tai osittain ohjelmien ylläpitämisestä, jolloin asiantuntevaa apua ei ollut saatavilla. Joidenkin ohjelmien tekijät olivat suunnitelleet ja toteuttaneet vain raakaversion, laittaneet sen julkiseen levitykseen ja jääneet odottamaan palautetta käyttäjiltä ohjelman jatkokehityksestä. Nämä seikat heikensivät monien tarjolla olleiden ohjelmien toimivuutta ja luotettavuutta, eikä niiden käyttöönottoa voinut siten edes harkita.

    Dokumenttityyppimäärittelyn tekeminen on todettu monessa yhteydessä tarkat dokumenttien rakenneanalyysit vaativaksi ja aikaavieväksi työksi. Ellei tarjolla ole sopivaa valmista DTD:tä, se on laadittava itse. Löysimme kaksi käyttökelpoista ohjelmaa (EasyDTD ja DTD2HTML) DTD:n määrittelemiseen, joilla voidaan analysoida käytettävää DTD:tä tai luoda kokonaan uusi. Ohjelmat eivät osoittautuneet sopiviksi aloitteleville käyttäjille, sillä niiden käyttö edellyttää ainakin jonkinlaista tietämystä dokumenttityyppimäärittelyiden rakenteesta ja käytöstä. Nämä ohjelmat ovat parhaiten apuna dokumenttityyppimäärittelyn käyttöönoton tai suunnittelun alkuvaiheessa.

    Julkisohjelmatarjonnan tekstinkäsittely- ja -muokkausohjelmista selvästi käyttökelpoisin oli GNU Emacs ja siihen liittyvä SGML-dokumenttien muokkausohjelma PSGML. Näiden yhdistelmä muodosti yllättävän helppokäyttöisen ja joustavan tekstinkäsittely-ympäristön. Ohjelmat tukivat dokumenttityyppimäärittelyn sallimien SGML-merkkien sijoittamista siten, että käyttäjä voi valita vain tekstin rakenteeseen sopivat tunnisteet. Siten tekstin rakenteet oikeellisuus tarkistettiin jo kirjoitusvaiheessa.

    Samoin kuin tekstinkäsittely- ja -muokkausohjelmista, jäsentäjistäkin löytyi yksi selvästi suosituin ja käytetyin ohjelma. SGMLS on pitkän kehittelyn tulos ja sen tuottamaa tulostiedostoa pystyvät hyödyntämään useat eri muunnosohjelmat.

    Muunnosohjelmistoja oli yllättävän paljon tarjolla myös julkisohjelmina. Niitä löytyi sekä valmiita, tiettyyn DTD:hen perustuvia että käyttäjän tekemiin muunnosohjelmiin perustuvia. Suurin ero itse rakennettavissa ohjelmissa on, että ne perustuvat eri ohjelmointikieliin. Ohjelmapaketti sisältää tavallisesti apuohjelmia, joilla tehdään runko muunnosohjelmalle. Käyttäjän tehtäväksi jää ohjelmoida tekstitunnistekohtaiset käsittelyrutiinit, joilla teksti muunnetaan tarvittavaan muotoon. Valmiit ohjelmat on tehty tietyille dokumenttityyppimäärittelyille ja kohdemuunnoksille, joten ne asettivat aika tarkat rajoitukset niiden käytölle. Sen sijaan itse ohjelmoitavat muunnosohjelmat voidaan tehdä minkälaista dokumenttityyppimäärittelyä noudattaville teksteille tahansa, jolloin teksti on mahdollista muuntaa useaan eri muotoon.

    Rakenteisten tekstien selaamiseen tarkoitettuja julkisohjelmia löytyi vain HTML-muotoisille dokumenteille. Tämä johtunee siitä, että SGML ei ole saavuttanut niin laajaa käyttäjäkuntaa kuten WWW:n välityksellä julkaistavissa teksteissä käytettävä HTML. SGML:n tarjoamien monipuolisten tekstin merkkausmahdollisuuksien käyttöönottoa edistäisikin julkisohjelmina tarjottavien SGML-selaajien yleistyminen.



    SeuraavaEdellinenYlös
    Seuraava Edellinen Alkuun