Der Layout-Service

Der Layout-Service

Der Layout-Service ist Teil der MyCoRe-Basiskomponente (mycore-base) und bildet das Herzstück zum Aufbau der Webanwendung. Er erstellt mit Hilfe der XSL-Stylesheets aus XML entsprechende Webseiten. Mit Hilfe des Layout-Services können jedoch auch beliebige andere XSL-Transformationen durchgeführt werden, zum Beispiel in Export-Formate.

Mehrstufiger Layoutprozess (ab 2013.06)

Mithilfe des neuen Layoutprozesses können XSL-Stylesheets auf effiziente Weise verkettet werden. Das führt zu schlankeren und wiederverwendbaren Stylesheets und unter Umständen schnelleren Layoutprozessen. Die MCRContentTransformerPipe ermöglicht es verschieden MCRContentTransformer hintereinander zuhängen, was die Wiederverwendbarkeit erhöht. ("Write simple parts connected by clean interfaces.") Weiterhin gibt es keine Beschränkung der Layout-Ausgabe via XSL mehr, sondern es können z.B. auch externe Werkzeuge genutzt werden (z.B. bibutils als Exportwerkzeug).

Der mehrstufige Layoutprozess gestattet es, die Ausgabe eines Stylesheets als Eingabe eines anderen zu verwenden und dabei auf unnötige Deserialisierungs- und Serialisierungsschritte zu verzichten. Wer das nutzen möchte, um das Seitenlayout vom Inhalt der Seite getrennt zu erzeugen, kann folgende Properties verwenden:

        MCR.LayoutTransformerFactory.Default.Stylesheets=xsl/layout.xsl
        MCR.LayoutTransformerFactory.Default.Ignore=mets,mets-dfg,alto

Wenn MCR.ContentTransformer.foo.Stylesheet nicht definiert ist, dann tritt folgende Standardkonfiguration in Kraft, wenn es eine foo.xsl-Datei gibt:

        MCR.ContentTransformer.foo.Stylesheet=xsl/foo.xsl,xsl/layout.xsl

Ausnahmen definiert man entweder explizit, in dem man einen ContentTransformer definiert oder das Ignore-Property setzt. Das würde z.B. bei METS-Dokumente auf folgenden Konfiguration ausweichen:

        MCR.ContentTransformer.mets.Stylesheet=xsl/mets.xsl

oder mit XSL.Style=dfg auf:

       MCR.ContentTransformer.mets-dfg.Stylesheet=xsl/mets-dfg.xsl

Wenn ein "MCR.ContentTransformer.*.Stylesheet" Property definiert ist, aber kein passendes "MCR.ContentTransformer.*.Class" Property, wird automatisch der MCRXSLTransformer benutzt.

Konfiguration von ContentTransformern

Als Beispiel für die Konfiguration von ContentTransformer soll die mycore.properties von mycore-mods dienen.

Die Transformer-ID hat folgenden Aufbau, wenn man das Fallback-Verhalten überschreiben will:

{XML-Root-Tag}[-{XSL.Style-Parameter}]

Außerdem gibt es jetzt einen "XSL.Transformer"-Parameter mit dem man den Transformer direkt auswählen kann. Beim MCRObjectServlet kann man so mittels "?XSL.Transformer=bibtex" direkt Bibtex von einem MODS-Datensatz ausgeben lassen.

Dank MCRContentTransformer bekommen die so generierten Daten sinnvolle Dateinamen. Im eben erwähnten Bibtex-Fall "{MCRObjectID}.bib". Bei der Standard-HTML-Ausgabe eben *.html. Mit "XSL.FileName" lässt sich der Name festlegen und hat dann Vorrang.

XSL-Info-Servlet

Das XSL-Info-Servlet hilft dabei die Übersicht über verwendete XSL-Stylesheets zu behalten. Dazu durchsucht es zur Laufzeit die Webanwendung (WEB-INF/classes/xsl/ und alle WEB-INF/lib/*.jar) nach *.xsl-Stylesheets, listet deren Abhängigkeiten und die darin enthaltenen Templates. Das Ergebnis sieht etwa so aus, für ein einzelnes Stylesheet:

<stylesheet name="MCRMetadataSchema.xsl">
  <origin>lib/mycore-complete-2.1.80-SNAPSHOT.jar</origin>
  <includes>MCRMetadataTemplates.xsl</includes>
  <includes>MCRMetadataCoreTemplates.xsl</includes>
  <includes>MCRMetadataCoreTypes.xsl</includes>
  <includes>MCRMetadataTypes.xsl</includes>
  <xsl:template match="/"/>
  <xsl:template match="/configuration/structure"/>
  <xsl:template match="/configuration/metadata"/>
  <xsl:template match="/configuration/derivate"/>
  <xsl:template match="/configuration/service"/>
</stylesheet>
   

Das Element origin zeigt den Ursprung der XSL-Datei und kann evtl. mehrmals auftreten (etwa wenn das Stylesheet in classes/xsl/ überschrieben wird).

Um die Abhängigkeiten zu visualisieren, wandelt ein XSL-Stylesheet die Ausgabe in das GraphML-Format um. Das wiederum stelle ich mit CytoscapeWeb (GNU LGPL, Flash, JavaScript) im Browser dar. Den Graphen kann man nun zoomen und im Detail ansehen.

Weitere Details werden in einer Tabelle ausgegeben, die man im Browser durchsuchen und filtern kann (JQuery Datatables). Die enthaltenen XSL-Templates können über Buttons aufgeklappt werden.

Die Herkunft des Stylesheets wird farblich gekennzeichnet:

  • grün - aus WEB-INF/classes/xsl/
  • blau - aus *.jar
  • gelb - zur Laufzeit eingebundene Stylesheets über URIs
  • rot - Stylesheet wird referenziert, ist aber nicht auffindbar

Das Frontend für das XSL-Info-Servlet ist als DocPortal-Modul verfügbar, das standardmäßig nicht eingebunden wird: docportal/modules/xslinfo/ bzw. online unter http://www.mycore.de:8291/servlets/MCRXSLInfoServlet