Prozessablauf: Vorproduktion von Vorschriften
Die Standard-Vorproduktion für Vorschriften wird gesteuert über das Target ESV-Digital-Vorproduktion_Update_Vorschriften in
Lokales-SVN-Checkout-Verzeichnis_ESV-Digital-Produktion/transformation/ant/build.xml.
Im Folgenden ist der Ablauf der Vorproduktion anhand des Target-Aufbaus und der weiteren aufgerufenen Targets beschrieben. Die Reihenfolge der Aufrufe ist relevant für den Ablauf.
<target name="ESV-Digital-Vorproduktion_Update_Vorschriften" if="is-rahmendatei" depends="test_is_rahmendatei">
test_is_rahmendatei prüft, ob es sich bei der aktuell geöffneten Datei um eine Rahmendatei handelt. Die Vorproduktion wird auf die Rahmendatei aller exportierten angewendet (hier ist allerdings nur der Dateiname relevant - die eigentlichen Dateien werden anders zusammengestellt, s.u.):
V:/ContentManagement/EP/Projekte/04_Vorschriften/ESVVS-BaseX/export/latest.aruba200/_alle_zusammengefasst/esvvs_0000.xml
<echo message="ESV-Digital-Vorproduktionfür Update Vorschriften">Gibt in der Ansicht Resultate von Oxygen die Meldung ESV-Digital-Vorproduktionfür Update Vorschriften aus.
<property name="produktid" value="${produktid}"/>Speichert die Produkt-ID zur weiteren Verwendung als Ant-Projekteigenschaft.
<antcall target="cleanup_before">Löscht den Inhalt aller Arbeitsverzeichnisse.
<antcall target="copy_input_primaercontent">- Ermittelt anhand einer Datumsangabe die relevanten Dateien, welche jünger sind als die letzte Produktion. Dazu nötig ist eine Textdatei, welche den jüngsten zuletzt aktualisierten Ordnernamen enthält:
V:\ContentManagement\EP\Projekte\04_Vorschriften\ESVVS-BaseX\export\updates.aruba200\_stand_ordner_letzte_vorproduktion.log.txt
bzw.
V:\ContentManagement\EP\Projekte\06_Rechtsprechung\ESVRS-BaseX\export\updates.aruba200\_stand_ordner_letzte_vorproduktion.log.txt
Diese Textdatei muss nicht editiert werden, sie wird vom Prozess automatisch aktualisiert.
- Kopiert die XML-Dateien ins lokale Eingabeverzeichnis (Lokales-SVN-Checkout-Verzeichnis_ESV-Digital-Produktion/input).
- Kopiert die relevanten Bilddateien ins lokale Ausgabeverzeichnis (Lokales-SVN-Checkout-Verzeichnis_ESV-Digital-Produktion/output).
- Ermittelt anhand einer Datumsangabe die relevanten Dateien, welche jünger sind als die letzte Produktion. Dazu nötig ist eine Textdatei, welche den jüngsten zuletzt aktualisierten Ordnernamen enthält:
<mkdir dir="${basedir}/../../${dir.input}/abbildungen"/>Erstellt einen Ordner für Abbildungen im lokale Eingabeverzeichnis (Lokales-SVN-Checkout-Verzeichnis_ESV-Digital-Produktion/input). Dieser wird für das nachfolgende Target write_image_sidecar benötigt.
<antcall target="write_image_sidecar">Liest mithilfe des Programms exiftool ( V:\ContentManagement\EP\Tools\abbildungen-konvertieren\vendor\exiftool\exiftool.exe) die Metadaten aller Grafikdateien aus und schreibt sie als Liste in die Datei images-sidecar.xml. Das XQuery-Update-Skript update_grafik_width_height.xquery nutzt im späteren Verlauf die Informationen in dieser Datei, um die Breite bzw. Höhe der im Werk enthaltenen Grafiken zu ermitteln.
<antcall target="transform_versionsinfo_fn_db">Führt das XSLT-Skript transform_ev_versionsinfo.xsl aus. Es erstellt zu den Einzelvorschriften und Anhängen die Fassungsverläufe, die auf ESV-Digital bei Klicken auf den Link Fassungen anzeigen eingeblendet werden.
<antcall target="common.start_http_db>Startet BaseX als HTTP-Server.
<echo level="info" message="Erzeuge DB...">Gibt in Oxygen in der Ansicht Resultate die Textzeile "Erzeuge DB..." aus.
<antcall target="common.xquery_manage_db">Führt das XQuery-Skript db-create.xquery aus, das eine lokale BaseX-Datenbank unter C:\tmp-basex\data erzeugt. Alle nachfolgenden XQuery-Skripte werden auf dieser Datenbank ausgeführt.
<antcall target="update_all_ids_db">Führt das XQuery-Update-Skript update_all_ids.xquery aus. Es erstellt IDs an Elementen, an denen das ESV-Schema keine IDs vorsieht, an denen die ESV-Digital-Anwendung aber IDs erwartet (z.B. esv.instanz/kapitel)
<antcall target="update_gesamtvorschrift_titel_db">Führt das XQuery-Update-Skript update_gesamtvorschrift_titel.xquery aus. Es ersetzt den eventuell vorhandenen redaktionellen Kurztitel der Gesamtvorschrift durch eine Kombination aus Kürzel und (Kurz-)titel. Wenn kein redaktioneller Kurztitel vorhanden ist, wird das entsprechende Element hinter dem Langtitel eingefügt. Hintergrund ist, dass der redaktionelle Kurztitel bzw. der Langtitel von Gesamtvorschriften häufig zu lang für eine sinnvolle Darstellung im TOC und in der Breadcrumb-Zeile von ESV-Digital ist. Daher wird er mithilfe dieses Skripts durch eine kürzere Fassung ersetzt.
<antcall target="update_gesamtvorschrift_add_pis_db">Führt das XQuery-Update-Skript update_gesamtvorschrift_add_pis.xquery aus. Es ermittelt das aktuelle Ausfertigungs- und Verkündungsdatum der vorliegenden Fassung, den Gesetzgeber und die Abkürzung der Gesamtvorschrift und schreibt diese Informationen zur einfacheren Weiterverarbeitung auf ESV-Digital in die folgenden PIs:<?esv_gesetzgeber?><?esv_ausfertigungsdatum?><?esv_verkuendungsdatum?><?esv_zitiervorschlag?>
<antcall target="update_fassungsangabe_db">Führt die XQuery-Update-Skripte update_pi_fassungsangabe.xquery und update_fassung.xquery aus. update_pi_fassungsangabe.xquery generiert eine PI esv_
<?fassungsinfo?>und<?esv_fassungsinfo_sort?>und fügt sie als ersten Knoten in die Elemente<einzelvorschrift>und<anlage>ein. Diese PIs enthalten als Werte Informationen zur Fassung und das Datum des Inkrafttretens der Einzelvorschrift bzw. Anlage (z. B.<?esv_fassungsinfo Art. 1 vom 22.12.1975 (BGBl. I S. 3176), in Kraft 01.02.1976?>und<?esv_fassungsinfo_sort 1976-02-01?>).update_fassung.xquery generiert eine Fassungsangabe und fügt diese als Unterelement
<fassung>in<gesamtvorschrift.amtlich>ein bzw. ersetzt damit ein vorhandenes Unterelement<fassung>.<antcall target="delete_aenderungstext_db">Führt das XQuery-Update-Skript delete_aenderungstext.xquery aus. Es entfernt aus
<gesamtvorschrift.amtlich>die Elemente aenderung/text ,aenderung/geaenderte-einzelvorschriften/geaenderte-einzelvorschrift/verweis.vs/text(), erstfassung/text und erstfassung/geaenderte-einzelvorschriften/geaenderte-einzelvorschrift/verweis.vs/text().<antcall target="update_vorspann_unterschrift_db">Führt das XQuery-Update-Skript update_vorspann_unterschrift.xquery aus. Es führt an<unterschrift>-Elementen, die über die Unterelemente<ort>und<datum>verfügen, die folgenden Änderungen durch, damit diese Informationen ausgegeben werden können:- Pro Element
<unterschrift>wird ein neues Unterelement<text>als erster Knoten dem Element hinzugefügt. Das neue Unterelement enthält die Inhalte der Unterelemente<ort>und<datum>durch ein Komma plus Leerzeichen getrennt. - Die Unterelemente
<ort>und<datum>werden anschließend gelöscht.
- Pro Element
<antcall target="replace_unterschrift_db">Führt das XQuery-Update-Skript replace_unterschrift.xquery aus. Es ersetzt das Element<unterschrift>durch seinen Inhalt, wobei es die darin enthaltenen Unterelemente wie folgt anpasst, um die Schema-Konformität sicherzustellen:<text>-Unterelemente werden durch<absatz>-Elemente gleichen Inhalts ersetzt.<grafik>-Unterelemente werden jeweils in einem<absatz>-Element gekapselt.- Jedes
<absatz>-Element wird mit einer eindeutigen ID versehen. - Alle anderen Unterelemente werden unverändert übernommen.
<unterschrift>-Element ein<table>-Unterelemente, bleibt dieses inklusive seines Elternelements<unterschrift>unverändert erhalten, da bei der Transformation nach HTML für dieses Element ein entsprechendes HTML-Element erzeugt wird.Anmerkung:Dieses Skript setzt voraus, dass das Skript update_vorspann_unterschrift.xquery bereits ausgeführt worden ist, das ursprünglich eventuell vorhandene Unterelemente<ort>und<datum>zu einem<text>-Element zusammenfasst.<antcall target="update_container_adresse_db">Führt das XQuery-Update-Skript update_container_adresse.xquery aus. Es führt in Adresscontainern die Inhalte der beiden
<adresse>-Unterelemente<strasse>und<hausnummer>(sofern vorhanden) sowie<postleitzahl>und<ort>im Unterelement<strasse>und<ort>zusammen und löscht dann die dadurch redundant gewordenen Unterelemente<hausnummer>und<postleitzahl>.Außerdem fügt es dem Inhalt des Unterelements
<postfach>das Label „Postfach “ hinzu, sodass die Ziffernfolge für den Benutzer eindeutig identifizierbar ist.Eventuell in den Unterelemente enthaltene Kommata werden entfernt.
<antcall target="update_container_telefon_fax_db">Führt das XQuery-Update-Skript update_container_telefon_fax.xquery aus. Es ergänzt in Adresscontainern die Inhalte der Unterelemente
<telefon>,<fax>und<email>(sofern vorhanden) jeweils um die Zeichenfolge „Telefon: “, „Fax: “ und „E-Mail: “, damit die betreffenden Informationen vom Benutzer auf ESV-Digital eindeutig identifiziert werden können. Ohne diese Zusatzinformation wäre nicht erkennbar, ob es sich bei einer aufgelisteten Nummer um eine Telefon- oder Fax-Nummer handelt.Aus Konsistenzgründen werden auch E-Mail-Adressen mit einem entsprechenden Label gekennzeichnet.
Eventuell in den Unterelemente enthaltene Kommata werden entfernt.
<antcall target="add_PI_dokumenttyp_fuer_alle_Werke_db">Führt das XQuery-Update-Skript add_PI_dokumenttyp_fuer_alle_Werke.xquery aus. Es fügt den Instanzdateien jeweils eine PI
<?esv_dokumenttyp?>hinzu. Mithilfe dieser PI wird den Instanzdateien ein Dokumenttyp zugewiesen, nach dem auf ESV-Digital die Trefferliste gefiltert werden kann. Der Wert der PI bestimmt das Skript anhand des Instanz- und Werktyps:Instanztyp Werktyp PI-Wert gesamtvorschrift alle Kapitel gesamtvorschrift.amtlich alle Vorschrift einzelvorschrift alle Vorschrift entscheidung alle Rechtsprechung kommentar alle Kommentar beitrag Zeitschrift Zeitschriften-Beitrag kapitel Buch/LBW Kapitel Zeitschrift Zeitschriften-Beitrag vorspann.vortext Buch/LBW Kapitel Zeitschrift Zeitschriften-Beitrag verzeichnis alle Verzeichnis news LBW Kapitel Zeitschrift Zeitschriften-Beitrag kalender alle Kalender buchbesprechung alle Buchbesprechung anzeige alle (keine Zuweisung) <antcall target="add_PI_sortdate_db">Führt das XQuery-Update-Skript add_PI_sortdate.xquery aus. Es fügt eine PI<?esv_sort_date?>ein, deren Wert in der Trefferliste auf ESV-Digital zum Sortieren der Instanzen nach Aktualität verwendet wird. Je nach Werk- bzw. Instanztyp wird der Wert vom Skript wie folgt ermittelt:- Gesamtvorschriften: Datum des Inkrafttretens (
/esv.instanz/gesamtvorschrift.amtlich/@inkrafttreten) - Bücher: Erscheinungstermin aus Feld 007 des ARS
- LBW/Onlinewerke: Je nach Vorhandensein entsprechender Instanzattribute bzw. PIs wird das Datum nach folgender Priorität aus den Werten der angegebenen Attribute bzw. PI ermittelt:
- Datum der letzten inhaltlichen Aktualisierung, ermittelt aus dem Wert der PI
<?esv_lfg?>(und damit aus der Blattnorm) /esv.instanz/@red-stand/esv.instanz/@publikationsdatum
- Datum der letzten inhaltlichen Aktualisierung, ermittelt aus dem Wert der PI
- Zeitschriften: Monat und Jahr des Hefts, in dem die Instanzdatei enthalten ist (
/esv.produkt//abschnitt/abschnitt.meta/meta/volldatum) - Falls überhaupt kein gültiges Datum ermittelbar ist: Dummy-Datum
2019-01-16
Anmerkung:Bei der Anwendung auf LBW setzt dieses Skript voraus, dass die PI<?esv_lfg?>in der Instanzdatei vorhanden ist.- Gesamtvorschriften: Datum des Inkrafttretens (
<antcall target="add_PI_sortdate_rahmendatei_db">Führt das XQuery-Update-Skript add_PI_sortdate_rahmendatei.xquery aus. Es findet aus allen vorher mit add_PI_sortdate.xquery gesetzten PIs das aktuellste Datum heraus und setzt diese PI zusätzlich in die Rahmendatei
<antcall target="delete_fna_db">Führt das XQuery-Update-Skript delete_fna.xquery aus. Es entfernt das Element meta/fna aus Gesamtvorschriften, deren Gesetzgeber vom Typ land ist.
<antcall target="update_grafik_alt_db">Führt das XQuery-Update-Skript update_grafik_alt.xquery aus. Es fügt jedem
<grafik>-Element ein Attribut@althinzu, falls es noch keines gibt und eine Bildbeschriftung gibt (aus welcher der Text entnommen wird)<antcall target="update_grafik_width_height_db">Führt das XQuery-Update-Skript update_grafik_width_height.xquery aus. Es fügt jedem
<grafik>-Element eine PI<?width?>hinzu, die als Wert die Bildbreite der referenzierten Grafikdatei in Pixel enthält. Die Bildbreite entspricht der Original-Bildbreite, die das Skript der dynamisch generierten Hilfsdatei images-sidecar.xml entnimmt, zuzüglich eines pauschalen Skalierungsfaktors von 0,5 und des Skalierungsfaktors, der ggf. im@size-Attribute des<grafik>-Elements angegeben ist.Beispiel:
<grafik href="b9783503126156_I_02_abb0001.png" size="100%" orient="port"><?width 1386px?></grafik>Anmerkung:Da bei manchen Grafiken eine individuelle Größenanpassung erforderlich ist, damit sie auf ESV-Digital in einer sinnvollen Größe angezeigt werden, gibt es die Möglichkeit, in solchen Fällen die PI<?width?>direkt in die Instanzdatei im Gesamtdatenbestand des betreffenden Werks zu schreiben. Das Skript erkennt dann bei der Vorproduktion, dass die PI bereits vorhanden ist, und lässt die PI und deren Wert unverändert bestehen.<antcall target="verlinker-xquery.verlinken.extern">Generiert Links auf:- Entscheidungen
- Vorschriften
- Publikationen
<antcall target="update_schemalocation_db">Ändert den Wert des Attributs xsi:noNamespaceSchemaLocation auf die URI für das Arbeits-XML (Name = lokaler Pfad). Für die automatische Validierung in Oxygen und als transparenter Hinweis auf das gültige Arbeits-XML-Schema.
<antcall target="common.start_http_db>Startet BaseX als HTTP-Server.
<echo level="info" message="Exportiere DB...">Gibt in Oxygen in der Ansicht Resultate die Textzeile "Exportiere DB..." aus.
<antcall target="copy_werkabbildung_to_output">Kopiert die Werkabbildung in den Ordner output/abbildungen.
<antcall target="common.xquery_manage_db">Führt das XQuery-Skript db-export.xquery aus, dass den Inhalt der lokalen BaseX-Datenbank (unter C:\tmp-basex\data) ins lokale Ausgabeverzeichnis (Lokales-SVN-Checkout-Verzeichnis_ESV-Digital-Produktion/output) exportiert.
<antcall target="common.stop_http_db">Stoppt den Base-X-HTTP-Dienst.
<antcall target="check_ids_rahmendatei">Führt das XQuery-Update-Skript check_ids_rahmendatei.xquery aus. Es prüft die im lokalen Ausgabeverzeichnis abgelegten Daten auf das Vorhandensein von Duplikaten von IDs in der Rahmendatei.
<antcall target="copy_output">Kopiert die fertigen Daten aus dem lokalen Ausgabeverzeichnis in den Produktionsordner. Wird ausgelassen, wenn der Parameter debug auf true gesetzt ist (dies ist bei den Produktionsszenarien der Fall, deren Namen mit "!DEBUG!" beginnen).
<antcall target="delete_dateien_nicht_referenziert">Enfernt nicht (mehr) referenzierte Abbildungen (z.B. durch eine Ergänzungslieferung entfallen, oder Formeln, die nur als MathML vorproduziert werden). Sollte nicht auf sehr große Werke angewendet werden (Zeitschriften, Primärcontent).
<echo level="info" message="Prüfe, ob alle Dateien auch in der Rahmendatei sind (und andersrum) (inklusive ID-Check)..."/>Gibt in der Ansicht Resultate von Oxygen die Meldung Prüfe, ob alle Dateien auch in der Rahmendatei sind (und andersrum) (inklusive ID-Check)... aus.
<antcall target="check_work_integrity">Führt das XQuery-Skript check_work_integrity.xquery aus. Es prüft, ob:- Ein Unterordner namens abbildungen im Produktionsdatenverzeichnis des Werks vorhanden ist.
- Alle in der Rahmendatei referenzierten Instanzdateien im gleichen Ordner wie die Rahmendatei liegen.
- Alle Instanzdateien, die im gleichen Ordner wie die Rahmendatei liegen, in der Rahmendatei referenziert sind.
<echo level="info" message="aktualisiere die Log-Datei mit dem Wert der vorproduzierten selektierten Updates..."/>Gibt in der Ansicht Resultate von Oxygen die Meldung aktualisiere die Log-Datei mit dem Wert der vorproduzierten selektierten Updates... aus.
<copy file="${dir.source_esvvs_updates}/_stand_ordner_letzte_vorproduktion.log.TEMP.txt" tofile="${dir.source_esvvs_updates}/_stand_ordner_letzte_vorproduktion.log.txt" overwrite="yes"/>Aktualisiert im Ordner V:\ContentManagement\EP\Projekte\04_Vorschriften\ESVVS-BaseX\export\updates.aruba200 die Protokolldatei _stand_ordner_letzte_vorproduktion.log.txt.
