Logo

TEI-Revision einfügen oder ergänzen

Ü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.

<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 tritte 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.