Über dieses Dokument

Dieses Dokument kommt zusammen mit einem Vagrantfile und beschreibt eine beispielhafte Installation von Regal. Unter Vagrant findet sich eine Anleitung zur Installation in einer Virtualbox.

Eine Kurzaufstellung der wichtigsten API-Calls findet sich unter Regal-Api

Dieses Dokument ist im Format asciidoc geschrieben und kann mit dem Werkzeug asciidoctor in HTML übersetzt werden. Mehr dazu im Abschnitt Dokumentation

1. Einleitung

Regal ist eine Content Repository zur Verwaltung und Veröffentlichung elektronischer Publikationen. Es wird seit 2013 am Hochschulbibliothekszentrum (hbz) entwickelt.

Regal basiert auf den folgenden Kerntechnologien:

  • Fedora Commons 3

  • Elasticsearch 1.1

  • Drupal 7

  • Playframework 2.4

  • MySQL 5

  • Java 8

  • PHP 5

Für die Webarchivierung kommen außerdem Openwayback, Heritrix und WPull zum Einsatz.

  • openwayback hbz-2.3.2

  • heritrix 3.2.0

  • wpull

Regal ist ein mehrkomponentiges System. Einzelne Komponenten sind als Webservices realisiert und kommunizieren über HTTP-APIs miteinander. Derzeit sind folgende Komponenten im Einsatz

Drupal Themes

Über die Systemschnittstellen können eine ganze Reihe von Drittsystemen angesprochen werden. Die folgende Abbildung verschafft einen groben Überblick über eine typische Regal-Installation und die angebundenen Drittsysteme.

Regal Überblick
Figure 1. Typische Regal-Installation mit Drupal Frontend, Backendkomponenten und angebundenen Drittsytemen

2. Konzepte

2.1. Objektmodell

Regal realisiert ein einheitliches Objektmodell in dem sich eine Vielzahl von Publikationstypen speichern lassen. Die Speicherschicht wird über Fedora Commons 3 realisiert.

Eine einzelne Publikation besteht i.d.R. aus mehreren Fedora Commons 3-Objekten, die in einer hierarchischen Beziehung zueinander stehen.

Table 1. Fedora Object
Datenstrom Pflicht Beschreibung

DC

Ja

Von Fedora vorgeschrieben. Wird für die fedorainterne Suche verwendet

RELS-EXT

Ja

Von Fedora vorgeschrieben. Wird für viele Sachen verwendet - (1) Hierarchien - (2) Steuerung der Sichtbarkeiten - (2) OAI-Providing

data

Nein

Die eigentlichen Daten der Publikation. Oft ein PDF.

metadata oder metadata2

Nein

Bibliografische Metadaten. Metadata2 wurde mit dem Umstieg auf die Lobid-API v2 eingeführt.

objectTimestamp

Nein

Eine Datei mit einem Zeitstempel. Der Zeitstempel wird bei bestimmten Aktionen gesetzt.

seq

Nein

Eine Hilfsdatei mit einem JSON-Array. Das Array zeigt an, in welcher Reihenfolge Kindobjekte anzuzeigen sind. Dieses Hilfskonstrukt existiert, da in der RELS-EXT keine RDF-Listen abgelegt werden können.

conf

Nein

Websites und Webschnitte speichern in einem conf-Datenstrom alle Parameter mit denen die zugehörige Webseite geharvested wurde.

Die Metadaten werden als ASCII-Kodierte N-Triple abgelegt. Da alle Fedora-Daten als Dateien im Dateisystem abgelegt werden, ist diese Veriante besonders robust gegen Speicherfehler. N-Triple ist ein Format, dass sich Zeilenweise lesen lässt. ASCII ist die einfachste Form der Textkodierung.

Die Daten werden als "managed"-Datastream in den Objektspeicher der Fedora abgelegt. Eine Ausnahme bilden Webseiten. Die als WARC gespeicherten Inhalte werden "unmanaged" lediglich verlinkt. Im Fedora Objektspeicher wird nur eine Datei mit der ensprechenden Referenz abgelegt.

2.2. Namespaces und Identifier

Jede Regal-Installation arbeitet auf einem festgelegten Namespace. Wenn über die regal-api Objekte angelegt werden, finden sich diese immer in dem entsprechenden Namespace wieder. Hinter dem Namespace findet sich, abgetrennt mit einem Dopplepunkt eine hochlaufende Zahl, die i.d.R. über Fedora Commons 3 bezogen wird.

Der so zusammengesetzte Identifier kommt in allen Systemkomponenten zum Einsatz.

Table 2. Beispiel Regal Identifier
ID Komponente URL

regal:1

drupal

http://localhost/resource/regal:1

regal:1

regal-api

http://api.localhost/resource/regal:1

regal:1

fedora

http://localhost:8080/fedora/objects/regal:1

regal:1

elasticsearch

http://localhost:9200/regal/_all/regal:1

2.3. Deskriptive Metadaten

Regal unterstützt eine große Anzahl von Metadatenfeldern zur Beschreibung von bibliografischen Ressourcen. Jedes in Regal verspeicherte Objekt kann mit Hilfe von RDF-Metadaten beschrieben werden. Das System verspeichert grundsätzlich alle Metadaten, solange Sie im richtigen Format an die Schnittstelle gespielt werden.

Darüberhinaus können über bestimmte Angaben, bestimmte weitergehende Funktionen angesteuert werden. Dies betrifft u.A.:

  • Anzeige und Darstellung

  • Metadatenkonvertierungen

  • OAI-Providing

  • Suche

Alle bekannten Metadateneinträge werden in der Komponente Etikett verwaltet. In Etikett kann konfiguriert werden, welche URIs aus den RDF-Daten in das JSON-LD-Format von regal-api überführt werden. Außerdem kann die Reihenfolge der Darstellung, und das Label zur Anzeige gesetzt werden.

Table 3. Etikett-Eintrag für dc:title
Label Pictogram Name (json) URI Type Container Comment

Titel

keine Angabe

title

http://purl.org/dc/terms/title

String

keine Angabe

keine Angabe

Etikett-Eintrag als Json
"title":{
	"@id"="http://purl.org/dc/terms/title",
	"label"="Titel"
}

Die etikett Datenbank wird beim Neustart jeder regal-api-Instanz eingelesen. Außerdem wird die HTTP-Schnittstelle von Etikett immer wieder angesprochen um zur Anzeige geeignete Labels für URIs in das System zu holen. Das regal-api-Modul läuft dabei auch ohne den Etikett-Services, allerdings nur mit eingeschränkter Funktionalität; beispielsweise fallen Anzeigen von verlinkten Ressourcen (und das ist in Regal fast alles) weniger schön aus.

2.3.1. Wie kommen bibliografische Metadaten ins System?

In Regal können bibliografische Metadaten aus dem hbz-Verbundkatalog an Ressourcen "angelinkt" werden. Dies erfolgt über Angabe der ID des entsprechenden Titelsatzes (z.b. HT017766754). Mit Hilfe dieser ID kann Regal einen Titelimport durchführen. Dabei wird auf die Schnittstellen der Lobid-API zugegriffen.

Regal bietet außerdem die Möglichkeit Metadaten über Erfassungsmasken zu erzeugen und zu speichern. Dies erfolgt mit Hilfe des Moduls Zettel. Zettel ist ein Webservices, der verschiedene HTML-Formulare bereitstellt. Die Formulare können RDF-Metadaten einlesen und ausgeben. Zettel-Formulare werden über Javascript mit Hilfe eines IFrame in die eigentliche Anwendung angebunden. Über Zettel werden Konzepte aus dem Bereich Linked Data umgesetzt. So können Feldinhalte über entsprechende Eingabeelemente in Drittsystemen recherchiert und verlinkt werden. Die Darstellung von Links erfolgt in Zettel mit Hilfe von Etikett. Umfangreichere Notationssysteme wie Agrovoc oder DDC werden über einen eigenen Index aus dem Modul skos-lookup eingebunden. Zettel unterstützt zur Zeit folgende Linked-Data-Quellen:

  • Lobid (GND)

  • Lobid (Ressource)

  • Agrovoc

  • DDC

  • CrossRef (Funder Registry)

  • Orcid

  • Geonames

  • Open Street Maps Koordinaten

