Vapaa ja avoin toimisto-ohjelmisto

XML-asiakirjat » Esimerkki 2: syöttökenttien kerääminen

Esimerkki 2: lomakkeen syöttökenttien kerääminen

Syöttökentät ovat eräs tapa toteuttaa lomakkeita. Tässä yksinkertaisessa esimerkissä kerätään OpenDocument-muotoisesta tekstiasiakirjasta kaikkien syöttökenttien sisältämät tiedot ja tulostetaan ne HTML-muodossa.

Ohjelma kerää syöttökentät mistä tahansa tiedostosta, ei vain lomakkeesta. Alempana toinen esimerkki kenttien keräämisestä aidosta lomake.fi-palvelun tarjoamasta Microsoft Word -lomakkeesta.

Oletetaan, että käyttäjä on täyttänyt tyhjän lomakkeen ja saanut aikaiseksi täytetyn lomakkeen.

Lomakkeessa on syöttökenttiä, jotka on nimetty k_sukunimi, k_etunimet, ja niin edelleen.

XSLT-ohjelma (eli muunnin tai "tyylisivu") on seuraavanlainen. Alussa on nimialueiden määrittelyjen vakio-osa, jonka jälkeen tulee tulosmuodon määrittely (HTML) ja lopulta kolme muunnossääntöä.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- ======================================================================== -->
<!-- OpenDocument-formaatin nimiavaruusmäärittelyt                            -->
<!-- Huomaa, että tähän on otettu mukaan vain ne nimiavaruudet, joita tässä   -->
<!-- muunnoksessa oikeasti käytetään.                                         -->
<!-- ======================================================================== -->
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
  office:version="1.0"
  version="1.0">

  <!-- Määrätään muunnoksen ulostulomuoto ja merkkikoodaus. -->
  <xsl:output method="html" encoding="ISO-8859-1"/>

  <!-- ======================================================================== -->
  <!-- Lue syöttökentän tiedot ja muotoile ne taulukon riviksi                  -->
  <!-- ======================================================================== -->
  <xsl:template match="text:text-input">
    <xsl:if test="normalize-space(.) != ''">
      <tr>
        <td><xsl:value-of select="normalize-space(@text:description)"/>:</td>
        <td><xsl:value-of select="normalize-space(.)"/></td>
      </tr>
    </xsl:if>
  </xsl:template>

  <!-- ======================================================================== -->
  <!-- Juurisolmu                                                               -->
  <!-- ======================================================================== -->
   <xsl:template match="/">
     <body>
       <h2>Lomakeraportti</h2>
       <p>Generoitu täytetyn lomakkeen sisältävästä OASIS OpenDocument -tekstiasiakirjasta.</p>

       <table>
         <tr><th>Tekstikenttä</th><th>Täytetty arvo</th></tr>
         <xsl:apply-templates/>
       </table>
     </body>
   </xsl:template>

  <!-- ======================================================================== -->
  <!-- Karsitaan pois kaikki muut tekstit                                       -->
  <!-- ======================================================================== -->
   <xsl:template match="text()">
   </xsl:template>

</xsl:stylesheet>

XSLT-muunnoksen tekeminen asiakirjalle

XSLT-ohjelman voi asentaa OpenOffice.orgiin vientisuodattimeksi, kuten on kuvattu alempana. Sitä voi kuitenkin käyttää myös OpenOffice.orgin ulkopuolella. Esimerkiksi Linuxissa sitä käytetään komentoriviltä seuraavasti. Puretaan asiakirjasta ensin sen sisältö ja sen jälkeen ajetaan nimellä lomake-tekstiksi.xsl tallennettu XSLT-ohjelma.

$ unzip lomake1.odt content.xml
$ xsltproc lomake-tekstiksi.xsl content.xml

Tällöin saadaan seuraava HTML-muotoinen tulostus:

<body ...nimiavaruusmäärittelyjä...>
<h2>Lomakeraportti</h2>
<p>Generoitu täytetyn lomakkeen sisältävästä OASIS OpenDocument -tekstiasiakirjasta.</p>
<table>
<tr>
<th align="left">Tekstikenttä</th>
<th align="left">Täytetty arvo</th>
</tr>
<tr>
<td>k_sukunimi:</td>
<td>Suuri</td>
</tr>
<tr>
<td>k_etunimet:</td>
<td>Aleksanteri</td>
</tr>
<tr>
<td>k_ammatti:</td>
<td>valloittaja</td>
</tr>
<tr>
<td>k_syntymaaika:</td>
<td>1.4.-390</td>
</tr>
</table>
</body>

Joka siis näyttää tältä:

Lomakeraportti

Generoitu täytetyn lomakkeen sisältävästä OASIS OpenDocument -tekstiasiakirjasta.

Tekstikenttä Täytetty arvo
k_sukunimi: Suuri
k_etunimet: Aleksanteri
k_ammatti: valloittaja
k_syntymaaika: 1.4.-390

Syöttökenttien kerääminen Word-asiakirjasta

Jotkin julkishallinnon lomakkeet ovat edelleen Word-muodossa. Esimerkiksi lomake.fi tarjoaa sellaisia, muttei vielä OpenOffice-muodossa. Näiden lomakkeiden sisältö on kuitenkin helppo muuttaa OpenOffice- tai OpenDocument-muotoon ja käsitellä yllä määritellyllä suodattimella.

Otetaan vaikkapa Yrittäjyys-kokoelmasta lomake Yksityinen elinkeinonharjoittaja, perustamisilmoitus (Word).

Muunnetaan se OpenDocument-muotoon lataamalla se OpenOffice.orgiin Word-tiedostona ja tallentamalla se uudessa muodossa. Suuri määrä Word-asiakirjoja on helposti muunnettavissa .sxw- tai .odt-muotoon OpenOffice.orgin asiakirjamuuntimella. Asiakirjamuunnin käynnistetään valikosta Tiedosto/Ohjattu toiminto/Asiakirjamuunnin.

Lomakeraportti

Generoitu täytetyn lomakkeen sisältävästä OASIS OpenDocument -tekstiasiakirjasta.

Tekstikenttä Täytetty arvo
Teksti6: Munfirma
Teksti217: Joku kiva vaihtoehtonimi
Teksti218: Toinen tosi kiva vaihtoehtoinen nimi
Teksti250: Se kiva kaupunki jossa mä asun
Teksti6: Mycompany
Teksti241: Mycompany
Teksti243: Biznekset ameriikoissa
Teksti242: Blerp
Teksti244: Biznekset ruottissa
Teksti11: Minun yritykseni, Blerp
Teksti217: Risto Reipas
Teksti216: 123456-123a
Teksti239: suomi
Teksti223: Kivakuja 42
: 1
: 2
: 3
: 4
: 5
Teksti224: KAUPUNKILA
Teksti15: Käymälä 3
Teksti16: 12345
Teksti17: KYLÄLÄ
Teksti18: 09-123456
Teksti219: 555-12643
Teksti220: 555-67375
Teksti22: mie@jossain.fi
Teksti222: http://kotskasivu.fi/
Teksti225: 1.1.-31.12
Teksti226: 1.1.2005-31.12.2005
Teksti31: Ei kukkaa
Teksti32: 2783483264783264
Teksti33: Osoitekuja 88
Teksti34: 12345
Teksti35: PAIKKALA
Teksti225: Semmosii bizniksii, tiätsä
Teksti245: Ju nou, juttui
Teksti248: Tahan tuottaminen
Teksti228: ei

(Lomakkeesta oli suurin osa kentistä jätetty täyttämättä.)

Marko Grönroos
magi42@openoffice.org