= XML Workflow: Notes = [[PageOutline(2-4,,pullout)]] Auf dieser Seite sind zusätzliche Notizen zum [wiki:workflow 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
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 [http://pythia.mpiwg-berlin.mpg.de/department1/mpdl/despecs/DESpecs.pdf/DESpecs_V1.pdf DESpecs 1.1.2] und Work Orders 6 bis 9 mit den [http://pythia.mpiwg-berlin.mpg.de/department1/mpdl/despecs/DESpecs.pdf/DESpecs_V2.pdf 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 [http://de.wikipedia.org/wiki/UTF-8 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 [http://pythia.mpiwg-berlin.mpg.de/department1/mpdl/raw-texts Pythia] oder gleich in das [source:trunk/texts 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, attachment, sieh unten. Die Unterscheidung in die Verzeichnisse raw und xml nervt allerdings in der Praxis. ==== 1.02 Kommunikation mit Foxridge ==== Das Skript funktioniert nur innerhalb des Instituts. 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 === Wird der ganze tag ignoriert, wenn er ein wohlgeformtes Attribut enthält? Beispiel `

` für eine Absatz in kursiv, der sich zusätzlich als italienisch herausstellt: `

` würde bewirken, dass `it` nicht aufgelöst wird, man müsste also `

` zu `

` machen. Das ist vielleicht keine gute Idee. Also doch besser: Nur wohlgeformte Attribute werden ignoriert? (Der Fall wird zwar nicht oft eintreten, aber es sollte trotzdem dafür eine klare Anweisung geben.) ==== 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 ==== Warum ist `zzzz.jpg` nicht erlaubt? Es ist offensichtlich eine Seite, die nicht zum Buch gehört. Aber wenn man sagt, die im XML-Text sollen genau den JPG im pageimg-Ordner entsprechen, dann muss es erlaubt sein. Hat der Benutzer denn ein Interesse daran, diese Seite zu sehen? ==== 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 ==== Zeichen, die wie `{` aussehen, gibt es dagegen. Wenn ein solches `{` legitimerweise im Text steht, sollte es so markiert werden können, dass das Skript nicht mehr darüber stolpert, dass es aber andererseits vom Skript 3.03 (ersetze escape sequences) entfernt werden kann. Ich gehe davon aus, dass es keine echten `\` im Text gibt, d.h. alle `\` im Text gehören zu irgendwelchen bei der Transkription eingefügten escape sequences. Und zumindest wird es die Zeichenfolge `\{` nicht geben. Vorschlag also: ein legitimes `{` wird mit `\{` markiert. Hat das irgendwelche Nebenwirkungen? ==== 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 ==== (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 === Dieser Schritt zerfällt eigentlich in zwei Teilschritte: 1. erzeuge die intendierte Textgestalt, indem die Regeln der DESpecs quasi rückgängig gemacht werden 1. verwandle diese Textgestalt in wohlgeformtes XML Sollte man diese Teilschritte in zwei getrennte Schritte umbenennen? Inhaltlich würde sich dadurch nichts ändern. Das Skript `Filter_3_test_wellformedness` ist zurzeit ein Wrapper für xmllint. Ich werde es wahrscheinlich noch auf ein Perl-Modul statt xmllint umstellen. Insbesondere weil xmllint offenbar nicht UTF-8 verwendet. (Oder kann man das einstellen? `--encode UTF-8` scheint jedenfalls keinen Unterschied zu machen.) Beispiel: verwandle Archimedes 1615 aus WO 3 in XML mit `Filter_3_make_wellformed`, wende dann `Filter_3_test_wellformedness` an: ein Wort wie "qu√¶ris" legt nahe, dass der output UTF-8 ist, aber als "Mac OS Roman" interpretiert wird. Dann ist xmllint doch unschuldig, und das Problem ist irgendwo danach? --> Ja, im Terminal wird es korrekt angezeigt. ==== 3.01 ersetze unknown characters ==== Siehe auch [wiki:unknown-characters hier]. ==== 3.02 ersetze replacements ==== replace replacements: unglücklicher Name? Dieser Schritt könnte mit Schritt 3.01 fusioniert werden. Ich sehe allerdings keine unmittelbare Notwendigkeit dafür. Erlaube regexes? Beispiel `s/\n` nicht zu `<>` wird. Die Alternative wäre, das Skript erst nach Schritt 3.06 auszuführen, aber dann würde die konzeptionelle Zweiteilung von Schritt 3 verlorengehen. ==== 3.05 Metadaten, root element ==== `` und `` haben als namespace den default-namespace `echo`. Es scheint mir sinnvoller, ein neues Metadatum `` einzuführen, als den Inhalt in `` zu pressen. Das Skript fügt auch ein DTD-Fragment ein, das den Text schemakonform macht, ohne dass man `xml:space="preserve"` in alle `` schreiben muss. Auf die Skripte 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 sein. Solange Tabellen noch nicht richtig verarbeitet werden (siehe Schritte 2.09 und 4.06), werden außerdem in [source:trunk/schema/scripts/workflow/Filter_4_00_Schummelskript.pl Filter_4_00_Schummelskript] Tabellen in verwandelt, sodass sie korrekt aus dem Absatz herausgezogen werden. ==== 4.01 ==== ==== 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 und `3` in der Fußnote. Gib ansonsten eine Warnung aus. * Was passiert bei Floats in , wenn sie nicht stillschweigend herausgeschoben werden können? Oder ist es besser, einen Fehler zu provozieren, weil solche manchmal in Wirklichkeit

sind? * Beachte Fußnoten auf zwei Seiten. ==== 4.03 ==== Das ist normalerweise geradlinig. Beachte Ausnahmen bei und . ==== 4.04 ==== 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. * .``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 in Floats erleichtert. Das Skript kann sich aber nicht darauf verlassen, dass Wortabkürzungen bereits in `` sind. Der Punkt am Ende von `` zum Beispiel in ex `.7. quinti Eucl.` wird außerdem oft noch als Satzendepunkt gebraucht. ==== 4.05 ==== Beachte: * `<_>` und `<^>` wurden in Schritt 3.06 in `` und `` umbenannt. * 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

==== * Automatisch erstellte `
` sind alle auf demselben level. Für eine hierarchische
-Struktur (z.B. mit front, body, back) muss die automatische
-Struktur per Hand nachbearbeitet werden. * `n` und `level` werden mit `n="0"` und `level="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
(automatisch?) bei den ``, die eigentlich Footer sind. Man kann bereits im raw text zum Beispiel
einzufügen (beachte: dann sollte auch der type in geändert werden). Braucht man dazu ein tool, oder geht das so? Was ist die Verbindung zum
-Skript? Braucht man ein tool zur manuellen Nachbearbeitung der automatisch erstellten
? ==== 4.08 Formatieren ==== === 5. Textanalyse === Die Hierarchie der inline-Elemente (z.B. in plaintext, im inline model) legt vermutlich noch keine Verarbeitungsreihenfolge nahe. ==== 5.01 ==== 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 ``, 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. Zum Problem veralteter Perl-Versionen in Mac OS X siehe [wiki:mac-perl-unicode hier]. ==== 5.02 ==== ==== 5.03 ==== (Verwende das Skript `Filter_roman_numbers.pl`: für römische Zahlen.) ==== 5.04 Formeln ==== Das Skript [source:trunk/schema/scripts/workflow/Filter_5_04_formulae.pl 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 ==== ==== 5.06 GIS ==== ==== 5.07 Abgleich mit Donatus ==== ==== 5.08 allgemeines Test-Skript ==== === 6. weitere Skripte === ==== 6.01 div-Attribute ==== (Nummer anpassen) Note that Oxygen 11.2 uses Saxon-PE 9.2.0.6 (i.e. "saxon-ee.jar Oxygen build"), whereas this Filter uses Saxon-HE 9.2.1.1 (see [http://www.oxygenxml.com/forum/topic4542.html Oxygen forum]). Download von Saxon-HE [http://sourceforge.net/projects/saxon/ hier]. Auf dem Mac kann man es dann in das Verzeichnis /Applications/oxygen/lib/ kopieren, wo schon Saxon-EE ist. ==== 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 [source:trunk/schema/scripts/workflow/Filter_template.pl 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;` durch `que` ersetzt, nicht noch prüfen, ob es `q ;` 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 Zwischenformat: Nützt es etwas, die doc-Datei als "Office Open XML"-Text abspeichern, oder ist es einfacher, ihn anders zu bearbeiten?