2.4. Anzeige und Darstellung

Über die Schnittstellen der regal-api können unterschiedliche Darstellungen einer Publikation bezogen werden. Über Content Negotiation können Darstellungen per HTTP-Header angefragt werden. Um unterschiedliche Darstellungen im Browser anzeigen zu lassen, kann außerden, über das Setzen von entsprechenden Endungen, auf unterschiedliche Representationen eine Resource zugegriffen werden.

Auswahl von Pfaden zu unterschiedlichen Representationen einer Ressource
/resource/danrw:1
/resource/danrw:1.json
/resource/danrw:1.rdf
/resource/danrw:1.epicur
/resource/danrw:1.mets

In der HTML-Darstellung greift regal-api auf den Hilfsdienst Thumby zu, um darüber Thumbnail-Darstellungen von PDFs oder Bilder zu kreieren. Bei großen Bildern wird außerdem der Deepzoomer angelinkt, der eine Darstellung von Hochauflösenden Bildern über das Tool OpenSeadragon erlaubt. Video- und Audio-Dateien werden über die entsprechenden HTML5 Elemente gerendert.

2.5. Der hbz-Verbundkatalog

Metadaten, die über den Verbundkatalog importiert wurden, können über einen Cronjob regelmäßig aktualisiert werden. Außerdem können diese Daten über OAI-PMH an den Verbundkatalog zurückgeliefert werden, so dass dieser, Links auf die Volltexte erhält.

2.6. Metadatenkonvertierung

Für die Metadatenkonvertierung gibt es kein festes Vorgehensmodell oder Werkzeug. I.d.R. gibt es für jede Representation eine oder eine Reihe von Javaklassen, die für eine On-the-fly-Konvertierung sorgen. Die HTML-Darstellung basiert grundlegend auf denselben Daten, die auch im Elasticsearch-Index liegen und ist im wesentlichen eine JSON-LD-Darstellung, die mit Hilfe der in Etikett hinterlegten Konfiguration aus den bibliografischen Metadaten gewonnen wurde.

2.7. OAI-Providing

Öffentlich zugängliche Publikationen sind auch über die OAI-Schnittstelle verfügbar. Dabei wird jede Publikation einer Reihe von OAI-Sets zugeordnet und in unterschiedlichen Formaten angeboten.

Table 4. OAI Set
Set Kriterium

ddc:*

Wenn ein dc:subject mit dem String "http://dewey.info/class/" beginnt, wird ein Set mit der entsprechenden DDC-Nummer gebildet und die Publikation wird zugeordnet

contentType

Der "contentType" weist darauf hin, in welcher Weise die Publikation in Regal. Abgelegt ist.

open_access

All Publikationen, die als Sichtbarkeit "public" haben

urn-set-1

Publikationen mit einer URN, die mit urn:nbn:de:hbz:929:01 beginnt

urn-set-2

Publikationen mit einer URN, die mit urn:nbn:de:hbz:929:02 beginnt

epicur

Publikationen, die in einem URN-Set sind

aleph

Publikationen , die mit einer Aleph-Id verknüpft sind

edoweb01

spezielles, pro regal-api-Instanz konfigurierbares Set für alle Publikationen, die im aleph-Set sind

ellinet01

spezielles, pro regal-api-Instanz konfigurierbares Set für alle Publikationen, die im aleph-Set sind

Table 5. OAI Metadatenformat
Format Kriterium

oai_dc

Alle öffentlich sichtbaren Objekte, die als bestimmte ContentTypes angelegt wurden.

epicur

Alle Objekte, die eine URN haben

aleph

Alle Objekte, die einen persistenten Identifier haben

mets

Wie oai_dc

rdf

Wie oai_dc

wgl

Format für LeibnizOpne. Alle Objekte die über das Feld "collectionOne" einer Institution zugeordnet wurden und über den ContentType "article" eingeliefert urden.

2.8. Suche

Der Elasticsearch-Index wird mit Hilfe einer JSON-LD Konvertierung befüllt. Die Konvertierung basiert im wesentlichen auf den bibliografischen Metadaten der einzelnen Ressourcen und wir mit Hilfe der in Etikett hinterlegten Konfiguration erzeugt.

2.9. Zugriffsberechtigungen und Sichtbarkeiten

Regal setzt ein rollenbasiertes Konzept zur Steuerung von Zugriffsberechtigungen um. Eine besondere Bedeutung kommt dem lesenden Zugriff auf Ressourcen zu. Einzelne Ressourcen können in ihrer Sichtbarkeit so eingeschränkt werden, dass nur mit den Rechten einer bestimmten Rolle lesend zugegriffen werden kann. Dabei kann der Zugriff auf Metadaten und Daten separat gesteuert werden.

Regal Zugriffsrechte
Figure 2. Screenshot zur Verdeutlichung von Sichtbarkeiten in Regal

Die Konfiguration hat Auswirkungen auf die Sichtbarkeit einer Publikation in den unterschiedlichen Systemteilen. Die folgende Tabelle veranschaulicht den derzeitigen Stand der Implementierung.

2.9.1. Sichtbarkeiten, Operationen, Rollen

Table 6. Schreibender Zugriff auf Daten und Metadaten

Rolle

Art der Aktion

ADMIN

Darf alle Aktionen durchführen. Auch Bulk-Aktionen und "Purges"

EDITOR

Darf Objekte anlegen, löschen, Sichtbarkeiten ändern, etc.

Table 7. Lesender Zugriff auf Metadaten
Sichtbarkeit Rolle

public

GUEST,READER,SUBSCRIBER,REMOTE,ADMIN,EDITOR

private

ADMIN,EDITOR

Table 8. Lesender Zugriff auf Daten
Sichtbarkeit Rolle

public

GUEST,READER,SUBSCRIBER,REMOTE,ADMIN,EDITOR

restricted

READER,SUBSCRIBER,REMOTE,ADMIN,EDITOR

remote

READER,SUBSCRIBER,REMOTE,ADMIN,EDITOR

single

SUBSCRIBER,ADMIN,EDITOR

private

ADMIN,EDITOR

2.10. Benutzerverwaltung

Die Benutzerverwaltung von Regal findet innerhalb von Drupal statt. Zwar können auch in der regal-api Benutzer angelegt werden, jedoch ist die Implementierung in diesem Bereich erst rudimentär.

2.10.1. Drupal

Benutzer in Drupal können über das Modul regal-drupal unterschiedliche Rollen zugewiesen werden. Die Authorisierung erfolgt passwortbasiert. Alle Drupal-Benutzer greifen über einen vorkonfigurierten Accessor auf die regal-api zu. Alle Zugriffe erfolgen verschlüsselt unter Angabe eines Passwortes. Die Rolle mit deren Berechtigungen zugegriffen wird, wird dabei in regal-drupal gesetzt. Die Drupal-BenutzerId wird als Metadatum in Form eines proprietären HTTP-Headers mit an regal-api geliefert.

2.10.2. Regal-Api

Auch in regal-api können Api-Benutzer angelegt werden. Zur Benutzerverwaltung wird eine MySQL-Datenbank eingesetzt, in der die Passworte der Nutzer abgelegt sind (Hash+Salt).

2.11. Ansichten

