FIM-Konverter

fim:prozess

API-Dokumentation

XProzess aus ADONIS in BPMN 2.0 konvertieren — mit vollständiger FIM-Fachlichkeit.

Das eingebettete BPMN bleibt unverändert. FIM-Attribute werden als fim:-Elemente ergänzt.

Basis-URL
https://api.fimtek.dev/fim-konverter/v1
Testbetrieb. Keine Zusicherung zu Verfügbarkeit oder Datenhaltung.

Authentifizierung

HTTP-Header
X-API-Key: 32a378069e094f7f00b2c421b4edb431
401
Fehlt oder ungültig

Jede Anfrage braucht diesen Schlüssel. Ungültige Anfragen werden vor der Verarbeitung abgewiesen.

Ratenbegrenzung

Pro API-Schlüssel gelten zwei Grenzen:

ZeitraumAnfragen
1 Minute20
24 Stunden500

Wird eine Grenze überschritten, antwortet die API mit 429 und setzt den Header Retry-After auf die Anzahl Sekunden bis zur nächsten erlaubten Anfrage. Die Grenzen gelten für beide Endpoints gemeinsam.

Endpoint

POST/convertXProzess in BPMN umwandeln

Anfrage

Methode
POST
Pfad
/convert (relativ zur Basis-URL, vollständig also /fim-konverter/v1/convert)
Header
X-API-Key: 32a378069e094f7f00b2c421b4edb431
Körper
XProzess-Datei als Text
Maximalgröße
5 MB

Ein Content-Type ist nicht erforderlich. application/xml ist dennoch sinnvoll, weil er den Inhalt beschreibt.

Beispiel
curl -X POST \
  -H "X-API-Key: DEIN_SCHLUESSEL" \
  -H "Content-Type: application/xml" \
  --data-binary @prozess.xprozess.xml \
  https://api.fimtek.dev/fim-konverter/v1/convert

Antwort

200Konvertierung erfolgreich
{
  "bpmn": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<definitions …>…</definitions>",
  "warnings": []
}
FeldTypBedeutung
bpmnstringVollständiges BPMN-2.0-Dokument als XML
warningsarrayAuffälligkeiten; leer, wenn alles glatt lief

Zuordnung der FIM-Daten

Prozessebene

<collaboration>, ersatzweise der einzige <process>

Aktivitätengruppe

<subProcess> mit passender ID, zugeordnet über subProcessId

<subProcess id="_27356b24-7f40-4bcd-b2c4-3453c37494e8" name="Fristwahrung prüfen">
  <extensionElements>
    <fim:id>05</fim:id>
    <fim:name>Fristwahrung prüfen</fim:name>
    <fim:referenzaktivitaetengruppeTyp code="3"
      listURI="urn:xoev-de:fim:codeliste:referenzaktivitaetengruppe"
      listVersionID="20230301"/>
    <fim:handlungsgrundlage>
      <fim:name>§ 5 (1) 21. BImSchV</fim:name>
      <fim:art code="111" listURI="urn:xoev-de:fim:codeliste:handlungsgrundlagenart" listVersionID="20230301"/>
      <fim:uri>https://www.gesetze-im-internet.de/bimschv_21/__5.html</fim:uri>
    </fim:handlungsgrundlage>
  </extensionElements>
</subProcess>

Namespace

xmlns:fim="http://fim-bpmn.org/schema/1.0"

Abbildungsregeln

  • Einfache Werte werden Elementinhalt.
  • Codelisten werden Attribute.
  • Verschachtelte Strukturen bleiben verschachtelt.

Die Umwandlung ist wiederholbar: Dieselbe Eingabe erzeugt dieselbe Ausgabe. Eine erneute Befüllung bereits konvertierter Daten verändert nichts.

POST /triples

POST/triplesXProzess als RDF-Tripel

Liefert dieselbe XProzess-Datei als RDF-Tripel im Turtle-Format, direkt ladbar in einen Triplestore oder Wissensgraphen.

Anders als /convert wird das eingebettete BPMN dabei nicht ausgewertet: Die fachlichen Angaben stammen vollständig aus den XProzess-Daten. Der Endpoint ist dadurch rund doppelt so schnell.

Anfrage

Methode
POST
Pfad
/triples (relativ zur Basis-URL)
Header
X-API-Key: DEIN_SCHLUESSEL
Körper
die XProzess-Datei als Text
Maximalgröße
5 MB
Beispiel
curl -X POST \
  -H "X-API-Key: DEIN_SCHLUESSEL" \
  -H "Content-Type: application/xml" \
  --data-binary @prozess.xprozess.xml \
  https://api.fimtek.dev/fim-konverter/v1/triples
200Content-Type: text/turtle; charset=utf-8

Der Körper ist reines Turtle, kein JSON. Etwaige Warnungen stehen als Kommentarzeilen am Anfang und stören keinen Turtle-Parser:

# [empty-value] Das Element <gueltigkeitszeitraum> ist leer und wird uebersprungen.

Aufbau des Graphen

Prozess und Aktivitätengruppen bekommen eigene IRIs unter der Basis https://fim-bpmn.org/id/. Die Prädikate stammen aus demselben Namespace, der auch im BPMN verwendet wird, mit # als Trenner:

@prefix fim: <http://fim-bpmn.org/schema/1.0#>
Element im GraphenIRI-Muster
Prozesshttps://fim-bpmn.org/id/prozess/{id}
Aktivitätengruppehttps://fim-bpmn.org/id/aktivitaetengruppe/{subProcessId}
Codelisten-Wert{listURI}#{code}

