Strukturoitu teksti — mitä vitun väliä on dokumenttimuodoilla?

Johdanto

Jokainen meistä on varmasti törmännyt joskus hämmentävään ongelmaan: pitää kirjoittaa lappu, muistio, tiedote, pöytäkirja, muistiinpanoja, artikkeli, tai jotain muuta tietokoneella. Suurin osa ihmisistä kummempia ajattelematta avaa tekstinkäsittelyohjelman (Millä muulla niitä sitten voi kirjoittaa?) tai jotkut PIM:n (personal information manager, eli siis henkilökohtainen tiedonhallintaohjelma). Tämä on ihan hyvä lähestymistapa, mutta jokainen, joka on joskus yrittänyt siirtää kaikki vanhat dokumenttinsa uuteen ympäristöön (uudelle koneelle, uuteen käyttöjärjestelmään tai edes vain uudelle versiolle tekstinkäsittelyohjelmaa), tietää, mikä tuska tästä voi seurata. Tässä artikkelissa on tarkoitus kartoittaa vaihtoehtoja periaatteessa yksinkertaisen ongelman ratkaisuun: millä ja mihin tiedostomuotoon kirjoitan satunnaiset lappuseni?

Lähtökohta: WYSIWYG-dokumentit

WYSIWYG1 on yhteinen nimitys sille paradigmalle, jossa esitetään dokumentti näytöllä samassa muodossa, kuin miltä se oletettavasti näyttää lopputuloksessa. Lopputuloksena voidaan pitää paperitulostetta, www-sivua, tai sitä, mitä kaverin koneessa pomppaa näytölle, kun hän avaa dokumentin.
1 What You See Is What You Get

WYSIWYG-ohjelmiksi kutsutaan ohjelmia, joissa dokumentteja työstetään tällä tavoin. Joihinkin ongelmiin WYSIWYG-ohjelmat ovat lähes ainoa järkevä ratkaisu: näitä ovat esimerkiksi lentolehtisten tai mainosten suunnittelu, jossa on paljon graafista sisältöä ja visuaalisten elementtien asettelu on tarkkaa. Mutta tähän WYSIWYG-ohjelmien hyvä käyttö suunnilleen jääkin.

WYSIWYG-dokumenttien on todettu vääristävän ihmisten ajattelua tavattoman monella tavalla:

  1. ne käyttävät tyypillisesti tiedostomuotoja, jotka vaihtelevat vähän väliä (tyypillisesti aina, kun päivittää tekstinkäsittelyohjelman, se käyttää jo uutta tiedostomuotoa), aiheuttavat mystisiä yhteensopimattomuusongelmia ja pakottavat organisaatiot valitsemaan yhden WYSIWYG-työkalun monien joukosta, jottei organisaation sisäisessä viestinnässä jouduttaisi koko ajan tappelemaan muunnosten (konversioiden) kanssa;
  2. ne luovat ihmisille illuusion siitä, että WYSIWYG-dokumentti voi sisältää tarpeeksi tietoa näytettäväksi missä tahansa ympäristössä. Tämä tuottaa ongelmia esimerkiksi www-sivujen tuottotyökalujen kanssa, kun sivujen tuottajat eivät käsitä, että lukijoilla voi olla eri selain, erikokoinen näyttö, erilaiset väriasetukset, erilainen kirjasinvalikoima, tai voidaanpa sivuja lukea jollain täysin epävisuaalisellakin, esim. puhesynteesiselaimella;
  3. ne pakottavat ihmiset tekemään vähän väliä muotoiluja (lihavointeja, kursivointeja, kirjasinkoon muutoksia) tekstiin, jos sille haluaa jotain rakennetta. Tämä häiritsee ihmisten keskittymistä tekstin sisältöön, varsinaiseen asiaan. Lisäksi tämä estää tuottamasta dokumentista muotoilultaan erilaisia versioita, koska dokumentissa ei ole riittävästi tietoa esimerkiksi sen koneelliseen arvaamiseen, mikä on otsikko, jos otsikkojen ulkonäköä päättää joskus muuttaa;
  4. ne houkuttelevat ihmisiä pelleilemään dokumentin ulkonäöllä: tekemään dokumentteja, jotka luovasti poikkeavat perinteistä tekstin asettelun, muotoilun ja järjestelyn suhteen.

