2.2.4  Menschenlesbare Ausgabe

Kryptische XML Log-, Daten- oder Konfigurationsfiles Anwendungsgebiete Log- und Konfigurationsdaten können leicht mit XSLT "menschenlesbar" formatiert werden. Ein Arbeitskollege im neuen Job kam kürzlich auf mich zu, ob ich um eine Möglichkeit wüsste, wie man sein kryptisches Datenfile für einen Übersetzungsdienst formatieren könnte:

<?xml version="1.0" encoding="UTF-8"?>?<?xml-stylesheet type="text/xsl" href="de.xsl"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
  xmlns:jcr="http://www.jcp.org/jcr/1.0" 
  xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
  xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
  jcr:language="de"
  jcr:mixinTypes="[mix:language]"
  jcr:primaryType="sling:Folder">
<b_manual 
  jcr:primaryType="sling:MessageEntry"
  sling:message="Bedienungsanleitung"/>
  <b_warning
    jcr:primaryType="sling:MessageEntry"
    sling:message="Warnung"/>
  <b_danger
    jcr:primaryType="sling:MessageEntry"
    sling:message="Vorsicht"/>
  <b_note
    jcr:primaryType="sling:MessageEntry"
    sling:message="Notiz"/>
  <b_notice
    jcr:primaryType="sling:MessageEntry"
    sling:message="Hinweis"/>
  [...]
Plain Text

Mit einem eingehängten XSLT Stylesheet de.xsl wird so ein Datenfile als Tabelle formatiert:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:jcr="http://www.jcp.org/jcr/1.0"
  xmlns:sling="http://sling.apache.org/jcr/sling/1.0">
  
  <xsl:template match="jcr:root">
    <html>
      <table border="1" cellpadding="5" cellspacing="5">
        <xsl:apply-templates/>
      </table>
    </html>
  </xsl:template>
  
  <xsl:template match="*">
    <tr>
      <td>
        <xsl:value-of select="concat(count(preceding::*[@sling:message]) + 1,'.')"/>
      </td>
      <td>
        <xsl:value-of select="name()"/>
      </td>
      <td contenteditable="true">
        <xsl:value-of select="@sling:message"/>
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>
Plain Text

Hängt man an dieses Beispiel noch ein bisschen JavaScript Logik und macht die Felder für die Übersetzungen mittels des HTML5 contenteditable Attributs Attribute contenteditable editierbar, dann bräuchte man nur noch eine Rücktransformation HTML nach XML und hätte schon einen kleinen XML Editor gebaut. So funktioniert auch der Editor in Tektur.