Beispielausgabe (gekürzt)

@prefix fim: <http://fim-bpmn.org/schema/1.0#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.

<https://fim-bpmn.org/id/prozess/99063072261000>
    a fim:Prozess;
    rdfs:label "Anlage zur Betankung von Kraftfahrzeugen";
    fim:id "99063072261000";
    fim:version "01.00.00";
    fim:aktivitaetengruppe <https://fim-bpmn.org/id/aktivitaetengruppe/_27356b24>.

<https://fim-bpmn.org/id/aktivitaetengruppe/_27356b24>
    a fim:Aktivitaetengruppe;
    rdfs:label "Fristwahrung prüfen";
    fim:subProcessId "_27356b24";
    fim:handlungsgrundlage _:b63.

_:b63 fim:name "§ 5 (1) 21. BImSchV";
    fim:art <urn:xoev-de:fim:codeliste:handlungsgrundlagenart#111>.

<urn:xoev-de:fim:codeliste:handlungsgrundlagenart#111>
    a fim:Code;
    fim:code "111";
    fim:codeliste <urn:xoev-de:fim:codeliste:handlungsgrundlagenart>;
    fim:listVersionID "20230301".

Abbildungsregeln

  • Einfache Werte werden zum Elementinhalt eines Literals.
  • Codelisten-Werte werden zu eigenen Ressourcen, gebildet aus listURI und dem Code. Dadurch lassen sie sich später mit der offiziellen Codeliste verknüpfen, ohne die Daten erneut zu konvertieren.
  • Verschachtelte Strukturen werden zu Blank Nodes.
  • Mehrfach vorkommende Felder ergeben mehrere Tripel. Ihre Reihenfolge geht dabei verloren, weil RDF keine Reihenfolge kennt.
  • fim:subProcessId bleibt als Literal erhalten und ist die Brücke zum BPMN-Ergebnis aus /convert.

Die Referenzdatei ergibt 445 Tripel: ein Prozess, zehn Aktivitätengruppen und 41 beschriebene Codelisten-Werte aus zwölf Listen.

Die Fehlerantworten sind dieselben wie bei /convert und kommen als JSON, auch wenn der Erfolgsfall Turtle liefert.

Warnungen

Warnungen brechen die Umwandlung nicht ab. Für programmatische Reaktionen ist "code" maßgeblich; der Meldungstext kann sich ändern.

{
  "code": "empty-value",
  "message": "Das Element <gueltigkeitszeitraum> ist leer und wird uebersprungen.",
  "path": ["zustandsangaben", "gueltigkeitszeitraum"]
}
CodeBedeutung
empty-valueLeeres Element wurde ausgelassen
version-signals-conflictVersionsangaben widersprechen sich; verarbeitet wurde als 2.0
unexpected-embedded-contentArchiv enthielt mehr als die BPMN-Datei
missing-subprocess-idAktivitätengruppe ohne subProcessId wurde übersprungen
duplicate-subprocess-idDoppelte subProcessId; nur die erste wurde übernommen
subprocess-not-foundVerwiesener subProcess existiert nicht im BPMN
missing-process-idNur /triples: Der Prozess hat keine id und bekommt im Graphen keinen stabilen Namen.
code-without-listNur /triples: Ein Codelisten-Wert hat keine listURI und bleibt deshalb ein Literal statt einer verknüpfbaren IRI.

Fehler

Alle Fehlerantworten haben dieselbe Form:

{ "error": "Beschreibung des Problems" }
StatusBedeutungBeispiel
400Datei ist unbrauchbarXML ist nicht wohlgeformt …
401Schlüssel fehlt oder ist falschKein oder falscher API-Schluessel.
413Körper ist größer als 5 MBDie Anfrage ist groesser als 5242880 Bytes.
429Zu viele AnfragenZu viele Anfragen. Erlaubt sind 20 Anfragen pro Minute. Erneut versuchen in 34 Sekunden.
500Fehler im DienstInterner Fehler.

Bei 400 nennt die Meldung die Ursache so genau wie möglich, einschließlich Zeile und Spalte. Bei 500 bleibt sie bewusst unspezifisch.

Typische 400er

  • Körper leer
  • XML nicht wohlgeformt
  • Keine XProzess-2.0-Datei
  • Kein eingebettetes BPMN
404 — Unbekannte Pfade antworten mit 404, sofern ein gültiger Schlüssel mitgeschickt wurde. Ohne gültigen Schlüssel kommt 401, weil die Schlüsselprüfung vor dem Routing greift. Beide Antworten sind Klartext, kein JSON. Dasselbe gilt für eine falsche Methode: GET auf /convert oder /triples antwortet mit 404, nicht mit 405.

Grenzen

XProzess 2.0

Nur der Namespace http://www.regierung-mv.de/xprozess/2 wird verarbeitet. Andere Versionen werden mit 400 abgelehnt.

Codelisten

Codes werden nicht aufgelöst. Ihre Bedeutung bleibt über listURI referenziert.

BPMN-Referenzen

Kaputte Referenzen im eingebetteten BPMN werden nicht repariert.

bpmn-js

Ein moddle-Deskriptor wird nicht mitgeliefert und muss beim Einlesen separat bereitgestellt werden.

Herstellerdaten

Herstellerspezifische Erweiterungen aus dem Exportwerkzeug sind im Ergebnis nicht mehr enthalten. Wer sie braucht, findet sie unverändert in der XProzess-Quelldatei.