npsobj condition

Syntax

npsobj_condition::=
  ( <npsobj condition = "unary_condition" data [ negate = "" ]
  [ separator = "separator" ] [ format = "format_name" ] >
  content </npsobj>) |
  ( <npsobj condition = "binary_condition" data1 data2
  [ negate = "" ] [ separator = "separator" ]
  [ format = "format_name" ]>
  content </npsobj> )

unary_condition::= isEmpty | isNotEmpty | isNil | isNotNil

binary_condition::= isEqual | isNotEqual | isGreaterThan | 
  isLessThan | hasPrefix | hasSuffix | isCaseEqual | matches

data::= ( value = "value" ) | ( name = "name" )

data1::= ( value1 = "value" ) | ( name1 = "name" )

data2::= ( value2 = "value" ) | ( name2 = "name" )

Aufgabe

Diese Anweisung erlaubt es, den Export eines Textes davon abhängig zu machen, dass eine Bedingung erfüllt ist. Die Bedingung wird mit Hilfe eines Namens wie beispielsweise isEqual als Wert des Tag-Attributs condition angegeben (siehe die folgende Liste der Namen für Bedingungen); die Operanden der Bedingung werden über weitere Attribute festgelegt.

Die Bedingung wird zunächst ausgewertet. Wenn sie erfüllt ist, wird das gesamte NPSOBJ-Element durch content ersetzt. Wenn sie nicht erfüllt ist, wird das NPSOBJ-Element durch die leere Zeichenkette ersetzt.

Ist der Parameter negate angegeben, wird der Wert der Bedingung, der sich entsprechend der folgenden Spezifikation der einzelnen Werte für condition ergibt, negiert. Dann erst wird entschieden, ob das Element durch content oder durch die leere Zeichenkette ersetzt wird.

Die Auswertung von data, data1 und data2 folgt demselben Schema. Es wird hier für data definiert:

Ist value="value" angegeben, so ist der Wert von data die Konstante value. Ist value nicht angegeben und ist name="name" angegeben, so ist der Wert von data das Ergebnis der Wertbestimmung von name als Zeichenkette mit dem Separator separator und dem Datumsformat format_name. Ist (fehlerhafterweise) weder das value- noch das name-Attribut angegeben, ist der Wert von data die leere Zeichenkette. Sind (fehlerhafterweise) value="value" und name="name" angegeben, wird name="name" ignoriert.

Der Separator muss angegeben werden, wenn name angegeben wurde und name eine Liste referenziert. Dies ist bei den Werten eines Mehrfachauswahlfeldes der Fall.

Bitte beachten Sie, dass bei binären Bedingungen name und value mit den Indizes 1 und 2 verwendet werden müssen. Die Indizes legen bei den Bedingungstypen hasPrefix, hasSuffix, isGreaterThan, isLessThan und matches fest auf welcher Seite des Operators sich der jeweilige Operand befindet.

isEmpty, isNil

Die Bedingungen sind wahr, wenn der Wert von data eine leere Zeichenkette oder eine leere Liste ergibt oder nicht existiert. Die beiden Bedingungen sind gleichbedeutend, isNil ist aus Kompatibilitätsgründen noch verfügbar.

isNotEmpty, isNotNil

Die Bedingungen sind wahr, wenn der Wert von data existiert und eine nicht leere Zeichenkette oder eine nicht leere Liste ergibt. Die beiden Bedingungen sind gleichbedeutend, isNotNil ist aus Kompatibilitätsgründen noch verfügbar.

isEqual

Die Bedingung ist genau dann wahr, wenn der Wert von data1 zeichenweise mit dem Wert von data2 übereinstimmt.

isNotEqual

Die Bedingung ist genau dann falsch, wenn der Wert von data1 zeichenweise mit dem Wert von data2 übereinstimmt.

isGreaterThan

Die Bedingung ist genau dann wahr, wenn der Wert von data1 größer als der Wert von data2 ist. Die Werte werden zeichenweise von links nach rechts miteinander verglichen. Datumswerte werden vor dem Vergleich in ihre 14-stellige ISO-Darstellung und Listen in Zeichenketten umgewandelt. Durch die Negation der Bedingung kann ein Kleiner-gleich-Vergleich durchgeführt werden.

isLessThan

