Klassen für die verschiedenen Frage-Typen eingeführt
This commit is contained in:
parent
2afa416253
commit
27e0b8271f
2 changed files with 106 additions and 8 deletions
|
|
@ -388,7 +388,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1684368386013" FOLDED="true" ID="ID_271244982" MODIFIED="1684450323117" POSITION="left" TEXT="Python verstehen">
|
||||
<node CREATED="1684368386013" ID="ID_271244982" MODIFIED="1684524398597" POSITION="left" TEXT="Python verstehen">
|
||||
<font NAME="SansSerif" SIZE="16"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1684449501667" FOLDED="true" ID="ID_1462083365" MODIFIED="1684450320485" TEXT="Python ist....">
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
<node CREATED="1684449657027" ID="ID_1301360754" MODIFIED="1684449664894" TEXT="kann auch interaktiv verwendet werden"/>
|
||||
<node CREATED="1684449672632" ID="ID_1246097459" MODIFIED="1684449716952" TEXT="leicht zu lernen aber auch für komplexe Aufgaben geeignet"/>
|
||||
</node>
|
||||
<node CREATED="1684449843443" FOLDED="true" ID="ID_905162679" MODIFIED="1684450258072" TEXT="Programmiersprache">
|
||||
<node CREATED="1684449843443" FOLDED="true" ID="ID_905162679" MODIFIED="1684524402788" TEXT="Programmiersprache">
|
||||
<node CREATED="1684449849914" ID="ID_1707614400" MODIFIED="1684450253394">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
|
@ -468,6 +468,40 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1684524403774" ID="ID_148635838" MODIFIED="1684524408818" TEXT="Objekte und Klassen">
|
||||
<node CREATED="1684524409917" ID="ID_1955810038" MODIFIED="1684524416059" TEXT="ein Objekt ist ein "Datenpaket"">
|
||||
<node CREATED="1684524420460" ID="ID_252154892" MODIFIED="1684524425198" TEXT="es enthält mehrere Datenfelder"/>
|
||||
<node CREATED="1684524425702" ID="ID_1467994123" MODIFIED="1684524430486" TEXT="jedes Datenfeld hat einen Namen"/>
|
||||
</node>
|
||||
<node CREATED="1684524433541" ID="ID_587183242" MODIFIED="1684524450390" TEXT="ein Objekt hat seine eigenen Funktionen">
|
||||
<node CREATED="1684524451540" ID="ID_1421951182" MODIFIED="1684524461715" TEXT="diese Funktionen gelten nur für dieses Objekt"/>
|
||||
<node CREATED="1684524462137" ID="ID_560130995" MODIFIED="1684524470427" TEXT="damit kann das Objetk seine Daten manipulieren"/>
|
||||
</node>
|
||||
<node CREATED="1684524474320" ID="ID_422476530" MODIFIED="1684524493721" TEXT="Jedes Objekt ist nach einem Baumuster konstruiert">
|
||||
<node CREATED="1684524495301" ID="ID_106833042" MODIFIED="1684524503624" TEXT="dieses Baumuster heißt "Klasse""/>
|
||||
<node CREATED="1684524504636" ID="ID_451593494" MODIFIED="1684524508390" TEXT="die Klasse definiert">
|
||||
<node CREATED="1684524509237" ID="ID_900117222" MODIFIED="1684524513008" TEXT="welche Datenfelder es gibt"/>
|
||||
<node CREATED="1684524513404" ID="ID_1178954820" MODIFIED="1684524519698" TEXT="welche Funktionen das Objekt kennt"/>
|
||||
</node>
|
||||
<node CREATED="1684524520755" ID="ID_292329298" MODIFIED="1684524532130" TEXT="man kann von einer Klasse beliebig viele "Instanzen" erzeugen"/>
|
||||
</node>
|
||||
<node CREATED="1684524637068" ID="ID_1801335917" MODIFIED="1684524655521">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
um eine neue Instanz zu erzeugen,
|
||||
</p>
|
||||
<p>
|
||||
ruft man die "Konstruktor-Funktion auf"
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1684369795005" FOLDED="true" ID="ID_1730265194" MODIFIED="1684448598973" TEXT="Libraries">
|
||||
<edge COLOR="#5856c4" STYLE="linear"/>
|
||||
<cloud COLOR="#ccd0eb"/>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
# This code is free software and can be used under the terms of the MIT License.
|
||||
#
|
||||
|
||||
import sys
|
||||
from xml.etree import ElementTree
|
||||
|
||||
|
||||
|
|
@ -18,6 +19,54 @@ WORD_OUTPUT='Thesis-Fragebogen-import.docx'
|
|||
|
||||
|
||||
def convertSosci2Word():
|
||||
# Schritt-1 : alle Frage-Definitionen aufsammeln
|
||||
collectQuestionDefinitions()
|
||||
# Schritt-2 : die Fragen in der Reihenfolge vom Questionaire
|
||||
## TODO
|
||||
# Schritt-3 : Questionaire in das Word-Dokument ausgeben
|
||||
## TODO
|
||||
|
||||
|
||||
|
||||
class QuestionElement:
|
||||
def __init__(self, questionID):
|
||||
self.qid = questionID
|
||||
|
||||
def dump(self):
|
||||
return "##--Basis--##"
|
||||
|
||||
|
||||
|
||||
class LikertItem(QuestionElement):
|
||||
def __init__(self, questionID, question):
|
||||
QuestionElement.__init__(self, questionID)
|
||||
|
||||
def dump(self):
|
||||
return "##--LikertItem--##"
|
||||
|
||||
|
||||
|
||||
class SelectItem(QuestionElement):
|
||||
def __init__(self, questionID, question):
|
||||
QuestionElement.__init__(self, questionID)
|
||||
|
||||
def dump(self):
|
||||
return "##--SelectItem--##"
|
||||
|
||||
|
||||
|
||||
class TextElement(QuestionElement):
|
||||
def __init__(self, questionID, question):
|
||||
QuestionElement.__init__(self, questionID)
|
||||
|
||||
def dump(self):
|
||||
return "##--TextElement--##"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def collectQuestionDefinitions():
|
||||
#
|
||||
root = ElementTree.parse(SOSCI_XML).getroot()
|
||||
|
||||
|
|
@ -29,17 +78,26 @@ def convertSosci2Word():
|
|||
for question in section.findall('question'):
|
||||
title = question.find('title').text
|
||||
desc = question.find('description').text
|
||||
qustionType = question.find('class').text
|
||||
questionType = question.find('class').text
|
||||
id_suffix = getSpecificID(question)
|
||||
id_suffix = int(id_suffix)
|
||||
questionID = "%s%02d" % (id_prefix, id_suffix)
|
||||
print("Question: ID=%s desc=%s type=%s title=%s " % (questionID, desc, qustionType, title))
|
||||
print("Question: ID=%s desc=%s type=%s title=%s " % (questionID, desc, questionType, title))
|
||||
if questionType == 'scale':
|
||||
element = LikertItem(questionID, question)
|
||||
elif questionType == 'select' or questionType == 'dropdown':
|
||||
element = SelectItem(questionID, question)
|
||||
elif questionType == 'TextContent':
|
||||
element = TextElement(questionID, question)
|
||||
elif questionType == 'checkbox':
|
||||
pass # ignorieren wir
|
||||
else:
|
||||
__err("unbekannter QuestionType:"+questionType)
|
||||
|
||||
print(element.dump())
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Hilsmittel für SoSci-XML: extrahiert ein ID-Element, das eingeschachtelt in <attributes.specific> liegt
|
||||
# Hilfsmittel für SoSci-XML: extrahiert ein ID-Element, das eingeschachtelt in <attributes.specific> liegt
|
||||
def getSpecificID(element):
|
||||
attribspecific = element.find('attributes.specific')
|
||||
return next(attr.text for attr in attribspecific.findall('attr') if attr.get('id') == 'id')
|
||||
|
|
@ -47,7 +105,13 @@ def getSpecificID(element):
|
|||
|
||||
|
||||
|
||||
# ---- Hilfsfunktionen
|
||||
|
||||
def __err(text):
|
||||
print('---FAILURE----------------------')
|
||||
print(text)
|
||||
print('abort.')
|
||||
sys.exit(255)
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue