Yliopiston etusivulle In English
Helsingin yliopisto
Kielenkäsittelyn ATK-palvelut

Yhteystiedot

Yleisen kielitieteen laitos
PL 9 (Siltavuorenpenger 20 A)
00014 HELSINGIN YLIOPISTO

Puhelin +358 (09) 1911 (vaihde)
Faksi +358 (09) 191 29307

XHTML- ja XSL-tiedostojen ylläpito Emacsin nXML-moodia käyttäen

Yleiskäyttöiseen Emacs-editoriin on muutamia lisäosia eli moodeja XML-muotoisten tiedostojen editointia varten. Tässä kuvattu uusi tulokas nXML-moodi näyttäisi soveltuvan erityisen hyvin XHTML- ja XSL-tiedostojen laatimiseen ja muokkaamiseen niille, jotka muutenkin ovat tottuneita tai valmiita käyttämään Emacsia.

UHL-Linuxin Emacsissa on valmiiksi mukana nXML-moodi, joka aktivoituu, kun ottaa käyttöön tiedoston, jonka nimen loppuliitteenä on .xhtml . Manuaalisesti moodi aktivoidaan komennolla M-x nxml-mode .

nXML-moodista kuten Emacsin muistakin moodeista saa dokumentaatiota näkyville, kun puskuri on siinä moodissa ja suorittaa C-h m (describe-mode) -komennon. Tätä suositellaan jokaiselle uudelle käyttäjälle.

Pikaohje nXML-moodille

Yleisesti ottaen nXML-moodissa voidaan kirjoittaa ja editoida miten vain, myös lisätä ja poistaa merkkejä < ja >, mutta esim. alkioiden loppumerkintää ei pitäisi yleensä koskaan tehdä kirjoittamalla esim. </p> vaan käyttää seuraavassa esiteltyjä komentoja:

C-c C-b
Kaytetään, kun on kirjoitettu alkion alkumerkkausesta pienempi kuin -merkki ja alkion nimi, esim. <p; ja silloin Emacs täydentää merkkauksen alku- ja loppumerkinnät, sijoittaa ne eri riveille ja vie kohdistimen näiden väliin omalle rivilleen. Tätä komentoa käytetään erityisesti alkioille p, ul, ol, dl, li jne.
C-c C-i
Kaytetään, kun on kirjoitettu alkion alkumerkkausesta pienempi kuin -merkki ja alkion nimi, esim. <em; ja silloin Emacs täydentää merkkauksen alku- ja loppumerkinnät ja vie kohdistimen näiden väliin. Tätä komentoa käytetään erityisesti alkioille, joita käytetään juoksevan tekstin seassa tai jotka pysyvät yleensä yhdellä rivillä, siis: a, em, b, strong, h1, h2, dt jne.
C-c C-f
Lisää sisintä auki olevaa alkiota vastaavan loppumerkkauksen kohdistimen kohdalle.
C-c C-n
Etsii seuraavan virheen lähtien siitä, missä kohdistin oli. Kohdistin siirtyy virheen kohdalle tai alas Emacsin ilmoitusriville tulee teksti "No more errors".
TAB ja M-q
Sisennykset menevät tavalliseen tapaan joko automaattisesti tai varta vasten TAB -merkillä. Juoksevan tekstin tasaus suoritetaan M-q (fill-paragraph) -komennolla. Tällöin kuitenkin tasattavan alueen ensimmäisen rivin tulee alkaa oikeasta kohdasta, vrt. yllä mainittu sisentäminen. On suositeltavaa tehdä kappaleet (P) ja listat (UL, OL) yllä mainitulla C-c C-b -komennolla, jolloin niiden sisennys ja tasaaminen ovat luontevia.

Editoinnin kuluessa on syytä tarkkailla kahta asiaa:

  1. Emacsin ikkunan alaosassa olevaa tilariviä, jolla pitäisi yleensä lukea nXML Valid ... Jos siinä lukee Invalid, XML-tiedostossa on syntaksivirhe, joka on korjattava. (Muutosten aikana, tarkistuksen kestäessä tilarivillä lukee tilapäisesti Validated, mutta se korvautuu jommalla kummalla aiemmin mainituista pian.)
  2. Punaista alleviivausta, joka ilmaantuu, jos tekee virheen. Se sijoittuu ensimmäisen virheellisen merkkauksen alle ja poistuu vasta, kun virhe korjataan.

Olemassa olevan XTHML-tiedoston editointi nXML:llä

