Listen

Sowohl die Validierung einzelner Objekte aus Listen wie auch Listen als Ganzes lässt sich mit Hilfe von openVALIDATION realisieren. Dieser Abschnitt befasst sich mit den Verarbeitungsmöglichkeiten von Listen und stellt die grundlegenden Konzepte und Funktionen auf Listen vor.

Definition eigener Listen

Es gibt insgesamt zwei Arten, wie Listen in openVALIDATION zur Validierung vorliegen. Im ersten Fall wird die Liste als Eingabe über das Schema, wie beispielsweise

Zahlen: [1, 2, 4, 8, 16]

definiert. Allerdings gibt es auch die Möglichkeit Listen manuell zu definieren, die beispielsweise immer die gleichen Elemente enthalten. Sei folgendes Schema als Beispiel gegeben:

Abschluss: Bachelor

Angenommen die Eigenschaft Abschluss soll einen der drei Werte Kein, Bachelor und Master enthalten, dann lässt sich beispielsweise eine Variable Abschlüsse durch

Kein, Bachelor und Master als Abschlüsse

definieren, die diese Werte enthält. Die Zeichen ,, und und oder trennen dabei die einzelnen Elemente der Liste. Anschließend kann eine Regel formuliert werden, die prüft, ob der Abschluss in Abschlüsse enthalten ist.

Kein, Bachelor und Master als Abschlüsse
Der Abschluss muss einer von Abschlüsse sein

Mehr Informationen zur EINER_VON-Funktion findest du hier. Analog dazu können Listen auch außerhalb von Variablen, direkt in Regeln definiert werden, zum Beispiel:

Der Abschluss muss einer von Kein, Bachelor und Master sein

Während die Liste beispielsweise nur Wörter oder nur Zahlen enthalten darf. ist ihr Inhalt beliebig wählbar. Das bedeutet, dass sowohl Eigenschaften aus dem Schema also auch andere Variablen als teil der Liste definiert werden können. Die folgende Listendefinition demonstriert das als Beispiel anhand des Schemas

Abschluss: Kein
Masterabschluss: Master
Bachelor als mittlerer Abschluss
Kein, mittlerer Abschluss und Masterabschluss als Abschlüsse

Erstes und letztes Element einer Liste (ERSTE- und LETZTE-Funktion)

Wie die Namen der Funktionen ERSTE und LETZTE vermuten lassen, werden sie dazu verwendet auf das jeweils erste bzw. letzte Elemente einer Liste zuzugreifen. Mit ihnen lässt sich beispielsweise folgende Regel auf dem unten aufgeführten Schema definieren, die jedes Mal fehlschlägt, wenn das erste Element der Liste 1 ist:

Lieblingszahlen: [1, 2, 4, 8, 16]
Die ERSTE Zahl AUS meinen Lieblingszahlen ALS erste Lieblingszahl
Meine erste Lieblingszahl DARF NICHT 1 sein

Des Weiteren ist es möglich, sich mehrere Elemente einer Liste auf einmal zu holen, indem man der Funktion eine Anzahl mitteilt. Zum Beispiel enthält die folgende Variable die Liste der ersten drei Elemente der Liste:

Die ERSTEN 3 Zahlen AUS meinen Lieblingszahlen ALS Top 3

Sollte die Anzahl der gewünschten Elemente die Länge der Liste überschreiten, wird die gesamte Liste zurückgegeben.

Es sei angemerkt, dass die Funktion ERSTE über mehrere Schlüsselwörter genutzt werden kann. Für ERSTE gibt es ERSTEN und ERSTER und für LETZTE gibt es LETZTEN und LETZTER als zusätzliche Aliase.

Filterung von Listen mit Bedingung (MIT-Funktion)

Bei der Validierung von Daten ist es häufig notwendig nur jene Elemente einer Liste zu betrachten, die eine vorgegebene Bedingung erfüllen. Für genau diesen Anwendungsfall existiert die Funktion MIT. Sie ermöglicht die Filterung von Listen nach beliebigen Kriterien sowohl auf Listen mit einfachen Inhalten, wie Zahlen, als auch mit komplexen Inhalten, wie Personen, die wiederum eigene Eigenschaften, wie Namen und Alter haben können. Um beispielsweise eine einfache Liste von Zahlen zu filtern, muss man lediglich die zu filternde Liste nach dem Schlüsselwort AUS angeben, gefolgt vom Schlüsselwort MIT und der jeweiligen Bedingung. Das folgende Szenario stellt eine solche Filterung beispielhaft auf der Liste Zahlen dar:

