Der MyCoRe-URI-Resolver



Ähnliche Dokumente
Die Warenkorbfunktion (workbasket)

KlassifikationsBrowser

XML-Syntax eines MyCoRe-Objektes

Architektur des agimatec-validation Frameworks

T:\Dokumentationen\Asseco_BERIT\Schulung\BERIT_LIDS7_Basiskurs\Impo rt_export\beritde_lt_do_ _lids7.basisschulung_import_export.

2. WWW-Protokolle und -Formate

Revisionsabfrage im Portalverbund PVP-AuditQuery Projektteam / Arbeitsgruppe:

Anleitung zur Fleet & Servicemanagement Evatic Schnittstelle

Revisionsabfrage im Portalverbund

Eine Kommando-Oberfläche für.net

Java - Webapplikationen

Dokumentenstrukturen

Backup and Recovery. Der Abschnitt beschreibt Vorgehensweisen zur Sicherung und Wiederherstellung der Daten mit Applikationsmitteln.

DWx2r XSD/XML-Processing. Testversion

Webanwendungen mit Java und JavaServerPages

Handbuch für die Erweiterbarkeit

... die Funktion Ñ Ò µ einer Klasse ÂÚÑ:

Zwei Arten von Attributen. Klassenvariablen. Introspektion. getattr(object_instance, string)

Das Interface-Konzept am Beispiel der Sprache Java

Persistenz. Ralf Gitzel

Zwei Arten von Attributen

Dirk Ammelburger XML. Grundlagen der Sprache und Anwendungen in der Praxis HANSER

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Themes Organisation in Contao

GDI-Forum Nordrhein-Westfalen Technischer Workshop 2 - Geodienste INSPIRE-konforme Download-Dienste. Inhalt

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Pakete Software Entwicklung 1

Single Source Publishing mit XML

PHP objektorientiert

Software Entwicklung 1

Benutzerhandbuch. Neukirchen

Einführung in XML. Seminarunterlage. Version 3.05 vom

Dokumentation Goobi-Plugin

Best of Oracle Weblogic Diagnostic Framework

JSP Direktiven. Präprozessor-Anweisungen, die in die JSP-Datei eingebettet sind und vor dem eigentlichen Übersetzungsvorgang ausgeführt JSP

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Java und XML 2. Java und XML

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Grundlagen Internet-Technologien INF3171

Themen. Web Service - Clients. Kommunikation zw. Web Services

1 - EIN NEUES GAMEGRID ANLEGEN

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Metadateneditoren für ArcGIS

NAME-VALUE PAIR API ENTWICKLER-DEFINITION DER EXPORT-SCHNITTSTELLE

IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES Software AG. All rights reserved. For internal use only

Tag 8 Repetitorium Informatik (Java)

Die abstrakte Klasse Expression:

Probeklausur: Programmierung WS04/05

Wege zum neuen Layout des Wordpress Inspirata-Webportals

Implementieren von Klassen

Web (Site) Engineering (WebSE)

XSLT XSL Transformations

2019/03/27 15:08 1/7 Konfiguration

Data Management mit UNICORE 6

Objektorientierte Programmierung

XML-Austauschformat für Sicherheitsdatenblätter

Mini Servlets. Abschlussprojekt Internetprogrammierung. Stefan Wehr. 17. Juli 2006

RIF-Import in APIS IQ-Software

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

3. Persistenz und Datenbanken Content Providers. Content Providers. Generische Schnittstelle zum Zugriff auf Daten zwischen Anwendungen

Linux I II III Res WN/TT NLTK XML Weka E XML BNC XSLT BNC/XML 7 BNC/XML XML BNC XSLT. Ressourcen-Vorkurs

Einstieg in die Informatik mit Java

Inhalt des Moduls: Grundlagen. Vorlagen. Kontrollstrukturen. Ausgabestrukturen. Parameter und Variablen. Dateibasierte Auslagerung

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

XSLT XSL Transformations

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

- dynamisches Laden -

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

datenlink-schnittstelle Version 1.0

Java Internationalization (i18n) 8. April 2003

Einführung in das Eclipse Modeling Framework. 5. November 2014

XSL Transformation (XSLT) Teil II

L-/H-Gas Anpassung. Anpassungshandbuch. Schnittstellenbeschreibung. Datum: Version: 2. Anpassungshandbuch_Schnittstelle_v2.

