From 016c00d5d6d9d3dd316b59f344a722c1d29005ae Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 18 May 2023 18:29:41 +0200 Subject: [PATCH] (Fortsetzung) Analyse SoSci / Dokumentation / Implementierungsskizze --- sosci2word/ThesisFragebogen.Questionaire.xml | 145 +++++++++++++++++++ sosci2word/_README.txt | 69 ++++++++- sosci2word/_SoSci2Word.mm | 62 +++++++- 3 files changed, 265 insertions(+), 11 deletions(-) create mode 100644 sosci2word/ThesisFragebogen.Questionaire.xml diff --git a/sosci2word/ThesisFragebogen.Questionaire.xml b/sosci2word/ThesisFragebogen.Questionaire.xml new file mode 100644 index 0000000..5a4844d --- /dev/null +++ b/sosci2word/ThesisFragebogen.Questionaire.xml @@ -0,0 +1,145 @@ + + + + + + + no + + + + + + + Arbeitsinhalte + + + + + + + +
+ ]]> + + + +
+ + + + + Ressourcen + + + + + + + +
+ ]]> + + + + + +
+ ]]> + + + + +
+ + + + + Stressoren + + + + + + + +
+ ]]> + + + + +
+ ]]> + + + + + +
+ ]]> + + + + +
+ ]]> + + + + +
+ ]]> + + + + + + +
+ + + + + Organsation + + + + + + +
+ ]]> + + + +
+ + + + + Demographie + + + + + + + + + + + + + +
diff --git a/sosci2word/_README.txt b/sosci2word/_README.txt index 5a2971b..02b20ad 100644 --- a/sosci2word/_README.txt +++ b/sosci2word/_README.txt @@ -32,13 +32,72 @@ Format des SoSci-XML Format der Word-Datei ~~~~~~~~~~~~~~~~~~~~~ +Rohformat:: ein Zip-komprimiertes Archiv mit Ressourcen und XML-Dokumenten ++ +besonders relevant: ++ +- 'document.xml' : eigentlicher Inhalt des Dokuments +- 'style.xml' : Platzhalter bzw konkrete Style-Definitionen (incl. Name-ID) -[red]#TODO# - - -Implementierung ---------------- +logisches Format:: Metadaten + verschachtelte Sequenz von _Block_- und _Inline_-Elementen ++ +- Block-Elemente sind: Paragraph, Table, Image, Drawing +- Inline-Elemente sind: Run (=Text-Schnippsel mit einheitlichem Format), Table, Image, Frame ++ +Sowohl Block-, alsauch Inline-Elemente sind direkt mit einem _Style_ ausgezeichnet. +Dieser kann sowohl _direkte Foramtierung_ umfassen, aber auch auf einen _definierten Style_ +aus dem Stylesheet (``Formatvorlage'') per Name-ID verweisen. [yellow-background]#WIP# +Implementierung +--------------- +Grundsätzlich ist eine einfache Implementierung möglich, indem das SoSci-XML gelesen, interpretiert +und sofort in Word-Content transformiert wird. Es ergeben sich aber im Detail einige Schwierigkeiten + +- die Libarary python-docx kann zwar Wort-Format vollständig lesen und reproduzieren, + aber nur wenige Basis-Features sind direkt über das API zur Manipulation zugänglich +- zudem bietet python-docx nahezu keine Möglichkeit, ein bestehendes Dokument unbekannter Struktur + zu analysieren. +- wir brauchen relativ komplexe Tabellen-Formatierungen, die nur _ansatzweise dokumentiert_ sind. +- der Fragebogen ist im SoSci-XML nicht sauber strukturell definiert, sondern nur als ein Template + zur Darstellung. Lediglich die einzelnen Fragen sind als strukturierte Elemente definiert +- die Referenzierung aus dem Darstellungs-Template erfolgt über interne IDs, welche aber in der + strukturierten Definition lediglich kontextuell aufgebaut werden. Unser Code muß hier interpolieren. +- das Darstellungs-Template ist ein verschachtelt eingebettetes weiteres XML-Dokument und zudem + auch noch XML-quoted. +- wir haben mehrere Item-Typen, mit einer jeweils anderen Datenstruktur => Polymorphismus + +Verarbeitungs-Schema +~~~~~~~~~~~~~~~~~~~~ +[yellow-background]#(dies ist der Plan zur Implementierung)#: +Fragebogen-Definitionen können mit der Mini-DOM-Library gelesen werden, das Word-Dokument mit python-docx. +Die Verarbeitung untergliedert sich in drei Phasen: + +1. SoSci-Definitionen einlesen + + + * alle -Elemente aufsammeln + * per Kontext die vollständige ID ablegen + * daraus ein polymorphes Python-Objekt generieren + * dies in eine Map-keyed-by-ID ablegen + +2. SoSci-Questionaire verarbeiten + + + * das nested XML extrahieren und parsen + * die Seitenstruktur navigieren + * jedes konkret referenzierte Block-Element aus der Map holen + * in eine mehrstufige Liste ablegen + +3. Word-Content generieren + + + * das Word-Dokument öffnen + * die mehrstufige Liste traversieren + * auf jedem Block-Element eine polymorphe render(wordDocument)-Funktion aufrufen + * Word-Dokument unter neuem Namen speichern + + +[yellow-background]#WIP# + + + diff --git a/sosci2word/_SoSci2Word.mm b/sosci2word/_SoSci2Word.mm index dd68778..2d5de6e 100644 --- a/sosci2word/_SoSci2Word.mm +++ b/sosci2word/_SoSci2Word.mm @@ -16,8 +16,7 @@ Word

- - + @@ -32,8 +31,7 @@ python-docx

- -
+ @@ -66,7 +64,8 @@ - + + @@ -81,7 +80,8 @@ - + + @@ -107,6 +107,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +