Bedingte Cluster

Cluster können auch in einem Bedingungselement eingeschlossen sein. Wenn der Ausdruck eines Bedingungselements nicht auf eine der Fragen derselben Seite verweist, ist dieser Cluster ein statischer bedingter Cluster. Das liegt daran, dass vor dem Anzeigen der Seite bestimmt werden kann, ob der Cluster angezeigt wird oder nicht.

Nachdem beispielsweise Informationen zu den Haushaltsmitgliedern erfasst worden sind, soll vielleicht eine weitere Seite hinzugefügt werden, auf der weitere persönliche Angaben abgefragt werden, darunter die Angabe, ob die betreffende Person schwanger ist. Dazu muss das neue Attribut isPregnant zur Personenentität hinzugefügt werden, mit dem diese Information gespeichert wird:

Abbildung 1. Zusätzliches Personenattribut
<xsd:element name="Person">
  <xsd:complexType>
    ...
    <xsd:attribute name="isPregnant" type="IEG_BOOLEAN"/>

Diese Frage ist natürlich nur dann anwendbar, wenn die Geschlechtsangabe "weiblich" lautet. Deshalb kann der Cluster in eine Bedingung eingeschlossen werden, so dass er nur dann angezeigt wird, wenn der Bedingungsausdruck mit "true" bewertet wird. Die neue zusätzliche Seite mit Angaben zur Person kann folgendermaßen definiert werden:

Abbildung 2. Statischer bedingter Cluster
<question-page id="AboutTheClientContinued" entity="Person" ...>
  <condition expression="Person.gender==&quot;SX2&quot;">
    <cluster>
      <question id="isPregnant" mandatory="true">
          <label id="IsPregnant.Label">
              Are you pregnant?
          </label>
          <help-text id="IsPregnant.HelpText">
              Are you pregnant?
          </help-text>
      </question>
    </cluster>
  </condition>
</question-page>

Befindet sich hingegen eine der Fragen, auf die im Bedingungsausdruck verwiesen wird, auf derselben Seite, so handelt es sich um einen dynamischen bedingten Cluster. Das heißt, dass der Cluster angezeigt oder ausgeblendet wird, je nachdem, wie der Benutzer die Antworten auf die Fragen dieser Seite ändert. Dieses dynamische IEG-Feature erfordert, dass JavaScript im Browser aktiviert ist. Da die Ausdrücke ohne Serveraufruf bewertet werden, kann es vorkommen, dass die Ausdrücke eines dynamischen bedingten Clusters nicht auf angepasste Funktionen verweisen.

Wenn das obige Beispiel bei gleichbleibendem DS-Schema dahingehend geändert wird, dass der bedingte Cluster auf derselben Seite definiert ist wie die Frage nach dem Geschlecht, so handelt es sich um einen dynamischen bedingten Cluster.

Abbildung 3. Dynamischer bedingter Cluster
<question-page id="AboutTheClient" entity="Person" ...>
...
  <cluster>
    <title id="DetailsCluster.Title">
      <![CDATA[Personal Details]]>
    </title>
...
    <question id="gender" mandatory="true">
      <label id="Gender.Label">
        <![CDATA[Gender:]]>
      </label>
    </question>
...
  <condition expression="Person.gender==&quot;SX2&quot;">
    <cluster>
      <question id="isPregnant" mandatory="true">
        <label id="IsPregnant.Label">
        <![CDATA[Are you pregnant?]]>
        </label>
      </question>
    </cluster>
  </condition>
</question-page>

Die Frage nach der Schwangerschaft wird dynamisch angezeigt bzw. ausgeblendet, sobald sich der ausgewählte Wert für das Geschlecht ändert. Das dynamische Verhalten einer Seite kann über Textfelder, Datumsfelder, Kontrollkästchen, Optionsfelder oder auszuwählende Elemente ausgelöst werden. Es wird jedoch nicht über die Antwort auf eine Mehrfachauswahlfrage oder eine Fragenmatrix ausgelöst, was mit Einschränkungen in der Ausdruckssyntax zusammenhängt.

Es wird darauf hingewiesen, dass um einen Cluster herum nur eine Bedingungsebene zulässig ist, d.h. bedingte Cluster können nicht in weitere Bedingungen verschachtelt werden. Der Bedingungsausdruck für einen dynamischen bedingten Cluster kann auf Fragen derselben Seite verweisen, die ihrerseits in dynamischen bedingten Clustern definiert sind. Dies bewirkt eine kaskadierende Abhängigkeit zwischen den Clustern.