npsobj switch

Syntax

npsobj_switch ::=

  <npsobj switch = "switchName">
    { <npsobj casecond = "caseCondition" 
      [ negate = "" ]
      [ proceed = ( "yes" | "no" ) ]
      ( name = "caseName" | value = "caseValue" )>
        content
      </npsobj> }
    [ <npsobj casecond = "default" [ proceed = ("yes" | "no" ) ] >
        content
      </npsobj> ]
  </npsobj>

Aufgabe

Mit diesem Element lässt sich ein Wert (switchName) des aktuellen Kontexts mit mehreren anderen Werten (caseName) oder Konstanten (caseValue) vergleichen. Für jeden Vergleich kann einer der unter npsobj_condition aufgeführten Vergleichsoperatoren (caseCondition) verwendet werden. Wird ein unärer Vergleichsoperator (wie isEmpty) auf switchName angewendet, so werden caseName und caseValue ignoriert, andernfalls wird switchName mit caseName oder caseValue verglichen, je nachdem, ob name oder value angegeben wurde. Trifft ein Vergleich zu, wird der content des betreffenden caseCond-Elements ausgewertet.

switchName und caseName können alle im aktuellen Kontext verfügbaren Namen sein, während mit caseValue eine konstante Zeichenkette angegeben werden kann. Mit dem optionalen Attribut negate kann das Ergebnis der Vergleichsoperation umgekehrt werden. Wird als caseCondition kein Vergleichsoperator, sondern default angegeben, so trifft der betreffende Vergleich immer zu. Typischerweise ist default in einer switch-Anweisung der letzte Vergleich, um den Fall zu behandeln, dass keiner der vorausgegangenen Vergleiche zutraf.

Mit dem optionalen Attribut proceed kann man steuern, ob die nächste casecond-Anweisung im switch-Block auch dann abgearbeitet werden soll, wenn der Vergleich zutrifft (Voreinstellung: no).

Innerhalb eines switch-Elements werden nur casecond-Elemente ausgewertet. Text sowie weitere Elemente auf der gleichen Ebene werden ignoriert.

Beispiel

<npsobj switch="name">
  <npsobj casecond="isEqual" value="news1">
    Newsordner 1
  </npsobj>
  <npsobj casecond="isEqual" value="news2">
    Newsordner 2
  </npsobj>
  <npsobj casecond="default">
    Keine Newsordner
  </npsobj>
</npsobj>