w_title(Strukturoitu teksti -- mit vitun vli 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 trmnnyt joskus hmmentvn ongelmaan:
pit kirjoittaa lappu, muistio, tiedote, pytkirja, muistiinpanoja,
artikkeli, tai jotain muuta tietokoneella.  Suurin osa ihmisist
kummempia ajattelematta avaa tekstinksittelyohjelman ("Mill muulla
niit sitten voi kirjoittaa?") tai jotkut PIM:n (/personal information
manager/, eli siis henkilkohtainen tiedonhallintaohjelma).  Tm on
"ihan hyv" lhestymistapa, mutta jokainen, joka on joskus yrittnyt
siirt kaikki vanhat dokumenttinsa uuteen ympristn (uudelle
koneelle, uuteen kyttjrjestelmn tai edes vain uudelle versiolle
tekstinksittelyohjelmaa), tiet, mik tuska tst voi seurata.  Tss
artikkelissa on tarkoitus kartoittaa vaihtoehtoja periaatteessa
yksinkertaisen ongelman ratkaisuun: mill ja mihin tiedostomuotoon
kirjoitan satunnaiset lappuseni?

! Lhtkohta: WYSIWYG-dokumentit

WYSIWYG[[ "What You See Is What You Get" ]] on yhteinen nimitys sille
paradigmalle, jossa esitetn dokumentti nytll samassa muodossa, kuin
milt se oletettavasti nytt "lopputuloksessa".  Lopputuloksena
voidaan pit paperitulostetta, ''www''-sivua, tai sit, mit kaverin
koneessa pomppaa nytlle, kun hn avaa dokumentin.

WYSIWYG-ohjelmiksi kutsutaan ohjelmia, joissa dokumentteja tystetn
tll tavoin.  Joihinkin ongelmiin WYSIWYG-ohjelmat ovat lhes ainoa
jrkev ratkaisu: nit ovat esimerkiksi lentolehtisten tai mainosten
suunnittelu, jossa on paljon graafista sislt ja visuaalisten
elementtien asettelu on tarkkaa.  Mutta thn WYSIWYG-ohjelmien "hyv
kytt" suunnilleen jkin.

WYSIWYG-dokumenttien on todettu vristvn ihmisten ajattelua
tavattoman monella tavalla:

 # ne kyttvt tyypillisesti tiedostomuotoja, jotka vaihtelevat vhn
   vli (tyypillisesti aina, kun pivitt tekstinksittelyohjelman, se
   kytt jo uutta tiedostomuotoa), aiheuttavat mystisi
   yhteensopimattomuusongelmia ja pakottavat organisaatiot valitsemaan
   yhden WYSIWYG-tykalun monien joukosta, jottei organisaation
   sisisess viestinnss jouduttaisi koko ajan tappelemaan muunnosten
   (/konversioiden/) kanssa;
 # ne luovat ihmisille illuusion siit, ett WYSIWYG-dokumentti voi
   sislt tarpeeksi tietoa nytettvksi miss tahansa ympristss.
   Tm tuottaa ongelmia esimerkiksi ''www''-sivujen tuottotykalujen
   kanssa, kun sivujen tuottajat eivt ksit, ett lukijoilla voi olla
   eri selain, erikokoinen nytt, erilaiset vriasetukset, erilainen
   kirjasinvalikoima, tai voidaanpa sivuja lukea jollain tysin
   epvisuaalisellakin, esim. puhesynteesiselaimella;
 # ne pakottavat ihmiset tekemn vhn vli muotoiluja (lihavointeja,
   kursivointeja, kirjasinkoon muutoksia) tekstiin, jos sille haluaa
   jotain rakennetta.  Tm hiritsee ihmisten keskittymist tekstin
   sisltn, varsinaiseen asiaan.  Lisksi tm est tuottamasta
   dokumentista muotoilultaan erilaisia versioita, koska dokumentissa ei
   ole riittvsti tietoa esimerkiksi sen koneelliseen arvaamiseen, mik
   on otsikko, jos otsikkojen ulkonk ptt joskus muuttaa;
 # ne houkuttelevat ihmisi pelleilemn dokumentin ulkonll: tekemn
   dokumentteja, jotka "luovasti" poikkeavat perinteist tekstin
   asettelun, muotoilun ja jrjestelyn suhteen.

