Version 3 (modified by 14 years ago) (diff) | ,
---|
XML Workflow
Auf dieser Seite sind zusätzliche Notizen zum XML-Workflow.
Die Arbeitsschritte
Textfilter
- Die Namen der Arbeitschritte sind nur guidelines. Beispielsweise sind die Teilschritte 3.03 (ersetze escape sequences) und 3.04 (ersetze italics) technisch gesehen nicht nötig für einen wohlgeformten Text und 4.07 (füge <div> ein) nicht nötig für einen schemakonformen Text, aber sie sind an den jeweiligen Stellen sinnvoll.
- Bei Skripten mit Parametern werden die Parameterwerte in den raw text eingetragen, und anpassbare Listen wie Wortabkürzungen werden aus Hilfsdateien eingelesen. Die Skripte selbst müssen daher nur selten angepasst werden.
- Für einige Skripte wäre eine interaktive GUI sinnvoll. Wir prüfen zurzeit, ob es bereits geeignete tools gibt, die wir dafür verwenden können.
- Im Gegensatz zu den früheren Skripten dürfen die hier beschriebenen Bearbeitungsschritte die Zeilenstruktur verändern, zum Beispiel eine Zeile hinzufügen.
- Beachte, dass Work Orders 1 bis 5 mit den DESpecs 1.1.2 und Work Orders 6 bis 9 mit den DESpecs 2.0 geschickt wurden. Unterschiede sind zum Beispiel das Format von Figures und von Tabellen.
1. Vorbereitungen
- Wenn wir einen transkribierten Text aus China erhalten, muss zuerst geprüft werden, ob die Datei tatsächlich, wie in den DESpecs verlangt, reiner Text in UTF-8 ist. Insbesondere akzeptieren wir keine doc-Dateien.
- Es ist noch nicht ganz klar, wo neue Dateien in Zukunft abgelegt werden: Kommen sie wie bisher zuerst nach Pythia oder gleich in das wiki-repository? Ich gehe vorläufig davon aus, dass Texte weiterhin zuerst nach Pythia kommen. Die Namenskonvention auf Pythia ist bisher
workorder_autor_jahr
.
1.01 Von Pythia ins svn-repository
(Shell-Skript von Klaus)
1.02 Kommunikation mit Foxridge
Das Skript meldet sich nicht bei Foxridge an. Die Änderungen in index.meta werden daher nur in der lokalen Kopie gemacht. Es fehlt also:
- Sicherheitskopie von index.meta anlegen (auch lokal?): Umbenennen von index.meta in index.meta.old, eine ältere Sicherheitskopie mit demselben Namen wird ohne Nachfrage überschrieben.
- Schreibe die neue index.meta
(Die Trennung der Schritte „Vorbereitung“ und „raw text bearbeiten“ wird nicht vollkommen eingehalten, denn dieses Skript schreibt bereits Daten in den raw text. Man könnte die Metadaten und JPG-Dateinamen auch erst in getrennte Dateien schreiben, aber ich wüsste nicht, was dadurch gewonnen wäre. Die Idee ist, dass alle textspezifischen Informationen in den Text geschrieben werden und alle allgemeinen Informationen wie die GND-Liste in Schritt 2.01 in getrennte Dateien.)
2. raw text bearbeiten
2.01 Metadaten
Vielleicht ersetze ich diese Kurzschreibweise aber auch wieder durch korrektes XML, sodass die Metadaten in Schritt 3.05 nur noch an die richtige Stelle kopiert werden müssen. Das XML aus index.meta muss allerdings auf alle Fälle an das Schema angepasst werden.
2.02 pb's synchronisieren
2.03 ersetze verbotene Zeichen im Text
Eventuell wird das Skript noch von einer Blacklist der verbotenenen Unicode-Blöcke auf eine Whitelist der erlaubten Unicode-Blöcke umgestellt. Vielleicht sollte man auch in den DESpecs eine Whitelist oder Blacklist vorgeben, um das zufällige Herauspicken von Unicode-Zeichen zu verhindern. Andererseits sind falsche Unicode-Zeichen leicht korrigierbar, solange sie konsistent verwendet werden.
2.04 prüfe unknown characters
Eventuell sollte das Skript die codes auch schon in die Datei schreiben, damit man sie nicht rüberkopieren muss. Allerdings würde das Skript dann sowohl Textänderungen machen als auch eine Liste von Problemen anzeigen.
2.05 prüfe escape sequences
2.06 prüfe italics
Die Korrekturen in diesem Schritt werden wohl immer im Text selbst und nicht in den Blöcken vor dem Text gemacht.
2.07 prüfe tags
Das Skript könnte allerdings zumindest regexes vorschlagen, die der User verwenden kann. Langfristig sollte es eine interaktive Version dieses Schrittes geben.
2.08 prüfe <s>
(Kann man hier das s-Skript aufrufen, oder kommt man dann durcheinander, weil so viele Skripte dazwischen den Text verändern? Eventuell kann man hier diese Skripte gleich mit aufrufen. Ausgangspunkt ist jedenfalls das alte Skript Filter_4_04a_test_s.pl
.)
2.09 prüfe tables
2.10 Special Instructions
(Schöner wäre es, wenn die entsprechende Zeichen durch Unicode-Mathematik-Zeichen angenähert werden könnten und die modernen Zeichen erst in der MathML-Formel verwendet werden. Leider gibt es diese Zeichen so nicht in Unicode. Der Umgang mit veralteter mathematischer Notation ist noch nicht vollständig geklärt. Alternative wäre wie bei Alchemie-Symbolen ein Bild; ist das bei Büchern mit vielen Formeln realistisch?)
3. Schritte bis zu wohlgeformtem xml
(Dieses Skript ist zurzeit ein Wrapper für xmllint. Ich werde es wahrscheinlich noch auf ein Perl-Modul statt xmllint umstellen.)
3.01 ersetze unknown characters
3.02 ersetze replacements
Dieser Schritt könnte mit Schritt 3.01 fusioniert werden. Ich sehe allerdings keine unmittelbare Notwendigkeit dafür.
3.03 ersetze escape sequences
Beachte außerdem:
\'
(U+0027) kann im Text auch als\’
(U+2019) geschrieben sein (\'
wurde in den DESpecs leider als\’
geschrieben; Problem vonshortvrb
, mit dem beispielsweise§\'§
im XeLaTeX-Quellcode der DESPecs im fertigen PDF zu\’
wird, usw.)
3.04 ersetze italics
3.05 Metadaten, root element
- Das Skript fügt auch ein DTD-Fragment ein, das den Text schemakonform macht, ohne dass man
xml:space="preserve"
in alle<s>
schreiben muss. Auf die Skript hat dies keinen Einfluss, aber es erleichtert das Bearbeiten des Textes in einem XML-Editor. Das Skript in Schritt 6.01, und allgemein jedes beliebige XSLT-Skript, löst als Nebeneffekt das DTD-Fragment wieder auf. Ein weiteres Skript wird das DTD-Fragment wieder einfügen können.
3.06 wohlgeformtes xml
4. schema-konform machen
Eine Ausnahme für das problemlose Durchlaufen kann das Skript für <s> sein.
Solange Tabellen noch nicht richtig verarbeitet werden (siehe Schritte 2.09 und 4.06), werden außerdem in Filter_4_00_Schummelskript Tabellen in <mgr> verwandelt, sodass sie korrekt aus dem Absatz herausgezogen werden.
4.01 <pb>
4.02 floats herausziehen
- Vorsicht bei anchored marginal notes.
- Prüfe bei anchors im Text, ob es eine zugehörige note auf der gleichen Seite gibt. Akzeptiere dabei kleine Abweichungen der Symbole voneinander, zum Beispiel
3)
im Text und3
in der Fußnote. Gib ansonsten eine Warnung aus. - Was passiert bei Floats in <h>, wenn sie nicht stillschweigend herausgeschoben werden können? Oder ist es besser, einen Fehler zu provozieren, weil solche <h> manchmal in Wirklichkeit <p type="title"> sind?
- Beachte Fußnoten auf zwei Seiten.
4.03 <lb>
Das ist normalerweise geradlinig. Beachte Ausnahmen bei <pb> und <anchor>.
4.04 <s>
Details und die Syntax dafür habe ich mir noch nicht überlegt.
Beachte Fälle wie:
- et.a.b.hoc est (hier normalisieren wir bisher die spaces, also „
et .a.b. hoc est
“) - .a.b:c.d:e.f.
- .
<lb/>
a.b. - Wort-Abkürzungen
&c.
etc.
Das Skript kann sich darauf verlassen, dass die Floats bereits aus dem Absatz herausgezogen sind. Dadurch wird das Markieren von <s> in Floats erleichtert. Das Skript kann sich aber nicht darauf verlassen, dass Wortabkürzungen bereits in <reg>
sind. Der Punkt am Ende von <reg>
zum Beispiel in ex .7. quinti <reg>Eucl.</reg>
wird außerdem oft noch als Satzendepunkt gebraucht.
4.05 <emph>
Beachte:
<_>
und<^>
wurden in Schritt 3.06 in<sub>
und<super>
umbenannt.- <it> in einem Absatz in italics ergibt wieder upright.
- Kombinationen wie
it bf
4.06 tables
Beachte die unterschiedlichen Anweisungen in den DESpecs 1.1.2 und 2.0.
4.07 <div>
- Automatisch erstellte
<div>
sind alle auf demselben level. Für eine hierarchische <div>-Struktur (z.B. mit front, body, back) muss die automatische <div>-Struktur per Hand nachbearbeitet werden. n
undlevel
werden mitn="0"
undlevel="0"
gefüllt und erst im Schritt 6.01 korrekt durchnumeriert. Das Skript sollte die Skripte 6.01 und 6.02 intern aufrufen. (Problem, dass 4.07 bereits vom Schritt-4-Metafilter augerufen wird?)- Korrigiere <div> (automatisch?) bei den
<head>
, die eigentlich Footer sind.
Man kann bereits im raw text zum Beispiel <div type="body"> einzufügen (beachte: dann sollte auch der type in <text> geändert werden). Braucht man dazu ein tool, oder geht das so? Was ist die Verbindung zum <div>-Skript? Braucht man ein tool zur manuellen Nachbearbeitung der automatisch erstellten <div>?
4.08 Formatieren
5. Textanalyse
Die Hierarchie der inline-Elemente (z.B. <var> in plaintext, <ref> im inline model) legt vermutlich noch keine Verarbeitungsreihenfolge nahe.
5.01 <reg>
Beachte:
- der modifier letter us ꝰ wird manchmal für
'
gehalten - Problem der Wort-Abkürzungen mit Kasus, zum Beispiel
ex .7. quinti Eucl.
. Verwende dort<ref>
, falls möglich.
Das Skript erwartet und hinterlässt den Text in NRC-Normalform. Escape sequences wie '
, die manche Text-Editoren für '
substituieren, werden aufgelöst.
5.02 <var>
5.03 <num>
(Verwende das Skript Filter_roman_numbers.pl
: <num value="..."> für römische Zahlen.)
5.04 Formeln
Das Skript Filter_5_04_formulae soll korrektes MathML erzeugen (oder zumindest korrektes TeX, das dann umgewandelt werden kann). Inwieweit das realistisch ist, weiß ich noch nicht. Zumindest bei einfachen Brüchen wie {5/8} sollte das jedoch möglich sein.
5.05 <foreign>
5.06 GIS
5.07 Abgleich mit Donatus
5.08 allgemeines Test-Skript
6. weitere Skripte
6.01 div-Attribute
(Nummer anpassen)
6.02 Nebenwirkungen von XSLT ausgleichen
Ein Skript, das nach Anwenden eines XSLT-Skripts das DTD-Fragment wieder einfügt und weitere Nebeneffekte von XSLT-Skripten rückgängig macht, insbesondere die Formatierung der Präambel.
7. scholarly workflow
Anmerkungen
- Das Grundgerüst für die Skripte ist dieses template.
- Figures nachbearbeiten und ausschneiden: Sollte das ans Ende von Schritt 2? (und beachte DESpecs 1.1.2 versus 2.0)
- Wo werden sich überschneidende Hierarchien aufgelöst? Zum Beispiel Fußnoten, die auf der nächsten Seite weitergehen; Text flows mit getrennten Seitennumerierungen wie im Eipo-Text und den Conimbricenses; Absätze, die in einer column anfangen und in der nächsten column aufhören
- Das Skript zur Normalisierung der Interpunktion (Filter_punctuation.pl) habe ich vorläufig weggelassen, weil es vermutlich merkwürdige Nebenwirkungen hat. Zum Beispiel spaces vor „:“ weg. (Hier ist die Frage, ob wir Information verlieren, die wir gerne konservieren würden. Beispiel „EPISTOL AE“). Ziel ist wieder, dass sich die folgenden Skripte auf ein einheitliches Format verlassen können. Beispielsweise müsste das reg-Skript, das unter anderem
q;
durchque
ersetzt, nicht noch prüfen, ob esq ;
gibt.
- Filter_Archimedes_to_ECHO.pl: Dieses Skript habe ich für die Umwandlung von Song Yingxing verwendet. Für europäische Texte müsste es überarbeitet werden.
Besonderheiten bei chinesischen Texten
Zeichenvarianten
Andere Workflows
Wenn Zwischenformet: Nützt es etwas, die doc-Datei als "Office Open XML"-Text abspeichern, oder ist es einfacher, ihn anders zu bearbeiten?
Attachments (1)
-
makedirs_and_workingcopies.sh (572 bytes) - added by 14 years ago.
New version
Download all attachments as: .zip