Changes between Version 35 and Version 36 of workflow


Ignore:
Timestamp:
May 31, 2010, 6:59:18 AM (14 years ago)
Author:
Wolfgang Schmidle
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • workflow

    v35 v36  
    33[[PageOutline(2-4,,pullout)]]
    44
    5 Auf dieser Seite wird der XML-Workflow beschrieben, also die Umwandlung eines [http://pythia.mpiwg-berlin.mpg.de/department1/mpdl/despecs DESpecs]-konformen Rohtextes in einen [source:trunk/schema/schema/echo Schema]-konformen XML-Text.
     5Auf dieser Seite wird der XML-Workflow für die Umwandlung eines [wiki:despecs DESpecs]-konformen Rohtextes in einen [wiki:echo-schema Schema]-konformen XML-Text beschrieben.
    66
    77Bisher sind 19 schemakonforme Texte bei ECHO, siehe
     
    2929Insbesondere Skripte mit Parametern wie das <reg>-Skript (Schritt 5.01) probiert man normalerweise erst an einzelnen Textstellen aus, bevor man es für den ganzen Text verwendet. Andere Skripte wie zum Beispiel das Skript in Schritt 3.05 kann man nicht sinnvoll auf Textstücke, sondern nur auf den gesamten Text anwenden.
    3030
    31 Wenn ein Skript einen Fehler findet, der es am Weiterarbeiten hindert, gibt das Skript eine Fehlermeldung aus. !TextWrangler ändert dann nicht die Datei, sondern gibt die Fehlermeldung in einem getrennten Fenster aus. Nur wenn ein Skript ohne Fehlermeldung durchläuft, verändert es den Text. Skripte, die mit {{{find}}}, {{{check}}} oder {{{test}}} beginnen, verändern den Text nie, sondern geben immer nur „Fehlermeldungen“ aus.
    32 
    33 Die Skripte können auch von der command line gestartet werden. Der Dateiname wird dann als Parameter übergeben, und die Ausgabe ist in „stdout“, Fehlermeldungen dagegen in „stderr“. Die Meta-Skripte in Schritt 3 und 4 rufen die anderen Skripte als Unix-pipe über die command line auf.
     31Wenn ein Skript einen Fehler findet, der es am Weiterarbeiten hindert, gibt das Skript eine Fehlermeldung aus. !TextWrangler ändert dann nicht die Datei, sondern gibt die Fehlermeldung in einem getrennten Fenster aus. Nur wenn ein Skript ohne Fehlermeldung durchläuft, verändert es den Text. Skripte, die mit `find`, `check` oder `test` beginnen, verändern den Text nie, sondern geben immer nur „Fehlermeldungen“ aus.
     32
     33Die Skripte können auch von der command line gestartet werden. Der Dateiname wird dann als Parameter übergeben, und die Ausgabe ist in ''stdout'', Fehlermeldungen dagegen in ''stderr''. Die Meta-Skripte in Schritt 3 und 4 rufen die anderen Skripte als Unix-pipe über die command line auf.
    3434
    3535Die Anwendung in !TextWrangler ist allerdings bequemer.
     
    4444
    4545  * 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.
    46   * 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}}}.
     46  * 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`.
    4747
    4848
     
    5353  * Im [source:trunk/texts Texte-Verzeichnis] Unterverzeichnisse anlegen (allerdings nerven die raw/xml-Verzeichnisse in der Praxis)
    5454  * Datei aus Pythia rüberkopieren
    55   * Kopie erstellen und umbenennen ({{{autor_jahr_identifier}}}), Zeilenenden von CRLF zu LF. Entferne [http://de.wikipedia.org/wiki/Byte_Order_Mark BOM]-Fragmente (korrekte BOMs sind okay).
     55  * Kopie erstellen und umbenennen (`autor_jahr_identifier`), Zeilenenden von CRLF zu LF. Entferne [http://de.wikipedia.org/wiki/Byte_Order_Mark BOM]-Fragmente (korrekte BOMs sind okay).
    5656
    5757(Shell-Skript von Klaus)
     
    6262==== 1.02 Kommunikation mit Foxridge ====
    6363
    64 Das Skript [source:trunk/schema/scripts/workflow/Filter_1_02_import_metadata.pl Filter_1_01_import_metadata] kommuniziert mit Foxridge. Das Skript setzt voraus, dass der Identifier im Dateinamen steht. (Das Skript wird daher nicht mit Archimedes-legacy-Verzeichnissen funktionieren.)
     64Das Skript [source:trunk/schema/scripts/workflow/Filter_1_02_import_metadata.pl Filter_1_01_import_metadata] kommuniziert mit Foxridge. Das Skript setzt voraus, dass der achtstellige Identifier im Dateinamen steht. (Das Skript wird daher nicht mit Archimedes-legacy-Verzeichnissen funktionieren.)
    6565
    6666Erstelle eine lokale Kopie der entsprechenden index.meta-Datei (funktioniert nur innerhalb des Instituts):
     
    6969}}}
    7070
    71 Extrahiere daraus die Metadaten und schreibe sie in den {{{metadata}}}-Block (siehe [#a2.rawtextbearbeiten Schritt 2]) in den raw text. Die Metadaten werden wörtlich übernommen, das Format wird erst in Schritt [#a2.01Metadaten 2.01] angepasst. Übernommen werden (jeweils in <resource>/<meta>):
    72   * {{{<author>}}}
    73   * {{{<title>}}}
    74   * {{{<year>}}}
    75   * {{{<lang>}}} ([http://de.wikipedia.org/wiki/ISO_639 ISO 639-1], d.h. zweistellig)
    76   * (bisher noch nicht: {{{<publisher>}}}, {{{<city>}}}, {{{<number_of_pages>}}}, {{{<translator>}}})
    77 
    78 Finde den pageimg-Unterordner (default ist {{{pageimg/}}}) und schreibe die JPG-Dateinamen unbearbeitet in den {{{pageimg}}}-Block (siehe [#a2.rawtextbearbeiten Schritt 2]) in den raw text.
     71Extrahiere daraus die Metadaten und schreibe sie in den `metadata`-Block (siehe [#a2.rawtextbearbeiten Schritt 2]) in den raw text. Die Metadaten werden wörtlich übernommen, das Format wird erst in Schritt [#a2.01Metadaten 2.01] angepasst. Übernommen werden (jeweils in <resource>/<meta>):
     72  * `<author>`
     73  * `<title>`
     74  * `<year>`
     75  * `<lang>` ([http://de.wikipedia.org/wiki/ISO_639 ISO 639-1], d.h. zweistellig)
     76  * (bisher noch nicht: `<publisher>`, `<city>`, `<number_of_pages>`, `<translator>`)
     77
     78Finde den pageimg-Unterordner (default ist `pageimg/`) und schreibe die JPG-Dateinamen unbearbeitet in den `pageimg`-Block (siehe [#a2.rawtextbearbeiten Schritt 2]) in den raw text.
    7979
    8080Änderungen in index.meta:
     
    8282  * Wenn <texttool> noch nicht vorhanden ist, anlegen.
    8383  * Pageimg und figures anlegen, aber unverändert lassen, wenn es sie schon gibt.
    84   * text-url-path anlegen: Sprache aus z.B. {{{<lang>it</lang>}}}.
     84  * text-url-path anlegen: Sprache aus z.B. `<lang>it</lang>`.
    8585 
    8686Das Skript meldet sich nicht bei Foxridge an. Die Änderungen in index.meta werden daher nur in der lokalen Kopie gemacht. Es fehlt also:
     
    9393=== 2. raw text bearbeiten ===
    9494
    95 In diesem Arbeitsschritt wird der raw text auf die Umwandlung in XML vorbereitet. Das erste Skript bearbeitet den {{{metadata}}}-Block, den [source:trunk/schema/scripts/workflow/Filter_1_02_import_metadata.pl Filter_1_01_import_metadata] im raw text angelegt hat. Das zweite Skript löst den {{{pageimg}}}-Block auf und verteilt den Inhalt auf die <pb> im Text. Alle weiteren Skripte verändern den raw text gar nicht, sondern finden Stellen, die per Hand geändert werden müssen.
     95In diesem Arbeitsschritt wird der raw text auf die Umwandlung in XML vorbereitet. Das erste Skript bearbeitet den `metadata`-Block, den [source:trunk/schema/scripts/workflow/Filter_1_02_import_metadata.pl Filter_1_01_import_metadata] im raw text angelegt hat. Das zweite Skript löst den `pageimg`-Block auf und verteilt den Inhalt auf die <pb> im Text. Alle weiteren Skripte verändern den raw text gar nicht, sondern finden Stellen, die per Hand geändert werden müssen.
    9696
    9797Am Anfang der Datei sind folgende Blöcke erlaubt:
    98   * {{{metadata:}}} (kopiert aus {{{index.meta}}} in Schritt 1.02, korrigiert in Schritt 2.01, aufgelöst in Schritt 3.05)
    99   * {{{pageimg:}}} (kopiert aus {{{pageimg/}}} in Schritt 1.02, aufgelöst bereits in Schritt 2.02)
    100   * {{{unknown:}}} (angelegt in Schritt 2.04, aufgelöst in Schritt 3.01)
    101   * {{{replacements:}}} (angelegt per Hand; könnte man noch aufteilen in forbidden characters aus Schritt 2.03, escape sequences aus Schritt 2.05, special instructions aus Schritt 2.10; aber bringt das mehr Klarheit? Aufgelöst in Schritt 3.02)
    102   * {{{log:}}} (per Hand angelegt, immer wenn es nötig ist. Aufgelöst in Schritt 3.05, wo es in <dcterms:description> umgewandelt wird.)
    103 
    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).
     98  * `metadata:` (kopiert aus `index.meta` in Schritt 1.02, korrigiert in Schritt 2.01, aufgelöst in Schritt 3.05)
     99  * `pageimg:` (kopiert aus `pageimg/` in Schritt 1.02, aufgelöst bereits in Schritt 2.02)
     100  * `unknown:` (angelegt in Schritt 2.04, aufgelöst in Schritt 3.01)
     101  * `replacements:` (angelegt per Hand; könnte man noch aufteilen in forbidden characters aus Schritt 2.03, escape sequences aus Schritt 2.05, special instructions aus Schritt 2.10; aber bringt das mehr Klarheit? Aufgelöst in Schritt 3.02)
     102  * `log:` (per Hand angelegt, immer wenn es nötig ist. Aufgelöst in Schritt 3.05, wo es in <dcterms:description> umgewandelt wird.)
     103
     104Jeden 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).
    105105Die 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.
    106106
    107107Der 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.
    108108
    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.
     109Es 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.
    110110
    111111
    112112==== 2.01 Metadaten ====
    113113
    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.
     114Das 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.
    115115
    116116Fü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.
     
    138138==== 2.02 pb's synchronisieren ====
    139139
    140 Das Skript [source:trunk/schema/scripts/workflow/Filter_2_02_sync_pb.pl Filter_2_02_sync_pb] schreibt die JPG-Dateinamen im {{{pageimg}}}-Block hinter die <pb> im Text. Die Zuordnung muss dann per Hand geprüft werden.
    141 
    142 Falls die Zuordnung nicht stimmt, müssen die Dateinamen im {{{pageimg}}}-Block umsortiert und/oder <pb> im Text ergänzt werden (zu viele <pb> im Text sind selten). Danach muss das Skript wiederholt werden. (Beachte, dass man in diesem Schritt keine weiteren Textänderungen machen sollte, da sie durch das Rückgängigmachen wieder verschwinden.)
     140Das Skript [source:trunk/schema/scripts/workflow/Filter_2_02_sync_pb.pl Filter_2_02_sync_pb] schreibt die JPG-Dateinamen im `pageimg`-Block hinter die <pb> im Text. Die Zuordnung muss dann per Hand geprüft werden.
     141
     142Falls die Zuordnung nicht stimmt, müssen die Dateinamen im `pageimg`-Block umsortiert und/oder <pb> im Text ergänzt werden (zu viele <pb> im Text sind selten). Danach muss das Skript wiederholt werden. (Beachte, dass man in diesem Schritt keine weiteren Textänderungen machen sollte, da sie durch das Rückgängigmachen wieder verschwinden.)
    143143
    144144Das Skript macht also Änderungen im ganzen Dokument, zum Beispiel:
     
    147147}}}
    148148
    149 Da 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.
    150 
    151 Bei Dateinamen wie {{{zzzz.jpg}}} und {{{.DS_store}}} im {{{pageimg}}}-Block bricht das Skript mit einer Fehlermeldung ab.
    152 
    153 Fü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.)
     149Da 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.
     150
     151Bei Dateinamen wie `zzzz.jpg` und `.DS_store` im `pageimg`-Block bricht das Skript mit einer Fehlermeldung ab.
     152
     153Fü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.)
    154154
    155155
     
    167167  * 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.)
    168168
    169 Soweit 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}}}.
     169Soweit 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`.
    170170
    171171Eventuell 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.
     
    175175
    176176Das 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:
     177sammelt 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:
    178178{{{
    179179unknown:
     
    208208==== 2.06 prüfe italics ====
    209209
    210 Das Skript [source:trunk/schema/scripts/workflow/Filter_2_06_check_underscores.pl Filter_2_06_check_underscores] prüft, ob es Schwierigkeiten bei der Umwandlung der Kurzschreibweise {{{_ _}}} für italics geben wird. Die Probleme werden dann von Hand korrigiert. In Schritt 3.04 werden die {{{_ _}}} dann in <it> verwandelt. Die Umwandlung erfolgt also, bevor die <s> in den Text eingefügt werden. Die Umwandlung von <it> in die endgültige Form <emph style="it"> findet dagegen erst nach dem Einfügen der <s> statt.
     210Das Skript [source:trunk/schema/scripts/workflow/Filter_2_06_check_underscores.pl Filter_2_06_check_underscores] prüft, ob es Schwierigkeiten bei der Umwandlung der Kurzschreibweise `_ _` für italics geben wird. Die Probleme werden dann von Hand korrigiert. In Schritt 3.04 werden die `_ _` dann in <it> verwandelt. Die Umwandlung erfolgt also, bevor die <s> in den Text eingefügt werden. Die Umwandlung von <it> in die endgültige Form <emph style="it"> findet dagegen erst nach dem Einfügen der <s> statt.
    211211
    212212Die Korrekturen in diesem Schritt werden wohl immer im Text selbst und nicht in den Blöcken vor dem Text gemacht.
     
    219219prüft ein paar Fälle, die nicht vorkommen sollten und auf Fehler bei der Transkription hindeuten. Der Sinn dieser Prüfung ist auch, dass sich die weiteren Skripte auf die Einhaltung dieser formalen Dinge verlassen können. Beispiele:
    220220
    221   * {{{<h>}}}, {{{<mgl>}}}, {{{<mgr>}}} jeweils am Anfang einer Zeile
    222   * {{{</h>}}}, {{{</mgl>}}}, {{{</mgr>}}} jeweils am Ende einer Zeile
    223   * {{{<tb>}}}, {{{<fig>}}} auf eigener Zeile
    224   * bei {{{<pb>}}} ist nur noch {{{<rh>}}} in der gleichen Zeile erlaubt
    225   * nicht-existente Elemente, wie z.B. in {{{<scG</sc>}}}, oder auch {{{<sup>9</sup>}}} statt {{{<^>9</^>}}} (aber siehe unten)
    226   * verschachtelte {{{<p>}}} (vermutlich ein {{{<p>}}} zuviel), und entsprechend für {{{<h>}}} etc.
    227   * {{{</p>}}} ohne vorhergehendes {{{<p>}}}, und entsprechend für {{{<h>}}} etc.
    228   * zusammengehörende Tags wie {{{<p>}}} und {{{</p>}}} liegen sehr weit auseinander
    229   * zusammengehörende Tags wie {{{<rh>}}} und {{{</rh>}}} sind nicht in der gleichen Zeile
    230 
    231 Wie bei Schritt 2.03 muss man jeweils entscheiden, ob eine Korrektur im Text selbst gemacht wird oder in den {{{replacements}}}-Block geschrieben wird. Beispiel:
     221  * `<h>`, `<mgl>`, `<mgr>` jeweils am Anfang einer Zeile
     222  * `</h>`, `</mgl>`, `</mgr>` jeweils am Ende einer Zeile
     223  * `<tb>`, `<fig>` auf eigener Zeile
     224  * bei `<pb>` ist nur noch `<rh>` in der gleichen Zeile erlaubt
     225  * nicht-existente Elemente, wie z.B. in `<scG</sc>`, oder auch `<sup>9</sup>` statt `<^>9</^>` (aber siehe unten)
     226  * verschachtelte `<p>` (vermutlich ein `<p>` zuviel), und entsprechend für `<h>` etc.
     227  * `</p>` ohne vorhergehendes `<p>`, und entsprechend für `<h>` etc.
     228  * zusammengehörende Tags wie `<p>` und `</p>` liegen sehr weit auseinander
     229  * zusammengehörende Tags wie `<rh>` und `</rh>` sind nicht in der gleichen Zeile
     230
     231Wie bei Schritt 2.03 muss man jeweils entscheiden, ob eine Korrektur im Text selbst gemacht wird oder in den `replacements`-Block geschrieben wird. Beispiel:
    232232{{{
    233233replacements:
     
    254254}}}
    255255
    256 (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}}}.)
     256(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`.)
    257257
    258258
     
    280280prüft anschließend, ob das Ergebnis wohlgeformt ist. (Dieses Skript ist zurzeit ein Wrapper für xmllint. Ich werde es wahrscheinlich noch auf ein Perl-Modul statt xmllint umstellen.)
    281281
    282 Wenn der Text wohlgeformtes XML ist, sollte man ihn mit Dateiendung in {{{xml}}} (im Verzeichnis {{{xml/}}} statt {{{raw/}}}) abspeichern.
     282Wenn der Text wohlgeformtes XML ist, sollte man ihn mit Dateiendung in `xml` (im Verzeichnis `xml/` statt `raw/`) abspeichern.
    283283
    284284
    285285==== 3.01 ersetze unknown characters ====
    286286
    287 Das Skript [source:trunk/schema/scripts/workflow/Filter_3_01_replace_unknown_characters.pl Filter_3_01_replace_unknown_characters] ersetzt die Zeichen aus dem {{{unknown}}}-Block. Das Skript zur Ersetzung der escape sequences (Schritt 3.03) kann sich darauf verlassen, dass die unknown characters bereits geändert wurden. Das ist wichtig für Fälle wie {{{\'<001>}}}.
     287Das Skript [source:trunk/schema/scripts/workflow/Filter_3_01_replace_unknown_characters.pl Filter_3_01_replace_unknown_characters] ersetzt die Zeichen aus dem `unknown`-Block. Das Skript zur Ersetzung der escape sequences (Schritt 3.03) kann sich darauf verlassen, dass die unknown characters bereits geändert wurden. Das ist wichtig für Fälle wie `\'<001>`.
    288288
    289289
    290290==== 3.02 ersetze replacements ====
    291291
    292 Das Skript [source:trunk/schema/scripts/workflow/Filter_3_02_replace_replacements.pl Filter_3_02_replace_replacements] (unglücklicher Name?) ersetzt die Zeichen aus dem {{{replacements}}}-Block, beispielsweise das
     292Das Skript [source:trunk/schema/scripts/workflow/Filter_3_02_replace_replacements.pl Filter_3_02_replace_replacements] (unglücklicher Name?) ersetzt die Zeichen aus dem `replacements`-Block, beispielsweise das
    293293{{{
    294294replacements:
     
    303303
    304304Das Skript [source:trunk/schema/scripts/workflow/Filter_3_03_replace_escape_sequences.pl Filter_3_03_replace_escape_sequences], das in Schritt 2.05 vorbereitet wurde, löst alle escape sequences auf, sowie einige weitere Schreibweisen aus den DESpecs:
    305   * Sequenzen mit \ wie {{{\'q}}} etc.
    306   * {{{$}}} wird zu {{{ſ}}} ([http://de.wikipedia.org/wiki/Langes_s long s])
    307   * löse {{{{ }}}} auf: {{{{ij}}}} auf zu {{{ij}}}, {{{{ae}}}} zu {{{ę}}}
     305  * Sequenzen mit \ wie `\'q` etc.
     306  * `$` wird zu `ſ` ([http://de.wikipedia.org/wiki/Langes_s long s])
     307  * löse `{ }` auf: `{ij}` auf zu `ij`, `{ae}` zu `ę`
    308308
    309309Anschließend wird der Text in Unicode-Normalform [http://unicode.org/reports/tr15/ NRC] gebracht.
    310310
    311311Das Skript soll nicht mitdenken, sondern einfach die Schreibweisen der DESpecs in Unicode umsetzen:
    312   * {{{\-}}} wird hier zu einem combining macron, weil es so im transkribierten Text steht. Später wird das in den meisten Fällen zu einer Tilde korrigiert, weil das Makron normalerweise eine falsche Transkription einer Tilde ist.
    313   * Genauso ist {{{\,e}}} in den meisten Fällen in Wirklichkeit {{{ę}}}, wird aber hier zu {{{ȩ}}}.
    314   * Zeichen, die wir absichtlich nicht in die Specs aufgenommen haben, zum Beispiel {{{<^>9</^>}}} für ꝰ (modifier letter us, U+A770), werden hier ebenfalls noch nicht umgewandelt. (Wenn aber zum Beispiel in der Transkription subscript und superscript verwechselt wurden und das in Schritt 2 auffällt, kann man dort {{{<_>9</_> ꝰ}}} in den {{{replacements}}}-Block schreiben.)
    315   * {{{{ij}}}} wird zwar hier zu {{{ij}}}, aber in einem späteren Schritt wird {{{ij}}} stillschweigend wieder zu {{{ij}}} (ohne {{{{ }}}}).
    316   * Für die Ligatur {{{{is}}}} in italics gibt es gar kein Ligatur-Zeichen in Unicode, sodass es gleich stillschweigend durch {{{is}}} ersetzt wird. Eine Lösung wie {{{i ZWJ j}}} mit dem Zero Width Joiner (U+200D) funktioniert leider nur in der [http://www.unicode.org/versions/Unicode5.2.0/ch16.pdf Theorie] (dort p.506).
     312  * `\-` wird hier zu einem combining macron, weil es so im transkribierten Text steht. Später wird das in den meisten Fällen zu einer Tilde korrigiert, weil das Makron normalerweise eine falsche Transkription einer Tilde ist.
     313  * Genauso ist `\,e` in den meisten Fällen in Wirklichkeit `ę`, wird aber hier zu `ȩ`.
     314  * Zeichen, die wir absichtlich nicht in die Specs aufgenommen haben, zum Beispiel `<^>9</^>` für ꝰ (modifier letter us, U+A770), werden hier ebenfalls noch nicht umgewandelt. (Wenn aber zum Beispiel in der Transkription subscript und superscript verwechselt wurden und das in Schritt 2 auffällt, kann man dort `<_>9</_> ꝰ` in den `replacements`-Block schreiben.)
     315  * `{ij}` wird zwar hier zu `ij`, aber in einem späteren Schritt wird `ij` stillschweigend wieder zu `ij` (ohne `{ }`).
     316  * Für die Ligatur `{is}` in italics gibt es gar kein Ligatur-Zeichen in Unicode, sodass es gleich stillschweigend durch `is` ersetzt wird. Eine Lösung wie `i ZWJ j` mit dem Zero Width Joiner (U+200D) funktioniert leider nur in der [http://www.unicode.org/versions/Unicode5.2.0/ch16.pdf Theorie] (dort p.506).
    317317 
    318318Beachte 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.)
     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.)
    320320
    321321
    322322==== 3.04 ersetze italics ====
    323323
    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.
     324Das 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.
    325325
    326326
     
    329329Das Skript
    330330[source:trunk/schema/scripts/workflow/Filter_3_05_add_basic_xml.pl Filter_3_05_add_basic_xml]
    331 ergä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>}}}.
     331ergä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>`.
    332332
    333333
     
    335335
    336336Das Skript [source:trunk/schema/scripts/workflow/Filter_3_06_make_tags_wellformed.pl Filter_3_06_make_tags_wellformed] macht die tags wohlgeformt:
    337   * reservierte Zeichen in XML: {{{&}}} wird zu {{{&amp;}}}. (Das Skript kann mehrere Male aufgerufen werden, es wird also aus {{{&amp;}}} nicht {{{&amp;amp;}}}.) Die verbotenen Zeichen < und > wurden bereits in Schritt 2.07 abgefangen.
    338   * Attribute: {{{<... it>}}} wird zu {{{<... style="it">}}}, genauso für {{{fr}}}. Das Skript ignoriert tags, die bereits Attribute mit der gültigen Syntax {{{name="wert"}}} haben.
    339   * ergänze „{{{/}}}“ in den ungeschlossenen Elementen wie {{{<pb>}}} und {{{<hd>}}}
    340   * korrigiere verbotene Element-Namen wie {{{<^>}}}
     337  * reservierte Zeichen in XML: `&` wird zu `&amp;`. (Das Skript kann mehrere Male aufgerufen werden, es wird also aus `&amp;` nicht `&amp;amp;`.) Die verbotenen Zeichen < und > wurden bereits in Schritt 2.07 abgefangen.
     338  * Attribute: `<... it>` wird zu `<... style="it">`, genauso für `fr`. Das Skript ignoriert tags, die bereits Attribute mit der gültigen Syntax `name="wert"` haben.
     339  * ergänze „`/`“ in den ungeschlossenen Elementen wie `<pb>` und `<hd>`
     340  * korrigiere verbotene Element-Namen wie `<^>`
    341341
    342342Das Skript ändert außerdem soweit wie möglich die Element-Namen der DESpecs bereits in ihre Gegenstücke im ECHO Schema. Insbesondere die tags, die später zu <emph> werden, werden hier nicht umbenannt.
     
    354354==== 4.01 <pb> ====
    355355
    356 Das Skript [source:trunk/schema/scripts/workflow/Filter_4_01_pb.pl Filter_4_01_pb] verwandelt {{{<rh>}}} in ein Attribut {{{rhead}}} in {{{<pb>}}}. Alle Formatierungen wie kursiv, gesperrt, Fettdruck etc. im running head werden entfernt, weil es recht sicher ist, dass sie semantisch irrelevant sind. Die grundsätzliche Frage, wie genau wir die originale Textgestalt wiedergeben wollen, selbst wenn sie offensichtlich semantisch nicht relevant ist, haben wir allerdings noch nicht genau geklärt.
     356Das Skript [source:trunk/schema/scripts/workflow/Filter_4_01_pb.pl Filter_4_01_pb] verwandelt `<rh>` in ein Attribut `rhead` in `<pb>`. Alle Formatierungen wie kursiv, gesperrt, Fettdruck etc. im running head werden entfernt, weil es recht sicher ist, dass sie semantisch irrelevant sind. Die grundsätzliche Frage, wie genau wir die originale Textgestalt wiedergeben wollen, selbst wenn sie offensichtlich semantisch nicht relevant ist, haben wir allerdings noch nicht genau geklärt.
    357357
    358358
    359359==== 4.02 floats herausziehen ====
    360360
    361 Das Skript [source:trunk/schema/scripts/workflow/Filter_4_02_move_floats.pl Filter_4_02_move_floats] zieht Floats aus Absätzen heraus: An der ursprünglichen Stelle wird {{{<anchor>}}} eingefügt, und alle Floats eines Absatzes kommen in ein {{{<div type="float">}}} direkt nach dem Absatz. Dadurch bleiben die Floats im Text in der richtigen Reihenfolge.
     361Das Skript [source:trunk/schema/scripts/workflow/Filter_4_02_move_floats.pl Filter_4_02_move_floats] zieht Floats aus Absätzen heraus: An der ursprünglichen Stelle wird `<anchor>` eingefügt, und alle Floats eines Absatzes kommen in ein `<div type="float">` direkt nach dem Absatz. Dadurch bleiben die Floats im Text in der richtigen Reihenfolge.
    362362
    363363Das Kriterium in den DESpecs, wo die Floats zu tippen sind, ist recht krude. Daher ist eine minimale Nachbereitung sinnvoll. Zum Beispiel wird ein Float stillschweigend aus dem Absatz geschoben, wenn nur eine einzige Textzeile davor oder danach ist. (Als Folge können allerdings Marginalien, die sich auf einen Absatz beziehen, im xml formal vor oder nach dem Absatz stehen.) Da dies automatisch geschehen kann, wird es nicht schon in Schritt 2 gemacht.
    364364
    365365  * Vorsicht bei anchored marginal notes.
    366   * 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.
     366  * 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.
    367367  * 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?
    368368
     
    378378
    379379Beachte Fälle wie:
    380   * et.a.b.hoc est (hier normalisieren wir bisher die spaces, also „{{{et .a.b. hoc est}}}“)
     380  * et.a.b.hoc est (hier normalisieren wir bisher die spaces, also „`et .a.b. hoc est`“)
    381381  * .a.b:c.d:e.f.
    382   * .{{{<lb/>}}}a.b.
     382  * .`<lb/>`a.b.
    383383  * Wort-Abkürzungen
    384   * {{{&c.}}} etc.
    385 
    386 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.
     384  * `&c.` etc.
     385
     386Das 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.
    387387
    388388
    389389==== 4.05 <emph> ====
    390390
    391 Das Skript [source:trunk/schema/scripts/workflow/Filter_4_05_emph.pl Filter_4_05_emph] ersetze Fomatierungs-tags durch {{{<emph style="...">}}}.
     391Das Skript [source:trunk/schema/scripts/workflow/Filter_4_05_emph.pl Filter_4_05_emph] ersetze Fomatierungs-tags durch `<emph style="...">`.
    392392
    393393Vorher verwandelt das Skript small caps:
     
    412412
    413413Beachte:
    414   * {{{<_>}}} und {{{<^>}}} wurden in Schritt 3.06 in {{{<sub>}}} und {{{<super>}}} umbenannt.
     414  * `<_>` und `<^>` wurden in Schritt 3.06 in `<sub>` und `<super>` umbenannt.
    415415  * <it> in einem Absatz in italics ergibt wieder upright.
    416   * Kombinationen wie {{{it bf}}}
     416  * Kombinationen wie `it bf`
    417417
    418418Für dieses Skript gibt es einen [source:trunk/schema/scripts/script-tests/emph-testparcours.txt testparcours].
     
    430430Das 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.)
    431431
    432   * 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.
    433   * {{{n}}} und {{{level}}} werden mit {{{n="0"}}} und {{{level="0"}}} gefüllt und erst im Schritt 5.06 korrekt durchnumeriert.
    434   * Korrigiere <div> (automatisch?) bei den {{{<head>}}}, die eigentlich Footer sind.
     432  * 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.
     433  * `n` und `level` werden mit `n="0"` und `level="0"` gefüllt und erst im Schritt 5.06 korrekt durchnumeriert.
     434  * Korrigiere <div> (automatisch?) bei den `<head>`, die eigentlich Footer sind.
    435435
    436436Es muss möglich sein, bereits im raw text <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>?
     
    442442
    443443
    444 === 5. weitere Schritte und scholarly workflow ===
     444=== 5. Textanalyse ===
    445445
    446446Hier gibt es einen Einschnitt im workflow: Der schemakonforme xml-Text wird bearbeitet. Es ist dann nicht mehr möglich, einfach zum raw text zurückzukehren und alle Bearbeitungsschritte noch einmal zu machen. Dies fällt, wie schon in Schritt 2 gesagt, idealerweise mit dem Beginn des scholarly workflow zusammen.
     
    453453Das 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.
    454454
    455 Kein 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:
     455Kein 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:
    456456
    457457  * Zeichen mit Tilde: ã ẽ ĩ õ ũ ñ
     
    460460  * medievalist characters: ꝑ ꝓ ꝗ ꝗ̃ ꝙ ꝰ  ́ ꝯ (geeignete Fonts sind Andron, Junicode und Palemonas, die man [http://www.mufi.info/fonts/ hier] bekommt)
    461461  * weitere: ę ĺ (das zweite Zeichen ist aus Alvarus)
    462   * Apostroph: in den Abschnitten in Benedetti mit {{{xml:lang="it"}}} bzw. {{{xml:lang="ita"}}} ist {{{'}}} dagegen erlaubt
     462  * Apostroph: in den Abschnitten in Benedetti mit `xml:lang="it"` bzw. `xml:lang="ita"` ist `'` dagegen erlaubt
    463463
    464464Beachte:
    465   * der modifier letter us ꝰ wird manchmal für {{{'}}} gehalten
    466   * Problem der Wort-Abkürzungen mit Kasus, zum Beispiel {{{ex .7. quinti Eucl.}}}. Verwende dort {{{<ref>}}}, falls möglich.
     465  * der modifier letter us ꝰ wird manchmal für `'` gehalten
     466  * Problem der Wort-Abkürzungen mit Kasus, zum Beispiel `ex .7. quinti Eucl.`. Verwende dort `<ref>`, falls möglich.
    467467
    468468Für dieses Skript gibt es einen [source:trunk/schema/scripts/script-tests/reg-testparcours.txt testparcours].
     
    471471==== 5.02 <var> ====
    472472
    473 Das Skript [source:trunk/schema/scripts/workflow/Filter_5_02_insert_var.pl Filter_5_02_insert_var] fügt <var> um Variablen ein. Ein Ziel ist, den Inhalt vor der morphologischen Analyse zu verbergen. Eventuell hat dieses Skript ebenfalls Parameter, nämlich wie Variablen im Text aussehen (zum Beispiel „{{{AB}}}“ versus „{{{.a.b.}}}“). {{{<emph>}}} in Variablen wird wie bei running heads entfernt: Ob der Setzer ein K in upright shape oder in italics gewählt hat, ist egal.
     473Das Skript [source:trunk/schema/scripts/workflow/Filter_5_02_insert_var.pl Filter_5_02_insert_var] fügt <var> um Variablen ein. Ein Ziel ist, den Inhalt vor der morphologischen Analyse zu verbergen. Eventuell hat dieses Skript ebenfalls Parameter, nämlich wie Variablen im Text aussehen (zum Beispiel „`AB`“ versus „`.a.b.`“). `<emph>` in Variablen wird wie bei running heads entfernt: Ob der Setzer ein K in upright shape oder in italics gewählt hat, ist egal.
    474474
    475475Für das Skript gibt es einen [source:trunk/schema/scripts/script-tests/var-testparcours.txt testparcours].
     
    478478==== 5.03 <num> ====
    479479
    480 Das Skript [source:trunk/schema/scripts/workflow/Filter_5_03_insert_num.pl Filter_5_03_insert_num] fügt <num> um Zahlen ein, die nicht in der in modernen westlichen Texten üblichen Weise geschrieben sind. Ein Ziel ist wieder, den Inhalt vor der morphologischen Analyse zu verbergen. Beispiel: {{{<num value="0.5">½</num>}}}. Das Anzeigesystem könnte eine GUI für eine XQuery zur Verfügung stellen, mit der man nach den value-Attributen suchen kann.
    481 
    482 (Verwende das Skript {{{Filter_roman_numbers.pl}}}: <num value="..."> für römische Zahlen.)
     480Das Skript [source:trunk/schema/scripts/workflow/Filter_5_03_insert_num.pl Filter_5_03_insert_num] fügt <num> um Zahlen ein, die nicht in der in modernen westlichen Texten üblichen Weise geschrieben sind. Ein Ziel ist wieder, den Inhalt vor der morphologischen Analyse zu verbergen. Beispiel: `<num value="0.5">½</num>`.
     481
     482(Verwende das Skript `Filter_roman_numbers.pl`: <num value="..."> für römische Zahlen.)
    483483
    484484
     
    490490==== 5.05 <foreign> ====
    491491
    492 Das Skript [source:trunk/schema/scripts/workflow/Filter_5_05_insert_foreign.pl Filter_5_05_insert_foreign] soll fremdsprachliche Textstellen markieren. Füge zumindest für griechischen Text (erkennbar an den verwendeten Zeichen) {{{<foreign xml:lang="el">}}} ein. Durch eine minimale linguistische Analyse des Textes kann man auch weitere fremdsprachliche Textstücke korrekt erkennen.
     492Das Skript [source:trunk/schema/scripts/workflow/Filter_5_05_insert_foreign.pl Filter_5_05_insert_foreign] soll fremdsprachliche Textstellen markieren. Füge zumindest für griechischen Text (erkennbar an den verwendeten Zeichen) `<foreign xml:lang="el">` ein. Durch eine minimale linguistische Analyse des Textes kann man auch weitere fremdsprachliche Textstücke korrekt erkennen.
    493493
    494494
    495495==== 5.06 div-Attribute ====
    496496
    497 Das Skript [source:trunk/schema/scripts/workflow/Filter_5_06_number_divs.pl Filter_5_06_number_divs] numeriert die Attribute {{{<div level="." n=".">}}} korrekt durch. (Das Skript ist ein Wrapper für das XSLT-Skript {{{number-divs.xsl}}}, das die eigentliche Arbeit macht.)
     497Das Skript [source:trunk/schema/scripts/workflow/Filter_5_06_number_divs.pl Filter_5_06_number_divs] numeriert die Attribute `<div level="." n=".">` korrekt durch. (Das Skript ist ein Wrapper für das XSLT-Skript `number-divs.xsl`, das die eigentliche Arbeit macht.)
    498498
    499499
    500500==== 5.07 GIS ====
    501501
    502 Füge GIS-Elemente in ausgewählte Texte ein, also in etwa {{{<person>}}}, {{{<place>}}}, {{{<time>}}}, {{{<event>}}}. Für eine ausführlichere Diskussion siehe [wiki:"2010-04-15 GIS meeting" hier].
     502Füge GIS-Elemente in ausgewählte Texte ein, also in etwa `<person>`, `<place>`, `<time>`, `<event>`. Für eine ausführlichere Diskussion siehe [wiki:"2010-04-15 GIS meeting" hier].
    503503
    504504
     
    518518
    519519Ein möglicher Gesamt-Test für einen sorgfältig annotierten Text: Alle Punkte im Text gehören zu einer der folgenden Kategorien:
    520   * Satzende-Punkte ({{{<s>Bla bla bla. </s>}}})
    521   * in einem Tag ({{{<ref>ex .7. quinti Eucl.</ref>}}})
    522   * bei einer Zahl ({{{.11.}}})
    523 
    524 
    525 ==== 5.10 scholarly workflow ====
     520  * Satzende-Punkte (`<s>Bla bla bla. </s>`)
     521  * in einem Tag (`ex <ref>.7. quinti Eucl.</ref>`)
     522  * bei einer Zahl (`.11.`)
     523
     524
     525=== 6. scholarly workflow ===
    526526
    527527Einige Standard-Aufgaben des scholarly workflow, die teilweise bereits im Schema angelegt sind:
    528   * IDs einfügen (es könnte ein Modul geben, in dem das {{{id}}}-Attribut gefordert wird, und das mit der Zwiebelstruktur in diesem Stadium in Aktion tritt. Dann müssen wir nicht in den usage guide schreiben: Es ist zwar formal optional, aber es sollte verwendet werden.)
    529   * ersetze {{{<wrong/>}}} durch {{{<sic/>}}} oder entferne es; löse {{{<unsure/>}}} auf
    530   * weitere {{{<reg>}}}, Korrekturen von bestehenden {{{<reg>}}}
    531   * {{{<ref>}}}
    532   * weitere {{{<foreign>}}}
     528  * IDs einfügen (es könnte ein Modul geben, in dem das `id`-Attribut gefordert wird, und das mit der Zwiebelstruktur in diesem Stadium in Aktion tritt. Dann müssen wir nicht in den usage guide schreiben: Es ist zwar formal optional, aber es sollte verwendet werden.)
     529  * ersetze `<wrong/>` durch `<sic/>` oder entferne es; löse `<unsure/>` auf
     530  * weitere `<reg>`, Korrekturen von bestehenden `<reg>`
     531  * `<ref>`
     532  * weitere `<foreign>`
    533533  * entferne library stamps
    534   * „old-style numerals typed as letters“, zum Beispiel {{{ex .II.}}} statt {{{ex .11.}}}, aber auch andersherum: {{{10. BENEDETTI}}} statt {{{IO. BENEDETTI}}}
     534  * „old-style numerals typed as letters“, zum Beispiel `ex .II.` statt `ex .11.`, aber auch andersherum: `10. BENEDETTI` statt `IO. BENEDETTI`
    535535  * Wörter mit einzelne griechischen oder einzelnen lateinischen Buchstaben (automatisierbar?)
    536   * Wörter mit einzelnen Großbuchstaben mitten im Wort ({{{ClaZomenius}}}). Häufig ist die Ursache ein fehlendes Space vor dem Großbuchstaben.
     536  * Wörter mit einzelnen Großbuchstaben mitten im Wort (`ClaZomenius`). Häufig ist die Ursache ein fehlendes Space vor dem Großbuchstaben.
    537537
    538538Diese Aufgaben sollten durch interaktive tools unterstützt werden.
     
    547547  * 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
    548548
    549   * 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.
     549  * 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.
    550550
    551551  * 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.
     
    557557
    558558  * beachte die in [source:trunk/schema/schema/echo/modules/echo-chinese-text.rnc echo-chinese-text] definierten Attribute
    559   * lateinische Zeichen können durch ihre full-width-Version ersetzt sein, zum Beispiel „<?>“ statt „<?>“
     559  * lateinische Zeichen können durch ihre full-width-Version ersetzt sein, zum Beispiel im tag „<?>“
    560560  * Beispiel aus Schritt 2.03: ○ (white circle U+25CB) statt 〇 (ideographic number zero U+3007)
    561561  * Wort- und Satzgrenzen markieren (bzw. andersrum: invisible spaces innerhalb von Wörtern entfernen)
     
    583583Sollen wir umsteigen auf ein System, wo die Chinesen <001> tippen, und dann im Anhang eine IDS-Sequenz? Beispielsweise würde 国 durch die Unicode-Zeichenfolge ⿴口玉 beschrieben werden.
    584584
     585
     586== Andere Workflows ==
     587
     588Wir 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.
     589