Nist kaikista syist pitisi olla ilmeist, ettei _mitn_ satunnaisia
tekstej tai muistioita pid koskaan kirjoittaa WYSIWYG-tykaluilla.
Tm on trke sek oman ett lhimmistenne mielenterveyden ja
-selkeyden takia.

! Raakateksti

Yleens ensimminen reaktio kaikkeen thn on menn suoraan raakatekstin
kyttn tai keskitason semanttisiin merkintkieliin[[ Nist puhutaan
seuraavassa osiossa enemmn. ]].  Varsinkin laitoksella, miss on vahvat
''emacs''-perinteet, on paljon ihmisi, jotka ymmrtvt raakatekstin
olemuksen ja kauneuden -- mutta lytyy niitkin, jotka kyttvt
mieluummin Windowsin Notepadia kuin Wordia.

"Raakateksti", niille, jotka eivt 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 lisksi on toinen merkki, jolla voi merkit sarkainvaihtoja
(tm ''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 perkkist rivinvaihtoa), ei
kirjasimen vaihdoksia, ei alaviitteit eik mitn muutakaan.
Raakateksti on tiedostomuotona pysynyt jotakuinkin muuttumattomana
70-luvulta lhtien.

Raakateksti on itse asiassa erittin hyv muoto kaikenlaiselle
kirjoitukselle.  Esimerkiksi shkpostin pitk perinne
raakatekstimuotoisena[[ ennen kuin HTML-muotoista shkpostia alkoi
tunkea joka paikasta. ]] osoittaa, ett "mit raakatekstill ei voi
tehd, sit ei tarvita".  Vuosien aikana on kehittynyt tavaton mr
kytntj, miten erilaisia asioita voi ilmaista raakatekstiss:
korostus `*'thdill`*' sanan ymprill, 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 lhtien?  Mit, jos haluaisin
raakatekstistni ''www''-sivun?  Nihin ongelmiin yksi vastaus on
seuraavassa osiossa.

! Keskitason semanttiset merkintkielet

Keskitason semanttisilla merkintkielill tarkoitetaan tiedostomuotoja,
johon on jollain standardilla tavalla merkitty eri tekstiosioiden
typografinen merkitys: esimerkiksi "tss on kappale, tuossa on lista,
tm on otsikko, tuo on huomautus".  Yleens nm merkinnt
tekstiosioiden merkityksist ovat tekstin joukossa, mist tuleekin
nimitys "merkintkieli" (/markup language/).  Esimerkkej keskitason
semanttisista merkintkielist ovat HTML, XHTML, LaTeX, ms-makrot,
DocBook jne.  Mys jotkin WYSIWYG-ohjelmat[[ esimerkiksi MS Word ja
Openoffice.org ]] antavat mahdollisuuden keskitason semanttisiin
muotoiluihin; toinen asia on, lyvtk kyttjt kytt nit
mahdollisuuksia.

Esimerkiksi HTML on itse asiassa aika hyv muoto kirjoittaa
dokumenttinsa suoraan.  HTML:n tuottoon ei saa kytt
WYSIWYG-tykaluja, koska silloin ei voi tiet, mit varsinaiseen
tiedostoon merkitn tai vastaako se ollenkaan tekstin todellista
rakennetta.  LaTeX on erinomainen merkintkieli, jos aikoo tehd
vakavasti otettavia tieteellisi julkaisuja.  Molemmissa on itse asiassa
aika matala oppimiskynnys (varsinkin, jos on tottunut ksittelemn
raakateksti), ja molempia on melko miellyttv lukea sellaisinaan
(siis raakatekstin).

Ongelmiakin on.  Vaikka oppimiskynnys on matalahko, se on kuitenkin
olemassa, eik kaikilla ole aikaa vaivata ptn tllaisella.  Lisksi
merkinniss voi tehd virheit, jolloin dokumentti saattaa nytt
vrlt prosessoidessa tai dokumentin prosessointijrjestelm (esim.
''latex''-komento) kieltytyy kokonaan dokumentin ksittelemisest ja
jtt kyttjn metsstmn paikkaa, jossa virhe piilee.  HTML on mys
sikli ongelmallinen merkintkieli, ett sen laajentaminen omilla
merkinnill (jos joskus sattuisi moisia tarvitsemaan) ei ole
mahdollista, sill HTML on laaja ja hitaasti kehittyv standardi.
Lisksi niden tiedostomuotojen muuntaminen toisikseen tai paperille
tulostetuiksi dokumenteiksi (ylipns mihinkn, mik ei ole niiden
primrinen media) jtt joskus toivomisen varaa lopputuloksen
tyylikkyydess ja huolitelluudessa.

