diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..87d6693 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,25 @@ +name: CI + +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + xmllint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Enable annotations for XML validation errors and warnings + uses: korelstar/xmllint-problem-matcher@v1 + - name: Validate example.bpmn using BPMN20.xsd + id: xmllint + uses: ChristophWurst/xmllint-action@v1 + with: + xml-file: example.bpmn + xml-schema-file: BPMN/BPMN20.xsd \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c10c081 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "xml.references": [ + { + "pattern": "**/*.bpmn", + "expressions": [ + { + "from": "BPMNShape/@iconRef", + "to": "iconDefinition/@id" + } + ] + } + ] +} \ No newline at end of file diff --git a/BPMN/BPMN20.xsd b/BPMN/BPMN20.xsd new file mode 100755 index 0000000..463ef6e --- /dev/null +++ b/BPMN/BPMN20.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BPMN/BPMNDI.xsd b/BPMN/BPMNDI.xsd new file mode 100755 index 0000000..615740f --- /dev/null +++ b/BPMN/BPMNDI.xsd @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BPMN/DC.xsd b/BPMN/DC.xsd new file mode 100755 index 0000000..80e9fa8 --- /dev/null +++ b/BPMN/DC.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BPMN/DI.xsd b/BPMN/DI.xsd new file mode 100755 index 0000000..4023d28 --- /dev/null +++ b/BPMN/DI.xsd @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BPMN/Semantic.xsd b/BPMN/Semantic.xsd new file mode 100755 index 0000000..1c611da --- /dev/null +++ b/BPMN/Semantic.xsd @@ -0,0 +1,1562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BPMN20-with-Icon.xsd b/BPMN20-with-Icon.xsd new file mode 100644 index 0000000..28d8b02 --- /dev/null +++ b/BPMN20-with-Icon.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/BPMNDI-with-iconRef.xsd b/BPMNDI-with-iconRef.xsd new file mode 100644 index 0000000..5c5c49d --- /dev/null +++ b/BPMNDI-with-iconRef.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 46cd361..06e89a9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,51 @@ -# bpmn-icon -BPMN 2.0 Extension for interchanging Custom Icons +# BPMN Icon Extension (bpmn-icon) + +This specification defines an extension of BPMN 2.0 for interchanging custom icons. +It uses the [extension mechanism of BPMN](https://www.omg.org/spec/BPMN/2.0.2/PDF#page=72) +to transport additional markers, which are explicitly permitted in +[section 2.2.3 Visual Appearance](https://www.omg.org/spec/BPMN/2.0.2/PDF#page=38). + +## Design considerations + +The placement of the icons in the rendered diagram is not specified in this extension +and is deliberately left for to tool vendors to decide. + +The icon is stored using the +[Data URI Scheme (RFC2397)](https://en.wikipedia.org/wiki/Data_URI_scheme) +because that is widely supported by many tools, +e.g. by SVG which is used by many tools for rendering BPMN. + +SVG icons with no fill are prefered. For pixel graphics prefer transparent PNGs. + +Since icons are relatively large, especially when not using vector graphics, +they should be reusable and placed in a central place in the XML serialization. + +The extension should allow attaching custom icons to any BPMN element, +i.e. icons cannot be embedded in elements like `bpmn:Interface` +because only some of the BPMN elements use that element. + +Unfortunately, neither the top-level `bpmn:definitions` not the `bpmndi:BPMNDiagram` +containers permit `extensionElements`. +Therefore, this extension uses a top-level `bpmn:relationship` as a container, e.g. + +```xml + + ... + + + + + IconExample + IconExample + + +``` + +The relationship's `source` and `target` MUST point to the `id` of the `bpmn:definitions` root element. +Note that the [relationship XML example in the BPMN specification text](https://www.omg.org/spec/BPMN/2.0/PDF#page=93) is not schema-valid. + +Icons are referenced from `BPMNDiagramElements` using `icon:iconRef`: + +```xml + +``` \ No newline at end of file diff --git a/bpmn-icon.xsd b/bpmn-icon.xsd new file mode 100644 index 0000000..2325698 --- /dev/null +++ b/bpmn-icon.xsd @@ -0,0 +1,42 @@ + + + + + This XML schema defines and documents an extension of BPMN 2.0 + for interchanging custom icons. + + + + + + + This element defines a custom icon + and is meant to be placed inside + the bpmn:extensionElements of a bpmn:relationship. + + + + + + + + + + + + + This attribute points to the id of the iconDefinition + and is meant to be placed inside the bpmndi:BPMNShape element. + It is of type xs:QName to allow for referencing iconDefinitions + that are imported from another BPMN file using bpmn:import. + + + + + diff --git a/example.bpmn b/example.bpmn new file mode 100644 index 0000000..010dc14 --- /dev/null +++ b/example.bpmn @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + IconExample + IconExample + +