Zum Inhalt

<operate>

Das <operate> Element bietet leistungsstarke Batch-Operationen auf Vorlagen zur Datenumwandlung. Es unterstützt sowohl XML (unter Verwendung von XPath) als auch JSON (unter Verwendung von JSONPath) Vorlagen mit umfangreichen Betriebsmöglichkeiten.

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
template-dir No Base directory for template files -

CSV Dateiformat

Die CSV-Datei muss Folgendes enthalten: - id: Eindeutige Kennung für jedes Artefakt - template: Pfad zur Vorlagendatei (relativ zum template-dir, falls angegeben) - 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
9
<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" 
            template-dir="scripts/" 
            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 nahtlos 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})