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>