Oletamme tässä, että Emacs on jo valmiiksi käynnissä.

  • Ladataan editoitava tiedosto esim. komennolla C-x C-f tiedosto.xhtml (find-file), jolloin Emacs kopioi kyseisen tiedoston samannimiseen puskuriin. (Jos kaikki on niin kuin pitää, Emacs ilmoittaa alhaalla olevalla tilarivillä moodiksi nXML.)
  • Koska yleensä verkkosivut ovat versionhallinnassa, on suoritettava C-x v v (checkout), jotta tiedosto saadaan editoitavaksi ja varatuksi yksinomaiseen omaan käyttöön siksi aikaa.
  • Editoidaan yllä olevan pikaohjeen mukaisesti.
  • Talletetaan tiedosto C-x C-s (save-buffer) -komennolla ja tarkistetaan tulos.
  • Jos tulos tarkistettuna oli kunnossa, suoritetaan taas C-x v v (checkin) -komento, joka vapauttaa tiedoston muiden mahdollisten muuttajien saataville.

Uuden XHTML-tiedoston tekeminen nXML:llä

Oletamme tässä, että Emacs on jo valmiiksi käynnissä ja ollaan siinä XML-hakemistossa, jonne tiedosto on tarkoitus tehdä:

  • Komennolla C-x C-f verkkosivu.xhtml (find-file) aloitetaan uusi XHTML-tiedosto, jolloin Emacs perustaa uuden puskurin (buffer) kyseistä tiedostoa varten.
  • Komennolla C-x i skeleton (insert-file) kopioidaan tiedosto skeleton uuteen tiedostoon. Mallitiedosto on XML-hakemistossa sen komennon jäljiltä, jolla alihakemisto tehtiin. (Tiedosto skeleton sisältää alkuriveillään XML:n ja XHTML:n edellyttämiä tunnistetietoja ja TITLE-attribuutissa sivuston nimen.)
  • Editoidaan normaalisti kuten vanhaakin XHTML-tiedostoa, ks. yllä.
  • Talletetaan tiedosto (C-x C-s).

Vertailua nXML:n, PSGML:n ja XSLIDEn kesken

nXML-moodin etuja ja ominaisuuksia ja eroja PSGML:ään ja XSLIDEeen verrattuna ovat mm.:

  • Moodi valvoo luotavan XML-tiedoston oikeellisuutta ja ilmaisee kaiken aikaa, onko tiedosto validi, ja mikäli esiintyy rikkeitä, moodi ilmaisee (punaisella alaviivalla) virheen alun tarkan paikan. Tässä suhteessa nXML on automaattisempi kuin PSGML, jossa täytyy käyttää erillistä C-c C-o -komentoa, ja olennaisesti parempi kuin XSLIDE.
  • PSGML-moodi tukee suoraan perinteistä DTD:tä, mutta ei uudempia skeemoja. Mitään muuta tukea ei ole eikä tarvita PSGML:ssä. XSLIDE tukee vain XSL-tiedostoja. Uusi nXML-moodi tukee mukana tulee valmis tuki XHTML- ja XSL-tiedostoille sekä myös DocBook-muotoisille. Näitä muotoja varten moodi osaa ennustaa, ehdottaa ja täydentääsyntaksin mukaisia alkioiden ja attribuuttien nimiä. PSGML toimii mille tahansa DTD:lle suoraan, nXML edellyttää RELAX-muotoista skeemaa (joko kompaktia tai XML-muotoista). Toisaalta nXML:n mukana tulee trang-niminen Java-ohjelma, jonka avulla DTD:itä ja skeemoja voi muuntaa suoraan muodosta toiseen.
  • Sisennys näyttää toimivan nXML:ssä ongelmattomasti, mutta sekä PSGML että XSLIDE usein epäonnistuvat siinä, kun rakenne käy vähänkään mutkikkaammaksi. Oikea sisennys olisi kuitenkin juuri silloin tärkeä. Lisäksi nXML tasaa alkion samalla M-q-komennolla kuin minkä tahansa kappaleen, siinä missä PSGML:ssä tarvittiin komento C-c C-q.
  • Alkioiden lisääminen tapahtuu nXML:ssä eri tavalla kuin PSGML:ssä. Myös osittain annettujen alkionimien täydennys tehdään nXML:ssä vähän eri tavalla.

Yhteenvetona voi todeta, että siirtyminen PSGML:stä nXML:ään edellyttää tietoista opetteluvaihetta, mutta alle tunnissa kyllä pitäisi olla kotonaan nXML:ssä, jos on ennen käyttänyt PSGML:ää. On huomattava, että muuntyyppisten kuin XHTML- ja XSL-tiedostojen käsittelemiseksi nXML:llä tarvitaan hiukan lisätietoja skeeman tekemiseksi, jos sitä ei ole ennestään tehty. Uusi nXML on kuitenkin uusi ja toistaiseksi aika suppea verrattuna PSGML:ään ja nXML:stä puuttuu koko joukko toimintoja, joita PSGML:ssä on.