URIResolver sind ein Standard-Erweiterungsmechanismus für XSLT. Damit können anwendungsspezifische Methoden aufgerufen oder weitere Daten (XML) in den XSLT-Verarbeitungsprozess integriert werden.
Da die XSLT-Verarbeitung in MyCoRe-Anwendungen eine bedeutende Rolle spielt, stellt das MyCoRe-Framework wesentliche Funktionalität für die Verarbeitung und Presentation von (XML-)Daten in Form von URIResolvern bereit. Besonders der Layout-Prozess macht davon häufigen Gebrauch.
URIResolver können in XSLT innerhalb document(), xsl:import oder xsl:include genutzt werden, um dynamisch erzeugtes XML innerhalb XSLT-Verarbeitungsprozess bereitzustellen und weiterzuverarbeiten.
Die Auswahl einer konkreten URIResolver-Implementierung erfolgt durch ein spezifisches Schema bzw. den
Protokoll-Bestandteil einer URI. So liefert z.B. mcrobject:mir_mods_00001234
das Metadaten-XML eines
konkreten MyCoRe-Objektes zurück.
Die Klasse org.mycore.common.xml.MCRURIResolver
implementiert das Interface java.xml.transform.URIResolver
und verwaltet die verschiedenen durch MyCoRe und seinen Komponenten bereitgestellten URIResolver.
MyCoRe-Anwendungen können diesen Mechanismus nutzen, um eigene URIResolver bereitzustellen.
Folgende URI-Resolver werden durch MyCoRe bereitgestellt:
mycore-baseliest eine (XML-)Datei aus dem Dateisystem der Web-Applikation. Der Pfad der zu lesenden Datei wird relativ zum Wurzelverzeichnis der Web-Applikation angegeben. Der Zugriff erfolgt direkt, d.h. ohne zusätzlichen HTTP-Request.
|
|
liest eine (XML-)Datei aus dem CLASSPATH der Web-Applikation, d.h. die Datei befindet sich
in der Regel im Verzeichnis WEB-INF/classes/
oder in einer der jar-Dateien im Verzeichnis
WEB-INF/lib/
der Web-Anwendung
Da MyCoRe den CLASSPATH erweitert, kann die Datei auch von anderen Stellen eingelesen werden,
z.B. aus dem resources
-Unterordner im MyCoRe-Konfigurationssverzeichnis.
|
|
liest ein XML-Element, das als JDOM-Element in der aktuellen MCRSession abgelegt ist.
Mittels der put()
Methode der Klasse MCRSession
kann analog zu einer Java-Hashtable unter einem Schlüssel ein Objekt in der Session abgelegt werden.
Ein Servlet kann darüber z.B. ein JDOM-Element in der MCRSession
ablegen und den Schlüssel einem Stylesheet
über einen XSL-Parameter mitteilen. Der MyCoRe-Editor oder Layout-Service kann dieses JDOM-Element dann mittels des URIResolvers aus der Session auslesen.
|
|
Das Beispiel liest das JDOM XML-Element ein, das als Ergebnis von MCRSessionMgr.getCurrentSession().get("my-xml-object");
zurückgegeben wird.
liest die XML-Darstellung der Metadaten eines MyCoRe-Objektes mit der angegebenen MyCoRe-Objekt-ID aus.
|
|
liefert eine Datei aus einem MyCoRe-Derivate zurück, welche über den Pfad adressiert ist.
|
|
liefert die File-Metadaten (z.B. URNs) aller Dateien im Derivate oder einer konkreten Datei zurück (siehe MCRFileMetadata).
Der Parameter {path}
ist optional.
|
|
liefert die Verzeichnisstruktur eines Derivates zurück.
Derzeit einzige Implementierung ist eine mcrdirectory
-Verzeichnisstruktur im XML-Format.
Der Parameter {path}
ist optional.
|
|
gibt die letzte Version der MyCoRe-Metadaten eines gelöschten MyCoRe-Objektes zurück (sofern ein versionierender Metadaten-Store eingesetzt wird).
|
|
gibt eine Klassifikation in unterschiedlichen Formaten aus. Es wird eine Vielzahl von Konfigurationsmöglichkeiten unterstützt.
|
|
Die einzelnen Parameter sind durch Doppelpunkte getrennt.
editor
bereitet die Klassifikation für die Nutzung in der Editor-Selectbox auf. Letztere kann für den Label-Text
noch unterschiedliche Formatanweisungen enthalten, die mit [formatAlias]
referenziert werden. MCR.URIResolver.Classification.Format.{formatAlias}
enthält dann die Formatieranweisung. {id}
steht für die Kategorie-ID,
{count}
steht für die Zahl der zugeordneten MyCoRe-Objekte,
{text}
steht für das Attribut text im label-Tag der Klassifikationsdefinition,
{description}
steht für das Attribut description im label-Tag der Klassifikationsdefinition.
|
|
editorComplete
bereitet die Klassifikation für die Nutzung in der Editor-Selectbox auf. Dabei wird die für die SOLR
Suche erforderliche Notation für den
value
ClassID:CategID
verwendet.
metadata
gibt die Klassifikation im MyCoRe-XML-Format aus.
Levels
gibt an, wieviel Hierarchiestufen dargestellt werden. Bei Angabe der CategID ist dies die
Anzahl der Kindkategoriehierarchiestufen. -1
“ angegeben, so bedeutet dies „komplette Hierarchie“.
noEmptyLeaves
ist ein optionaler Parameter. Wenn angegeben, werden leere Kategorien ohne Objekte
nicht mit ausgegeben.
Diese Funktion ist nur für den Rückgabetyp
editor
bzw.
editorComplete
, d.h. sinnvollerweise in Suchmasken, implementiert.
parents
oder
children
gibt an, ob bei Angabe einer
CategID
zusätzlich
alle übergeordneten Kategorien mit zurückgegeben werden (parents
)
oder ob nur die Kinder der Kategorie
berücksichtigt werden sollen. Bei Angabe eines positiven Levels und „parents
“
werden sowohl die Eltern ausgegeben, wie auch {Levels}
Hierarchieebenen der Kinder.
ClassID
ist die Klassifikations-ID
CategID
ist Kategorie-ID
|
|
Mit dem Property MCR.URIResolver.Classification.Sort.{ClassID}
kann gesteuert werden, ob die Label in der zurückgelieferten Klassifikation
alphabetisch sortiert ausgegeben werden sollen (default=true).
Mit dem Wert false wird die interne Sortierung (Reihenfolge der Knoten im XML) verwendet.
liest die XML-Darstellung der ACL-Metadaten für ein MyCoRe-Objekt aus und gibt diese als XML-Darstellung im Format
der servacls
aus.
action=all
werden alle Permissions für das MyCoRe-Object zurückgeliefert.
Alternativ kann eine konkrete Permission angegeben werden.
|
|
gibt true oder false zurück ,je nach dem, wie die Permission für ein Objekt für den aktuellen Benutzer gesetzt ist. Im zweiten Fall wird geprüft, ob eine übergebene Permission zulässig ist oder nicht.
|
|
|
|
Dieser URIResolver läd eine Java-Klasse und leitet den Aufruf daran weiter.
Die Klasse muss einen URIResolver implementieren, dessen resolve()
-Methode aufgerufen wird.
|
|
generiert aus den Parametern ein XML-Objekt.
_rootName_={root_element_name}
angegeben.
|
|
|
|
|
|
|
|
kann verwendet werden, um zwischen verschiedenen Codes für eine Sprache zu konvertieren. Das zurückgegebene XML enthält die ISO 639-1 und ISO 639-2 Sprachcodes für die angefragte Sprache.
|
|
erzeugt folgendes XML:
|
|
liefert Einträge aus dem Warenkorb der Session in einer MyCoRe-Anwendung.
Der Resolver wird z. B. für den Input des Warenkorb-Editors genutzt.
typeID
beschreibt den Typ des Korbes. typeID
existieren.
Bisher ist nur die ID objects in Gebrauch.
basketID
ist eine konkrete Warenkorb-ID.
|
|
liefert Versionierungsinformationen über ein MyCoRe-Objekt im XML-Format. Ist die Versionierung abgeschaltet, wird nur eine Versionszeile mit den Datum der letzten Änderung ausgegeben.
|
|
|
|
Erzeugt ein XSL-Stylesheet, dass weitere Stylesheets
inkludiert. Welche definiert das
MCR.URIResolver.xslIncludes.{include_name}
Property. Zu Laufzeit können so
weitere XSL-Dateien hinzugeladen werden, um zusätzliche Templates
bereitszustellen oder vorhandene zu Überschreiben.
|
|
|
|
|
|
Startet import_name
mit dem Prefix class., werden die
href
-Attribute von einer Klasse bereitgestellt, die das Interface
org.mycore.common.xml.MCRURIResolver.MCRXslIncludeHrefs
implementiert.
|
|
|
|
erzeugt ähnlich wie "xslInclude" ein XSL-Stylesheet, jedoch werden nicht alle
XSL-Dateien inkludiert, sonder in einer Kaskade importiert.
Das ermöglicht die Erweiterung bestimmter Templates mittels
<xsl:apply-imports />
, um z.B. zusätzliche Felder bei der
SOLR-Indizierung zu erzeugen.
Die Liste wird im Property MCR.URIResolver.xslImports.{import_name}
definiert.
|
|
|
|
liest das Alias-Property aus und leitet die Daten an die URL weiter, welche im Property
MCR.URIResolver.redirect.{alias}
definiert ist.
|
|
Dieses Präfix für eine andere URI stellt sicher, dass es bei Aufruf der genannten URI keine NullPointerException gibt. Sollte es bei Verarbeitung der anhängenden URI eine Exception geben, wird diese geloggt. Im Falle einer Exception oder wenn die URI den Wert NULL zurückgibt, liefert dieser Resolver stattdessen eine leere XML-Datei. Dies ist z.B. hilfreich, um in XSL Stylesheets URIs zu verwenden, aber gegen Fehler abzusichern.
|
|
Dieses Präfix für eine andere URI stellt sicher, dass es bei Aufruf der genannten URI keine Exception gibt. Tritt eine Exception auf, wird diese abgefangen und als XML ausgegeben.
|
|
Dieses Präfix für andere URI wendet das Stylesheet [stylesheet] auf die XML-Auagabedatei der nachfolgenden URI an und gibt das Ergebnis als XML zurück.
Das Stylesheet befindet sich im Classpath der Anwendung. Die Extension .xsl
entfällt
im Parameter {stylesheet}
.
Es ist möglich, Parameter zu übergeben und der Ausgabe von einem Stylesheet gleich an ein zweites
zu weiterzuleiten.
|
|
In diesem Beispiel würde das MyCoRe-Objekt zuerst in ein MODS-Dokument umgewandelt, und anschließend nach Dublin-Core transformiert werden.
mycore-base
Dieses Präfix funktioniert wie xslStyle.
Nur wird ein definierter MCRContentTransformer
verwendet, statt einer
vordefinierten Liste von Stylesheets. Im Gegensatz zu xslStyle ist das Verhalten
also noch weiter konfigurierbar und prinzipiell nicht auf "XSL" beschränkt.
|
|
liefert eine einzelne Übersetzung oder eine Liste von Übersetzungen für die aktuelle Sprache zurück. Bei einzelnen Properties wird eine verkürzte Form zurückgegeben. Andernfalls erfolgt die Rückgabe mittels Liste. Für einzelne Properties kann auch eine Parameterisierung erfolgen. Parameter werden im Property mit {nummer} angegeben.
|
|
|
|
|
|
liefert den Inhalt einer Data-URL zurück.
|
|
lädt eine physische Datei vom Server.
|
|
lädt eine Ressource aus dem Internet. Sie wird serverseitig gecached.
|
|
Gibt alle Zugriffsschlüssel für ein Objekt im JSON-Format zurück, zusätzlich mit count
Attribute für die Anzahl der Zugriffsschlüssel.
Verschlüsselt oder entschlüsselt einen String und gibt das Ergebniss in einem xml Dokument zurück. Dieses xml Dokument enthält einen einzigen Knoten, den Wurzelkoten value.
|
|
Der MCRURIResolverFilter liefert, bei XML- oder HTML-Output und wenn der
Log-Level
von MCRURIResolver auf
DEBUG
steht, Debug-Informationen als
Kommentar im Quelltext, welche URIs während der Erstellung aufgerufen
worden sind.
In der richtigen Reihenfolge und ggf. auch mit Referrer.
Da er standardmäßig mit eingebunden ist, muss man bis
auf besagten
Log-Level nichts konfigurieren.
Unter Umständen kann es nötig sein den URIResolver für eigene Anwendungen zu erweitern. Dabei ist es nicht
möglich
vorhandene URI-Schemas zu überschreiben, jedoch neue den bereits vorhandenen hinzuzufügen. Für jedes
Schema z.B.
file
gibt es einen Resolver, der entsprechende URIs auflösen kann. Dieser Resolver muss die
Schnittstelle
MCRURIResolver.MCRResolver
im Paket
org.mycore.common.xml
implementieren.
Für die Zuweisung eines Schemas zur
MCRResolver
-Implementierung ist der
MCRResolverProvider
verantwortlich, der diese Schnittstelle aus
MCRURIResolver
implementiert. Letzterer stellt eine Abbildung von Schema-Strings zu
MCRResolver
-Instanzen zur
Verfügung. Der
MCRResolverProvider
kann also beliebig viele
MCRResolver
zu den bereits
in MyCoRe integrierten hinzufügen. Eingebunden wird ein zusätzlicher
MCRResolverProvider
mittels
folgendem Property
MCR.URIResolver.externalResolver.class = {voller Klassenname}