Um Daten, die in regal-api abgelegt wurden zur Anzeige zu bringen sind i.d.R. mehrere Schritte nötig. Die genaue Vorgehensweise ist davon abhängig, wo die Daten abgelegt werden (in welchem Fedora Datenstrom). Grundsätzlich basiert die HTML-Darstellung auf den Daten, die unter dem Format .json2 einer Ressource abrufbar sind und einen Eintrag in context.json haben. Daten zur Ansicht bringen

  1. Eintrag des zugehörigen RDF-Properties in die entsprechende Etikett-Instanz, bzw. in die /conf/labels.json. Der Eintrag muss einen Namen, ein Label und einen Datentyp haben. regal-api neu starten, bzw mit POST /context.json das neu Laden der Contexteinträge erzwingen.

  2. Dies müsste reichen, um eine Standardanzeige in der HTML-Ausgabe zu erreichen

  3. Wenn die Daten nicht erscheinen, sollte man überprüfen, ob sie unter dem Format .json2 erscheinen. Wenn nicht, stellt sich die Frage, wo die Daten abgelegt werden. Komplett werden nur die Daten aus dem Fedora Datenstrom /metadata2 prozessiert. Befindet sich das Datum in z.B. im /RELS-EXT Datenstrom so muss es zunächst manuell unter helper.JsonMapper#getLd2() in das JSON-Objekt eingefügt werden.

  4. Einige Felder werden auch ausgeblendet. Dies geschieht in regal-api unter /public/stylesheets/main.css und in Drupal innerhalb der entsprechenden themes.

  5. Um spezielle Anzeigen zu realisieren muss schließlich im HTML-Template angefasst werden, unter /app/views/tags/resourceView.scala.html .

Insgesamt läuft es also so: Alles was in Etikett konfiguriert ist, wird auch ins JSON und damit ins HTML übernommen. Dinge, die im HTML nicht benötigt werden, werden über CSS wieder ausgeblendet.

3. Software

Die technische Dokumentation der HTTP-Schnittstelle findet sich unter API Doku

Nachfolgend sei eine Innenansicht der einzelnen Module aufgestellt. Die Integration der Module erfolgt i.d.R. über HTTP. Die Module werden über entsprechende Einträge in der Apache-Konfiguration sichtbar gemacht. Es handelt sich also um eine Webservice-Architektur, in der alle Webservices über einen Apache-Webserver und entsprechende Einträge in ihren Konfigurationsdateien miteinander verbunden werden.

Regal Abhängigkeiten
Figure 3. Regal Abhängigkeiten

3.1. regal-api

Table 9. Überblick

Source

regal-api

Technik

Play 2.4.2

Ports

9000 / 9100

Verzeichnis

/opt/regal/apps/regal , /opr/regal/src/regal

HTTP Pfad

/

Mit regal-api werden alle grundlegenden Funktionen von Regal bereitgestellt. Dies umfasst:

  • HTTP Schnittstelle

  • Sichtbarkeiten, Zugriffskontrolle, Rollen

  • Speicherung, Datenhaltung

  • Konvertierungen

  • Ansichten

  • Suche

  • Webarchivierung

Der Webservice ist auf Basis von Play 2.4.2 realisiert und bietet eine reichhaltig HTTP-API zur Verwaltung von elektronischen Publikationen an. Die regal-api operiert auf Fedora Commons 3, MySql und Elasticsearch 1.1. Über die API werden auch Funktionalitäten von Etikett, Thumby, Zettel und Deepzoomer angesprochen. Für die Webarchivierung werden heritrix, wpull und openwayback angebunden.

3.1.1. Konfiguration

Table 10. Dateien im /conf Verzeichnis
Datei Beschreibung

aggregations.conf

Diese Datei wird verwendet um die Schnittstelle /browse zu konfigurieren. Die Einträg im Object "aggs" können direkt über die /browse Schnittstelle angesprochen werden. Mit Hilfe des Elasticsearch-Indexes wird dann eine entsprechende Antwort generiert. Beispiel: /browse/rdftype liefert eine Liste mit allen Publikationstypen, die im Index vorhanden sind.

application.conf.tmpl

Eine template Datei für die Hauptkonfiguration von regal-api. Diese Datei sollte zur lokalen Verwendung einmal nach application.conf kopiert werden. In der Datei sind alle Passwörter auf admin gesetzt.

crawler-beans.cxml

Die Datei wird verwendet, wenn im Webarchivierungsmodul eine neue Konfiguration für eine Webseite angelegt wird.

ehcache.xml

die Konfiguration der Ehcache Komponente

fedora-users.xml

deprecated - Zur Löschung vorgeschlagen

hbz_edoweb_url.txt

deprecated - Zur Löschung vorgeschlagen

html.html

deprecated - Zur Löschung vorgeschlagen

install.properties

deprecated - Zur Löschung vorgeschlagen

labels-edoweb.de

Labels für eine bestimmt Regal-Instanz

labels-for-proceeding-and-researchData.json

deprecated - Zur Löschung vorgeschlagen

labels-lobid.json

deprecated - Zur Löschung vorgeschlagen

labels-publisso.de

Labels für eine bestimmte Regal-Instanz

labels.json

Eine sinnvolle Startkonfiguration. Die Datei wurde mit Etikett erzeugt. Beim Start von regal-api wird zunächst versucht eine ähnliche Konfiguration direkt von einer laufenden Etikett-Instanz zu holen. Wenn dies nicht klappt, wird auf die labels.json zurückgegriffen.

list.html

deprecated - Zur Löschung vorgeschlagen

logback.developer.xml

ein logging Konfiguration. Ich kopiere die immer nach logback.developer.js.xml (in .gitignore) und trage sie dann in die application.conf ein. Auf diese Weise kann ich an Loglevels herumkonfigurieren ohne das in diese Änderungen in die Versionsverwaltung spielen zu müssen.

logback.xml

Konfiguration des Loggers. Diese Datei ist in application.conf eingetragen.

mabxml-string-template-on-record.xml

Eine template-Datei zur Generierung von MAB-Ausgaben.

mail.properties

Konfiguration zur Versendung von Mails. Standardmäßig schickt die Applikation eine Mail, sobald sie im Production-Mode neu gestartet wurde. Auch der Umzugsservice im Webarchivierungsmodul verschickt Mails.

nwbib-spatial.ttl

deprecated - Zur Löschung vorgeschlagen

nwbib.ttl

deprecated - Zur Löschung vorgeschlagen

public-index-config.json

Konfiguration des Elasticsearch-Indexes. Da in dem Index vorallem Metadaten liegen, soll fast nicht tokenisiert werden.

routes

Hier sind alle HTTP-Pfade übersichtlich aufgeführt.

scm-info.sh

Diese Datei kann man unter Linux in die profile-Konfiguration seines Benutzers einbinden. Dann erhält man im Terminal farbige Angabgen zu Git-Branches,etc.

start-regal.sh

deprecated - Zur Löschung vorgeschlagen

tomcat-users.xml

deprecated - Zur Löschung vorgeschlagen

unescothes.ttl

deprecated - Zur Löschung vorgeschlagen

wglcontributor.csv

deprecated - Zur Löschung vorgeschlagen

3.1.2. Die Applikation

Table 11. Das /app Verzeichnis
Package Beschreibung

default package

Hier befindet sich die Datei Global, die in Play 2.4 noch eine große Rolle spielt. In der Datei können zum Beispiel Aktionen vor dem Start der Applikation erfolgen, auch können hier HTTP-Requests mit geloggt werden. Bestimmte Aktionen werden nur im Production-Mode ausgeführt, d.h. nur wenn die Applikation mit start gestartet wurde oder über dist ein entsprechendes Binary erzeugt wurde.

actions

