XML-Exporter

Der XML-Exporter unterstützt den Export von PostgreSQL-Datenbanken nach XML. Dabei wird mindestens die PostgreSQL-Version 9.1 vorausgesetzt. Zusammen mit dem Plan-System des Imexporters können jedoch auch komplexere Aufgabenstellungen umgesetzt werden.

Das Beispiel setzt das Problem "Erstelle eine PDF-Datei mit allen freien Bildern aus der easydb" um. Der LaTeX-Quellcode ist dabei aber bewusst einfach gehalten und lässt Platz für Detailverbesserungen.

Aufruf

/opt/easydb/server/bin/imexporter \
	-p $PWD/plan.xml \
	-d "host=localhost port=5440 user=postgres dbname=digitalasset" \
	—eas-url="http://eas.example.com/eas" \
	—instance="digitalasset" \
	-l debug

Die beiden Optionen --eas-url und --instance werden dabei vom Schritt fetchassets benötigt.

Plan (plan.xml)

1:  2:  3:  4:  5:  6:  7:  8:  9:  10:  11:  12:  13:  14:  15:  16:  17:  18: 
<plan name="export2pdf"
    xmlns="http://schema.programmfabrik.de/imexporter-plan/0.1">
    <build-steps>
        <step type="databaseexport">
            <description-file>exportdef.xml</description-file>
        </step>
        <step type="xslt">
            <xsl-file>add-eas-annotation.xsl</xsl-file>
        </step>
        <step type="fetchassets">
        </step>
        <step type="xslt">
            <xsl-file>xml-to-latex.xsl</xsl-file>
        </step>
        <step type="pdflatex">
        </step>
    </build-steps>
</plan>

Siehe auch Pläne einrichten.

Export-Definition (exportdef.xml)

Es sollen alle Bilder exportiert werden, deren Bildrecht "frei" heißt.

1:  2:  3:  4:  5:  6:  7:  8:  9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19: 
<export-definition name="export-free-images"
    xmlns="http://schema.programmfabrik.de/export-definition/0.1">
    <table name="assets">
        <column name="id"/>
        <column name="titel" escape="latex"/>
        <column name="bild"/>
        <filter>
            <referencing table="bildrecht">
                <own-column name="lk_bildrecht_id"/>
            </referencing>
        </filter>
    </table>
    <table name="bildrecht">
        <column name="id"/>
        <filter>
            <column name="name" type="text" value="frei"/>
        </filter>
    </table>
</export-definition>

Siehe auch Exportdefinitionen.

XSLT-Stylesheet für EAS-Annotationen (add-eas-annotation.xsl)

In diesem Schritt werden in die exportierte XML-Datei einige XML-Tags (im Namensraum an) geschrieben, die im nächsten Schritt (fetchassets) durch weitere Informationen über die EAS-Assets ersetzt werden. Der meiste Code dient nur dem Kopieren der existierenden Struktur.

1:  2:  3:  4:  5:  6:  7:  8:  9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38: 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:id="http://schema.programmfabrik.de/imexport-data/0.1"
    xmlns:an="http://schema.programmfabrik.de/imexport-annotation-input/0.1">
    <xsl:template match="id:col[@name='bild']">
        <xsl:if test="./text()">
            <an:asset id="{./text()}" profile="file"/>
        </xsl:if>
    </xsl:template>
    <xsl:template match="id:dump">
        <xsl:copy>
            <an:profile name="file">
                <an:versions only-first="true">
                    <an:version>original</an:version>
                    <an:version>orig</an:version>
                </an:versions>
                <an:file/>
            </an:profile>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="id:table">
        <xsl:copy>
            <xsl:attribute name="tablename"><xsl:value-of select="@tablename"/></xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="id:col[@name!='bild']">
        <xsl:copy>
            <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="id:row">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

XSLT-Stylesheet für Umwandlung nach LaTeX (xml-to-latex.xsl)

Diese XSLT-Transformation wandelt die XML-Datei in eine LaTeX-Quelle um. Der folgende Schritt (pdflatex) wird diese dann in ein PDF übersetzen.

1:  2:  3:  4:  5:  6:  7:  8:  9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28: 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:id="http://schema.programmfabrik.de/imexport-data/0.1"
    xmlns:an="http://schema.programmfabrik.de/imexport-annotation-output/0.1">
    <xsl:output method="text" />
    <xsl:strip-space elements="*" />
    <xsl:template match="id:dump">
\documentclass[a4paper]{article}
\usepackage{german}
\usepackage{graphicx}
\begin{document}
        <xsl:apply-templates/>
\end{document}
    </xsl:template>
    <xsl:template match="id:table[@tablename='assets']">
\section{Freie Bilder}
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="id:row">
\subsection{Bild "`<xsl:value-of select="./id:col[@name='titel']/text()"/>"'}
ID=<xsl:value-of select="./id:col[@name='id']"/>
        <xsl:if test="an:asset/an:file">
\begin{figure}[ht]
\includegraphics[height=0.7\textheight,width=0.9\textwidth,keepaspectratio]{<xsl:value-of
    select="an:asset/an:file"/>}
\end{figure}
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>