w_title(Strukturoitu teksti -- mitä vitun väliä on dokumenttimuodoilla?)dnl
w_author(Panu A. Kalliokoski)dnl
w_date($ $Date: 2004/02/12 16:57:59 $ $)dnl
w_language(finnish)dnl

! 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

WYSIWYG[[ "What You See Is What You Get" ]] 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.

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:

 # 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;
 # 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;
 # 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;
 # 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äkieliin[[ Näistä puhutaan
seuraavassa osiossa enemmän. ]].  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.

"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
raakatekstimuotoisena[[ ennen kuin HTML-muotoista sähköpostia alkoi
tunkea joka paikasta. ]] 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.

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-ohjelmat[[ esimerkiksi MS Word ja
Openoffice.org ]] antavat mahdollisuuden keskitason semanttisiin
muotoiluihin; toinen asia on, älyävätkö käyttäjät käyttää näitä
mahdollisuuksia.

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/
[[ tarkoittaa tietoa tiedosta: siis tietoa siitä, mitä jokin toinen
tieto on. ]], vaikkeivät ne merkintäkieliä olekaan.

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:

 - Lähdemuodon (strukturoidun tekstin) tulee olla vaivatonta oppia,
   tiivistä ja kaunista luettavaa sellaisenaan (siis raakatekstinä).
 - Säännöstön pitää olla varsin voimakas, eli strukturoituna tekstinä
   pitää voida esittää paljon ja monimutkaisia asioita.
 - Lähdemuodon pitää olla laajennettavissa sekä siten, että siihen voi
   lisätä omia merkintöjä, että siten, että sen sekaan voi kirjoittaa
   suoraan kohdemuodon (HTML tms.) merkintöjä.
 - Strukturoidusta tekstistä tuotettujen kohdemuotoisten dokumenttien
   tulee olla tyylikkäitä, kohdemuodolle ominaisia (esim. HTML-tulosteen
   pitää näyttää ''www''-sivulta eikä paperidokumentin
   ''www''-versiolta), ja säilyttää suunnilleen alkuperäisen dokumentin
   ulkonäkö.
 - Kohdemuotoisen dokumentin tulee olla kohtalaisen siisti myös
   sisäisesti, eli konversion tulokseen ei saa päätyä hirveää määrää
   kummallista moskaa (fonttimäärityksiä tms.).  Lisäksi tuloksen tulee
   sisältää sen verran alkuperäisen dokumentin asettelusta kuin
   mahdollista, jotta sitä on miellyttävää lukea myös
   sellaisenaan (raakatekstinä).

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ä.

w_link(mailto:pkalliok@ling.helsinki.fi, 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ä.