Hier sind Funktionen versammelt, die meist unmittelbar aus den Controller-Klassen aufgerufen werden.

archive.fedora

Ein Reihe von Dateien, über die Zugriffe auf Fedora Commons 3 organisiert werden. Hier finden sich auch einige Hilfsklassen (Utils). Das FedoraInterface zeigt an, welche Aktionen auf der Fedora ausgeführt werden. Der Code in diesem Paket gehört mit zu dem ältesten Code im gesamten Regal-Projekt.

archive.search

Zugriff auf die Elasticsearch

authenticate

Regal verwendet Basic-Auth zur Authentifizierung. Um die entsprechenden Aufrufe in den Controllern zu Schützen wird eine Annotation @BasicAuth verwendet. Diese findet sich hier. Die Annotation selbst bewirkt, dass jeder Controller-Aufruf durch die Methode basicAuth der Klasse BasicAuthAction.java läuft. Ziel dieser Prozedur ist es, dem aktuellen Zugriff die Berechtigungen einer bestimmten Rolle zuzuordnen.

controllers

Der Code, der in diesen Klassen organisiert ist, wird bei den entsprechenden HTTP-Aufrufen ausgeführt. In der /conf/routes Datei kann man sehen, welcher HTTP-Aufruf, welchen Methoden-Aufruf zur Folge hat. Die Controller-Klassen sind i.d.R. von der Klasse MyController abgeleitet, die Hilfsfunktionen bereitstellt, aber auch Funktionen zur Überprüfung von Zugriffsrechten. Die Überprüfung von Zugriffsrechten erfolgt durch eingebettet Calls und wird über die internen Klassen von MyController realisiert. Beispiel: Die Funktion listNodes in der Klasse controllers.Resource ruft ihre Prozeduren eingebettet in eine Funktion der Klasse ListAction auf. Die Klasse ListAction ist in MyController implementiert und überprüft, ob der Aufruf mit der nötigen Berechtigung erfolgte. Vgl. Zugriffsberechtigungen und Sichtbarkeiten

converter.mab

Diese Datei realisiert das OAI-Providing von MAB-Daten. Ursprünglich war geplant, wesentlich umfangreichere MAB-Datensätze an den Verbundkatalog zu liefern. Daher wird hier mit einer eigenen Template-Engine gearbeitet, etc. Ein lustiges Produkt in diesem Kontext ist auch die Klasse models.MabRecord.

de.hbz.lobid.helper

Der hier befindliche Code kommt ursprünglich aus einem anderen Paket, wurde dann aber beim Neuaufbau des Lobid 2 Datendienstes gemeinsam mit den Kollegen weiterentwickelt und ist schließlich wieder hier gelandet. Mittlerweile ist die offizielle JSON-LD-Library soweit entwickelt, dass man die Konvertierung auch darüber machen kann. Achja, denn dafür ist der Code: Lobid N-Triples in schönes JSON umzuformen, das dann auch in den Elasticsearch-Index kann.

helper

Die mit Abstand wichtigste Klasse in diesem Package heißt JsonMapper. Hier wird das JSON für Index und Ansichten erzeugt.

helper.mail

Emails verschicken.

helper.oai

Einige Klassen zur Regelung des OAI-Providings. Der OAIDispatcher analysiert, ob und wie ein Node an die OAI-Schnittstelle gelangt.

models

Die wichtigste Klasse hier ist Node über diese Klasse läuft der Großteil des Datentransportes.

views

Templates in der Sprache Twirl und einige Java-Hilfsklassen.

views.mediaViewers

Ein paar Viewer, die über die Hilfsklasse ViewerInfo in tags.resourceView eingebunden werden können.

views.oai

Mit Twirl XML zu generieren war keine gute Idee.

views.tags

Hilfstemplates.

3.2. Etikett

Table 12. Überblick

Source

etikett

Technik

Play Play 2.2.2

Ports

9002 / 9102

Verzeichnis

/opt/regal/apps/etikett , /opr/regal/src/etikett

HTTP Pfad

/tools/etikett

Etikett ist eine einfache Datenbankanwendung, die es erlaubt

  1. Menschenlesbare Labels für URIs abzulegen. Über eine HTTP-Schnittstelle kann dann nach dem Label gefragt werden.

  2. Auch Konfigurationen zur Erzeugung eines JSON-LD Kontextes können abgelegt werden.

  3. Die Etikett-Datenbank erweitert sich dynamisch. Wird in einem authentifizierten Zugriff nach einer noch nicht bekannten URI gefragt, so versucht die Applikation ein Label für die URI zu finden.

In Etikett sind verschiedene Lookups realisiert, die dynamisch Labels für URIs finden können. Beispiele:

  • Crossref

  • Geonames

  • GND

  • Openstreetmap

  • Orcid

  • RDF, Skos, etc.

Fragt man Etikett nach einem Label, so antwortet Etikett mit dem Ergebnis des Lookups. Wenn Etikett nicht in der Lage ist, ein Label zu finden, wird die URI, mit angefragt wurde, zurückgegeben.

Etikett kann auch als Cache verwendet werden. So werden authentifizierte Anfragen in einer Datenbank persistiert. Erneute Anfragen werden dann aus der Datenbank beantwortet, ein erneuter Lookup wird eingespart. Einmal persistierte Labels werden nicht invalidiert. Die Invalidierung kann von außerhalb über authentifizierte HTTP-Zugriffe realisiert werden, stellt aber insgesamt noch ein Desiderat dar.

Etikett kann auch mit Labels vorkonfiguriert werden. Dabei können zusätzliche Informationen zu jeder URIs mit abgelegt werden. Folgende Informationen können in etikett abgelegt werden:

  • URI

  • Label

  • Weight - Zur Definition von Anzeigereihenfolgen.

  • Pictogram Iconfont-ID - Kann anstatt oder zusätzlich zum Label angezeigt werden.

  • ReferenceType - JSON-LD Typ

  • Container - JSON-LD Container

  • Beschreibung - Kommentar als Markdown

Etikett Oberfläche
Figure 4. Etikett Oberfläche

Mit Hilfe dieser Angaben kann Etikett auch einen "JSON-LD Context" bereitstellen. Insgesamt wird über Etikett eine Art "Application Profile" realisiert. Das Profil gibt Auskunft, welche Metadatenfelder (definiert als URIs) in welcher Weise (Typ, Container) Verwendung finden und wie sie angezeigt werden sollen (Label, Weight, Pictogram).

Im Regal-Kontext wird Etikett an vielen Stellen verwendet.

  • Zur Wandlung von RDF nach JSON-LD

  • Zur Anreicherung von RDF Importen

  • Zur menschenlesbaren Darstellung von RDF

  • Zur Konfiguration von Labels, Anzeigereihenfolgen und Pictogrammen

  • Als Cache

3.2.1. Konfiguration

Table 13. Dateien im /conf Verzeichnis
Datei Beschreibung

evolutions

Dieses Verzeichnis enthält SQL-Skripte, die bei Änderungen des Datenbankschemas automatisch über EBean angelegt werden. Beim nächsten Deployment einer neuen Etikett-Version werden die Skripte automatische angewendet. Die Skripte enthalten immer einen mit "Up" markierten Part, und einen mit "Down" markierten Part (für rollbacks).

application.conf

Hier kann ein Benutzer eingestellt werden. Alle Klassen im Verzeichnis models.* erhalten eine SQL-Tabelle.

ddc.turtle

Eine DDC Datei. Die Datei bietet Labels für DDC-URIs an.

labels.json

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

regal.turtle

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

routes

Alle HTTP-Schnittstellen übersichtlich in einer Datei

rpb.turtle

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

rpb2.turtle

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

3.2.2. Die Applikation

Table 14. Das /app Verzeichnis
Package Beschreibung

default

