Die Validation bietet die Möglichkeit einen Datensatz, nach vorgegeben Richtlinien, zu überprüfen. Diese Richtlinien werden in einem Schema definiert, dieses muss als gültiges JSON vorliegen. Je nachdem ob die Richtlinien/Bedingungen im Schema erfüllt sind, erscheint ein Datensatz auf dem Ausgang “erfolgreich” oder “fehlerhaft”. So können z.B. Attribute auf “vorhandensein” oder das korrekte Format überprüft werden.

Zunächst ein Beispiel für das Attribut “product_id”:

[{  
  "key": "product_id",  
  "name": null,  
  "description": null,  
  "attributeType": "text",  
  "pattern": null,  
  "fixedValues": null,  
  "defaultValue": null,  
  "attributeSortingHint": 20,  
  "unit": null,  
  "isMandatory": true,  
  "isVariantAttribute": false,  
  "attributeGroup": null,  
  "attributeGroupSortingHint": null  
}]
Schlüssel mögliche Werte Kommentar
key Attributname Welches Attribut soll überprüft werden
name ein beliebiger Wert/Text (lokalisierter) Attributname
description ein beliebiger Wert/Text (lokalisierte) Beschreibung
attributeType text / number / date Von welchem Typ muss das Attribut sein
pattern regularExpression welches Muster muss erfüllt werden
fixedValues Eine Liste der Werte die erlaubt sind z.B. [‘1’,‘2’,‘7’], alle anderen Werte führen zu “fehlerhaft”
defaultValue Ein beliebiger Wert/Text Ist das Attribut leer wird dieser Wert eingetragen
attributeSortingHint Eine beliebige ganze Zahl Nach diesen Zahlen werden die Attribute im Schema sortiert
unit Ein beliebiger Wert/Text Es kann eine Einheit erzwungen werden
isMandatory true / false Ist das Attribut zwingend erforderlich
attributeGroup Ein beliebiger Wert Das Attribut wird einer Gruppe zugeschlagen
attributeGroupSortingHint Eine beliebige ganze Zahl Nach diesen Zahlen werden die Gruppen sortiert
Ist der Wert ‘null’ angegeben wird die Zeile nicht beachtet und bei der Überprüfung übergangen.

Beispiel für den Schlüssel ‘pattern’: "([0-9a-zA-Z\\._-]+\\.(png|PNG|gif|GIF|jp[e]?g|JP[E]?G))" Der öffnende und der schließende Slash werden nicht benötigt. Ein Backslash muss doppelt escaped werden \\.

Datei

Ein solches Schema kann unter dem Reiter “Schemas” hinterlegt werden:

Datei

  1. Der Tab “Schemas”
  2. Mit dem “Plus” Button wird ein neues Schema hinzugefügt
  3. Für das Schema muss ein Name vergeben werden
  4. Hier steht das Schema selber, es ist ein Beispiel-JSON vorgegeben.
  5. Nach dem Klick auf “Speichern” kann das Schema in der Validation verwendet werden.

Nun geht es im gewünschten Flow weiter:

Datei

  1. Der Tab “Flows”
  2. Aus der Werkzeugleiste links kann die Operation “Validation” eingefügt werden
  3. Die Validation braucht einen Namen
  4. Aus dem Drop-Down-Menue wird das gewünschte Schema ausgewählt
  5. “Nur Validieren” Button
    “Aus”: Attribute/Spalten die nicht im Schema genannt auftauchen werden aus dem Datensatz entfernt
    “Ein”: Attribute/Spalten die nicht im Schema genannt auftauchen bleiben erhalten und werden lediglich als fehlerhaft markiert
  6. “Fehlerhafte Zeilen erhalten” Button
    “Aus”: Zeilen/Datensätze die die Bedingungen des Schemas nicht erfüllen werden gelöscht
    “Ein”: Zeilen/Datensätze die die Bedingungen des Schemas nicht erfüllen werden lediglich als fehlerhaft markiert
  7. Wenn die Einstellungen vorgenommen wurden wird hier die Validierung gestartet

Benutzerdefinierte Validierung

Manchmal reichen die Validierungsfunktionen des Schemas nicht aus, um einige komplexe Anwendungsfälle abzudecken. In diesen Fällen kann der Benutzer ein Werkzeug definieren, um die Daten denoch zu validieren. Ein solches Werkzeug kann unter dem Reiter “Schemas” bei “Validation Werkzeuge” erstellt werden. Wie bei den normalen Werkzeugen wird Java-Script verwendet. Allerdings erfordern die Chioro-Schema-Werkzeuge bestimmte Objekttypen, die zurückgegeben werden müssen. Das Format dieser Objekte wird im Folgenden anhand eines Beispiels beschrieben:

Angenommen, wir haben ein Attribut “name”, das ein verschachteltes Objekt mit den Eigenschaften firstName und lastName enthält. Es soll validiert werden, dass sowohl Vorname als auch Nachname existieren. Um das zu erreichen können wir das folgende Werkzeug definieren:

Beispieldaten:

id name expected errors
1 {firstName: ‘lutz’, lastName: ‘wagner’} none
2 ‘lutz wagner’ first name is not defined, last name is not defined
3 {‘lastName’: ‘wagner’} first name is not defined

Beispielwerkzeug (Name = nameValidator):

function nameValidator(key) {
    let attributeValue = source(key);
    if(!attributeValue.firstName) {
        return {"errors":["first name is not defined"]}
    }
    if(!attributeValue.lastName) {
        return {"errors":["last name is not defined"]}
    }
}

Für das obige Beispieltool muss das Schema wie folgt konfiguriert werden:

[{  
"key": "name",  
... andere Attribute wie im obigen Beispiel
"customValidation": "nameValidator" <===
}]

Also sieht das komplette Schema folgendermassen aus:

[
  {
    "key": "name",
    "name": [
      {
        "lang": "deu",
        "value": "Attribut Name"
      }
    ],
    "description": [
      {
        "lang": "deu",
        "value": "Attribut Beschreibung"
      }
    ],
    "attributeTypeList": false,
    "attributeType": "text",
    "pattern": null,
    "fixedValues": null,
    "defaultValue": null,
    "attributeSortingHint": 9999,
    "unit": null,
    "isMandatory": true,
    "isVariantAttribute": false,
    "attributeGroup": null,
    "attributeGroupSortingHint": null,
    "customValidation": "nameValidator"
  }
]