Navigation

2 Erstellung von Fragebögen

Ein Fragebogen wird in einer XML-Datei beschrieben. Diese Datei erstellt man am besten mit einem normalen Texteditor. Unter Windows genügt z.B. das notepad, Linux-KDE-Nutzer können z.B. kate verwenden.

Die erste Zeile eines XML-Dokuments enthält empfohlenerweise eine Versionsangabe und die Spezifikation der Zeichenkodierung. Mit der Codierung wird festgelegt, wie Sonderzeichen (z.B. Umlaute) zu interpretieren sind. Wird nichts angegeben, gilt automatisch UTF-8. Mögliche Werte sind auch UTF-16 oder ISO-8859-1.

Hinweis!

Beim Abspeichern der XML-Datei ist darauf zu achten, dass die richtige Codierung verwendet wird.

<?xml version="1.0" encoding="ISO-8859-1"?>

In diesem Kapitel werden die minimalen Elemente eines Fragebogens beschrieben. Erweiterte Fähigkeiten von XQuest werden im Kapitel [advanced.htm] vorgestellt. Die Syntaxbeschreibungen (blauer Hintergrund) umfassen alle möglichen Attribute und Unterelemente. Die Beispiele (gelber Hintergrund) zeigen hingegen ein einfaches Beispiel.

questionnaire

Das XML-Wurzelelement eines jeden Fragebogens ist ein questionnaire-Element.

<questionnaire
  title="..."
  submiturl="..."
  db_host="..."
  db_name="..."
  db_table="..."
  db_user="..."
  db_pass="..."
  [css-stylesheet="..."]
  [restrict="url|inline|inline_short|user"]
  [baseurl="..."]
>
 HTML-Markup und Fragen
</questionnaire>

Das Attribut title ist zwingend erforderlich und wird an mehreren Stellen als Überschrift ausgegeben.

Die submiturl muss bei Online-Umfragen angegeben werden. Es muss eine absolute oder auch relative URL zum PHP-Script sein, welches die Umfragedaten in die SQL-Datenbank einträgt.

Ebenfalls nur bei Online-Umfragen notwendig sind die Angaben für die Datenbank (db_*). Diese werden für das Eintrag-Script, das Tabellen-Anlege-Script und verschiedene Auswert-Scripte benötigt.

<questionnaire
  title="Meine kleine Musterumfrage"
  submiturl="umfrage_submit.php"
  db_host="sql.example.com"
  db_name="umfragen"
  db_table="musterumfrage"
  db_user="maxmuster"
  db_pass="geheim">

Fragen über Fragen...

</questionnaire>

Es gibt eine Reihe unterschiedlicher Fragetypen. Alle besitzen ein Element vom Typ qtext, welches die Fragestellung beinhaltet. Eine Nummerierung der Fragen erfolgt automatisch mit arabischen Zahlen.

selectquestion

Eine selectquestion bietet eine Auswahl an Alternativen an, von denen eine oder mehrere ausgewählt werden können. Die Alternativen werden durch atext-Elemente definiert.

<selectquestion type="or|xor|dropdown" [id="id"] [result-stats="yes"]>
  <qtext>Einleitender Fragetext</qtext>
  [<atext [value="Wert"] [id="id"]>Text </atext>]+
</selectquestion>

Das type-Attribut gibt an, wie die Antworten dargestellt werden:

or
Die Alternativen können unabhängig voneinander ausgewählt werden. Ist die Alternative ausgwählt, wird eine 1 in der Datenbank gespeichert, sonst eine 0.
xor
Eine einzige der Alternativen kann ausgewählt werden. Dabei sind alle Alternativen sichtbar. Beim Abspeichern der getroffenen Auswahl in die Datenbank wird normalerweise die zugehörige Nummer abgespeichert. Die Zählung beginnt dabei mit 1 und erfolgt in der Reihenfolge der Elemente im XML-File. Wurde kein Element ausgewählt, wird eine 0 eingetragen.
dropdown
Es kann ebenfalls nur eine Alternative ausgewählt werden. Es wird zur Darstellung jedoch eine aufklappbare Auswahlliste verwendet. Das Abspeichern erfolgt wie bei xor, wobei zu beachten ist, dass der erste Wert per Vorgabe ausgewählt ist.