In Global werden die Requests mit geloggt.

controllers

In Application werden alle HTTP-Operationen implementiert. Unterstützt wird BasicAuth.

helper

Verschiedene Klassen, die eine URI verfolgen und versuchen ein Label aus den zurückgelieferten Daten zu kreieren.

models

Das Model Etikett ist persistierbar.

views

Die meisten HTTP-Operationen lassen sich auch über eine Weboberfläche im Browser aufrufen.

3.3. Zettel

Table 15. Überblick

Source

zettel

Technik

Play Play 2.5.4

Ports

9003 / 9103

Verzeichnis

/opt/regal/apps/zettel, /opr/regal/src/zettel

HTTP Pfad

/tools/zettel

Zettel ist ein Webservice zur Bereitstellung von Webformularen. Die Webformulare können über ein HTTP-GET geladen werden. Sollen existierende Daten in ein Formular geladen werden, so können diese Daten (1) als Form-encoded, (2) als JSON, oder (3) als RDF-XML über ein HTTP POST in das Formular geladen werden. Gleichzeitig kann spezifiziert werden, in welchem Format das Formular Daten zurückliefern soll.

Zettel Oberfläche
Logo 5. Zettel Oberfläche

Zettel verfügt über keine eigene Speicherschicht. Daten die über ein Formular erzeugt wurden, werden in der HTTP-Response zurückgeliefert. Zur Integration von Zettel in andere Applikationen wurde ein Kommunikationspattern entwickelt, das auf Javascript beruht. Das Zettel-Formular wird hierzu in einem IFrame in die Applikation eingebunden. Die Applikation muss außerdem ein Javascript einbinden, das auf bestimmte Nachrichten aus dem IFrame lauscht. Bei bestimmte Aktionen sendet das Zettel-Formular dann Nachrichten an die Applikation und erlaubt dieser darauf zu reagieren. Um Daten von Zettel in die Applikation zu bekommen, werden diese im HTML-DOM gespeichert und können von dort durch die Applikation entgegengenommen werden.

Zettel Datenfluss
Logo 6. Zettel Datenfluss

3.3.1. Konfiguration

Table 16. Dateien im /conf Verzeichnis
Datei Beschreibung

application.conf

Die Datei enthält einen Eintrag zur Konfiguration von Etikett. Über einen weiteren Eintrag können "Hilfetexte" angelinkt werden. Die Hilfetexte müssen in einer statischen HTML abgelegt sein. Am Ende der Datei werden einige Limits deutlich über den Standard erhöht, damit die großen RDF-Posts auch funktionieren.

collectionOne.csv

Die Datei regelt den Inhalt eines Combo-Box widgets mit id collectionOne.

ddc.csv

Die Datei regelt den Inhalt eines Combo-Box widgets mit id ddc.

labels.json

Ein paar labels, falls keine Instanz von Etikett erreichbar ist.

logback.xml

Logger Konfiguration.

professionalGroup.csv

Die Datei regelt den Inhalt eines Combo-Box widgets mit id professionalGroup.

routes

Alle HTTP-Pfade übersichtlich in einer Datei

3.3.2. Die Applikation

Table 17. Das /app Verzeichnis
Package Beschreibung

controllers

Es gibt nur einen Controller. Hier ist sowohl die Basisfunktionalität implementiert, als auch die Autocompletion-Endpunkte für die unterschiedlichen Widgets. Die Schnittstelle zu Abhandlung von Formulardaten ist recht generisch gehalten. Über eine ID wird das entsprechende Formular aus dem services.ZettelRegister geholt und das zugehörige Formular wird gerendert. Die Formular erhalten dabei unterschiedliche Templates (z.B. views.Article) und unterschiedliche Modelklassen (z.B. models.Article).

models

Das Model "Article" heißt aus historischen Gründen so. Tatsächlich können mittlerweile auch Kongressschriften und Buchkapitel darüber abgebildet werden (vermutlich wird sich der Name nochmal ändern). Das Model "Catalog" dient zum Import von Daten aus dem Aleph-Katalog (über Lobid). Mit ResearchData steht ein prototypisches Model zur Verarbeitung von Daten über Forschungsdaten zur Verfügung. Alle Models basieren auf einem einzigen "fetten" ZettelModel. Das ZettelModel enthält auch Funktionen zur De/Serialisierung in RDF und Json.

services

Hier werden verschiedene Hilfsklassen versammelt. Die Klasse ZettelFields enthält ein Mapping zur RDF-Deserialisierung.

views

Alle HTML-Sichten und die eigentlichen Formulare.

3.4. skos-lookup

Table 18. Überblick

Source

skos-lookup

Technik

Play Play 2.5.8

Ports

9004 / 9104

Verzeichnis

/opt/regal/apps/skos-lookup, /opr/regal/src/skos-lookup

HTTP Pfad

/tools/skos-lookup

skos-lookup dient zur Unterstützung von Zettel. Der Webservice startet eine eingebettete Elasticsearch-Instanz und verfügt über eine Schnittstelle um SKOS-Daten in separate Indexe zu importieren und Schnittstellen zur Unterstützung von jQuery-Autocomplete- und Select2-Widgets aufzubauen. Auf diese Weise können auch umfangreichere Thesauri und Notationssysteme in den Formularen von Zettel fachgerecht angelinkt werden. skos-lookup unterstützt auch mehrsprachige Thesauri.

Skos-Lookup Beispiel 1
Logo 7. SKOS-Lookup Beispiel 1
Skos-Lookup Beispiel 2
Logo 8. SKOS-Lookup Beispiel 2

3.4.1. Konfiguration

Table 19. Dateien im /conf Verzeichnis
Datei Beschreibung

application.conf

Hier wird der interne Elasticsearch-Index konfiguriert. Auch werden einige Speichereinstellungen erhöht. Damit auch große SKOS-Dateien geladen werden können, sollten auch die Java-Opts erhöht werden.

logback.xml

Logger Konfiguration

routes

Alle HTTP-Pfade übersichtlich in einer Datei

skos-context.json

Ein JSON-LD-Kontext zur Umwandlung von RDF nach JSON. (Origianl von: Jakob Voss)

skos-setting.json

Settings zur Konfiguration des Elasticsearchindexse. (Original von: Jörg Prante)

3.4.2. Die Applikation

Table 20. Das /app Verzeichnis
Package Beschreibung

controllers

Alles in einem Controller. Die API-Methoden liefern HTML und JSON, so dass man sie aus dem Browser, aber auch über andere Tools ansprechen kann.

elasticsearch

Eine embedded Elasticsearch. Dies hat den Vorteil, dass man eine aktuellere Version nutzen kann, als z.B. die regal-api.

services

Hilfsklassen zum Laden der Daten.

views

Ein Formular um neue Daten in die Applikation zu laden. Und ein Beispielformular zur Demonstration der Nutzung.

3.5. Thumby

Table 21. Überblick

Source

thumby

Technik

Play Play 2.2.2

Ports

9001 / 9101

Verzeichnis

/opt/regal/apps/thumby, /opr/regal/src/thumby

HTTP Pfad

/tools/thumby

Thumby realisiert einen Thumbnail-Generator. Über ein HTTP-GET wird Thumby die URL eines PDFs, oder eines Bildes übergeben. Sofern die Thumby den Server kennt, wird es versuchen ein Thumbnail der zurückgelieferten Daten zu erstellen. Die Daten werden dauerhaft auf der Platte abgelegt und zukünftige Requests, die auf dasselbe Bild verweisen werden direkt aus dem Speicher von Thumby beantwortet.

3.5.1. Konfiguration

Table 22. Dateien im /conf Verzeichnis
Datei Beschreibung

application.conf