! Korkean tason semanttiset merkintkielet

On ehk mys syyt sanoa sananen korkean tason semanttisista
merkintkielist.  Nm ovat kieli, joissa on merkitty, mit
dokumentissa oleva teksti oikeasti _tarkoittaa_ tai _on_.  Esimerkiksi,
sen sijaan ett merkinniss sanottaisiin, ett tss on lista ja
listassa on tllaiset kohdat, sanotaankin, ett tss on osanottajalista
ja listassa on tllaisia nimi ja tllaisia yhteisj.  Esimerkkej
korkean tason semanttisista merkintkielist ovat erilaiset XML- ja
SGML-sovellukset, erilaiset verkkoprotokollat, jne.  Mys tietokantojen
voi katsoa sisltvn korkean tason semanttista /metatietoa/
[[ tarkoittaa tietoa tiedosta: siis tietoa siit, mit jokin toinen
tieto on. ]], vaikkeivt ne merkintkieli olekaan.

Nm kielet ovat usein kohdealueen mukaan erikoistuneita, eli
suunnilleen jokaiselle tilanteelle elmss (tai maailmassa) pit olla
oma merkintkielens, jolla voidaan merkit tietoja kyseisest
todellisuuden alueesta.  Dokumentit sisltvt yleens riittvsti
tietoa vaikka mihin muunnoksiin ja niist pystyy tuottamaan kaikenlaisia
yhteenvetoja ja muuta, mutta tllainen prosessointi edellytt
ohjelmointityt ja jo pelkk merkintkielen mrittely muistuttaa
deklaratiivista ohjelmointia.  Suurimpaan osaan normaalielmn tarpeista
nm kielet ovat aivan ylimitoitettuja, ja niiden kyttmisen
oppimiskynnys on varsin korkea.

! Strukturoitu teksti, vihdoin ja viimein

Strukturoitu teksti on yritys liitt raakatekstin pitk perinne
keskitason semanttisten merkintkielten hyviin puoliin.
Raakatekstin suurimpia rasitteitahan on huono muunnettavuus muihin
muotoihin: tiedostomuotoihin tai vaikkapa tyylikkksi tulosteeksi.
Strukturoitu teksti, lyhyesti sanottuna, on raakateksti, jossa
noudatetaan tiukasti tiettyj kytntj erilaisten keskitason
semanttisten muotoilujen merkitsemisess.  Enimmkseen nm
merkinttavat tulevat raakatekstin perinteist; kuitenkin siell, miss
perinteiset muotoilut ovat monitulkintaisia, edellytetn selke
merkint siit, tarkoitetaanko muotoilulla sit vai tt.

Esimerkkej muotoiluista, jotka noudattavat tsmlleen
shkpostiperinteit, ovat `*'thdill`*' tehdyt korostukset, kahdella
rivinvaihdolla merkityt kappalevaihdot, listat ranskalaisilla viivoilla
ja niin edelleen.  Esimerkkej rakenteista, joita on tytynyt
yksiselitteist, ovat:

otsikot::
	vanhastaan merkitty panemalla otsikko omalle rivilleen, jota
	edelt ja seuraa tyhj rivi.  Seuraava rivi on saattanut
	sislt viivoja ikn kuin "alleviivaukseksi" otsikolle.
	Strukturoidussa tekstiss otsikko merkitn aloittamalla rivi
	huutomerkill.
termi-mrittelylistat (kuten tm tss)::
	vanhastaan merkitty sisentmll mrittelyt.  Ei sisll
	riittvsti tietoa termin varmaan tunnistamiseen:
	strukturoidussa tekstiss termi pit panna omalle linjalleen ja
	lopettaa linja kahteen kaksoispisteeseen (''::'').
