Eine grundlegende Beschreibung des Layout-Services in MyCoRe
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.
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:
|
|
Wenn MCR.ContentTransformer.foo.Stylesheet
nicht definiert ist, dann
tritt folgende Standardkonfiguration in Kraft, wenn es eine foo.xsl-Datei gibt:
|
|
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:
|
|
oder mit XSL.Style=dfg auf:
|
|
Wenn ein "MCR.ContentTransformer.*.Stylesheet" Property definiert ist, aber kein passendes "MCR.ContentTransformer.*.Class" Property, wird automatisch der MCRXSLTransformer benutzt.
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:
|
|
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.
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:
|
|
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:
Das Frontend für das XSL-Info-Servlet ist online unter {URL}/servlets/MCRXSLInfoServlet
aufrufbar.