Changes between Version 36 and Version 37 of workflow


Ignore:
Timestamp:
May 31, 2010, 9:39:21 AM (14 years ago)
Author:
Wolfgang Schmidle
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • workflow

    v36 v37  
    3535Die Anwendung in !TextWrangler ist allerdings bequemer.
    3636
     37  * 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.
     38  * 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.
    3739  * Im Gegensatz zu den früheren Skripten dürfen die hier beschriebenen Bearbeitungsschritte die Zeilenstruktur verändern, zum Beispiel eine Zeile hinzufügen.
    3840  * 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.
     
    8890  * Schreibe die neue index.meta
    8991 
    90 (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.)
     92(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.)
    9193
    9294
     
    102104  * `log:` (per Hand angelegt, immer wenn es nötig ist. Aufgelöst in Schritt 3.05, wo es in <dcterms:description> umgewandelt wird.)
    103105
    104 Jeden Block kann es höchstens einmal geben. Die Reihenfolge ist beliebig, aber alle Blöcke sind vor dem ersten `<pb>` (d.h. vor dem eigentlichen Text).
    105 Die Blöcke werden jeweils durch eine Leerzeile voneinander getrennt. Änderungen am raw text werden soweit wie möglich mit Hilfe dieser Blöcke gemacht. Nur wenn es nicht anders geht, wird der Text selbst geändert.
     106Jeden Block kann es höchstens einmal geben. Alle Blöcke sind vor dem ersten `<pb>` (d.h. vor dem eigentlichen Text). Die Blöcke werden jeweils durch eine Leerzeile voneinander getrennt. Die Reihenfolge der Blöcke ist beliebig, allerdings ist die oben angegebene Reihenfolge die präferierte Reihenfolge. Änderungen am raw text werden soweit wie möglich mit Hilfe dieser Blöcke gemacht. Nur wenn es nicht anders geht, wird der Text selbst geändert.
    106107
    107108Der Sinn der Aufteilung in Anlegen der Blöcke in Schritt 1 und 2 und Auflösen der Blöcke in Schritt 3 ist, dass man möglichst lange mit dem raw text arbeiten kann. Es soll außerdem möglichst einfach nachvollziehbar bleiben, welche Änderungen an der aus China erhaltenen Version gemacht wurden, ohne dass beispielsweise durch das Einfügen von <s> jede Zeile anders aussieht als in der originalen Transkription. Erst in Schritt 5 wird die XML-Version des Textes ein Faktum an sich, das nicht mehr jederzeit neu aus dem raw text erzeugt werden kann. Idealerweise fällt das mit dem Beginn des scholarly workflow zusammen.
    108109
    109 Es muss möglich sein, bereits im raw text korrektes XML zu verwenden, ohne dass die Skripte darüber stolpern. Beispielsweise muss man `<div type="body">` einfügen können. Ein anderes Beispiel: Während der Bearbeitung fällt auf, dass ein Abschnitt auf italienisch ist. Das muss mit `<p xml:lang="it">` markiert werden können.
     110Es ist möglich, bereits im raw text korrektes XML zu verwenden, ohne dass die Skripte darüber stolpern. Beispielsweise kann man bereits jetzt `<div type="body">` einfügen. Ein anderes Beispiel: Während der Bearbeitung fällt auf, dass ein Abschnitt auf italienisch ist. Dies kann mit `<p xml:lang="it">` markiert werden. Die Skripte ignorieren tags, die bereits wohlgeformte Attribute enthalten.
    110111
    111112
    112113==== 2.01 Metadaten ====
    113114
    114 Das Skript [source:trunk/schema/scripts/workflow/Filter_2_01_additional_metadata.pl Filter_2_01_additional_metadata] bearbeitet die in Schritt 1.02 aus `index.meta` in den `metadata`-Block kopierten Metadaten.
     115Das Skript [source:trunk/schema/scripts/workflow/Filter_2_01_additional_metadata.pl Filter_2_01_additional_metadata] bearbeitet die in Schritt 1.02 aus `index.meta` in den `metadata`-Block kopierten Metadaten. Es verwendet die Hilfsdatei `metadata-GND.txt`.
    115116
    116117Für die Metadaten wird eine Kurzschreibweise verwendet, die nicht XML ist. 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.
     
    122123}}}
    123124
    124 Unbekannte Personen werden von dem Skript in die GND-Datei eingetragen. Diese Datei kann mehrere Einträge für dieselbe Person haben, nämlich einen Eintrag für jede bei uns vorkommende Schreibweise. Für die unbekannte Person muss die GND per Hand nachgetragen werden. Eventuell wird auch ein link eingefügt, mit dem man die GND prüfen kann, zum Beispiel [http://d-nb.info/gnd/118859676] für Benedetti. (Irgendwann könnte das durch ein interaktives tool passieren.)
     125Unbekannte Personen werden von dem Skript in die GND-Datei eingetragen. Diese Datei kann mehrere Einträge für dieselbe Person haben, nämlich einen Eintrag für jede bei uns vorkommende Schreibweise. Für die unbekannte Person muss die GND per Hand im Text und in der GND-Datei nachgetragen werden. Eventuell wird auch ein link eingefügt, mit dem man die GND prüfen kann, zum Beispiel [http://d-nb.info/gnd/118859676] für Benedetti. (Irgendwann könnte das durch ein interaktives tool passieren.)
    125126
    126127Außerdem fügt das Skript links zu ECHO ein, beispielsweise
     
    149150Da die Zuordnung der Textseiten zu den JPGs Voraussetzung für das Arbeiten mit dem Text ist, wird der `pageimg`-Block im Gegensatz zu den anderen Blöcken bereits hier aufgelöst.
    150151
    151 Bei Dateinamen wie `zzzz.jpg` und `.DS_store` im `pageimg`-Block bricht das Skript mit einer Fehlermeldung ab.
     152Bei Dateinamen wie `zzzz.jpg` und `.DS_Store` im `pageimg`-Block bricht das Skript mit einer Fehlermeldung ab.
    152153
    153154Für diesen Schritt gibt es auch ein Helfer-Skript `compare_pb_with_images.pl`, das von jeder Seite die ersten Zeilen anzeigt und den offset zwischen der Nummer im JPG-Dateinamen und der Seitenzahl im Buch berechnet. Wenn der offset längere Zeit kostant bleibt und sich dann ändert, deutet das darauf hin, dass an dieser Stelle im Text ein <pb> fehlt. (Eine andere mögliche Ursache ist eine fehlerhafte Paginierung im Buch.)
     
    165166  * „substitute“ (U+001A): kommt in manchen Text ganz am Ende vor und scheint ein Artefakt der Umwandlung des intern verwendeten doc-Formats zu txt bei Formax zu sein.
    166167  * zwei spaces hintereinander
    167   * Zeichen, die in den Skripten intern verwendet werden: ¤, ¥. (Diese Währungszeichen als reservierte Zeichen wurden ausgewählt, weil sie in alten Texten wahrscheinlich nicht vorkommen, aber in vielen modernen Fonts verfügbar sind.)
     168  * Zeichen, die in den Skripten intern verwendet werden: ¤, ¥. (Diese Währungszeichen als reservierte Zeichen wurden ausgewählt, weil sie in alten Texten wahrscheinlich nicht vorkommen, aber in vielen modernen Fonts verfügbar sind. Eine Alternative wären Zeichen aus dem oben ausgeschlossenen IPA-Block.)
    168169
    169170Soweit wie möglich sollten die Korrekturen im `replacements`-Block am Anfang des Textes stehen. Der `replacements`-Block wird in Schritt 3.02 aufgelöst. Einzelfälle können aber auch direkt im Text korrigiert werden. Beispiel: Ein einzelnes `Hinɔ` wird zu `Hinc`.
     
    175176
    176177Das Skript [source:trunk/schema/scripts/workflow/Filter_2_04_check_unknown_characters.pl Filter_2_04_check_unknown_characters]
    177 sammelt die im Text verwendeten Codes der Form `<001>` und schlägt jeweils passende Ersetzungen vor. Diese Vorschläge müssen per Hand geprüft werden. Beispiel:
     178sammelt die im Text verwendeten Codes der Form `<001>` und schlägt jeweils passende Ersetzungen vor (aus einer Hilfsdatei). Diese Vorschläge müssen per Hand geprüft werden. Beispiel:
    178179{{{
    179180unknown:
     
    307308  * löse `{ }` auf: `{ij}` auf zu `ij`, `{ae}` zu `ę`
    308309
    309 Anschließend wird der Text in Unicode-Normalform [http://unicode.org/reports/tr15/ NRC] gebracht.
     310Anschließend wird der Text in Unicode-Normalform [http://unicode.org/reports/tr15/ NRC] gebracht. Alle folgenden Skripte können sich darauf verlassen, den Text in NRC-Normalform vorzufinden. Wichtig wird dies in Schritt 5.
    310311
    311312Das Skript soll nicht mitdenken, sondern einfach die Schreibweisen der DESpecs in Unicode umsetzen:
     
    317318 
    318319Beachte außerdem:
    319   * `\'` (U+0027) kann im Text auch als `\’` (U+2019) geschrieben sein (Problem von `shortvrb`, mit dem beispielsweise `§\'§` im XeLaTeX-Quellcode der DESPecs im fertigen PDF zu `\’` wird, usw.)
     320  * `\'` (U+0027) kann im Text auch als `\’` (U+2019) geschrieben sein (`\'` wurde in den DESpecs leider als `\’` geschrieben; Problem von `shortvrb`, mit dem beispielsweise `§\'§` im XeLaTeX-Quellcode der DESPecs im fertigen PDF zu `\’` wird, usw.)
    320321
    321322
    322323==== 3.04 ersetze italics ====
    323324
    324 Das Skript [source:trunk/schema/scripts/workflow/Filter_3_04_replace_underscores.pl Filter_3_04_replace_underscores] ersetzt die Kurzschreibweise `_ _` für italics durch `<it> </it>` (siehe Schritt 2.06). Diese Ersetzung ist nicht Teil des emph-Skriptes, weil sie vor <s> passieren sollte.
     325Das Skript [source:trunk/schema/scripts/workflow/Filter_3_04_replace_underscores.pl Filter_3_04_replace_underscores] ersetzt die Kurzschreibweise `_ _` für italics durch `<it> </it>` (siehe Schritt 2.06).
     326
     327Diese Ersetzung ist nicht Teil des emph-Skriptes, weil sie vor <s> passieren sollte. Alle `_` vor dem ersten `<pb>` werden ignoriert.
    325328
    326329
     
    330333[source:trunk/schema/scripts/workflow/Filter_3_05_add_basic_xml.pl Filter_3_05_add_basic_xml]
    331334ergänzt die XML-Präambel `<?xml version="1.0" encoding="UTF-8"?>` und fügt das root element `<echo>` sowie `<metadata>` und `<text type="free">` ein. Der Text im `log`-Block wird zu `<dcterms:description>`.
     335
     336  * 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 5.06, 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.
    332337
    333338
     
    366371  * 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.
    367372  * 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?
     373  * Beachte Fußnoten auf zwei Seiten.
    368374
    369375
     
    403409}}}
    404410
    405 Anderes Beispiel (die zweite Zeile ist der Stand nach Schritt 3.04):
    406 {{{
    407 <mgl>_eine kur-_<lb/>_ze Notiz._</mgl>
    408 <mgl><it>eine kur-</it><lb/><it>ze Notiz.</it></mgl>
    409 <mgl style="it">eine kur-<lb/>ze Notiz.</mgl>
    410 }}}
    411 
     411Anderes Beispiel (raw text und nach Schritt 3.04, 4.02 und 4.05):
     412{{{
     413<mgl>_Eine kur-_<lb/>_ze Notiz._</mgl>
     414<mgl><it>Eine kur-</it><lb/><it>ze Notiz.</it></mgl>
     415<note position="left" xml:space="preserve"><it>Eine kur-</it><lb/><it>ze Notiz.</it></note>
     416<note position="left" style="it" xml:space="preserve">Eine kur-<lb/>ze Notiz.</note>
     417}}}
    412418
    413419Beachte:
     
    428434==== 4.07 <div> ====
    429435
    430 Das Skript [source:trunk/schema/scripts/workflow/Filter_4_07_insert_div.pl Filter_4_07_insert_div] fügt eine simple <div>-Struktur in den Text ein, indem es bei jeder <head>-Gruppe ein <div> beginnen lässt. Dadurch bekommt der Text ein rudimentäres Inhaltsverzeichnis. (Dieser Schritt ist nicht wirklich nötig für einen schemakonformen Text, aber man bekommt die <div>-Struktur quasi geschenkt.)
     436Das Skript [source:trunk/schema/scripts/workflow/Filter_4_07_insert_div.pl Filter_4_07_insert_div] fügt eine simple <div>-Struktur in den Text ein, indem es bei jeder <head>-Gruppe ein <div> beginnen lässt. Dadurch bekommt der Text ein rudimentäres Inhaltsverzeichnis.
    431437
    432438  * 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.
     
    451457==== 5.01 <reg> ====
    452458
    453 Das Skript [source:trunk/schema/scripts/workflow/Filter_5_01_insert_reg.pl Filter_5_01_insert_reg] regularisiert den Text. Für eine ausführlichere Diskussion von <reg> siehe [wiki:regularisierung hier]. Wie beim <s>-Skript kann man hier einige Parameter wählen. Die Details der Parameter stehen noch nicht fest.
     459Das Skript [source:trunk/schema/scripts/workflow/Filter_5_01_insert_reg.pl Filter_5_01_insert_reg] regularisiert den Text. Für eine ausführlichere Diskussion von <reg> siehe [wiki:regularisierung hier]. Wie beim <s>-Skript kann man hier einige Parameter wählen. Die Details der Parameter stehen noch nicht fest. Das Skript verwendet Hilfsdateien wie `reg-wordlist-lat.txt`.
    454460
    455461Kein Zeichen, das normalisiert werden soll, darf hinterher noch im Text (außerhalb von `<reg>`) sein, zum Beispiel kein Zeichen mit Tilde (mit Ausnahmen in manchen Sprachen). Für !Latein/Benedetti:
     
    465471  * der modifier letter us ꝰ wird manchmal für `'` gehalten
    466472  * Problem der Wort-Abkürzungen mit Kasus, zum Beispiel `ex .7. quinti Eucl.`. Verwende dort `<ref>`, falls möglich.
     473
     474Das Skript erwartet und hinterlässt den Text in NRC-Normalform. Escape sequences wie `&apos;`, die manche Text-Editor für `'` verwenden, werden aufgelöst.
    467475
    468476Für dieses Skript gibt es einen [source:trunk/schema/scripts/script-tests/reg-testparcours.txt testparcours].
     
    588596Wir erwarten, bald auch reinen Text ohne tags sowie Word-Texte in einem automatischen workflow in schemakonforme XML-Dokumente umwandeln zu können. Es muss sich noch zeigen, ob es praktischer ist, den Workflow anzupassen oder die unmarkierten Texte erst in ein DESpecs-konformes Zwischenformat zu bringen.
    589597
     598