Analog zu isGreaterThan ist die Bedingung genau dann wahr, wenn der Wert von data1 kleiner als der Wert von data2 ist. Durch die Negation der Bedingung kann ein Größer-gleich-Vergleich durchgeführt werden.

hasPrefix

Die Bedingung ist genau dann wahr, wenn der Anfang von data1 zeichenweise mit data2 übereinstimmt.

hasSuffix

Die Bedingung ist genau dann wahr, wenn die Länge n von data2 kleiner ist als die von data1 und die letzten n Zeichen von data1 zeichenweise mit data2 übereinstimmen.

isCaseEqual

Die Bedingung ist genau dann wahr, wenn der Wert von data1 zeichenweise mit dem Wert von data2 übereinstimmt, wobei Groß- und Kleinschreibung nicht unterschieden wird.

matches

Die Bedingung ist genau dann wahr, wenn der Wert von data1 auf den regulären Ausdruck data2 passt. Ist data2 kein gültiger regulärer Ausdruck, so ist die Bedingung falsch. Ist data2 die leere Zeichenkette, so ist die Bedingung wahr.

Reguläre Ausdrücke müssen der erweiterten POSIX-Syntax gehorchen. Beachten Sie bitte, dass der tatsächlich verfügbare Funktionsumfang von der POSIX-ERE-Implementation in dem verwendeten Betriebssystem abhängt. In der folgenden Aufstellung werden die Spezialsymbole und ihre Bedeutung erläutert:

[ ] In eckigen Klammern wird ein Bereich von Symbolen angegeben, in dem sich das untersuchte Zeichen befinden muss, damit der reguläre Ausdruck passt. Wenn das untersuchte Zeichen sich nicht in dem Bereich befinden darf, so muss dem Bereich das Symbol ^ vorangestellt werden. Das Minuszeichen kann nur als Literal verwendet werden, wenn es als erstes oder letztes Symbol auftritt. [=-] trifft auf die Zeichen = und - zu. Beispiele: [abc], [a-z], [^0-9]
* Der * nach einer Komponente eines regulären Ausdrucks bedeutet: kann beliebig oft vorkommen (auch gar nicht). Beispiel: 1[a-z]*[0-9]
. Der Punkt bezeichnet genau ein beliebiges Zeichen.
^ Das Symbol ^ am Anfang eines Ausdrucks bewirkt, dass die zu vergleichende Zeichenkette vom Anfang her mit dem regulären Ausdruck übereinstimmen muss. Innerhalb eckiger Klammern bedeutet das Symbol, dass das verglichene Zeichen nicht in dem angegebenen Bereich enthalten sein darf.
$ Das Symbol $ am Ende eines Ausdrucks bewirkt, dass die zu vergleichende Zeichenkette vom Ende her mit dem regulären Ausdruck übereinstimmen muss. \n entspricht einer neuen Zeile.
+ Das Pluszeichen nach einem regulären Ausdruck bedeutet einmal oder öfter. Beispielsweise ist [0-9]+ gleichbedeutend mit [0-9][0-9]*.
( ) Runde Klammern werden zur Gruppierung verwendet. Ein Operator wie * oder + kann auf ein einzelnes Zeichen angewendet werden oder auf einen von Klammern umschlossenen regulären Ausdruck. Beispiel: (a*(cb+)*).
{ } Geschweifte Klammern werden zur Quantifizierung verwendet. Nach einem Element kann mit {n}, {n,m} oder {n,} verlangt verden, dass das Element n-mal, n-mal bis m-mal bzw. wenigstens n-mal vorkommen muss. Beispiel: [0-9]{14}
| Der vertikale Strich bedeutet oder. Beispiel: (abc|def)

Sämtlichen oben aufgeführten Symbole muss ein umgekehrter Schrägstrich (Backslash) vorausgehen, damit sie als Literal verwendet werden können.

Beispiel

Im folgenden Beispiel wird in einem Link-Kontext nur dann ein Link erzeugt, wenn die URL die Zeichenkette :// enthält, d. h. wenn es sich um einen externen Link handelt.

<npsobj name1="destinationUrl" value2="://" condition="matches">
  <npsobj insertvalue="anchor" name="destinationUrl">
    <npsobj insertvalue="var" name="displayTitle"/>
  </npsobj>
</npsobj>