Strukturierte, mit Word verfasste Texte wie zum Beispiel juristische Kommentare werden in ihre durch das Layout bestimmte Struktur zerlegt und nach XML konvertiert, um ihren reinen Inhalt zu gewinnen. Dabei wird angenommen, dass die Gestaltung eines Dokuments seine inhaltliche Struktur widerspiegelt. So können Kapitelüberschriften groß und fett sein, Fußnoten klein, Verweise kursiv oder mit einem Pfeil versehen, Literaturverweise in eckigen Klammen stehen usw. Man beschreibt diese Zuordnungen mit einem Regelwerk, so dass die Software den eigentlichen Inhalt eines Word-Dokuments gewinnen kann.
Damit wird es möglich, Verfassern den gewohnten Umgang mit ihrem Textprogramm zu lassen, obwohl die Art ihrer Dokumente eine Erfassung in XML nahelegen würde, was man aber nur technisch Versierten zumuten möchte.
Die gewonnenen XML-Dokumente können anschließend mit einem XSL-Stylesheet unabhängig vom ursprünglichen Layout gestaltet und in HTML, RTF oder PDF veröffentlicht werden.
Das Regelwerk besteht aus Mustern gemischt mit XML-Elementen, die generiert werden, wenn das Muster auf die aktuelle Stelle im Word-Dokument passt. Die Muster werden mit einigen RTF-Codes beschrieben, z.B. \par für einen Absatz. Außerdem können Variablen aus Regulären Ausdrücken errechnet werden.
Hier ein einfaches Word-Beispiel mit XML-Ergebnis und Regelwerk:
| § 1 Ein Paragraph (1) Absatz eins … (2) Absatz zwei … fett | <paragraph nummer="1"> <titel>Ein Paragraph</titel> <wortlaut> <absatz nummer="1">Absatz eins …</absatz> <absatz nummer="2">Absatz zwei … <b>fett</b></absatz> </wortlaut> </absatz> |
# rtf2xml-Regelwerk
paragraph:
<paragraph nummer="$nummer"> # <paragraph> generieren, wenn folgende Regel passt
\s'Paragraph', # Absatzformatvorlage "Paragraph"
/§ *[0-9]+/, nummer="$0", # Regulärer Ausdruck für Zeichenfolge "§ 1" => $nummer="1"
whitespace?, # Zwischenraum verwerfen
<titel> @cdata*, \par </titel>, # Text ohne Auszeichnung bis Absatz übernehmen
<wortlaut>
absatz+, # Folge von Absätzen
in_der_fassung_von?
</wortlaut>
</paragraph>;
absatz:
<absatz nummer="$nummer"> # $nummer wird unten ermittelt
\s'Absatz',
\b?, # Fettdruck aktiv? Ignorieren, <absatz> ist schon fett
whitespace?,
/\([0-9]+\)/, nummer="$0" # Die Absatznummer steht in Klammern, z.B. "(1)"
whitespace?,
absatz_p # Der Text des Absatzes des Paragraphen
</absatz>;
…
markup_text: bold | italic | … | @char; # Zeichenfolge mit typographischen Auszeichnungen übernehmen
bold: <b> \b markup_text+ </b>; # Fettdruck aktiv? Übernehmen: \b => <b>…</b>
italic: <i> \i markup_text+ </i>; # Kursive aktiv? Übernehmen: \i => <i>…</i>
whitespace: ( " " | \~ | \tab )+; # Frisst weiße Zeichen
| |||
| Anforderung | Realisierung | ||
Texte (juristische Kommentare) sind mit Microsoft Word verfasst. Die vorgegebene inhaltliche Struktur wird im Text vor allem durch das Layout und teilweise durch Textbestandteile (z.B. »§«, »Anm.«) dargestellt. | Der Anwender beschreibt die Struktur des Word-Dokuments als formale Grammatik. Grammatikelemente sind Layout-Elemente in der Form von RTF-Codes (z.B. \b für fett), Namen von Formatvorlagen, Textmuster und variablem Text (dem Inhalt). Dazu fügt der Anwender in die Grammatikregeln XML-Elemente ein, die im Falle des Zutreffens der Regel mitsamt dem Inhalt zu generieren sind. Der Konverter nimmt das Word-Dokument als RTF-Dokument entgegen und zergliedert es in seine RTF-Bestandteile. Danach strukturiert er das Dokument nach der Grammatik des Anwenders, wobei die Regeln im Backtracking-Verfahren angewendet werden. Schließlich schreibt er die XML-Elemente aus den Regeln und die Textbestandteile des Dokuments. | ||