pakotetut rivinvaihdot::
	vanhastaan merkitty lismll rivinvaihto.  Ei erotettavissa
	automaattisesti tuotetusta rivinvaihdosta (esim. shkpostissa
	rivin vakiopituus on enintn 72 merkki, mink jlkeen
	viimeistn pitisi tulla rivinvaihto); strukturoidussa
	tekstiss merkittv rivin lopussa kahdella kauttaviivalla
	(''//'').

Strukturoitu teksti ei olisi paljon mitn ilman toteutusta, jolla siit
voi tuottaa toisia tiedostomuotoja.  Tllainen toteutus on sattumoisin
olemassa, kirjoittaja on sattumoisin sen tekij, ja koska kirjoittaja on
mys yleisen kielitieteen ATK-yllpitj, kyseinen ohjelma on
sattumoisin asennettuna laitoksen ''venus''-palvelimelle.  Ohjelman nimi
on ''stx2any'' ja siit saa lis tietoa komennolla ''man stx2any''.

Nm ovat tavoitteet, jotka mieless ''stx2any'' on kirjoitettu:

 - Lhdemuodon (strukturoidun tekstin) tulee olla vaivatonta oppia,
   tiivist ja kaunista luettavaa sellaisenaan (siis raakatekstin).
 - Snnstn pit olla varsin voimakas, eli strukturoituna tekstin
   pit voida esitt paljon ja monimutkaisia asioita.
 - Lhdemuodon pit olla laajennettavissa sek siten, ett siihen voi
   list omia merkintj, ett siten, ett sen sekaan voi kirjoittaa
   suoraan kohdemuodon (HTML tms.) merkintj.
 - Strukturoidusta tekstist tuotettujen kohdemuotoisten dokumenttien
   tulee olla tyylikkit, kohdemuodolle ominaisia (esim. HTML-tulosteen
   pit nytt ''www''-sivulta eik paperidokumentin
   ''www''-versiolta), ja silytt suunnilleen alkuperisen dokumentin
   ulkonk.
 - Kohdemuotoisen dokumentin tulee olla kohtalaisen siisti mys
   sisisesti, eli konversion tulokseen ei saa pty hirve mr
   kummallista moskaa (fonttimrityksi tms.).  Lisksi tuloksen tulee
   sislt sen verran alkuperisen dokumentin asettelusta kuin
   mahdollista, jotta sit on miellyttv lukea mys
   sellaisenaan (raakatekstin).

Tll hetkell ''stx2any'' osaa muuntaa strukturoitua teksti HTML-,
man- ja LaTeX-muotoon.  Uusia tulosmuotoja saatetaan list
tulevaisuudessa, mutta saatetaan olla lismttkin, sill nist
kolmesta muodosta dokumentin voi edelleen muuntaa lhes miksi tahansa
maan ja taivaan vlill.

Tm artikkeli on kirjoitettu strukturoituna tekstin.

w_link(mailto:pkalliok@ling.helsinki.fi, Panu Kalliokoski)

----

! Appendix: mill sit raakateksti sitten kirjoitetaan?

Jokaiseen ympristn on olemassa joitain ohjelmia, jotka osaavat
ksitell puhdasta raakateksti, ja jokaisessa ympristss on ainakin
jokin sellainen valmiina.  Niit kutsutaan /editoreiksi/.  Joissain
ympristiss on valmiiksi erittin hyvi editoreita, joissain taas
joutuu nkemn vaivaa hommatakseen kunnollisen.  Kirjoittajan kokemus
on ensisijaisesti ''Linux''-ympristst, joten tietmys muiden
ympristjen editoreista on hatarahkoa.

Linux::
	Hyvi editoreita ovat esim. ''emacs'' ja ''vim'', joista
	jlkemmisell on hyvin korkea oppimiskynnys.  Muita hyvi
	editoreita ovat ''joe'' ja ''jed''.  Kohtalaisia editoreita ovat
	''pico'', ''nano'' ja ''uemacs'' (eli "mikroemacs").  Useimmiten
	nist on monia valmiiksi asennettuina.
Windows::
	Vlttv editori on Windowsin NotePad.  WordPad ei tuota kunnon
	raakateksti.  Parempiakin editoreita on saatavilla, esim.
	EditPad, mutta kirjoittaja ei tied nist tarpeeksi.
Macintosh::
	Ainakin jossain vaiheessa jokaisen macin mukana tuli AppleScript
	joku-joku, joka oli varsin hyv editori.  Mys jrjestelmn
	Teksturi II tuottaa hyv raakateksti, vaikka onkin
	orientoitunut jonkin verran WYSIWYG-suuntaan.  Teksturia ei pid
	kytt, 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
	mys kytt alla olevan jrjestelmn editoreita.

Tm artikkeli on kirjoitettu ''vim'':lla ''Linux''-ympristss.