Näistä kaikista syistä pitäisi olla ilmeistä, ettei mitään satunnaisia tekstejä tai muistioita pidä koskaan kirjoittaa WYSIWYG-työkaluilla. Tämä on tärkeää sekä oman että lähimmäistenne mielenterveyden ja -selkeyden takia.

Raakateksti

Yleensä ensimmäinen reaktio kaikkeen tähän on mennä suoraan raakatekstin käyttöön tai keskitason semanttisiin merkintäkieliin2. Varsinkin laitoksella, missä on vahvat emacs-perinteet, on paljon ihmisiä, jotka ymmärtävät raakatekstin olemuksen ja kauneuden — mutta löytyy niitäkin, jotka käyttävät mieluummin Windowsin Notepadia kuin Wordia.
2 Näistä puhutaan seuraavassa osiossa enemmän.

Raakateksti, niille, jotka eivät sitä tunne, on tiedostomuoto, jossa jokainen dokumentti on jono merkkejä. Muotoiluja on sen verran, että tietty merkki tarkoittaa rivinvaihtoa (siis uuden rivin aloitusta) tekstissä ja lisäksi on toinen merkki, jolla voi merkitä sarkainvaihtoja (tämä tab-merkki toimii yleensä kuten kirjoituskoneiden tab, eli kohdentaa tekstin jatkumaan seuraavasta 8:lla jaollisesta merkkisarakkeesta). Paljon muuta ei sitten olekaan. Ei lihavointeja, ei kappalevaihtoja (muuta kuin kaksi peräkkäistä rivinvaihtoa), ei kirjasimen vaihdoksia, ei alaviitteitä eikä mitään muutakaan. Raakateksti on tiedostomuotona pysynyt jotakuinkin muuttumattomana 70-luvulta lähtien.

Raakateksti on itse asiassa erittäin hyvä muoto kaikenlaiselle kirjoitukselle. Esimerkiksi sähköpostin pitkä perinne raakatekstimuotoisena3 osoittaa, että mitä raakatekstillä ei voi tehdä, sitä ei tarvita. Vuosien aikana on kehittynyt tavaton määrä käytäntöjä, miten erilaisia asioita voi ilmaista raakatekstissä: korostus *tähdillä* sanan ympärillä, listat ranskalaisilla viivoilla, ja niin edelleen.
3 ennen kuin HTML-muotoista sähköpostia alkoi tunkea joka paikasta.

Joitain ongelmia raakatekstissä kuitenkin on. Mitä, jos haluan tulostaa dokumenttini, ja haluan sinne korostuksia? Mitä, jos muistiinpanoistani kasvaa artikkeli: eikö olisi kannattanut kirjoittaa se julkaisukelpoiseen muotoon alusta lähtien? Mitä, jos haluaisin raakatekstistäni www-sivun? Näihin ongelmiin yksi vastaus on seuraavassa osiossa.

Keskitason semanttiset merkintäkielet

Keskitason semanttisilla merkintäkielillä tarkoitetaan tiedostomuotoja, johon on jollain standardilla tavalla merkitty eri tekstiosioiden typografinen merkitys: esimerkiksi tässä on kappale, tuossa on lista, tämä on otsikko, tuo on huomautus. Yleensä nämä merkinnät tekstiosioiden merkityksistä ovat tekstin joukossa, mistä tuleekin nimitys merkintäkieli (markup language). Esimerkkejä keskitason semanttisista merkintäkielistä ovat HTML, XHTML, LaTeX, ms-makrot, DocBook jne. Myös jotkin WYSIWYG-ohjelmat4 antavat mahdollisuuden keskitason semanttisiin muotoiluihin; toinen asia on, älyävätkö käyttäjät käyttää näitä mahdollisuuksia.
4 esimerkiksi MS Word ja Openoffice.org

Esimerkiksi HTML on itse asiassa aika hyvä muoto kirjoittaa dokumenttinsa suoraan. HTML:n tuottoon ei saa käyttää WYSIWYG-työkaluja, koska silloin ei voi tietää, mitä varsinaiseen tiedostoon merkitään tai vastaako se ollenkaan tekstin todellista rakennetta. LaTeX on erinomainen merkintäkieli, jos aikoo tehdä vakavasti otettavia tieteellisiä julkaisuja. Molemmissa on itse asiassa aika matala oppimiskynnys (varsinkin, jos on tottunut käsittelemään raakatekstiä), ja molempia on melko miellyttävää lukea sellaisinaan (siis raakatekstinä).