Hier wird eine Whitelist gesetzt. Thumby verarbeitet nur URLs von den hier angegebenen Quellen. Hier wird auch der Pfad auf der Platte gesetzt, unter dem Thumby thumbnail-Daten ablegt.

routes

Alle HTTP-Pfade übersichtlich in einer Datei

3.5.2. Die Applikation

Table 23. Das /app Verzeichnis
Package Beschreibung

controllers

Der Controller realisiert eine GET-Methode, über die Thumbnails erzeugt und zurückgegeben werden.

helper

Klassen zur Organisation des Speichers und zur Thumbnailgenerierung.

views

Es gibt eine Oberfläche mit einem Upload-Formular.

3.6. Deepzoomer

Table 24. Überblick

Source

DeepZoomService

Technik

Servlet 2.3

Ports

9091 / 9191

Verzeichnis

/opt/regal/tomcat-for-deepzoom/, /opr/regal/src/DeepZoomService

Der [DeepZoomService] kann als WAR in einem Application-Server deployed werden. Mit dem Deepzoomer können pyramidale Bilder erzeugt, gespeichert und über eine OpenSeadragon-konforme Schnittstelle abgerufen werden. Auf diese Weise kann in Regal eine Viewer-Komponente realisiert werden, die die Anzeige sehr großer, hochaufgelöster Bilder im Webbrowser unterstützt.

3.6.1. Konfiguration

Table 25. Dateien im /conf Verzeichnis
Datei Beschreibung

deepzoomer.cfgf

Hier werden lokale Verzeichnisse, aber auch die Server-URLs, unter denen der Service öffentlich abrufbar ist, gesetzt.

3.7. regal-drupal

Table 26. Überblick

Source

regal-drupal

Technik

PHP 5

Ports

80 / 443

Verzeichnis

/opt/regal/var/drupal/sites/all/modules/

Ein Drupal 7 Modul über das Funktionalitäten der regal-api angesprochen werden können. Das Modul bietet Oberflächen zur Konfiguration, zur Suche und zur Verwaltung von Objekthierarchien.

3.7.1. Die Applikation

Table 27. Verzeichnisstruktur
Verzeichnis Beschreibung

edoweb

Hier ist der Code für die Oberflächen.

edoweb-field

Hier werden Felder für unterschiedliche RDF-Properties in der Drupal-Datenbank konfiguriert. Der Code ist größtenteils obsolet, da die Feldlogik nicht mehr benutzt wird.

edoweb_storage

Hier sind die Zugriffe auf regal-api und [_elasticsearch] zu finden.

3.8. edoweb-drupal-theme

Table 28. Überblick

Source

edoweb-drupal-theme

Technik

PHP 5

Ports

80 / 443

Verzeichnis

/opt/regal/var/drupal/sites/all/themes/

Eine Reihe von Stylsheets, CSS, Icons zur Gestaltung einer Oberfläche für den Server https://edoweb-rlp.de

3.9. zbmed-drupal-theme

Table 29. Überblick

Source

zbmed-drupal-theme

Technik

PHP 5

Ports

80 / 443

Verzeichnis

/opt/regal/var/drupal/sites/all/themes/

Eine Reihe von Stylsheets, CSS, Icons zur Gestaltung einer Oberfläche für den Server https://repository.publisso.de

3.10. openwayback

Repo: https://github.com/iipc/openwayback Servlet 2.5 .Überblick

Source

openwayback

Technik

Servlet 2.5

Ports

8091 / 8191

Verzeichnis

/opt/regal/tomcat-for-openwayback/, /opr/regal/src/openwayback

Achtung: Es gibt einen am hbz entwickelten Branch. Dieser ist nicht auf Github.

Openwayback ist eine Webapplikation die im ROOT Bereich eines Tomcats installiert werden will. Sie kann Verzeichnisse mit WARC-Dateien indexieren und darauf eine Oberfläche zur Recherche und zur Navigation aufbauen.

3.11. heritrix

Heritrix ist ein Werkzeug zur Sammlung von Webseiten. Heritrix startet standalone als Webapplikation und bietet eine Weboberfläche zur Verwaltung von Sammelvorgängen an. Eingesammelte Webseiten werden als WARC-Dateien in einem bestimmten Bereich der Platte abgelegt.

3.12. wpull

Wpull ist ein Kommandozeilen-Wermzeug zur Sammlung von Webseiten. Mit WPull können WARC-Dateien erzeugt werden.

3.13. Fedora Commons 3

Fedora Commons 3 ist ein Repository-Framework. Für Regal wird vorallem die Speicherschicht von Fedora Commons 3 benutzt. Fedora-Commons legt alle Daten im Dateisystem (auch) ab. Mit den Daten aus dem Dateisystem lässt sich eine komplette Fedora-Commons 3 Instanz von grundauf neu aufbauen.

3.14. MySql

MySQL wir von Fedora, regal-api und etikett verwendet.

3.15. Elasticsearch 1.1

Elasticsearch ist eine Suchmaschine und wird von regal-api verwendet. Auch regal-drupal greift auf den Index zu.

3.16. Drupal 7

Über Drupal 7

4. Installation

4.1. Vagrant

Zur Veranschaulichung dieser Dokumentation wird ein Vagrant-Skript angeboten, mit dem eine Regal-Installation innerhalb eines VirtualBox-Images erzeugt werden kann.

Zur Installation kannst Du folgende Schritte ausführen. Die Kommandos beziehen sich auf die Installation auf einem Ubuntu-System. Für andere Betriebssyteme ist die Installation ähnlich.

Die VirtualBox hat folgendes Setup

  • hdd 40GB

  • cpu 2core

  • ram 4096G

4.1.1. VirtualBox installieren

sudo apt-get install virtualbox

4.1.2. Vagrant installieren

cd /tmp
wget https://releases.hashicorp.com/vagrant/2.2.3/vagrant_2.2.3_x86_64.deb
sudo dpkg -i vagrant_2.2.3_x86_64.deb

4.1.3. Repository herunterladen

git clone https://github.com/jschnasse/Regal
cd Regal/vagrant/ubuntu-14.04

4.1.4. Eine JDK8 bereitstellen

Hierfür bitte ein JDK8-Tarball herunterladen und unter dem Namen java8.tar.gz in einem Verzeichnis /bin unterhalb des Vagrant-Directories bereitstellen.

mkdir bin
mv ~/downloads/jdk.... bin/java8.tar.gz

4.1.5. Geteiltes Entwicklungsverzeichnis

mkdir ~/regal-dev

4.1.6. Vagrant Guest Additions installieren

vagrant plugin install vagrant-vbguest && vagrant reload

4.1.7. Vagrant Host anlegen

Damit alle Dienste komfortabel erreichbar sind, muss in die lokale HOSTs Datei ein Eintrag für die Vagrant-Box erfolgen. Im Vagrantfile ist die IP 192.168.50.4 für die Box konfiguriert. Über die FRONTEND und BACKEND Einträge in der variables.conf ist der Servername als regal.vagrant definiert.

sudo printf "192.168.50.4 regal.vagrant api.regal.vagrant" >> /etc/hosts

4.1.8. Vagrant starten

vagrant up

4.1.9. Auf der Maschine einloggen

vagrant ssh

4.2. Server

Die Installation auf einem Server kann mit Hilfe des mitgelieferten Skriptes regal-install.sh erfolgen. Dazu muss analog zur Vagrant-Installation zunächst das bin Verzeichnis mit einem JDK aufgebaut werden. Danach erfolgt die Installation unter /opt/regal und mit einem Benutzer regal (vgl. variables.conf)

4.2.1. Hardware Empfehlung

  • hdd >500GB

  • cpu 8 core

  • ram 32 G

4.2.2. Unterschiede zur Vagrant Installation

Auf dem Server empfehlen ich den fedora tomcat mit erweiterten Speichereinstellungen zu betreiben.

