- 1 Intro
- 2 Anwendungsgebiete
- 2.1 XSLT - die Programmiersprache im XML Bereich
- 2.2 Aktuelle und vergangene Anwendungen
- 2.3 Professionelle XML Verarbeitung
- 2.4 Technische Dokumentation
- 3 Wichtige Konzepte
- 3.1 Push vs. Pull Stylesheets
- 3.2 Eindeutigkeit der Regelbasis
- 3.3 Namespaces
- 3.4 Schemata
- 3.5 Standards
- 3.5.1 DITA
- 3.5.2 DITA Inhaltsmodell
- 3.5.1 DITA
- 4 Ausgewählte Themen
- 4.1 Transformationen mit XSLT
- 4.1.1 Vortransformationen
- 4.1.2 Komplexe XML-2-XML Transformationen
- 4.1.2.8 Vererbung
- 4.1.2.8 Vererbung
- 4.1.3 XSLT Streaming
- 4.1.3.1 XSLT Akkumulator
- 4.1.3.2 XSLT Iterator
- 4.1.4 Reguläre Ausdrücke
- 4.1.5 Modus vs. Tunnel Lösung
- 4.1.6 Identifikation mit
generate-id()
- 4.1.6.4 XPath-Achsenbereich selektieren
- 4.1.6.4.1 Funktionen und Module
- 4.1.6.4.1 Funktionen und Module
- 4.1.6.4 XPath-Achsenbereich selektieren
- 4.1.7 Webservice Calls mit doc() und unparsed-text()
- 4.1.8 Stylesheet-Parameter auf der Kommandozeile
- 4.1.9 Leerzeichenbehandlung
- 4.1.10 Mit
translate
Zeichen ersetzen
- 4.1.10.1 Spass mit dem Sequenzvergleich
- 4.1.11 Character Mappings in der Ausgabe
- 4.1.12 JSON mit XSLT 1.0 und Python lxml
- 4.1.1 Vortransformationen
- 4.2 Abfragen mit XQuery
- 4.2.5 XQuery als Programmiersprache
- 4.2.5.3
if..then..else
Ausdrücke
- 4.2.5.3.2 SQL Views in MarkLogic
- 4.2.5.3
if..then..else
Ausdrücke
- 4.2.6 Hilfreiche XQuery Schippsel
- 4.2.5 XQuery als Programmiersprache
- 4.3 XML Datenbanken
- 4.3.1 Connector zu Marklogic in Oxygen
- 4.3.2 Bi-Temporale Dokumente
- 4.3.2.1 Anlegen des Testszenarios auf der ML Konsole
- 4.3.2.2 Ausführen einiger Beispiel-Queries
- 4.3.3 Webapps mit MarkLogic
- 4.3.3.5 Wikipedia Scrapper Applikation
- 4.3.3.5 Wikipedia Scrapper Applikation
- 4.3.4 Dokument-Rechte in MarkLogic
- 4.3.5 MarkLogic Tools
- 4.3.5.1 EXPath Konsole
- 4.3.5.2 mlcp - MarkLogic Content Pump
- 4.3.5.3 Deployment-Tools
- 4.4 XSL-FO mit XSLT1.x
- 4.5 Testing
- 4.5.1 Validierung mit Schematron
- 4.5.2 Erste Schritte mit XSpec
- 4.5.1 Validierung mit Schematron
- 4.6 Performanz-Optimierung
- 4.1 Transformationen mit XSLT
- 5 Zusätzliches Know-How
- 5.1 XML Editoren
- 5.2 Quellcode-Versionskontrolle
- 5.2.1 Kurze Geschichte zur Versionskontrolle Test
- 5.2.2 GIT Kommandos
- 5.2.1 Kurze Geschichte zur Versionskontrolle Test
- 5.1 XML Editoren
- 6 Glossary
- 7 Tektur CCMS
4.3.5.3 Deployment-Tools
Will man eine größere MarkLogic Applikation maintainen, dann wird man um einen
Build- / Deployment-Manager nicht herumkommen. Denn gewöhnlich gilt es einen
Entwicklungsserver, einen Testserver und einen Prod-Server zu pflegen.
ml-gradle ↗ und
ml-proj ↗
sind solche Tools. Das eine basiert auf der populären Java-Buildchain
gradle,
das andere ist eine NodeJS Applikation vom gleichen Maintainer, wie die
zuvor beschriebene EXPath Konsole.
Wie ich bei einer größeren Evaluierungssaufgabe aber herausfinden konnte, eignen sich beide Tools
eher für Projekte, die von der grünen Wiese aus gestartet werden, weil sie auf
Namenskonventionen in der Dateistruktur setzen.
Beide beanspruchen zwar für sich eine (fast) vollständige Konfigurierbarkeit der Projektstruktur,
jedoch ist diese mit einigen Fallstricken behaftet, so dass ich eine Migration eines Bestandsprojekts
leider nicht empfehlen kann.
4.3.5.3.1 ml-gradle
ml-gradle basiert auf dem populären Java Build-Tool
ml-gradle ↗
.
Mittels vordefinierter oder eigener Tasks werden JSON Dateien automatisiert erstellt, die als Payload für REST Calls auf MarkLogic
fungieren. Dabei wird die MarkLogic REST API bedient.
Bei der Deployment-Aktion selbst wird schliesslich das Payload eingesammelt und abgesetzt.
Grds. ist diese Idee nicht verkehrt, es gibt aber nun mehrere Stellen, an denen die Konfiguration modifiziert werden kann -
was sich bei fehlender Disziplin der Entwickler natürlich eher nachteilig auswirken könnte:
-
Setzen vordefinierter Properties ↗ in der Datei gradle.properties
-
Mittels vordefinierter Create-Tasks, z.B. gradle mlNewDatabasewerden Skelett-Dateien erzeugt, die man manuell bzgl. fehlender Konfigurationsinformationen vervollständigt.
-
Es gibt einen Token-basierten Mechanismus ↗, mit dem vordefinierte Platzhalter in Konfigurationsdateien (Payload-Files) dynamisch ersetzt werden.
-
Eigene Groovy-Tasks können implementiert werden. Diese werden z.B. in der Datei build.gradle eingebunden. Beispiel für einen einfachen Groovy-Task ↗
4.3.5.3.2 mlproj
mlproj ist eine NodeJS Applikation von Florent Georges ↗. Wie auch bei ml-gradle würde ich den Umzug einer bestehenden Projektstruktur
auf mlproj aber nicht empfehlen, sondern damit ein Projekt von der grünen Wiese aus starten.
Während es bei ml-gradle darum geht, den Überblick über mehrere, teilweise automatisch generierte, Konfigurationsdateien und -optionen zu behalten, geschieht die Konfiguration bei mlproj in nur einer Datei
prod.json
bzw.
dev.json
, welche die Einstellungen einer Basiskonfiguration
base.json
übernimmt bzw. überschreibt.
Natürlich ist der Erweiterungsmechanismus nicht ganz so mächtig, wie bei ml-gradle - schliesslich fehlt eine ausgewachsene Build-Chain als Unterbau. Ein NodeJS Programmierer wird damit aber gut zurechtkommen. Der Quellcode wirkt aufgeräumt und das Projekt ist gut dokumentiert.
Beide Tools haben einen "Watch"-Modus, bei dem die Dateistruktur des Entwicklers überwacht wird. Sobald sich eine Datei ändert, wird diese nach MarkLogic hochgeladen. Als Beispiel für die umfangreichen Konfigurationsmöglichkeiten ist folgend der Docstring des "Watch"-Modus in mlproj wiedergegeben:
mlproj watch [-a srv|-b db] [-s src|-/ dir|-1 file] [what] -a, --as, --server <srv> server, get its modules database -b, --db, --database <db> target database -B, --sys, --system-database <db> the name of the target system db -s, --src, --source-set <dir> source set to watch -/, --dir, --directory <dir> directory to watch -1, --doc, --document <file> file to watch <what> source set or directory to watch