XML-asiakirjat » XML-sanakirjan tuonti
Esimerkki4 : XML-sanakirja Writer-asiakirjaksi
Tässä esimerkissä muunnetaan XML-muodossa oleva sanakirja
Writer-asiakirjaksi. Tällöin se voidaan viedä edelleen vaikkapa
PDF:ksi (xml-sanakirja.pdf).
XML-asiakirja
Käytämme esimerkkinä seuraavanlaista XML-muodossa olevaa sanakirjaa, joka
esimerkiksi HTML-muotoon muunnettuna näyttää seuraavanlaiselta:
Hakusana | Käännökset |
abbreviate (v) |
lyhentää |
accessibility (s) |
asetukset ja toiminnot, joiden avulla tietokoneen käytöstä tehdään vammaisille helpompaa: esteettömyys (OOo, KDE, Gnome) §, saavutettavuus§, helppokäyttöisyys§ § Vammaisille tarkoitetuissa palveluissa vakiintunut termi. Ei kuitenkaan ole yleisesti tunnettu. §§ Vammaisille tarkoitetuissa palveluissa vähemmän suositeltu termi. §§§ Windowsissa käytetty käännös. Yleisempi ja ymmärrettävämpi kuin oikeampi käännös saavutettavuus. |
table (s) |
1 (tekstinkäsittely, taulukkolaskenta) taulukko, 2 (tietokanta) taulu |
Sanat on jaettu ensinnäkin hakusanoihin (headword), joista voi olla
useita sanaluokan (function) mukaisia muotoja. Merkitystasoja on kaksi
(sense, subsense). Sanakirjan rakenteesta on saatavilla myös tarkempi kuvaus.
<?xml version="1.0" encoding="iso-8859-15" ?>
<dictionary>
<headword>
<entry>abbreviate</entry>
<function type='verb'>
<sense id='1'>
<subsense id='a'>
<translation id='0'>
<translated>lyhentää</translated>
</translation>
</subsense>
</sense>
</function>
</headword>
<headword>
<entry>accessibility</entry>
<function type='noun'>
<sense id='1'>
<subsense id='a'>
<definition>asetukset ja toiminnot, joiden avulla tietokoneen käytöstä tehdään vammaisille helpompaa</definition>
<usage>OOo, KDE, Gnome</usage>
<translation id='0'>
<translated>esteettömyys</translated>
<usage>OOo, KDE, Gnome</usage>
<noteref id='1'/>
</translation>
<translation id='1'>
<translated>saavutettavuus</translated>
<noteref id='1'/>
</translation>
<translation id='2'>
<translated>helppokäyttöisyys</translated>
<noteref id='1'/>
</translation>
</subsense>
</sense>
<notes>
<note id='1'>Vammaisille tarkoitetuissa palveluissa vakiintunut termi. Ei kuitenkaan ole yleisesti tunnettu.</note>
<note id='2'>Vammaisille tarkoitetuissa palveluissa vähemmän suositeltu termi.</note>
<note id='3'>Windowsissa käytetty käännös. Yleisempi ja ymmärrettävämpi kuin oikeampi käännös saavutettavuus.</note>
</notes>
</function>
</headword>
...
<headword>
<entry>table</entry>
<function type='noun'>
<sense id='1'>
<subsense id='a'>
<context>tekstinkäsittely, taulukkolaskenta</context>
<translation id='0'>
<translated>taulukko</translated>
</translation>
</subsense>
</sense>
<sense id='2'>
<subsense id='a'>
<context>tietokanta</context>
<translation id='0'>
<translated>taulu</translated>
</translation>
</subsense>
</sense>
</function>
</headword>
...
</dictionary>
XSLT-muunnin
XSLT-tuontisuodatin muuntaa tuotavan XML-asiakirjan
OpenOffice.org-asiakirjan content.xml-tiedostoksi. Alla oleva
muunnos muuntaa XML-muotoisen sanakirjan OpenOffice.org 1.1 Writer
-asiakirjaksi.
Muunnos koostuu kahdesta pääosasta:
- asiakirjan rungon määrittelystä ja
- eri tyyppisten elementtien muunnoksista.
Rungon määrittelyssä määritellään muun muassa useapalstaisen osan
tyyli. Muunnoksen loppuosa koostuu erilaisten alirakenteiden
muunnoksista.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:office="http://openoffice.org/2000/office"
xmlns:style="http://openoffice.org/2000/style"
xmlns:text="http://openoffice.org/2000/text"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
office:class="text"
office:version="1.0"
version="1.0">
<xsl:output indent="yes" encoding="UTF-8"/>
<!-- ============================================================================ -->
<!-- Asiakirjan runko. -->
<!-- ============================================================================ -->
<xsl:template match="/">
<office:document>
<office:automatic-styles>
<!-- Osatyyli -->
<style:style style:name="Sect1" style:family="section">
<style:properties text:dont-balance-text-columns="false">
<style:columns fo:column-count="3" fo:column-gap="0.198cm">
<style:column style:rel-width="3193*" fo:margin-left="0cm" fo:margin-right="0.099cm"/>
<style:column style:rel-width="3250*" fo:margin-left="0.099cm" fo:margin-right="0.099cm"/>
<style:column style:rel-width="3194*" fo:margin-left="0.099cm" fo:margin-right="0cm"/>
</style:columns>
</style:properties>
</style:style>
</office:automatic-styles>
<office:body>
<!-- Otsikko -->
<text:h text:level="1" text:style-name="Heading 1">
<xsl:text>Sanakirja</xsl:text>
</text:h>
<!-- Esittelyteksti -->
<text:p text:style-name="Text body">
<xsl:text>Tämä on omassa XML-formaatissa olevasta
sanakirjasta tuotu Writer-asiakirja.</xsl:text>
</text:p>
<!-- Rekursio -->
<text:section text:style-name="Sect1" text:name="Osa1">
<xsl:apply-templates select="dictionary/headword/function"/>
</text:section>
<text:p text:style-name="Text body"></text:p>
<text:p text:style-name="Text body">
<xsl:text>Marko Grönroos, 2003-2005. Kopiointi ja
tulostaminen sallittu henkilökohtaiseen käyttöön.</xsl:text>
</text:p>
</office:body>
</office:document>
</xsl:template>
<!-- ============================================================================ -->
<!-- Yhden hakusanan tiedot -->
<!-- ============================================================================ -->
<xsl:template match="headword/function">
<text:p text:style-name="Sana">
<!-- Hakusana -->
<text:span text:style-name="Hakusana">
<xsl:value-of select="../entry"/>
</text:span>
<xsl:text> </xsl:text>
<text:span text:style-name="Sanaluokka">
<xsl:choose>
<xsl:when test="@type = 'verb'"><xsl:text>v</xsl:text></xsl:when>
<xsl:when test="@type = 'noun'"><xsl:text>s</xsl:text></xsl:when>
<xsl:when test="@type = 'adj'"><xsl:text>a</xsl:text></xsl:when>
</xsl:choose>
</text:span>
<xsl:text> </xsl:text>
<xsl:apply-templates select="sense"/>
<xsl:apply-templates select="notes"/>
</text:p>
</xsl:template>
<xsl:template match="sense">
<text:span text:style-name="Merkitys">
<xsl:value-of select="@id"/>
<xsl:text> </xsl:text>
</text:span>
<xsl:apply-templates select="subsense"/>
</xsl:template>
<xsl:template match="subsense">
<xsl:if test="count(../subsense) > 1">
<text:span text:style-name="Alamerkitys">
<xsl:value-of select="@id"/>
<xsl:text> </xsl:text>
</text:span>
</xsl:if>
<xsl:apply-templates select="context"/>
<xsl:apply-templates select="definition"/>
<xsl:apply-templates select="translation"/>
</xsl:template>
<xsl:template match="context|usage">
<xsl:text> (</xsl:text>
<text:span text:style-name="Default">
<xsl:value-of select="."/>
</text:span>
<xsl:text>) </xsl:text>
</xsl:template>
<xsl:template match="definition">
<xsl:text> </xsl:text>
<text:span text:style-name="Default">
<xsl:value-of select="."/>
</text:span>
<xsl:text>. </xsl:text>
</xsl:template>
<xsl:template match="definition">
<xsl:text> </xsl:text>
<text:span text:style-name="Default">
<xsl:value-of select="."/>
</text:span>
<xsl:text>; </xsl:text>
</xsl:template>
<!-- ============================================================================ -->
<!-- Käännökset (translation) -->
<!-- ============================================================================ -->
<xsl:template match="translation">
<xsl:apply-templates select="context"/>
<xsl:apply-templates select="usage"/>
<xsl:apply-templates select="translated"/>
<xsl:apply-templates select="ref"/>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="translated">
<xsl:text> </xsl:text>
<text:span text:style-name="Default">
<xsl:value-of select="."/>
</text:span>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="ref">
<xsl:text>; ks. </xsl:text>
<text:span text:style-name="Viittaus">
<xsl:value-of select="."/>
</text:span>
</xsl:template>
<!-- ============================================================================ -->
<!-- Huomautukset (notes) -->
<!-- ============================================================================ -->
<xsl:template match="notes">
<xsl:if test="count(note) > 0">
<text:span text:style-name="Huomautusotsikko">
<xsl:text> Huomautuksia: </xsl:text>
</text:span>
<xsl:apply-templates select="note"/>
</xsl:if>
</xsl:template>
<xsl:template match="note">
<text:span text:style-name="Huomautusmerkki">
<xsl:value-of select="substring('§§§§§§§§§', 1, number(@id))"/>
</text:span>
<xsl:text> </xsl:text>
<text:span text:style-name="Huomautus">
<xsl:value-of select="."/>
</text:span>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Tuontisuodattimen malliasiakirja
Malliasiakirjassa (sanakirja-malli.stw) on määritelty sanakirjan vaatimat kappale- ja
merkkityylit. Esimerkiksi headword-elementti sisältö
muunnetaan Sana-tyyliseksi kappaleeksi ja sen alaelementit
merkkityyleiksi. Esimerkiksi entry-elementissä annettava
hakusanan nimi muunnetaan Hakusana-merkkityyliseksi.
Malliasiakirjan sisällöllä ei ole mitään merkitystä ja se
poistetaan tuotaessa. Sitä voi kuitenkin käyttää tyylejä
suunniteltaessa esimerkkinä.
Tuontisuodattimen käyttö
Tuonti voidaan tehdä OpenOffice.orgin sisällä asentamalla
XSLT-muunnin suodattimeksi tai ulkopuolella erillisellä
XSLT-käsittelijällä.
Alla on esitetty tuontisuodattimen avulla tuotu asiakirja:
Asiakirja on nyt helposti vietävissä vaikkapa PDF-formaattiin:
Marko Grönroos magi42@openoffice.org
|