Im atext-Element kann auch eine Untermenge von HTML eingebettet werden.

  <selectquestion type="or">
    <qtext>Ein Fragetext</qtext>
    <atext>Antwort 1</atext>
    <atext>Antwort 2</atext>
    <atext>Antwort 3</atext>
  </selectquestion>

rangequestion

Diese Frage ermöglicht es, aus einer Skala von Werten einen einzigen auszuwählen.

<rangequestion left="linkes Label" right="rechtes Label" count="Anzahl Schritte" [id="id"] [result-stats="yes"]>
  <qtext>Einleitender Fragetext</qtext>
</rangequestion>

Die beiden Label-Attribute enthalten kurze Textstückchen. Zwischen diese beiden Textstücke werden count viele Auswahlfelder gezeichnet.

Beim Abspeichern wird entweder 0 abgespeichert, wenn gar kein Feld ausgewählt wurde oder die jeweilige Feldnummer, wobei die Zählung bei 1 beginnt.

  <rangequestion left="sehr schlecht" right="ausgezeichnet" count="5">
    <qtext>Wie beurteilen Sie diese Angabe</qtext>
  </rangequestion>

textquestion

Diese Frage dient der Eingabe eines kurzen, einzeiligen Stückes Text.

<textquestion [id="id"]>
  <qtext>Einleitender Fragetext</qtext>
  [<atext> [Text] <input [size="size"] [maxlength="maxlength"] [id="id"]/> [Text]</atext>]*
  ...
</textquestion>

Die atext-Elemente sind optional. Wird keins angegeben, wird lediglich ein einzeiliges Eingabefeld angezeigt.

Wird ein atext-Element angegeben, so sind innerhalb dieses Elementes an beliebiger Stelle mindestens ein input-Element anzugeben. Der Text kann HTML-Markup enthalten, welches in die Ausgabe übernommen wird.

Mit Hilfe der optionalen Attribute size und maxlength kann die Größe des Eingabefeldes bestimmt werden. Die Semantik ist die gleiche wie in HTML. Auf die Erstellung der Datenbankbeschreibung haben diese Attribute keinen Einfluss. Es werden stets beliebig lange Zeichenketten vorgesehen. Somit ist auch eine nachträgliche Angabe dieser Werte ohne Datenverlust möglich.

Beim Abspeichern in die Datenbank werden spezielle HTML-Zeichen "unschädlich" gemacht, in dem der Text durch die PHP-Funktion htmlspecialchars gefiltert wird.

  <textquestion>
    <qtext>Wo wohnen Sie?</qtext<
  </textquestion>

  <textquestion>
    <qtext>Wie alt sind Sie?</qtext<
    <atext><input size="2" maxlength="2"> Jahre</atext>
  </textquestion>

textareaquestion

Diese Frage dient der Eingabe eines mehrzeiligen Textstückes.

<textareaquestion [cols="Spalten"] [rows="Zeilen"] [id="id"]>
  <qtext>Einleitender Fragetext</qtext>
</textareaquestion>

Mit den optionalen Attributen cols und rows kann die Anzahl der Spalten und Zeilen angegeben werden, die für das Eingabefeld vorzusehen sind.

Beim Abspeichern in die Datenbank werden spezielle HTML-Zeichen "unschädlich" gemacht, in dem der Text durch die PHP-Funktion htmlspecialchars gefiltert wird.

  <textareaquestion>
    <qtext>Erläutern Sie Ihre Angaben!</qtext<
  </textareaquestion>

matrixquestion

Die Matrixfrage bietet sehr vielfältige Möglichkeiten, eine Tabelle von Fragen und Antworten zu erstellen. Dabei sind unterschiedliche Auswahl- und Eingabetypen in den einzelnen Feldern der Matrix verwendbar.