XML Vorlesung FHA SS

Wiederholung: Beginn

Geschachtelte Klassen

12 Abstrakte Klassen, finale Klassen und Interfaces

Algorithmen & Datenstrukturen 2 Praktikum 1

Pakete. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Überschreiben von Methoden

Meta Programming and Reflection in Java

Einstieg in die Informatik mit Java

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Einstieg in die Informatik mit Java

Simple Workflow Table of contents

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

windata SEPA Converter Library Schnellstart

Vererbung und Polymorphie

Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate

Eclipse und EclipseLink

Programmieren in Java -Eingangstest-

Dateien. DVG Dateien 1

Grundlagen der. Marc Monecke

Transkript:

by Thomas Scheffler, Wiebke Oeltjen, Jens Kupferschmidt 2015-06-16 Der URI-Resolver in MyCoRe ist eine Erweiterung des Standard-URI-Resolvers und gestattet innerhalb der MyCoRe- Anwendung den einfachen Zugriff auf interne Komponenten. Table of contents 1 Der MyCoRe-URI-Resolver... 3 1.1 webapp:[path]...3 1.2 request:[path]...3 1.3 resource:[path]...3 1.4 session:[key]... 4 1.5 mcrobject:[mcrobjectid]...4 1.6 deletedmcrobject:[mcrobjectid]... 4 1.7 classification:[classificationquery]...4 1.8 access:[ AccessRules ]... 5 1.9 ifs:[derivateid]... 6 1.10 localclass:[class]... 6 1.11 buildxml:[strings]...6 1.12 mcrfile:[path]...7 1.13 filemeta:[path]...7 1.14 language:[code]...7 1.15 basket:[basketaddr]... 7 1.16 versioninfo:[mcrobjectid]...8 1.17 xslinclude:[includeparms]... 8 1.18 xslimport:[importparms]... 8

1.19 redirect:[redirectalias]...9 1.20 notnull:[uri]... 9 1.21 xslstyle:[stylesheet][param]:[uri]...9 1.22 xsltransform:[transformparms]...10 1.23 data:[dataurlparams]...10 2 MCRURIResolverFilter... 10 3 Erweiterung des URI-Resolvers... 10 Seite 2 von 11

1 Der MyCoRe-URI-Resolver Die Klasse org.mycore.common.xml.mcruriresolver implementiert einen Resolver, mit dem an verschiedenen Stellen im MyCoRe-System XML-Daten über URI's gelesen werden können. Der Resolver wird zur Zeit an vilen Stellen des Layout-Prozesses eingesetzt. Für eigene Ziele kann der URI-Resolver auch entsprechend erweitert werden. Der Resolver unterstützt neben den Schemata des JAVA-URIResolvers die folgenden Schemata bzw. Protokolle: 1.1 webapp:[path] liest eine statische XML-Datei vom Dateisystem der Web-Applikation. Im Gegensatz zur file()-methode kann der Pfad der zu lesenden Datei relativ zum Wurzelverzeichnis der Web-Applikation angegeben werden. Der Zugriff erfolgt direkt, d.h. ohne HTTP Request oder Anwendung eines Stylesheets. webapp:{path} webapp:config/labels.xml 1.2 request:[path] liest eine XML-Datei durch einen HTTP Request an ein Servlet oder Stylesheet innerhalb der aktuellen MyCoRe-Anwendung. Im Gegensatz zur http/https Methode ist der Pfad relativ zur Basis-URL der Web-Applikation anzugeben, die MCRSessionID wird automatisch als HTTP GET Parameter ergänzt. request:{path} request:servlets/mcrlinkservlet? XSL.Style=xml&form=&to=DocPortal_document_00000001&type=derivate 1.3 resource:[path] liest eine XML-Datei aus dem CLASSPATH der Web-Applikation, d.h. die Datei wird zunächst im Verzeichnis WEB-INF/classes/ und als nächstes in einer der jar-dateien im Verzeichnis WEB-INF/lib/ der Web-Applikation gesucht. Diese Methode bietet sich an, um statische XML-Dateien zu lesen, die in einer jar-datei abgelegt sind. resource:{path} resource:contentstoreselectionrules.xml Seite 3 von 11

1.4 session:[key] 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 abgelegt werden. Ein Servlet kann so z.b. ein JDOM-Element in der MCRSession ablegen, den Schlüssel einem Stylesheet über einen XSL-Parameter mitteilen. Der MyCoRe Editor kann dieses JDOM-Element dann mittels der get() Methode aus der Session lesen. session:{key} session:mylist Das Beispiel liest das JDOM XML-Element, das als Ergebnis von MCRSessionMgr.getCurrentSession().get("mylist"); zurückgegeben wird. 1.5 mcrobject:[mcrobjectid] liest die XML-Darstellung der Metadaten eines MCRObject mit der angegebenen MCRObjectID aus. mcrobject:{mcrobjectid} mcrobject:docportal_document_07910401 1.6 deletedmcrobject:[mcrobjectid] löscht ein MCRObject mit der angegebenen MCRObjectID. deletedmcrobject:{mcrobjectid} deletedmcrobject:docportal_document_07910401 1.7 classification:[classificationquery] gibt eine Klassifikation in unterschiedlichen Formaten aus. classification:{editor['['formatalias']'] editorcomplete metadata}:{levels} [:noemptyleaves]:{parents children}:{classid}[:categid] Die einzelnen Parameter sind durch Doppelpunkte getrennt. 1. Der erste Parameter bestimmt den Formattyp der Rückgabe. Seite 4 von 11

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.das Property MCR.UriResolver.Classification.Format.{formatAlias} enthält dann die Formatieranweisung. Diese besteht aus beliebigem Text kombiniert mit Platzhaltern: {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. metadata gibt die Klassifikation im MyCoRe-XML-Format aus. 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. 2. Levels gibt an, wieviel Hierarchiestufen dargestellt werden. Bei Angabe der CategID ist dies die Anzahl der Kindkategoriehierarchiestufen. Ist Levels -1 angegeben, so bedeutet dies komplette Hierarchie. 3. 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. 4. 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. 5. ClassID ist die Klassifikations-ID 6. CategID ist Kategorie-ID classification:editor[countdocument]:2:noemptyleaves:children:docportal_class_00000002 classification:editorcomplete:3:noemptyleaves:children:mycore_class_00000001:categ0003 classification:metadata:0:parents:docportal_class_00000001:unis.jena 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. 1.8 access:[ AccessRules ] liest die XML-Darstellung der ACL-Metadaten für ein MyCoRe-Objekt aus und gibt diese als XML-Darstellung der servacls aus. Seite 5 von 11

access:action=[all {permision}]&object={mcrobjectid} Der Parameter all gibt alle Permissions für das MyCoRe-Object zurück. Für den Parameter {permision} kann eine relevante Permission angegeben werden. access:action=all&object=docportal_document_07910401 access:action=writedb&object=docportal_document_07910401 1.9 ifs:[derivateid] startet den Abruf der Verzeichnisstruktur eines Derivate-Contents. Derzeit einzige Implementierung ist eine mcrdirectory -Verzeichnisstruktur im XML-Format. ifs:{mcrderivateid} ifs:docportal_derivate_00000001 1.10 localclass:[class] läd eine Java-Klasse und leitet den Aufruf daran weiter. Ist die Klasse einen Instanz des URI-Resolvers wird die resolve -Methode aufgerufen. Andernfalls wird ein JDOM- Source zurückgegeben. localclass:{class}?{param} localclass:org.mycore.classname?mode=getall 1.11 buildxml:[strings] generiert aus dem String ein JDOM-Objekt. buildxml:_rootname_={root_element_name}&{xpath_entry}[&{xpath_entry}][...] buildxml:_rootname_=mycoreobject&metadata/parents/parent/@href= 'FooBar_Document_4711' erzeugt: <mycoreobject> <metadata> <parents> <parent href="foobar_document_4711" /> </parents> </metadata> Seite 6 von 11

</mycoreobject> 1.12 mcrfile:[path] liefert eine konkrete Datei aus einem MCRDerivate, welche über den Pfad adressiert ist. mcrfile:{mcrderivateid}/{path} file:docportal_derivate_00000001/folder1/image2.jpg 1.13 filemeta:[path] liefert???. filemeta:??? filemeta:??? 1.14 language:[code] kann verwendet werden, um zwischen verschiedenen Codes für die gleiche Sprache zu konvertieren. Das zurückgegebene XML enthält die ISO 639-1 und ISO 639-2 Sprachcodes für die angefragte Sprache. language:{code} language:de erzeugt folgenden XML-Output: <language xmlcode="de" biblcode="ger" termcode="deu" /> 1.15 basket:[basketaddr] liefert Einträge aus der Korbfunktion einer Session einer MyCoRe-Anwendung. Der Resolver wird z. B. für den Input des Korb-Editors genutzt. basket:{typeid}:{entryid} Die typeid beschreibt den Typ des Korbes. In der Session können mehrere Körbe mit verschiedenen typeid existieren. Bisher ist nur die objects in Gebrauch. Die entryid ist eine passende ID, im Normalfall ist es die MCRObjectID Seite 7 von 11

basket:objects:mycore_basket_00000001 1.16 versioninfo:[mcrobjectid] liefert Versionsinformationen über ein MyCoRe-Objekt im XML-Format. Ist die Versionierung abgeschaltet, wird nur eine Versionszeile mit den Datum der letzten Änderung ausgegeeben. versioninfo:{mcrobjectid} versioninfo:mycore_document_00000001 erzeugt folgenden XML-Output: <versions> <version user="editor" date="2015-06-19" r="12345" action="update"/>... </versions> 1.17 xslinclude:[includeparms] 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. MCR.URIResolver.xslInclude.{include_name}={xsl_file1},{xsl_file2}... xslimport:{import_name}:{xsl_file...} MCR.URIResolver.xslIncludes.components=iview.xsl,wcms.xsl xslinclude:components erzeugt folgenden XML-Output: <xsl:stylesheet version="1.0"> <xsl:include href="iview.xsl"/> <xsl:include href="wcms.xsl"/> </xsl:stylesheet> 1.18 xslimport:[importparms] 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 (hier ein Link zur Doku, falls vorhanden) zu erzeugen. Seite 8 von 11

Die Liste wird im Property MCR.URIResolver.xslImports.{import_name} definiert. MCR.URIResolver.xslImports.{import_name}={xsl_file1},{xsl_file2}... xslimport:{import_name}:{xsl_file...} MCR.URIResolver.xslImports.components=first.xsl,second.xsl <xsl:import href="xslimport:components:first.xsl"/> 1.19 redirect:[redirectalias] liest das Alias-Property und leitet die Daten an die URL weiter, welche im Property MCR.URIResolver.redirect.{alias} definiert ist. MCR.URIResolver.redirect.{alias}={href} MCR.URIResolver.redirect.alias=webapp:path/to/alias.xml 1.20 notnull:[uri] dieses Vorschaltelement für 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. notnull:{uri} notnull:mcrobject:docportal_document_07910401 1.21 xslstyle:[stylesheet][param]:[uri] dieses Vorschaltelement 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 als möglich noch Parameter zu übergeben und der Ausgabe von einem Stylesheet gleich durch ein zweites zu weiterzuleiten. xslstyle:{stylesheet},{stylesheet}{?param1=value1{&param2=value2}}:{anymycoreuri} Seite 9 von 11

xslstyle:mycoreobject-mods,mods2dc? derivate=mycore_derivate_00000001:mcrobject:mycore_doc_00000001 Dabei würde das Objekt erst in ein MODS-Dokument umgewandelt, um danach letztendlich als Dublin-Core-Dokument ausgegeben worden zu sein. 1.22 xsltransform:[transformparms] dieses Vorschaltelement funktioniert wie xslinclude. Nur wird ein definierter MCRContentTransformer verwendet, statt einer vordefinierten Liste von Stylesheets. Im gegensatz zu "xslstyle" ist das Verhalten also noch konfigurierbar und prinzipiell nicht auf "XSL" beschränkt. xsltransform:{stylesheet}[?param1=value1[&param2=value2]...]:{anymycoreuri} xsltransform:mycoreobject-txt:file:object.txt 1.23 data:[dataurlparams] liefert den Inhalt einer Data-URL zurück. data:[mime-type[;param1=value1[;param2=value=2]]]{,content} data:text/html;charset=utf-8,%3ch1%3ehello%20mycore!%3c%2fh1%3e 2 MCRURIResolverFilter 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. 3 Erweiterung des URI-Resolvers 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. Seite 10 von 11

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} Seite 11 von 11