Authentifizierung
X-API-Key: 32a378069e094f7f00b2c421b4edb431Jede Anfrage braucht diesen Schlüssel. Ungültige Anfragen werden vor der Verarbeitung abgewiesen.
Ratenbegrenzung
Pro API-Schlüssel gelten zwei Grenzen:
| Zeitraum | Anfragen |
|---|---|
| 1 Minute | 20 |
| 24 Stunden | 500 |
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
/convertXProzess in BPMN umwandelnAnfrage
- 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.
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/convertAntwort
{
"bpmn": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<definitions …>…</definitions>",
"warnings": []
}| Feld | Typ | Bedeutung |
|---|---|---|
| bpmn | string | Vollständiges BPMN-2.0-Dokument als XML |
| warnings | array | Auffälligkeiten; leer, wenn alles glatt lief |
Zuordnung der FIM-Daten
<collaboration>, ersatzweise der einzige <process>
<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
/triplesXProzess als RDF-TripelLiefert 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
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/triplesDer 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 Graphen | IRI-Muster |
|---|---|
| Prozess | https://fim-bpmn.org/id/prozess/{id} |
| Aktivitätengruppe | https://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:subProcessIdbleibt 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"]
}| Code | Bedeutung |
|---|---|
| empty-value | Leeres Element wurde ausgelassen |
| version-signals-conflict | Versionsangaben widersprechen sich; verarbeitet wurde als 2.0 |
| unexpected-embedded-content | Archiv enthielt mehr als die BPMN-Datei |
| missing-subprocess-id | Aktivitätengruppe ohne subProcessId wurde übersprungen |
| duplicate-subprocess-id | Doppelte subProcessId; nur die erste wurde übernommen |
| subprocess-not-found | Verwiesener subProcess existiert nicht im BPMN |
| missing-process-id | Nur /triples: Der Prozess hat keine id und bekommt im Graphen keinen stabilen Namen. |
| code-without-list | Nur /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" }| Status | Bedeutung | Beispiel |
|---|---|---|
| 400 | Datei ist unbrauchbar | XML ist nicht wohlgeformt … |
| 401 | Schlüssel fehlt oder ist falsch | Kein oder falscher API-Schluessel. |
| 413 | Körper ist größer als 5 MB | Die Anfrage ist groesser als 5242880 Bytes. |
| 429 | Zu viele Anfragen | Zu viele Anfragen. Erlaubt sind 20 Anfragen pro Minute. Erneut versuchen in 34 Sekunden. |
| 500 | Fehler im Dienst | Interner 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
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.