Ongelmiakin on. Vaikka oppimiskynnys on matalahko, se on kuitenkin olemassa, eikä kaikilla ole aikaa vaivata päätään tällaisella. Lisäksi merkinnöissä voi tehdä virheitä, jolloin dokumentti saattaa näyttää väärältä prosessoidessa tai dokumentin prosessointijärjestelmä (esim. latex-komento) kieltäytyy kokonaan dokumentin käsittelemisestä ja jättää käyttäjän metsästämään paikkaa, jossa virhe piilee. HTML on myös sikäli ongelmallinen merkintäkieli, että sen laajentaminen omilla merkinnöillä (jos joskus sattuisi moisia tarvitsemaan) ei ole mahdollista, sillä HTML on laaja ja hitaasti kehittyvä standardi. Lisäksi näiden tiedostomuotojen muuntaminen toisikseen tai paperille tulostetuiksi dokumenteiksi (ylipäänsä mihinkään, mikä ei ole niiden primäärinen media) jättää joskus toivomisen varaa lopputuloksen tyylikkyydessä ja huolitelluudessa.

Korkean tason semanttiset merkintäkielet

On ehkä myös syytä sanoa sananen korkean tason semanttisista merkintäkielistä. Nämä ovat kieliä, joissa on merkitty, mitä dokumentissa oleva teksti oikeasti tarkoittaa tai on. Esimerkiksi, sen sijaan että merkinnöissä sanottaisiin, että tässä on lista ja listassa on tällaiset kohdat, sanotaankin, että tässä on osanottajalista ja listassa on tällaisia nimiä ja tällaisia yhteisöjä. Esimerkkejä korkean tason semanttisista merkintäkielistä ovat erilaiset XML- ja SGML-sovellukset, erilaiset verkkoprotokollat, jne. Myös tietokantojen voi katsoa sisältävän korkean tason semanttista metatietoa 5, vaikkeivät ne merkintäkieliä olekaan.
5 tarkoittaa tietoa tiedosta: siis tietoa siitä, mitä jokin toinen tieto on.

Nämä kielet ovat usein kohdealueen mukaan erikoistuneita, eli suunnilleen jokaiselle tilanteelle elämässä (tai maailmassa) pitää olla oma merkintäkielensä, jolla voidaan merkitä tietoja kyseisestä todellisuuden alueesta. Dokumentit sisältävät yleensä riittävästi tietoa vaikka mihin muunnoksiin ja niistä pystyy tuottamaan kaikenlaisia yhteenvetoja ja muuta, mutta tällainen prosessointi edellyttää ohjelmointityötä ja jo pelkkä merkintäkielen määrittely muistuttaa deklaratiivista ohjelmointia. Suurimpaan osaan normaalielämän tarpeista nämä kielet ovat aivan ylimitoitettuja, ja niiden käyttämisen oppimiskynnys on varsin korkea.

Strukturoitu teksti, vihdoin ja viimein

Strukturoitu teksti on yritys liittää raakatekstin pitkä perinne keskitason semanttisten merkintäkielten hyviin puoliin. Raakatekstin suurimpia rasitteitahan on huono muunnettavuus muihin muotoihin: tiedostomuotoihin tai vaikkapa tyylikkääksi tulosteeksi. Strukturoitu teksti, lyhyesti sanottuna, on raakatekstiä, jossa noudatetaan tiukasti tiettyjä käytäntöjä erilaisten keskitason semanttisten muotoilujen merkitsemisessä. Enimmäkseen nämä merkintätavat tulevat raakatekstin perinteistä; kuitenkin siellä, missä perinteiset muotoilut ovat monitulkintaisia, edellytetään selkeää merkintää siitä, tarkoitetaanko muotoilulla sitä vai tätä.

Esimerkkejä muotoiluista, jotka noudattavat täsmälleen sähköpostiperinteitä, ovat *tähdillä* tehdyt korostukset, kahdella rivinvaihdolla merkityt kappalevaihdot, listat ranskalaisilla viivoilla ja niin edelleen. Esimerkkejä rakenteista, joita on täytynyt yksiselitteistää, ovat:

