Changes between Version 35 and Version 36 of workflow
- Timestamp:
- May 31, 2010, 6:59:18 AM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
workflow
v35 v36 3 3 [[PageOutline(2-4,,pullout)]] 4 4 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.5 Auf 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. 6 6 7 7 Bisher sind 19 schemakonforme Texte bei ECHO, siehe … … 29 29 Insbesondere 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. 30 30 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.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. 34 34 35 35 Die Anwendung in !TextWrangler ist allerdings bequemer. … … 44 44 45 45 * 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`. 47 47 48 48 … … 53 53 * Im [source:trunk/texts Texte-Verzeichnis] Unterverzeichnisse anlegen (allerdings nerven die raw/xml-Verzeichnisse in der Praxis) 54 54 * 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). 56 56 57 57 (Shell-Skript von Klaus) … … 62 62 ==== 1.02 Kommunikation mit Foxridge ==== 63 63 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.)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 achtstellige Identifier im Dateinamen steht. (Das Skript wird daher nicht mit Archimedes-legacy-Verzeichnissen funktionieren.) 65 65 66 66 Erstelle eine lokale Kopie der entsprechenden index.meta-Datei (funktioniert nur innerhalb des Instituts): … … 69 69 }}} 70 70 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.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. 79 79 80 80 Änderungen in index.meta: … … 82 82 * Wenn <texttool> noch nicht vorhanden ist, anlegen. 83 83 * 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>`. 85 85 86 86 Das Skript meldet sich nicht bei Foxridge an. Die Änderungen in index.meta werden daher nur in der lokalen Kopie gemacht. Es fehlt also: … … 93 93 === 2. raw text bearbeiten === 94 94 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.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. 96 96 97 97 Am 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 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 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. 106 106 107 107 Der 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. 108 108 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.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. 110 110 111 111 112 112 ==== 2.01 Metadaten ==== 113 113 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.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. 115 115 116 116 Fü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. … … 138 138 ==== 2.02 pb's synchronisieren ==== 139 139 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.)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.) 143 143 144 144 Das Skript macht also Änderungen im ganzen Dokument, zum Beispiel: … … 147 147 }}} 148 148 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.)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.) 154 154 155 155 … … 167 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 168 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}}}.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`. 170 170 171 171 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. … … 175 175 176 176 Das 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: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: 178 178 {{{ 179 179 unknown: … … 208 208 ==== 2.06 prüfe italics ==== 209 209 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.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. 211 211 212 212 Die Korrekturen in diesem Schritt werden wohl immer im Text selbst und nicht in den Blöcken vor dem Text gemacht. … … 219 219 prü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: 220 220 221 * {{{<h>}}}, {{{<mgl>}}}, {{{<mgr>}}}jeweils am Anfang einer Zeile222 * {{{</h>}}}, {{{</mgl>}}}, {{{</mgr>}}}jeweils am Ende einer Zeile223 * {{{<tb>}}}, {{{<fig>}}}auf eigener Zeile224 * bei {{{<pb>}}} ist nur noch {{{<rh>}}}in der gleichen Zeile erlaubt225 * 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 auseinander229 * zusammengehörende Tags wie {{{<rh>}}} und {{{</rh>}}}sind nicht in der gleichen Zeile230 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 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: 232 232 {{{ 233 233 replacements: … … 254 254 }}} 255 255 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`.) 257 257 258 258 … … 280 280 prü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.) 281 281 282 Wenn der Text wohlgeformtes XML ist, sollte man ihn mit Dateiendung in {{{xml}}} (im Verzeichnis {{{xml/}}} statt {{{raw/}}}) abspeichern.282 Wenn der Text wohlgeformtes XML ist, sollte man ihn mit Dateiendung in `xml` (im Verzeichnis `xml/` statt `raw/`) abspeichern. 283 283 284 284 285 285 ==== 3.01 ersetze unknown characters ==== 286 286 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>}}}.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>`. 288 288 289 289 290 290 ==== 3.02 ersetze replacements ==== 291 291 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 das292 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 293 293 {{{ 294 294 replacements: … … 303 303 304 304 Das 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 `ę` 308 308 309 309 Anschließend wird der Text in Unicode-Normalform [http://unicode.org/reports/tr15/ NRC] gebracht. 310 310 311 311 Das 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). 317 317 318 318 Beachte 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.) 320 320 321 321 322 322 ==== 3.04 ersetze italics ==== 323 323 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.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. 325 325 326 326 … … 329 329 Das Skript 330 330 [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>}}}.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>`. 332 332 333 333 … … 335 335 336 336 Das 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 {{{&}}}. (Das Skript kann mehrere Male aufgerufen werden, es wird also aus {{{&}}} nicht {{{&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 `&`. (Das Skript kann mehrere Male aufgerufen werden, es wird also aus `&` nicht `&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 `<^>` 341 341 342 342 Das 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. … … 354 354 ==== 4.01 <pb> ==== 355 355 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.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. 357 357 358 358 359 359 ==== 4.02 floats herausziehen ==== 360 360 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.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. 362 362 363 363 Das 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. 364 364 365 365 * 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. 367 367 * 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? 368 368 … … 378 378 379 379 Beachte 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`“) 381 381 * .a.b:c.d:e.f. 382 * . {{{<lb/>}}}a.b.382 * .`<lb/>`a.b. 383 383 * 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 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. 387 387 388 388 389 389 ==== 4.05 <emph> ==== 390 390 391 Das Skript [source:trunk/schema/scripts/workflow/Filter_4_05_emph.pl Filter_4_05_emph] ersetze Fomatierungs-tags durch {{{<emph style="...">}}}.391 Das Skript [source:trunk/schema/scripts/workflow/Filter_4_05_emph.pl Filter_4_05_emph] ersetze Fomatierungs-tags durch `<emph style="...">`. 392 392 393 393 Vorher verwandelt das Skript small caps: … … 412 412 413 413 Beachte: 414 * {{{<_>}}} und {{{<^>}}} wurden in Schritt 3.06 in {{{<sub>}}} und {{{<super>}}}umbenannt.414 * `<_>` und `<^>` wurden in Schritt 3.06 in `<sub>` und `<super>` umbenannt. 415 415 * <it> in einem Absatz in italics ergibt wieder upright. 416 * Kombinationen wie {{{it bf}}}416 * Kombinationen wie `it bf` 417 417 418 418 Für dieses Skript gibt es einen [source:trunk/schema/scripts/script-tests/emph-testparcours.txt testparcours]. … … 430 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.) 431 431 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. 435 435 436 436 Es 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>? … … 442 442 443 443 444 === 5. weitere Schritte und scholarly workflow===444 === 5. Textanalyse === 445 445 446 446 Hier 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. … … 453 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. 454 454 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: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: 456 456 457 457 * Zeichen mit Tilde: ã ẽ ĩ õ ũ ñ … … 460 460 * medievalist characters: ꝑ ꝓ ꝗ ꝗ̃ ꝙ ꝰ ́ ꝯ (geeignete Fonts sind Andron, Junicode und Palemonas, die man [http://www.mufi.info/fonts/ hier] bekommt) 461 461 * weitere: ę ĺ (das zweite Zeichen ist aus Alvarus) 462 * Apostroph: in den Abschnitten in Benedetti mit {{{xml:lang="it"}}} bzw. {{{xml:lang="ita"}}} ist {{{'}}}dagegen erlaubt462 * Apostroph: in den Abschnitten in Benedetti mit `xml:lang="it"` bzw. `xml:lang="ita"` ist `'` dagegen erlaubt 463 463 464 464 Beachte: 465 * der modifier letter us ꝰ wird manchmal für {{{'}}}gehalten466 * 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. 467 467 468 468 Für dieses Skript gibt es einen [source:trunk/schema/scripts/script-tests/reg-testparcours.txt testparcours]. … … 471 471 ==== 5.02 <var> ==== 472 472 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.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. 474 474 475 475 Für das Skript gibt es einen [source:trunk/schema/scripts/script-tests/var-testparcours.txt testparcours]. … … 478 478 ==== 5.03 <num> ==== 479 479 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.)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>`. 481 482 (Verwende das Skript `Filter_roman_numbers.pl`: <num value="..."> für römische Zahlen.) 483 483 484 484 … … 490 490 ==== 5.05 <foreign> ==== 491 491 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.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. 493 493 494 494 495 495 ==== 5.06 div-Attribute ==== 496 496 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.)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.) 498 498 499 499 500 500 ==== 5.07 GIS ==== 501 501 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].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]. 503 503 504 504 … … 518 518 519 519 Ein 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 === 526 526 527 527 Einige 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/>}}}auf530 * 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>` 533 533 * 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` 535 535 * 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. 537 537 538 538 Diese Aufgaben sollten durch interaktive tools unterstützt werden. … … 547 547 * 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 548 548 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. 550 550 551 551 * 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. … … 557 557 558 558 * 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 „<?>“ 560 560 * Beispiel aus Schritt 2.03: ○ (white circle U+25CB) statt 〇 (ideographic number zero U+3007) 561 561 * Wort- und Satzgrenzen markieren (bzw. andersrum: invisible spaces innerhalb von Wörtern entfernen) … … 583 583 Sollen 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. 584 584 585 586 == Andere Workflows == 587 588 Wir 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