Basierend auf AAroN (github.com/schmitze87/AAroN) — Apache 2.0
AAroN ist ein Neo4j-Plugin für Sparx EA Architekturen, entwickelt für NAF-Modelle.
Dieses Paket macht deinen Open WebUI EAM Analysten zielgenau — statt SQLite-Statements zu brute-forcen, nutzt es das tiefe Wissen von AAroN über die proprietäre QEA-Tabellenstruktur von Sparx Enterprise Architect.
| Aktueller Ansatz | AAroN-informierter Ansatz |
|---|---|
| SQLite-Queries per Trial & Error | Gezielte Queries via dokumentierte Spalten |
| Kennt nur offensichtliche Tabellen | Kennt ALLE 15+ Core-Tabellen + ihre Beziehungen |
| Versteht implizite Beziehungen nicht | Erkennt 9 implizite Beziehungstypen |
| PDATA-Felder sind "Magic Numbers" | PDATA-Felder kontextabhängig interpretiert |
| Keine NAF-Struktur-Erkennung | NAF-Views & Stereotypen automatisch erkannt |
| Findet Tagged Values nur zufällig | Tagged Values als First-Class-Citizen |
- PDATA-Spalten sind der Schlüssel: AAroNs ObjectProcessor zeigt, dass PDATA1-PDATA5 kontextabhängige GUID-Verweise enthalten — das ist das Geheimnis für INSTANCE_OF, BEHAVIOUR und REUSAGE Beziehungen
- Implizite Beziehungen existieren außerhalb von t_connector: EMBEDS, HAS_PORT, HAS_PART werden aus ParentID + Object_Type abgeleitet
- t_xref enthält versteckte Metadaten: Stereotype-FQN, Conveyed Items für Informationsflüsse
- Verarbeitungsreihenfolge ist kritisch: Packages → Diagrams → Objects → Properties → Connectors → DiagramObjects
- ea_guid ist der universelle Join-Schlüssel — nicht Object_ID allein
Option A: Als Python-Tool (empfohlen für Open WebUI ≥ 0.3)
Kopiere eam_qea_tool.py in das Open WebUI Tools-Verzeichnis:
# Pfad je nach Open WebUI Installation
cp eam_qea_tool.py /pfad/zu/open-webui/data/tools/
# oder bei Docker:
docker cp eam_qea_tool.py open-webui:/app/backend/data/tools/Dann in Open WebUI:
- Admin Panel → Tools öffnen
- Tool
eam_qea_toolsollte automatisch erscheinen - Aktivieren und dem EAM Analyst Model zuweisen
Option B: Direktintegration (falls kein Tool-Support)
Alternativ kann das Skript als Modul importiert werden:
import sys
sys.path.insert(0, '/pfad/zu/eam-qea-tool')
from eam_qea_tool import QEAAnalyzer
analyzer = QEAAnalyzer('/pfad/zum/modell.qea')
stats = analyzer.get_model_statistics()- In Open WebUI: Workspace → Models → EAM Analyst → Edit
- Den Inhalt von
system_prompt.mdin das System-Feld einfügen - Optional: Den bestehenden Prompt des EAM Analysten mit diesem Prompt verschmelzen (unten anfügen)
Das Tool braucht Lese-Zugriff auf die QEA-Dateien:
# Wenn QEA-Dateien auf einem Netzlaufwerk liegen:
# In Open WebUI docker-compose.yml das Volume mounten:
volumes:
- /pfad/zu/qea-modellen:/data/qea-models:roDann sind die Dateien unter /data/qea-models/mein_modell.qea erreichbar.
"Analysiere die Modellstatistik von /data/qea-models/mein_modell.qea"
→ Ruft analyze_qea_statistics auf
"Zeige mir alle Capabilities im Modell"
→ Ruft find_elements_in_qea(stereotype='Capability') auf
"Suche nach Elementen mit 'Einsatz' im Namen"
→ Ruft search_qea_elements(query='Einsatz') auf
"Zeige die Paketstruktur"
→ Ruft get_package_tree_from_qea auf
"Welche NAF-3 Capabilities gibt es?"
→ Ruft get_naf_view_elements_from_qea(view_type='NAF-3') auf
"Finde alle Elemente mit Tagged Value 'SecurityClassification' = 'VS-NfD'"
→ Ruft find_elements_by_tagged_value(tag_name='SecurityClassification', tag_value='VS-NfD') auf
"Welche Tagged Values gibt es im Modell überhaupt?"
→ execute_qea_sql zu t_objectproperties GROUP BY Property
"Detailanalyse für Element mit ID 12345"
→ Ruft get_element_detail_from_qea(element_id=12345) auf
→ Liefert: Attribute, Operationen, eingehende/ausgehende Beziehungen,
implizite Beziehungen, Tagged Values, Diagramme, Cross-Referenzen
"Welche Beziehungen hat das Element 'Einsatzsystem XY'?"
→ Ruft export_qea_element_report(element_name='Einsatzsystem XY') auf
"Zeige mir alle Elemente mit ihren impliziten INSTANCE_OF-Beziehungen"
→ execute_qea_sql mit AAroN-informiertem JOIN
"Finde alle Informationsflüsse mit ihren conveyed items"
→ execute_qea_sql mit t_connector JOIN t_xref
-
QEA-Dateien enthalten VS-relevante Architekturdaten!
→ QEA-Dateien NUR auf dem dienstlichen Server halten, NICHT in Cloud-Umgebungen hochladen → Open WebUI läuft on-premise — korrekt so -
SQL ist read-only: Das Tool erlaubt NUR SELECT-Queries via
execute_qea_sql→ Keine Schreibzugriffe auf die QEA-Datei möglich -
Keine Datenexfiltration: Das Tool sendet keine Daten nach extern → Alle Analysen laufen lokal im Open WebUI Python-Prozess
- Große Modelle (>50 MB QEA):
get_element_detailkann bei vielen Beziehungen langsam sein — im Zweifel gezielt nach Namen filtern statt alle Elemente zu scannen - SQLite-Caching: Das Tool cached nichts zwischen Aufrufen — jeder Aufruf öffnet eine frische Connection
- LIMIT immer setzen: Bei
execute_qea_sqlwird automatisch LIMIT 200 angehängt wenn nicht vorhanden
In eam_qea_tool.py die NAF_VIEW_STEREOTYPES Map erweitern:
NAF_VIEW_STEREOTYPES = {
"NAF-8": ["Sv-8", "CapabilityConfiguration", "EvolutionTimeline"],
# ... eigene Views
}Neue Methoden in der Tools-Klasse anlegen:
async def meine_spezialanalyse(self, qea_path: str, parameter: str) -> str:
analyzer = QEAAnalyzer(qea_path)
# ... eigene Analyse-Logik mit analyzer._query()
result = analyzer._query("SELECT ...")
analyzer.close()
return json.dumps(result, indent=2, ensure_ascii=False)| Problem | Lösung |
|---|---|
| "QEA file not found" | Absoluten Pfad verwenden, Volume-Mount prüfen |
| Tool erscheint nicht in Open WebUI | Tool-Datei im richtigen Verzeichnis? Open WebUI neustarten |
| SQL-Fehler bei execute_qea_sql | Nur SELECT erlaubt; Tabellennamen prüfen |
| Keine Tagged Values gefunden | Manche Modelle nutzen t_objectproperties nicht — prüfe mit list_all_tag_names() via SQL |
| Langsame Antworten bei großen Modellen | LIMIT reduzieren, gezielter filtern |
| AAroN Processor | QEA Tabelle | Open WebUI Funktion |
|---|---|---|
| PackageProcessor | t_package | get_package_tree_from_qea |
| ObjectProcessor | t_object | find_elements_in_qea, get_element_detail_from_qea |
| ConnectorProcessor | t_connector | get_relationships_from_qea |
| TaggedValueHelper | t_objectproperties, t_connectortag, t_attributetag | find_elements_by_tagged_value |
| DiagramProcessor | t_diagram, t_diagramobjects, t_diagramlinks | get_qea_diagrams |
| AttributeProcessor | t_attribute | get_element_detail_from_qea (attributes) |
| OperationProcessor | t_operation | get_element_detail_from_qea (operations) |
| XRefProcessor | t_xref | get_element_detail_from_qea (cross_references) |
Erstellt: 06.06.2026 | Basierend auf AAroN v2026.01.4