TEI-Revision einfügen oder ergänzen
David Maus
Üblicherweise bearbeite ich mehrere dutzend XML-Dateien gleichzeitig, um Kodierungen anzupassen oder Fremddaten einzupflegen. Damit auch nachvollziehbar bleibt, wer wann was an den Dokumenten geändert hat, füge ich immer einen Änderungsvermerk ein. Da das bei einer größeren Menge an Dokumenten nicht per Hand passieren kann, verwende ich folgende XSL-Transformation, die ich für den jeweiligen Fall einfach anpasse.
revisionDesc
einfügen<xsl:transform version="2.0"
exclude-result-prefixes="#all"
xpath-default-namespace="http://www.tei-c.org/ns/1.0"
xmlns="http://www.tei-c.org/ns/1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="teiHeader[not(revisionDesc)]">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
<revisionDesc status="published">
<xsl:call-template name="insert-change"/>
</revisionDesc>
</xsl:copy>
</xsl:template>
<xsl:template match="revisionDesc">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
<xsl:call-template name="insert-change"/>
</xsl:copy>
</xsl:template>
<xsl:template name="insert-change">
<change when="{format-date(current-date(), '[Y0001]-[M01]-[D01]')}" who="mailto:maus@hab.de">
Iconclass-Erschließung aus Foto Marburg eingefügt; Projekt Emblematica Online - Linked Open Emblem Data.
</change>
</xsl:template>
</xsl:transform>
Das erste Template implementiert eine Identitätstransformation, in der rekursiv alle Knoten in den Ergebnisbaum kopiert werden.
Das zweite Template verarbeitet Dokumente, die noch keine revisionDesc
enthalten. Alle
Knoten des teiHeader
werden kopiert, dann wird eine revisionDesc
mit dem Änderungsvermerk am Ende eingefügt.
Das dritte Template verarbeitet eine existierende revisionDesc
. Der Inhalt wird kopiert
und ein neuer Änderungsvermerk wird ergänzt.
Das vierte Template wird von den Templates zwei und drei aufgerufen und erzeugt den datierten Änderungsvermerk.