ediarum-Anpassung
Schemata
Im Ordner schemata liegt das Schema TEI P5 2.5.0. Weitere projektbezogene Schemata können dort hinzugefügt werden.
Register
Im Ordner Register werden die notwendigen Registerdateien gespeichert. Bei Veränderungen der Dateien wird eine Kopie im Ordner data_copy gespeichert, damit dort von bot2 aus dem Oxygen XML Author heraus ein Lesezugriff erfolgen kann. Die Kopien werden über einen Trigger gesteuert, der bei Installation der ediarum-App eingerichtet wird (s. Installation bzw. Routinen).
Routinen und xQuery-Skripte
xQuery-Skripte werden im Ordner Routinen abgelegt. Zu Testzwecken existiert dort schon das Skript test.xql, an welchem Ausgaben und Funktionen ausprobiert werden können. Im ediarum-Modul, welches in der Datei ediarum.xql liegt, sind zentrale Funktionen vordefiniert, die in die Skript über die Zeile
import module namespace ediarum="http://www.bbaw.de/telota/software/ediarum/ediarum-app" at "../modules/ediarum.xql";
in das aktuelle Skript geladen werden können. In der Datei setup.xml im Ordner setup enthält die globalen Variablen für die Routinen. Dort müssen Passwort von bot1 und der Pfad für den data_copy-Ordner eingegeben werden, wenn sie geändert wurden.
Für eXist-db können verschiedene Trigger eingerichtet werden, die bei bestimmten Ereignissen ausgeführt werden, etwa wenn Dateien in einem bestimmten Ordner erstellt oder verändert werden (s. Trigger).
Die Trigger sind praktisch, falls man Daten in verschiedenen Dateien verwaltet, die aber auch gemeinsam benutzt werden sollen. Dies ist z. B. bei Registern der Fall, wo jeder Registereintrag in einer eigenen Datei gespeichert wird. Die verschiedenen Dateien lassen sich durch einen Trigger mit einem xQuery zusammenführen und separat speichern. Ein anderes Beispiel sind Dateien auf die auch ein Lesezugriff existieren soll, wenn an ihnen gearbeitet wird. Auch hier lassen sich die Dateien durch einen Trigger und entsprechendes xQuery-Skript separat speichern.
Trigger für den Ordner /db/mein/Pfad und dessen Subordner lassen sich einrichten, indem im Ordner/db/system/config/db/mein/Pfad eine Datei collection.xconf abgelegt wird, die etwa auf eine xQuery-Datei verweisen kann. Diese muss zum Trigger-Namespace gehören und kann verschiedene Aktionen definieren (s. xQuery-Funktionen). Die Einrichtung wird im folgenden an einem Beispiel erläutert.
Beispiel: Jeder Registereintrag eines gemeinsamen Register liegt in einer eigenen Datei. Nach der Erstellung eines Registereintrags (d. h. einer neuen Datei im Ordner Register) oder einer Änderung in einer solchen Datei soll ein neues Gesamtregister erstellt werden, das alle Einträge des Registers mit der ID enthält.
Im Ordner /db/system/config/db/Register wird eine Datei collection.xconf mit folgendem Inhalt gespeichert:
<collection xmlns="http://exist-db.org/collection-config/1.0"> <triggers> <trigger class="org.exist.collections.triggers.XQueryTrigger"> <parameter name="url" value="xmldb:exist://db/apps/ediarum/routinen/registerTrigger.xql"/> </trigger> </triggers> </collection>
Die im Ordner /db/apps/ediarum/routinen liegende xQuery-Datei registerTrigger.xql gehört zum Namespace trigger und definiert einige Trigger, die die gewünschten Aktionen durchführen:
xquery version "1.0"; module namespace trigger="http://exist-db.org/xquery/trigger"; ... declare function local:cumulateIndex($url) { ... }; declare function trigger:after-create-document($uri as xs:anyURI) { local:cumulateIndex($uri) }; declare function trigger:after-update-document($uri as xs:anyURI) { local:cumulateIndex($uri) };
Die auszuführenden xQueries müssen über die im Trigger angegebene URL erreichbar sein, d. h. sie müssen auch mit Gastrechten ausführbar sein