otsikot
vanhastaan merkitty panemalla otsikko omalle rivilleen, jota edeltää ja seuraa tyhjä rivi. Seuraava rivi on saattanut sisältää viivoja ikään kuin alleviivaukseksi otsikolle. Strukturoidussa tekstissä otsikko merkitään aloittamalla rivi huutomerkillä.
termi-määrittelylistat (kuten tämä tässä)
vanhastaan merkitty sisentämällä määrittelyt. Ei sisällä riittävästi tietoa termin varmaan tunnistamiseen: strukturoidussa tekstissä termi pitää panna omalle linjalleen ja lopettaa linja kahteen kaksoispisteeseen (::).
pakotetut rivinvaihdot
vanhastaan merkitty lisäämällä rivinvaihto. Ei erotettavissa automaattisesti tuotetusta rivinvaihdosta (esim. sähköpostissa rivin vakiopituus on enintään 72 merkkiä, minkä jälkeen viimeistään pitäisi tulla rivinvaihto); strukturoidussa tekstissä merkittävä rivin lopussa kahdella kauttaviivalla (//).

Strukturoitu teksti ei olisi paljon mitään ilman toteutusta, jolla siitä voi tuottaa toisia tiedostomuotoja. Tällainen toteutus on sattumoisin olemassa, kirjoittaja on sattumoisin sen tekijä, ja koska kirjoittaja on myös yleisen kielitieteen ATK-ylläpitäjä, kyseinen ohjelma on sattumoisin asennettuna laitoksen venus-palvelimelle. Ohjelman nimi on stx2any ja siitä saa lisää tietoa komennolla man stx2any.

Nämä ovat tavoitteet, jotka mielessä stx2any on kirjoitettu:

Tällä hetkellä stx2any osaa muuntaa strukturoitua tekstiä HTML-, man- ja LaTeX-muotoon. Uusia tulosmuotoja saatetaan lisätä tulevaisuudessa, mutta saatetaan olla lisäämättäkin, sillä näistä kolmesta muodosta dokumentin voi edelleen muuntaa lähes miksi tahansa maan ja taivaan välillä.

Tämä artikkeli on kirjoitettu strukturoituna tekstinä.

Panu Kalliokoski


Appendix: millä sitä raakatekstiä sitten kirjoitetaan?

Jokaiseen ympäristöön on olemassa joitain ohjelmia, jotka osaavat käsitellä puhdasta raakatekstiä, ja jokaisessa ympäristössä on ainakin jokin sellainen valmiina. Niitä kutsutaan editoreiksi. Joissain ympäristöissä on valmiiksi erittäin hyviä editoreita, joissain taas joutuu näkemään vaivaa hommatakseen kunnollisen. Kirjoittajan kokemus on ensisijaisesti Linux-ympäristöstä, joten tietämys muiden ympäristöjen editoreista on hatarahkoa.

Linux
Hyviä editoreita ovat esim. emacs ja vim, joista jälkemmäisellä on hyvin korkea oppimiskynnys. Muita hyviä editoreita ovat joe ja jed. Kohtalaisia editoreita ovat pico, nano ja uemacs (eli mikroemacs). Useimmiten näistä on monia valmiiksi asennettuina.
Windows
Välttävä editori on Windowsin NotePad. WordPad ei tuota kunnon raakatekstiä. Parempiakin editoreita on saatavilla, esim. EditPad, mutta kirjoittaja ei tiedä näistä tarpeeksi.
Macintosh
Ainakin jossain vaiheessa jokaisen macin mukana tuli AppleScript joku-joku, joka oli varsin hyvä editori. Myös järjestelmän Teksturi II tuottaa hyvää raakatekstiä, vaikka onkin orientoitunut jonkin verran WYSIWYG-suuntaan. Teksturia ei pidä käyttää, sillä on vakavia kokorajoituksia dokumenteille. Hyviä editoreita on ainakin BBEdit (Lite) ja muistaakseni Alpha-niminen editori.
KDE
Kohtalainen editori on KEdit ja kunnollinen Kate. Tietysti voi myös käyttää alla olevan järjestelmän editoreita.

Tämä artikkeli on kirjoitettu vim:lla Linux-ympäristössä.