Dazu in /opt/regal/bin/fedora/tomcat/bin eine setenv.sh anlegen und folgende Zeilen hinein kopieren.

CATALINA_OPTS=" \
-Xms1536m \
-Xmx1536m \
-XX:NewSize=256m \
-XX:MaxNewSize=256m \
-XX:PermSize=256m \
-XX:MaxPermSize=256m \
-server \
-Djava.awt.headless=true \
-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true"

export CATALINA_OPTS

5. Entwicklung Java

5.1. In der VirtualBox

Hat man über Vagrant eine neue VirtualBox erzeugt und alle Konfigurationen wie beschrieben vorgenommen, kann man die VirtualBox zur Entwicklung nutzen. Da im Installationsprozess bereits Eclipse-Projekte der unter /opt/regal/src befindlichen Java-Applikationen erzeugt wurden, können die Projekte direkt aus dem "synced folder" unter ~/regal-dev in eine Eclipse-IDE auf dem Host-System importiert werden.

Damit Änderungen am Code in der VirtualBox direkt sichtbar werden, sollte die Applikation zunächst im Develop-Mode neu gestartet werden. Dazu loggt man sich auf der VirtualBox mit vagrant ssh ein und stoppt zunächst den entsprechenden Service, z.B. sudo service regal-api stop. Anschließend navigiert man in das Source-Verzeichnis, z.B. cd /opt/regal/src/regal-api. Hier startet man die Applikation auf dem korrekten Port (im Zweifel unter /opt/regal/apps/regal-api/conf/application.conf nachschauen). Der Start im Develop-Mode erfolgt aus dem Verzeichnis der Applikation, mit z.B. /opt/regal/bin/activator/bin/activator -Dhttp.port=9100. Danach kann in die Kosole run eingegegeben werden. Die Applikation sollte nun unter dem entsprechenden Port (im Beispiel: 9100) antworten.

Leider funktioniert das Reloading zwischen Host-System und Guest-VirtualBox nicht richtig. D.h. nach Code-Änderungen im Host, muss auf der Virtualbox zunächst mit Ctrl+D und run neu gestartet werden, damit die Änderungen sichtbar werden.

5.2. Auf dem eigenen System

Die Javakomponenten können problemlos auch auf einem aktuellen Ubuntusystem entwickelt werden. Leider läuft die PHP/Drupal-Implementierung nicht unter neueren Ubuntusystemen. Für die lokale installation können die entsprechenden Funktionen aus dem regal-install.sh ausgeführt werden. Dazu einfach eine Kopie anlegen, entsprechend editieren und ausführen.