Zahlen: [1,2,3,4,5,6,7,8,9,10]

Mithilfe des folgenden Ausdrucks lassen sich beispielsweise die Zahlen von 6 bis 10 aus der Liste filtern und in der Variable MeineListe verpacken:

Alle Elemente AUS Zahlen MIT einem Wert GRÖßER 5 ALS MeineListe

Die Filterung von Listen mit komplexen Inhalten gilt als häufiger Anwendungsfall im Rahmen der Validierung. Da sich diese Form der Filterung von der vorangegangen einfacheren Variante unterscheidet, sei zur Orientierung zunächst das folgende Schema gegeben:

Bewerberliste: [
{Name: "Peter", Alter: 17},
{Name: "Klaus", Alter: 19},
{Name: "Frieda", Alter: 38}]

Das Schema besitzt eine Liste mit dem Namen Bewerberliste. Jedes Element (je eins in Zeile 2, 3 und 4) innerhalb dieser ist einheitlich strukturiert und besitzt jeweils einen eigenen Namenund ein eigenes Alter. So ließe sich beispielsweise jedes Element als eine Person interpretieren.

Angenommen die Liste der Bewerber soll jetzt nach ihrem Alter gefiltert werden. Nämlich in der Art, dass lediglich Bewerber genommen werden, die jünger sind als 20. Da feststeht, dass jedes Element eine Eigenschaft Alter besitzt, kann diese in der Filterung verwendet werden. Einen Ausdruck, der eine solche Filterung durchführt, zeigt dieses Beispiel:

Alle Personen AUS der Bewerberliste MIT einem Alter KLEINER als 20 ALS Junioren

Die Variable Junioren enthält nun die beiden Elemente mit dem Namen Peter bzw. Klaus, da ihre entsprechenden Alter kleiner sind als 20. Würde man die resultierende Liste als Schema notieren, würde sie samt ihres Inhalts wie folgt aussehen:

Junioren: [
{Name: "Peter", Alter: 17},
{Name: "Klaus", Alter: 19}]

Die Reihenfolge der Werte bleibt erhalten.

Diese Liste kann dann zur weiteren Validierung genutzt werden.

ERSTE und LETZTE in Kombination mit Bedingung

Ein weiterer Teil der Funktionalität von ERSTE und LETZTE ist die Erweiterungsmöglichkeit durch eine Bedingung. Die Bedingung bezieht sich dabei auf die Elemente der Liste und ermittelt das erste bzw. letzte Element, das die gegebene Bedingung erfüllt. Da sich die beiden Funktionen vom Aufbau nicht unterscheiden, werden die kommenden Beispiele anhand der Funktion ERSTE vorgestellt. Sei folgendes Schema mit einer Liste von Zahlen gegeben:

Lieblingszahlen: [1,2,4,8,16,32]

Das erste Element ließe sich mit diesem Ausdruck aus der Liste filtern:

Die ERSTE Zahl AUS meinen Lieblingszahlen ALS Favorit

Die Variable Favorit würde in diesem Fall die Zahl 1 enthalten. Wollte man nun anstatt 1 die Zahl 4 aus der Liste extrahieren, kann man die obige Funktion durch eine MIT -Funktion erweitern. Der resultierende Ausdruck sieht dann wie folgt aus:

Die ERSTE Zahl AUS meinen Lieblingszahlen MIT einem Wert GRÖßER als 2 ALS Favorit

Listen mit komplexen Inhalten können auf diese Weise ebenfalls verarbeitet werden. Das folgende Schema zeigt beispielsweise die Liste Bewerberliste, die eine Menge von Personen enthält, welche wiederum ein Alter und einen Namen haben:

Bewerberliste: [
{Name: "Peter", Alter: 17},
{Name: "Klaus", Alter: 19},
{Name: "Frieda", Alter: 38}]