<matrixquestion type="text|or|dropdown|xorc|xorr"  [id="id"] [result-stats="yes"]>
  <qtext>Einleitender Fragetext</qtext>
  <columns>
    [<atext [type="or|xor|text"] [value="Wert"] [id="id"]>Text</atext>]+
  </columns>
  <rows>
    [<atext [value="Wert"] [id="id"]>Text</atext>]+
  </rows>
  [<fields>
    [<atext [value="Wert"] [id="id"]>Text</atext>]+
  </fields>]
</matrixquestion>

Die atext-Elemente aus dem Element columns bilden die Spaltenüberschriften. Eine Matrixfrage benötigt mindestens eine Spaltenüberschrift. Es darf HTML-Markup verwendet werden.

Die atext-Elmente aus dem Element rows werden für die Zeilenüberschriften verwendet. Es ist mindestens eins anzugeben. Es darf HTML-Markup verwendet werden.

Das fields-Element ist nur beim Typ dropdown anzugeben. Es enthält die Werte, die in den Auswahllisten angezeigt werden. Hier darf in den atext-Elementen kein HTML-Markup enthalten sein.

Das Attribut type legt fest, wie die Felder der Tabelle dargestellt werden.

text
Jedes Feld enthält ein einzeiliges Texteingabefeld. Die Abspeicherung erfolgt wie bei textquestion.
or
Jedes einzelne Feld kann aktiviert werden. Abgespeichert wird eine 1 für ein ausgewähltes Feld, eine 0 für ein nicht markiertes Feld.
dropdown
In jedem Feld wird eine Auswahlliste ausgegeben. Im Normalfall beginnt die Nummerierung der Alternativen bei 1 und wird fortlaufend weitergezählt.
xorc
Pro Zeile kann ein Feld ausgewählt werden. Beim Abspeichern wird die Nummer des gewählten Elementes abgespeichert.
xorr
Pro Spalte kann ein Feld ausgewählt werden. Beim Abspeichern wird die Nummer des gewählten Elementes abgespeichert.
mixed
Der Typ jeder Spalte ist einzeln einstellbar. Die Definition des Spaltentyps erfolgt in den type-Attributen der atext-Elemente im column-Abschnitt. Gültige Typen sind or, xor und text. Zu beachten gilt, dass alle xor-Schaltflächen eine Gruppe bilden.

  <matrixquestion type="or">
    <qtext>Zu welchen Zeiten trinken Sie Kaffee?</qtext>
    <columns>
      <atext>00:00-06:59</atext>
      <atext>07:00-10:59</atext>
      <atext>11:00-13:59</atext>
      <atext>14:00-16:59</atext>
      <atext>17:00-23:59</atext>
    </columns>
    <rows>
      <atext>Mo</atext>
      <atext>Di</atext>
      <atext>Mi</atext>
      <atext>Do</atext>
      <atext>Fr</atext>
    </rows>
  </matrixquestion>

submit

Das submit-Element dient der Behandlung der Eingabe.

<submit [value="Aufschrift"]>
  <success>Text</success>
  [<failid>Text</failid>
  <failused>Text</failused>]
</submit>

Mit dem Attribut value kann die Aufschrift auf dem Absendebutton umdefiniert werden.

Der Text der Unterelemente kann auch HTML-Markup enthalten.

  <submit>
    <success>Der Fragebogen wurde erfolgreich übertragen. Vielen Dank!</success>
    <failused>Die eingegebene ID wurde bereits verwendet.</failused>
  </submit>

Native HTML-Elemente

Zur Gestaltung des Fragebogens werden einige HTML-Elemente direkt in die Ausgabe übernommen. Das ist sowohl außerhalb von Fragen als auch in qtext- und den meisten atext-Elementen möglich.

Übernommene HTML-Elemente sind: p, i, b, br, hr, font, h1-h6, img, div. Es werden alle Attribute dieser Elemente übernommen.

Navigation