Strukturierte Daten und Regel-Pipelines¶
Mit Kompositionselementen formst du verschachtelte Ausgaben; Regelelemente transformieren Quelldatensätze in klar getrennten Phasen. Das sind unterschiedliche Aufgaben: nestedKey, list und array definieren die Produktstruktur. sourceConstraints, mapping und targetConstraints legen fest, ob ein geladener Datensatz zugelassen und wie er transformiert wird.
Verschachtelte Objekte, Listen und Arrays erzeugen¶
nestedKey type="dict" erzeugt ein verschachteltes Objekt. Eine list wertet jedes deklarierte item aus; eine falsche Item-Bedingung erzeugt einen leeren Platz. Verwende deshalb RemoveNoneOrEmptyElement, wenn die exportierte Liste nur passende Einträge enthalten soll. Ein array type="literal" übernimmt seine deklarierten value-Konstanten in derselben Reihenfolge. Verwende condition, wenn sich Zweige der Ausgabestruktur gegenseitig ausschließen.
| structured-profile.xml | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
Dieser Descriptor erzeugt drei Profile. Jedes Profil besitzt eine Adresse, zwei Rollen und einen E-Mail-Kontakt; nur Profil 2 erhält zusätzlich einen SMS-Kontakt. Genau ein Bedingungszweig liefert segment.
Verwende nestedKey type="list", wenn alle Einträge dieselbe generierte Struktur und Anzahl haben. list/item ist für Einträge mit unterschiedlichen Strukturen oder individuellen Bedingungen gedacht. array eignet sich für eine homogene Sammlung skalarer Werte.
Quelldatensätze filtern, abbilden und validieren¶
Die Regel-Pipeline besitzt eine feste Reihenfolge:
sourceConstraintssieht den geladenen Quelldatensatz und kann ihn verwerfen, bevor generierte Keys und Mappings ausgeführt werden.mappingwird in Dokumentreihenfolge ausgewertet und kann Felder ergänzen oder überschreiben. Spätere Mappings können Werte früherer Mappings verwenden.targetConstraintssieht den fertigen generierten Datensatz und kann ihn vor dem Export verwerfen.
Die folgenden beiden Dateien bilden gemeinsam ein ausführbares Projekt.
| data/customers.json | |
|---|---|
1 2 3 4 5 6 | |
| rule-pipeline.xml | |
|---|---|
1 2 3 4 5 6 7 8 9 | |
C-200 wird in der Quellphase entfernt, weil der Datensatz inaktiv ist. Die Mappings klassifizieren die verbleibenden Datensätze und berechnen monthly_budget. C-400 wird in der Zielphase entfernt, weil das Einkommen unter der abschließenden Eignungsgrenze liegt. Exportiert werden daher exakt C-100 und C-300.
Filter gehören in Constraints, Transformationen in Mappings. Ein Constraint mit require="False" ist eine beabsichtigte Ablehnung; Auswertungsfehler werden über den zentralen DSL-Fehlerkatalog gemeldet und nicht wie ein abgelehnter Datensatz behandelt.