Um die Person mit dem Namen "Klaus" aus der Liste zu extrahieren, könnte man sich an den Altern der Personen orientieren. Da Klaus die erste Person in der Liste ist, die älter ist als 18, ließe er sich mit folgendem Ausdruck extrahieren:

Die ERSTE Person AUS der Bewerberliste MIT einem Alter GRÖßER als 18 ALS Peter

Filterung von Listen mit komplexen Inhalten nach Eigenschaft

Eine weitere Form der Filterung auf Listen mit komplexen Inhalten ist die Filterung nach Eigenschaften. Konkret bedeutet das, dass man aus einer Liste solcher komplexen Elemente mit eigenen Eigenschaften eine Liste der Eigenschaften erzeugt. Zur Veranschaulichung sei folgendes Schema gegeben:

Bewerberliste: [
{Name: "Peter", Alter: 17},
{Name: "Klaus", Alter: 19},
{Name: "Frieda", Alter: 38}]

Die Liste Bewerberliste ist eine Liste mit drei Personen (Zeilen 2-4), wobei jede Person jeweils die Eigenschaften Name und Alter besitzt. Der folgende Ausdruck dient beispielsweise der Filterung nach dem Alter:

Bewerberliste.Alter ALS Altersliste

Wie in dem Beispiel zu erkennen ist, erfolgt die Filterung, indem man den Listennamen und die Eigenschaft verbunden mit . angibt. Die Reihenfolge der Werte bleibt dabei erhalten. Die Variable Altersliste enthält somit die Liste der Alter der Personen aus der Bewerberliste und besitzt folgenden Inhalt:

Altersliste: [17,19,38]

Quantitative Validierung von Listeninhalten

Bei der Validierung von Listen ist es häufig notwendig quantitative Aussagen über ihren Inhalt treffen zu können. Dafür stellt openVALIDATION die Funktionen EINS_VON und KEINS_VON zur Verfügung, mit denen sich für ein Element überprüfen lässt, ob es in der Liste enthalten ist. Als Beispiel wird zunächst das Schema definiert.

Magische_Alter: [65,43,21]
Alter: 33

Mithilfe der folgenden Regel lässt sich beispielsweise prüfen, ob das Alter einem Element der Liste Magische_Alter entspricht:

Das Alter muss eins von Magische_Alter sein

Diese Regel schlägt also genau dann fehl, wenn das Alter nicht 65, 43 oder 21 ist. Ein Spezialfall, bei dem die Funktion EINS_VON impliziert wird ist die Definition von Listen innerhalb einer Regel. Zum Beispiel sind die folgenden beiden Regeln gleichbedeutend:

Das Alter muss 65, 43 oder 21 sein
Das Alter muss eins von 65, 43 oder 21 sein

Referenz

Zur Verarbeitung von Listen stellt openVALIDATION Funktionen zu Verfügung. Mit ihrer Hilfe lassen sich gezielt Elemente extrahieren und Listen filtern, die dann zur weiteren Validierung genutzt werden können. Folgende Tabelle gibt einen Überblick über alle verfügbaren Funktionen:

Funktion

Beschreibung

Aliase

ERSTE

Gibt die ersten n Elemente der Liste aus. Die Anzahl n ist dabei optional und wird als 1 interpretiert, sollte keine Angabe gemacht werden.

ERSTER, ERSTEN

LETZTE

Gibt die letzten n Elemente der Liste aus. Die Anzahl n ist dabei optional und wird als 1 interpretiert, sollte keine Angabe gemacht werden.

LETZTER,

LETZTEN

MIT

Gibt die Liste aller Elemente zurück, die die Bedingung erfüllen.

-

EINS_VON

Prüft für ein Objekt und eine Liste, ob das Objekt gleich zu mindestens einem Element der Liste ist.

EINER_VON, EINE_VON, EINS_AUS, EINER_AUS, EINE_AUS

KEINS_VON

Prüft für ein Objekt und eine Liste, ob das Objekt von jedem Element der Liste verschieden ist.

-

Funktionen müssen immer innerhalb einer Variablen definiert werden.