Zum Inhalt

operate Element

Das <operate>-Element führt Batch-Operationen auf Vorlagen zur Datenumwandlung aus. Unterstützt werden sowohl XML (über XPath) als auch JSON (über JSONPath).

Note

Für JSON nutzen create-missing-Operationen eine strikte Objektpfad-Teilmenge von JSONPath und nicht die vollständige JSONPath-Abfragesprache.

Ubersicht

The operate element reads operation definitions from a CSV file and applies them to templates, enabling: Das operate Element liest Betriebsdefinitionen aus einer CSV-Datei und wendet sie auf Vorlagen an, wodurch Folgendes ermöglicht wird: - Batch-Datenumwandlungen - Vorlagenmodifikationen vor der Datengenerierung - Dynamische Wertinjektion mit Generatoren - Komplexe Strukturoperationen - Funktionsausführung

Attribute

Attribute Erforderlich Beschreibung Standard
source Yes CSV file path containing operations and models -
operation_prefix No Prefix for operation column names in CSV op
template_not_found_action No Action when template is missing: warn, error, ignore warn
operation_not_matched_action No Action when operation is invalid: warn, error, ignore warn

CSV Dateiformat

Die CSV-Datei muss Folgendes enthalten: - id: Eindeutige Kennung für jedes Artefakt - template: Pfad zur Vorlagendatei - Betriebsspalten: Benannt mit dem operation_prefix (z. B. op1, op2, op3)

Operationstypen

Basic Operations

set

Updated oder erstellt einen Wert am angegebenen Pfad.

XML Beispiel:

1
2
id|template|op1|op2
user001|user.xml|set(//user/name,John Doe)|set(//user/age,30)

JSON Beispiel:

1
2
id|template|op1|op2
user001|user.json|set($.user.name,John Doe)|set($.user.age,30)

delete

Entfernt einen Knoten/Eigenschaft am angegebenen Pfad.

XML Beispiel:

1
2
id|template|op1
user001|user.xml|delete(//user/email)

JSON Beispiel:

1
2
id|template|op1
user001|user.json|delete($.user.email)

Fortgeschrittene Strukturoperationen

XML-spezifische Operationen

  • replaceChildren: Ersetzt alle Kinder eines Knotens

    1
    2
    op1
    replaceChildren(//root/data,<item>New Item</item>)
    

  • appendChild: Fügt einem Knoten ein Kind hinzu

    1
    2
    op1
    appendChild(//root/metadata,<updated>2025-07-17</updated>)
    

  • upsertNode: Aktualisiert oder fügt einen Knoten ein

    1
    2
    op1
    upsertNode(//root/status,active)
    

  • mergeAttributes: Attribute in einen Knoten werden zusammen geführt

    1
    2
    op1
    mergeAttributes(//root,id="test-123" enhanced="true")
    

  • clearChildren: Entfernt alle Kinder eines Knotens

    1
    2
    op1
    clearChildren(//root/temp)
    

  • upsertAttribute: Aktualisiert oder fügt ein Attribut ein

    1
    2
    op1
    upsertAttribute(//root,version="2.0")
    

JSON-Spezifische Operationen

  • mergeObject: Objekte zusammenführen

    1
    2
    op1
    mergeObject($.config,{"timeout": 30, "ssl": true})
    

  • upsertProperty: Aktualisiert oder fügt eine Eigenschaft ein

    1
    2
    op1
    upsertProperty($.metadata.version,2.0)
    

  • replaceArray: Ersetzt ein ganzes Array

    1
    2
    op1
    replaceArray($.items,[{"id": 3, "name": "New Item"}])
    

  • appendItem: Fügt ein Element zu einem Array hinzu

    1
    2
    op1
    appendItem($.tags,new_tag)
    

  • clearArray: Leert ein Array

    1
    2
    op1
    clearArray($.temp)
    

Dynamische Operationen

Benutze Generatoren und Variablen innerhalb von Operationen:

1
2
id|template|op1|op2|op3
gen001|user.xml|set(//user/name,{GivenNameGenerator})|set(//user/id,{IncrementGenerator})|set(//user/email,{EmailAddressGenerator})

Komplexe Beispiele

Beispiel 1: Basis XML Operationen

Setup (datamimic.xml):

1
2
3
<setup defaultSeparator="|">
    <operate source="data/operations.opctl.csv" operation_prefix="op"/>
</setup>

CSV (operations.opctl.csv):

1
2
3
id|template|op1|op2|op3
user001|templates/user.xml|set(//user/name,John Doe)|set(//user/age,30)|delete(//user/temp)
company001|templates/company.xml|set(//company/name,TechCorp)|set(//company/employees,150)|upsertAttribute(//company,status="active")

Beispiel 2: JSON mit komplexen Pfaden

1
2
3
id|template|op1|op2|op3
json001|config.json|set($.users[0].name,Alice)|set($.users[*].active,true)|delete($.deprecated)
json002|config.json|set($..id,GLOBAL-ID)|set($.users[?(@.active)].verified,true)|mergeObject($.settings,{"theme":"dark"})

Beispiel 3: Healthcare Business Domain

Setup:

1
2
3
4
5
6
7
8
<setup>
    <execute uri="scripts/healthcare_functions.scr.py"/>
    <variable name="patient" entity="Person(dataset='US', min_age=0, max_age=95)"/>
    <variable name="patientId" script="generate_patient_id()"/>

    <operate source="data/patient_records.opctl.csv" 
            operation-prefix="op"/>
</setup>

CSV:

1
2
id|template|op1|op2|op3|op4
patient_001|patient_record.xml|set(//patient/id,{patientId})|set(//patient/name,{patient.given_name} {patient.family_name})|set(//patient/bloodType,{bloodType})|set(//diagnosis/code,{diagnosis.code})

Beispiel 4: Fehlerbehandlung

1
2
3
4
5
6
<setup>
    <operate source="data/operations.csv" 
             operation_prefix="op"
             template_not_found_action="error"
             operation_not_matched_action="warn"/>
</setup>

Best Practices für <operate>

  1. Operation Reihenfolge: Planen Sie die Reihenfolge der Operationen sorgfältig
  2. Avoid modifying nodes after deletion
  3. Vermeide das Modifizieren von Knoten nach der Löschung
  4. Erstelle Elternknoten vor Kindknoten

  5. Pfad validierung: Stelle sicher, dass Pfade vor Operationen existieren

  6. Verwende Upsert-Operationen für unsichere Pfade
  7. Behandle fehlende Pfade mit Fehleraktionen

  8. Dynamische Inhalte: Verwende Generatoren und Variablen für dynamische Werte

  9. Nutze Generatoren für variable Inhalte
  10. Kombiniere mit Variablen für dynamische Pfade

  11. Performance: Für große Datensätze

  12. Gruppiere verwandte Operationen zusammen
  13. Verwende Batch-Operationen, wenn möglich
  14. Berücksichtige die Komplexität der Vorlagen

  15. Fehlerbehandlung:

  16. Setze template_not_found_action basierend auf den Anforderungen
  17. Verwende warn für Entwicklung, error für Produktion
  18. Überwache Protokolle auf Betriebswarnungen

  19. Maintainability:

  20. Verwende beschreibende IDs in CSV-Dateien
  21. Dokumentiere komplexe Operationen
  22. Halte Vorlagen in logischen Verzeichnissen organisiert

Logische Validierung

Das Operate-System erkennt und meldet ungültige Betriebsequenzen: - Operationen auf gelöschten Knoten - Widersprüchliche Modifikationen - Ungültige Pfade nach strukturellen Änderungen

Integration mit Generatoren

Operate integriert sich mit DATAMIMIC-Generatoren: - Verwende Generatorausdrücke in Set-Operationen - Kombiniere mit Variablen für dynamische Inhalte - Unterstützung für alle DATAMIMIC-Generator-Typen

Beispiele nach Geschäftsfeldern

E-commerce Product Catalog

1
2
id|template|op1|op2|op3
prod001|product.xml|set(//product/name,{ProductNameGenerator})|set(//product/price,{RandomDoubleGenerator(10,1000)})|set(//product/category,Electronics)

Financial Services

1
2
id|template|op1|op2|op3
loan001|loan_app.xml|set(//loan/applicant,{PersonGenerator})|set(//loan/amount,{RandomIntegerGenerator(1000,100000)})|set(//loan/status,pending)

Government Permits

1
2
id|template|op1|op2
permit001|permit.xml|set(//permit/id,PERMIT-{IncrementGenerator})|set(//permit/issueDate,{DateTimeGenerator})