Metadaten im Text ausgeben

So geben Sie z.B. das Datum der letzten Änderung unterhalb des Seitentitels aus.

Seit Jahren war ich auf der Suche nach einem Weg, die Metadaten, speziell das Erstellungs- und Aktualisierungsdatum eines Topics, im Text auszugeben. Da ich keine Lösung dafür hatte, habe ich das Aktualisierungsdatum immer im abstract hart kodiert. Bis ich im XMetal-Forum (zum Link) auf ein Skript stieß, das die beiden Datumsangaben im PDF-Output mit ausgibt. Dies habe ich selbst noch nicht ausprobiert.

Da ich die Datumsangaben für den XHTML-Output benötige, habe ich das Skript für meine Online-Publikationen folgendermaßen angepaßt.

So soll es aussehen

In den Formaten CHM, XHTML und EPUB sollte oben rechts immer das Datum der Erstellung und der letzten Änderung in grauer Schrift kursiv ausgegeben werden. Und zwar rechtsbündig unterhalb des Titels und vor der Kurzbeschreibung (shortdesc).


Aktualsierungsdatum
Abbildung 1. Datumsangaben in der CHM-Hilfe

Metaangaben im Topic

Vorraussetzung ist, dass in jedem Topic, egal ob Task oder Concept etc, folgende Metadaten innerhalb des Tags prolog gefüllt sind.

<critdates>
    <created date="08.06.2012"/>
    <revised modified="01.07.2012"/>
</critdates>

Hat das Topic noch kein Änderungsdatum, lassen Sie den Tag für revised weg.

gen-user-header-Template anpassen

Suchen Sie innerhalb Ihres DITA-Open Toolkits im Ordner xsl/xslhtml nach der Datei dita2htmlImpl.xsl. Innerhalb dieser Datei muss das Template gen-user-header angepasst werden. Es ist das zweite Template im Bereich, der extra für Ihre Modifikationen für den Header, Footer etc angelegt wurde.

<!-- ========== STUBS FOR USER PROVIDED OVERRIDE EXTENSIONS ========== -->

Im vorhandenen Template gen-user-header fügen Sie, wie unterhalb des Kommentars folgende Zeile ist neu aufgeführt, eine neue Zeile ein.

<xsl:template name="gen-user-header">
  <xsl:apply-templates select="." mode="gen-user-header"/>
</xsl:template>
<xsl:template match="/|node()|@*" mode="gen-user-header">
  <!-- to customize: copy this to your override transform, add the content you want. -->
  <!-- it will be placed in the running heading section of the XHTML. -->
  <!-- folgende Zeile ist neu! -->
  <xsl:apply-templates select="*[contains(@class, ' topic/prolog ')]" mode="gen-user-header"/>
</xsl:template>

Unterhalb dieses angepaßten Templates gen-user-header fügen Sie ein zweites Template hinzu.

<xsl:template match="*[contains(@class, ' topic/prolog ')]">
  <p class="header-metadata" align="right">
    <xsl:if test="*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/created ')]/@date">
    <span>Erstellt am <xsl:value-of select="*[contains(@class,' topic/critdates ')]/
    *[contains(@class,' topic/created ')]/@date"/>.   </span></xsl:if>
    <xsl:if test="*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@modified">
    <xsl:for-each select="child::*[contains(@class,' topic/critdates ')]/
    *[contains(@class,' topic/revised ')]">
    <span>Letzte Änderung: <xsl:value-of select="@modified"/></span>
    </xsl:for-each>
    </xsl:if>
   </p>
</xsl:template>

Formatierung in der CSS-Datei

Der Absatz p hat eine class=”header-metadata” erhalten. Diese Klasse müssen Sie noch Ihrer CSS-Datei hinzufügen.

.header-metadata
{
  text-align: right;
  font-style: italic;
  color: #C2C2C2;
  margin-right:10px;
}

Plugin

Da ich die Metadaten nur für Onlinehilfen und eBooks benöte, die des Öfteren aktualisiert werden, habe ich das Template in ein Plugin ausgelagert.

Links

  • Skript für Metadaten im Text für PDF-Dateien im XMetal-Forum, zum Link