mkdir regal-install
cp -r path/to/Regal/vagrant/ubuntu-XX/* regal-install
cd regal-install
# Edit system user "vagrant" --> "your user"
editor variables.conf
# put drupal stuff in comments
#
#  #installDrush
#  #installDrupal
#  #installRegalDrupal
#  #installDrupalThemes
#  #configureDrupalLanguages
#  #configureDrupal
#
editor regal-install.sh

6. Administration

6.1. Aktualisierung

6.1.1. Play-Applikationen

Die Aktualisierung der Regal-Komponenten erfolgt über Skripte. Die Aktualisierung funktioniert dabei so, dass der Quellcode der zu aktualisierenden Komponente unter /opt/regal/src per git auf den entsprechenden Branch gestellt wird. Danach wird ein neues Kompilat der Komponente erzeugt. Die aktuelle Konfiguration wird aus /opt/regal/conf genommen und es wird unter /opt/regal/apps eine neue lauffähige Version abgelegt.

Neue Versionen werden immer parallel zu alten Versionen gestartet und über einen Wechsel der Apachekonfiguration aktiviert. Erst danach wird die alte Version heruntergefahren.

Der komplette Aktualisierungsprozess erfolgt automatisch. Die alte Version bleibt immer auf dem Server liegen, so dass bei Bedarf wieder zurück gewechselt werden kann.

6.1.2. Tomcat-Applikation

Es wird ein war-Container erzeugt und im Tomcat hot-deployed.

6.1.3. Drupal-Module

Beinhaltet die Aktualisierung ein Datenbankupdate, so wird Drupal erst in den Wartungszustand versetzt (per drush oder über die Oberfläche). Danach wird die aktualisierte Version einfach per Git geholt. Bei Datenbankupdates wird noch ein Drupal-Updateskript ausgeführt.

6.1.4. Speicherschicht

Aktualisierungen von MySQL, Elasticsearch und Fedora gehen mit einer Downtime einher.

6.2. Verzeichnisse

Table 30. Verzeichnisstruktur
Verzeichnis Beschreibung

/opt/regal

Außer Apache2, Elasticsearch und MySQL befinden sich alle Regal-Komponenten unter diesem Verzeichnis.

/opt/regal/apps

Die auf Play beruhenden Komponenten: etikett fedora regal-api skos-lookup thumby zettel

/opt/regal/bin

Fremdpakete wie activator, fedora, heritrix, python - weitere tomcats.

/opt/regal/conf

Die variables.conf und die application.conf wird von verschiedenen Komponenten verwendet.

/opt/regal/logs

Logfiles der Skripte und Cronjobs

/opt/regal/src

Alle Eigenentwicklungen oder im Quellcode modifizierten Komponenten.

/opt/regal/var

drupal und Datenverzeichnisse.

6.3. Ports

Table 31. Ports und Komponenten (typische Belegung)
Port Komponente

80 /443

Apache 2

8080

fedora tomcat

9090

openwayback tomcat

9200

elasticsearch

9000/9100

regal-api

9001/9101

thumby

9002/9102

etikett

9003/9103

zettel

9004/9104

skos-lookup

6.4. Logs

Table 32. Logfiles
Komponente Pfad

Apache

/var/log/apache2

Tomcat

/opt/regal/bin/fedora/tomcat/logs

Fedora

/opt/regal/bin/fedora/server/logs

Elasticsearch

/var/log/elasticsearch

regal-api

/opt/regal/apps/regal-api/logs

drupal

/var/log/apache2 #otherhosts ! und/var/log/apache2/error.log (hier ist auch die Debugausgabe)

MySql

/var/log/mysql

monit

/var/log/monit.log

regal-scripts

/opt/regal/logs

6.5. Configs

Table 33. Configfiles
Komponente Pfad

Apache

/etc/apache2/sites-enabled

Tomcat

/opt/regal/bin/fedora/tomcat/conf

Fedora

/opt/regal/bin/fedora/server/conf

Elasticsearch

/etc/elasticsearch

regal-api

/opt/regal/conf enthält Konfigurationsvorschläge des Installers

regal-api

/opt/regal/apps/regal-api/conf

drupal

Konfig kann gut mit dem Tool drush überwacht werden

Elasticsearch Plugins

/etc/elasticsearch

oai-pmh

/opt/regal/bin/fedora/tomcat/webapps/dnb-unr/WEB-INF/classes/proai.properties

monit

/etc/monit

6.6. Apache2

Table 34. Frontend Pfade
Komponente HTTP-Pfad Lokaler Pfad/Proxy

Drupal

/

/opt/regal/var/drupal

Alte Importe von Webarchiven

/webharvests

/data/webharvests

Täglich generierte Datei mit Kennziffern

/crawlreports

/opt/regal/crawlreports

Table 35. API Pfade
Komponente HTTP-Pfad Lokaler Pfad/Proxy

Über wget erstellte Webarchive

/wget-data

/opt/regal/var/wget-data

Über wpull erstellte Webarchive

/wpull-data

/opt/regal/var/wpull-data

Über heritrix erstellte Webarchive

/heritrix-data

/opt/regal/var/heritrix-data

OAI-Schnittstelle für die DNB

/dnb-urn

http://localhost:8080/dnb-urn$1

OAI-Schnittstelle

/oai-pmh

http://localhost:8080/oai-pmh$1

Deepzoomer

/deepzoom

http://localhost:7080/deepzoom$1

Openwayback privat

/wayback

http://localhost:9080/wayback

Openwayback öffentlich

/weltweit

http://localhost:9080/weltweit

Thumby

/tools/thumby

http://localhost:9001/tools/thumby

Etikett

/tools/etikett

http://localhost:9002/tools/etikett

Zettel

/tools/zettel

http://localhost:9004/tools/zettel

Elasticsearch GET

/search

http://localhost:9200

Fedora

/fedora

http://localhost:8080/fedora

JSON-LD Context

/public/resources.json

http://localhost:9002/tools/etikett/context.json

regal-api

/

http://localhost:9000/

heritrix

/tools/heritrix

https://localhost:8443/tools/heritrix

6.7. Matomo

Matomo wird einmal täglich per Cronjob mit Apache-Logfiles befüllt. Dabei erfolgt eine Anonymisierung. Die Logfiles verbleiben noch sieben Tage auf dem Server und werden dann annoynmisiert.

6.8. Monit

Das Tool Monit erlaubt es, den Status der Regal-Komponenten zu überwachen und Dienste ggfl. neu zu starten. Folgende Einträge können in /etc/monit/monitrc vorgenommen werden

check process apache with pidfile /var/run/apache2/apache2.pid
    start program = "/etc/init.d/apache2 start" with timeout 60 seconds
    stop program  = "/etc/init.d/apache2 stop"

check process regal-api with pidfile /opt/regal/apps/regal-api/RUNNING_PID
     start program = "/etc/init.d/regal-api start" with timeout 60 seconds
     stop program = "/etc/init.d/regal-api stop"

check process tomcat6 with pidfile /var/run/tomcat6.pid
     start program = "/etc/init.d/tomcat6 start" with timeout 60 seconds
     stop program = "/etc/init.d/regal-api stop"

check process elasticsearch with pidfile /var/run/elasticsearch.pid
     start program = "/etc/init.d/elasticsearch start" with timeout 60 seconds
     stop program = "/etc/init.d/elasticsearch stop"

check process thumby with pidfile /opt/regal/apps/thumby/RUNNING_PID
     start program = "/etc/init.d/thumby start" with timeout 60 seconds
     stop program = "/etc/init.d/thumby stop"

check process etikett with pidfile /opt/regal/apps/etikett/RUNNING_PID
     start program = "/etc/init.d/etikett start" with timeout 60 seconds
     stop program = "/etc/init.d/etikett stop"

check process zettel with pidfile /opt/regal/apps/zettel/RUNNING_PID
     start program = "/etc/init.d/zettel start" with timeout 60 seconds
     stop program = "/etc/init.d/zettel stop"

6.9. Scripts und Cronjobs

Für das Funktionieren von Regal sind einige regal-scripts sinnvoll. Die Skripte sind sämtlich unter Github zu finden.

Die folgenden Abschnitte zeigen ein typisches Setup.

6.9.1. OAI-Providing

Der OAI-Provider läuft nicht die ganze Zeit mit, da dies Probleme gemacht hat. Er wird nur für einen bestimmten Zeitraum angestellt und dann wieder ausgestellt. Auf diese Weise liefert die OAI-Schnittstelle tagesaktuelle Daten.

0 2 * * * /opt/regal/src/regal-scripts/turnOnOaiPmhPolling.sh
0 5 * * * /opt/regal/src/regal-scripts/turnOffOaiPmhPolling.sh

6.9.2. URN-Registrierung

Die URN-Registrierung erfolgt mit einem gewissen Verzug. Das dafür zuständige Skript überprüft daher zunächst das Anlagedatum der Ressource.

05 7 * * * /opt/regal/src/regal-scripts/register_urn.sh control  >> /opt/regal/regal-scripts/log/control_urn_vergabe.log
1 1 * * * /opt/regal/src/regal-scripts/register_urn.sh katalog >> /opt/regal/regal-scripts/log/katalog_update.log
1 0 * * * /opt/regal/src/regal-scripts/register_urn.sh register >> /opt/regal/regal-scripts/log/register_urn.log

6.9.3. Katalog-Aktualisierung

Das System gleicht einmal am Tag Metadaten mit dem hbz-Verbundkatalog ab und führt ggf. Aktualisierungen durch.

0 5 * * * /opt/regal/src/regal-scripts/updateAll.sh > /dev/null

6.9.4. Matomo

Matomo wird mit Apache-Logfiles befüllt. Innerhalb von Matomo werden die Einträge annonymisiert.

0 1 * * * /opt/regal/regal-scripts/import-logfiles.sh >/dev/null

6.9.5. Logfile Annonymisierung

Apache-Logfiles werden sieben Tage unverändert aufbewahrt. Danach erfolgt eine Annonymisierung.

0 2 * * * /opt/regal/src/regal-scripts/depersonalize-apache-logs.sh

6.9.6. Webgatherer

Der Webgatherer prüft Archivierungsintervalle von Webpages und stößt bei Bedarf die Erzeugung eines neuen Snapshots/Version an.

0 20 * * * /opt/regal/src/regal-scripts/runGatherer.sh >> /opt/regal/regal-scripts/log/runGatherer.log
# Auswertung des letzten Webgatherer-Laufs
0 21 * * * /opt/regal/src/regal-scripts/evalWebgatherer.sh >> /opt/regal/regal-scripts/log/runGatherer.log
# Crawl Reports
0 22 * * * /opt/regal/src/regal-scripts/crawlReport.sh >> /opt/regal/logs/crawlReport.log

6.9.7. Backup

MySQL und Elasticsearch

Der Elasticsearch-Index und die MySQL-Datenbanken werden täglich gesichert. Es werden Backups der letzten 30 Tage aufbewahrt. Ältere Backups werden von der Platte gelöscht.

0 2 * * * /opt/regal/src/regal-scripts/backup-es.sh -c >> /opt/regal/logs/backup-es.log 2>&1
30 2 * * * /opt/regal/src/regal-scripts/backup-es.sh -b >> /opt/regal/logs/backup-es.log 2>&1
0 2 * * * /opt/regal/src/regal-scripts/backup-db.sh -c >> /opt/regal/logs/backup-db.log 2>&1
30 2 * * * /opt/regal/src/regal-scripts/backup-db.sh -b >> /opt/regal/logs/backup-db.log 2>&1

6.9.8. Entwicklung

Für die Entwicklung an Regal empfiehlt sich folgende Vorgehensweise…

7. Dokumentation

Diese Dokumentation ist mit asciidoc geschrieben und wurde mit asciidoctor in HTML übersetzt. Dazu wurde das foundation.css Stylesheet aus dem asciidoctor-stylesheet-factory Repository verwendet.

Die Schritte, um an der Doku zu arbeiten sind folgenden

7.1. Dieses Repo herunterladen

git clone https://github.com/jschnasse/Regal

7.2. Asciidoctor und Asciidoctor-Stylesheets installieren

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | sudo bash -s stable --ruby
#login again
sudo apt-get install bundler
sudo apt-get install gem
git clone https://github.com/asciidoctor/asciidoctor
git clone https://github.com/asciidoctor/asciidoctor-stylesheet-factory
cd asciidoctor
sudo gem install asciidoctor
cd ../asciidoctor-stylesheet-factory
bundle install
compass compile

7.3. Doku modifizieren und in HTML übersetzen

cd Regal/doc
editor regal.asciidoc
asciidoctor -astylesheet=foundation.css -astylesdir=../../asciidoctor-stylesheet-factory/stylesheets regal.asciidoc

8. License