@bpmn-ld/bpmn-ld 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +125 -2
- package/contexts/combined.jsonld +3 -0
- package/contexts/core.jsonld +170 -0
- package/contexts/di.jsonld +37 -0
- package/dist/analyze/analyze.d.ts +3 -0
- package/dist/analyze/analyze.js +11 -0
- package/dist/analyze/findings.d.ts +8 -0
- package/dist/analyze/findings.js +1 -0
- package/dist/analyze/report.d.ts +3 -0
- package/dist/analyze/report.js +9 -0
- package/dist/analyze/rules/ad-hoc-completion-condition.d.ts +2 -0
- package/dist/analyze/rules/ad-hoc-completion-condition.js +7 -0
- package/dist/analyze/rules/cannot-reach-end.d.ts +2 -0
- package/dist/analyze/rules/cannot-reach-end.js +28 -0
- package/dist/analyze/rules/compensation-association.d.ts +2 -0
- package/dist/analyze/rules/compensation-association.js +13 -0
- package/dist/analyze/rules/dead-end.d.ts +2 -0
- package/dist/analyze/rules/dead-end.js +13 -0
- package/dist/analyze/rules/end-event.d.ts +2 -0
- package/dist/analyze/rules/end-event.js +8 -0
- package/dist/analyze/rules/error-catch.d.ts +2 -0
- package/dist/analyze/rules/error-catch.js +14 -0
- package/dist/analyze/rules/escalation-catch.d.ts +2 -0
- package/dist/analyze/rules/escalation-catch.js +14 -0
- package/dist/analyze/rules/gateway-cardinality.d.ts +3 -0
- package/dist/analyze/rules/gateway-cardinality.js +17 -0
- package/dist/analyze/rules/index.d.ts +4 -0
- package/dist/analyze/rules/index.js +21 -0
- package/dist/analyze/rules/instantiating-gateway.d.ts +2 -0
- package/dist/analyze/rules/instantiating-gateway.js +14 -0
- package/dist/analyze/rules/non-interrupting-start.d.ts +2 -0
- package/dist/analyze/rules/non-interrupting-start.js +14 -0
- package/dist/analyze/rules/reachability.d.ts +2 -0
- package/dist/analyze/rules/reachability.js +25 -0
- package/dist/analyze/rules/rule.d.ts +7 -0
- package/dist/analyze/rules/rule.js +1 -0
- package/dist/analyze/rules/signal-catch.d.ts +2 -0
- package/dist/analyze/rules/signal-catch.js +12 -0
- package/dist/analyze/rules/split-join-pairing.d.ts +3 -0
- package/dist/analyze/rules/split-join-pairing.js +50 -0
- package/dist/analyze/rules/start-event.d.ts +2 -0
- package/dist/analyze/rules/start-event.js +8 -0
- package/dist/analyze/rules/task-message-flow.d.ts +2 -0
- package/dist/analyze/rules/task-message-flow.js +19 -0
- package/dist/analyze/scope-graph.d.ts +56 -0
- package/dist/analyze/scope-graph.js +89 -0
- package/dist/analyze-cli.d.ts +1 -0
- package/dist/analyze-cli.js +5 -0
- package/dist/analyze-run.d.ts +12 -0
- package/dist/analyze-run.js +85 -0
- package/dist/bpmn-ld-cli.d.ts +2 -0
- package/dist/bpmn-ld-cli.js +97 -0
- package/dist/build-cli.d.ts +1 -0
- package/dist/build-cli.js +2 -0
- package/dist/build.d.ts +3 -0
- package/dist/build.js +38 -0
- package/dist/cheat-sheet-catalog.d.ts +10 -0
- package/dist/cheat-sheet-catalog.js +72 -0
- package/dist/cheat-sheet-cli.d.ts +1 -0
- package/dist/cheat-sheet-cli.js +7 -0
- package/dist/cheat-sheet-compose.d.ts +13 -0
- package/dist/cheat-sheet-compose.js +107 -0
- package/dist/cheat-sheet-run.d.ts +11 -0
- package/dist/cheat-sheet-run.js +65 -0
- package/dist/cheat-sheet-svg.d.ts +2 -0
- package/dist/cheat-sheet-svg.js +2 -0
- package/dist/cheat-sheet.d.ts +2 -0
- package/dist/cheat-sheet.js +2 -0
- package/dist/check-xml/check.d.ts +3 -0
- package/dist/check-xml/check.js +11 -0
- package/dist/check-xml/lint.d.ts +2 -0
- package/dist/check-xml/lint.js +47 -0
- package/dist/check-xml/moddle.d.ts +6 -0
- package/dist/check-xml/moddle.js +23 -0
- package/dist/check-xml/types.d.ts +20 -0
- package/dist/check-xml/types.js +1 -0
- package/dist/check-xml/xsd.d.ts +2 -0
- package/dist/check-xml/xsd.js +25 -0
- package/dist/check-xml-cli.d.ts +1 -0
- package/dist/check-xml-cli.js +5 -0
- package/dist/check-xml-run.d.ts +10 -0
- package/dist/check-xml-run.js +77 -0
- package/dist/convert/analyze-output.d.ts +3 -0
- package/dist/convert/analyze-output.js +8 -0
- package/dist/convert/convert.d.ts +19 -0
- package/dist/convert/convert.js +96 -0
- package/dist/convert/errors.d.ts +5 -0
- package/dist/convert/errors.js +8 -0
- package/dist/convert/extensions.d.ts +23 -0
- package/dist/convert/extensions.js +103 -0
- package/dist/convert/mapping-check.d.ts +15 -0
- package/dist/convert/mapping-check.js +66 -0
- package/dist/convert/mapping.d.ts +52 -0
- package/dist/convert/mapping.js +273 -0
- package/dist/convert/namespaces.d.ts +2 -0
- package/dist/convert/namespaces.js +19 -0
- package/dist/convert/validate-output.d.ts +2 -0
- package/dist/convert/validate-output.js +28 -0
- package/dist/convert/warnings.d.ts +9 -0
- package/dist/convert/warnings.js +67 -0
- package/dist/convert/xml-reader.d.ts +11 -0
- package/dist/convert/xml-reader.js +84 -0
- package/dist/convert-cli.d.ts +1 -0
- package/dist/convert-cli.js +5 -0
- package/dist/convert-run.d.ts +10 -0
- package/dist/convert-run.js +125 -0
- package/dist/coverage-cli.d.ts +1 -0
- package/dist/coverage-cli.js +8 -0
- package/dist/coverage-mappings.d.ts +3 -0
- package/dist/coverage-mappings.js +34 -0
- package/dist/coverage-scope.d.ts +11 -0
- package/dist/coverage-scope.js +187 -0
- package/dist/coverage-xsd.d.ts +15 -0
- package/dist/coverage-xsd.js +55 -0
- package/dist/coverage.d.ts +35 -0
- package/dist/coverage.js +152 -0
- package/dist/docs-cli.d.ts +1 -0
- package/dist/docs-cli.js +18 -0
- package/dist/docs.d.ts +8 -0
- package/dist/docs.js +136 -0
- package/dist/eval/checks.d.ts +19 -0
- package/dist/eval/checks.js +252 -0
- package/dist/eval/regenerate.d.ts +10 -0
- package/dist/eval/regenerate.js +48 -0
- package/dist/eval-regenerate-cli.d.ts +1 -0
- package/dist/eval-regenerate-cli.js +16 -0
- package/dist/export/data.d.ts +10 -0
- package/dist/export/data.js +127 -0
- package/dist/export/diagram.d.ts +8 -0
- package/dist/export/diagram.js +112 -0
- package/dist/export/element.d.ts +27 -0
- package/dist/export/element.js +175 -0
- package/dist/export/export.d.ts +22 -0
- package/dist/export/export.js +124 -0
- package/dist/export/extensions.d.ts +18 -0
- package/dist/export/extensions.js +122 -0
- package/dist/export/layout-export.d.ts +4 -0
- package/dist/export/layout-export.js +25 -0
- package/dist/export/mapping-check.d.ts +39 -0
- package/dist/export/mapping-check.js +175 -0
- package/dist/export/normalize.d.ts +3 -0
- package/dist/export/normalize.js +67 -0
- package/dist/export-cli.d.ts +1 -0
- package/dist/export-cli.js +5 -0
- package/dist/export-run.d.ts +10 -0
- package/dist/export-run.js +157 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/install-skill-run.d.ts +8 -0
- package/dist/install-skill-run.js +30 -0
- package/dist/install-skill.d.ts +23 -0
- package/dist/install-skill.js +76 -0
- package/dist/layout/collaboration.d.ts +36 -0
- package/dist/layout/collaboration.js +152 -0
- package/dist/layout/di.d.ts +15 -0
- package/dist/layout/di.js +52 -0
- package/dist/layout/extract.d.ts +2 -0
- package/dist/layout/extract.js +99 -0
- package/dist/layout/lanes.d.ts +30 -0
- package/dist/layout/lanes.js +112 -0
- package/dist/layout/layering.d.ts +7 -0
- package/dist/layout/layering.js +53 -0
- package/dist/layout/layout.d.ts +12 -0
- package/dist/layout/layout.js +299 -0
- package/dist/layout/model.d.ts +52 -0
- package/dist/layout/model.js +10 -0
- package/dist/layout/placement.d.ts +25 -0
- package/dist/layout/placement.js +256 -0
- package/dist/layout/standalone.d.ts +8 -0
- package/dist/layout/standalone.js +50 -0
- package/dist/layout-cli.d.ts +1 -0
- package/dist/layout-cli.js +5 -0
- package/dist/layout-run.d.ts +9 -0
- package/dist/layout-run.js +105 -0
- package/dist/loader.d.ts +5 -0
- package/dist/loader.js +7 -0
- package/dist/namespace.d.ts +5 -0
- package/dist/namespace.js +5 -0
- package/dist/ontology.d.ts +19 -0
- package/dist/ontology.js +94 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.js +2 -0
- package/dist/render/geometry.d.ts +40 -0
- package/dist/render/geometry.js +81 -0
- package/dist/render/renderer.d.ts +31 -0
- package/dist/render/renderer.js +369 -0
- package/dist/render/symbols.d.ts +10 -0
- package/dist/render/symbols.js +26 -0
- package/dist/render/text.d.ts +20 -0
- package/dist/render/text.js +28 -0
- package/dist/render-cli.d.ts +1 -0
- package/dist/render-cli.js +7 -0
- package/dist/render-run.d.ts +9 -0
- package/dist/render-run.js +161 -0
- package/dist/render.d.ts +4 -0
- package/dist/render.js +4 -0
- package/dist/schema-overrides.d.ts +14 -0
- package/dist/schema-overrides.js +36 -0
- package/dist/schema-validate.d.ts +5 -0
- package/dist/schema-validate.js +8 -0
- package/dist/schema.d.ts +6 -0
- package/dist/schema.js +114 -0
- package/dist/shacl.d.ts +15 -0
- package/dist/shacl.js +37 -0
- package/dist/validate-cli.d.ts +1 -0
- package/dist/validate-cli.js +5 -0
- package/dist/validate-run.d.ts +8 -0
- package/dist/validate-run.js +58 -0
- package/dist/validate.d.ts +11 -0
- package/dist/validate.js +94 -0
- package/dist/versioning-cli.d.ts +1 -0
- package/dist/versioning-cli.js +18 -0
- package/dist/versioning.d.ts +17 -0
- package/dist/versioning.js +45 -0
- package/ontology/core.ttl +993 -0
- package/ontology/di.ttl +167 -0
- package/package.json +77 -4
- package/reference/bpmn-xsd/BPMN20.xsd +37 -0
- package/reference/bpmn-xsd/BPMNDI.xsd +100 -0
- package/reference/bpmn-xsd/DC.xsd +29 -0
- package/reference/bpmn-xsd/DI.xsd +100 -0
- package/reference/bpmn-xsd/Semantic.xsd +1562 -0
- package/reference/rospocher/ATTRIBUTION.md +22 -0
- package/reference/rospocher/BPMNOntology.owl +8937 -0
- package/reference/rospocher-verified.json +221 -0
- package/schema/bpmn-ld.schema.json +15230 -0
- package/shapes/core.shapes.ttl +398 -0
- package/skills/bpmn-ld/SKILL.md +154 -0
- package/skills/bpmn-ld/evals/models/order-approval-di.jsonld +296 -0
- package/skills/bpmn-ld/evals/models/refund-di.bpmn +82 -0
- package/skills/bpmn-ld/evals/models/refund.bpmn +18 -0
- package/skills/bpmn-ld/evals/outputs/explain-collaboration.md +22 -0
- package/skills/bpmn-ld/evals/outputs/explain-order-approval.md +24 -0
- package/skills/bpmn-ld/evals/outputs/explain-refund.md +17 -0
- package/skills/bpmn-ld/evals/outputs/generate-activity-compensation.jsonld +39 -0
- package/skills/bpmn-ld/evals/outputs/generate-ad-hoc-sub-process.jsonld +52 -0
- package/skills/bpmn-ld/evals/outputs/generate-boundary-event.jsonld +27 -0
- package/skills/bpmn-ld/evals/outputs/generate-collaboration.jsonld +49 -0
- package/skills/bpmn-ld/evals/outputs/generate-conditions.jsonld +93 -0
- package/skills/bpmn-ld/evals/outputs/generate-diagram-properties.jsonld +340 -0
- package/skills/bpmn-ld/evals/outputs/generate-error.jsonld +217 -0
- package/skills/bpmn-ld/evals/outputs/generate-escalation.jsonld +231 -0
- package/skills/bpmn-ld/evals/outputs/generate-event-definition-ref.jsonld +67 -0
- package/skills/bpmn-ld/evals/outputs/generate-event-sub-process.jsonld +54 -0
- package/skills/bpmn-ld/evals/outputs/generate-exclusive-choice.jsonld +32 -0
- package/skills/bpmn-ld/evals/outputs/generate-instantiating-gateway.jsonld +24 -0
- package/skills/bpmn-ld/evals/outputs/generate-lane-partition.jsonld +46 -0
- package/skills/bpmn-ld/evals/outputs/generate-link-event.expect.json +11 -0
- package/skills/bpmn-ld/evals/outputs/generate-link-event.jsonld +57 -0
- package/skills/bpmn-ld/evals/outputs/generate-loop.jsonld +30 -0
- package/skills/bpmn-ld/evals/outputs/generate-message.jsonld +61 -0
- package/skills/bpmn-ld/evals/outputs/generate-parallel-branches.jsonld +25 -0
- package/skills/bpmn-ld/evals/outputs/generate-process-attributes.jsonld +49 -0
- package/skills/bpmn-ld/evals/outputs/generate-script-task.jsonld +18 -0
- package/skills/bpmn-ld/evals/outputs/generate-signal.jsonld +178 -0
- package/skills/bpmn-ld/evals/outputs/generate-sub-process.jsonld +31 -0
- package/skills/bpmn-ld/evals/outputs/generate-targeted-compensation.jsonld +40 -0
- package/skills/bpmn-ld/evals/outputs/generate-task-implementation.jsonld +18 -0
- package/skills/bpmn-ld/evals/outputs/generate-task-message-references.jsonld +49 -0
- package/skills/bpmn-ld/evals/outputs/generate-transaction.jsonld +48 -0
- package/skills/bpmn-ld/evals/outputs/modify-order-approval.jsonld +376 -0
- package/skills/bpmn-ld/evals/outputs/modify-refund.jsonld +373 -0
- package/skills/bpmn-ld/evals/outputs/order-approval.jsonld +29 -0
- package/skills/bpmn-ld/evals/outputs/refine-order-approval.jsonld +377 -0
- package/skills/bpmn-ld/evals/prompts/explain-collaboration.md +3 -0
- package/skills/bpmn-ld/evals/prompts/explain-order-approval.md +3 -0
- package/skills/bpmn-ld/evals/prompts/explain-refund.md +3 -0
- package/skills/bpmn-ld/evals/prompts/generate-activity-compensation.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-ad-hoc-sub-process.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-boundary-event.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-collaboration.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-conditions.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-diagram-properties.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-error.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-escalation.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-event-definition-ref.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-event-sub-process.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-exclusive-choice.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-instantiating-gateway.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-lane-partition.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-link-event.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-loop.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-message.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-parallel-branches.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-process-attributes.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-script-task.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-signal.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-sub-process.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-targeted-compensation.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-task-implementation.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-task-message-references.md +1 -0
- package/skills/bpmn-ld/evals/prompts/generate-transaction.md +1 -0
- package/skills/bpmn-ld/evals/prompts/modify-order-approval.md +4 -0
- package/skills/bpmn-ld/evals/prompts/modify-refund.md +4 -0
- package/skills/bpmn-ld/evals/prompts/order-approval.md +1 -0
- package/skills/bpmn-ld/evals/prompts/refine-order-approval.md +8 -0
- package/skills/bpmn-ld/examples/positive/activity-compensation.jsonld +39 -0
- package/skills/bpmn-ld/examples/positive/ad-hoc-sub-process.jsonld +52 -0
- package/skills/bpmn-ld/examples/positive/boundary-event.jsonld +27 -0
- package/skills/bpmn-ld/examples/positive/collaboration.jsonld +49 -0
- package/skills/bpmn-ld/examples/positive/conditions.jsonld +93 -0
- package/skills/bpmn-ld/examples/positive/diagram-properties.jsonld +340 -0
- package/skills/bpmn-ld/examples/positive/error.jsonld +208 -0
- package/skills/bpmn-ld/examples/positive/escalation.jsonld +231 -0
- package/skills/bpmn-ld/examples/positive/event-definition-ref.jsonld +142 -0
- package/skills/bpmn-ld/examples/positive/event-sub-process.jsonld +54 -0
- package/skills/bpmn-ld/examples/positive/exclusive-choice.jsonld +32 -0
- package/skills/bpmn-ld/examples/positive/instantiating-gateway.jsonld +24 -0
- package/skills/bpmn-ld/examples/positive/lane-partition.jsonld +46 -0
- package/skills/bpmn-ld/examples/positive/link-event.expect.json +10 -0
- package/skills/bpmn-ld/examples/positive/link-event.jsonld +138 -0
- package/skills/bpmn-ld/examples/positive/loop.jsonld +30 -0
- package/skills/bpmn-ld/examples/positive/message.jsonld +60 -0
- package/skills/bpmn-ld/examples/positive/order-approval.jsonld +29 -0
- package/skills/bpmn-ld/examples/positive/parallel-branches.jsonld +25 -0
- package/skills/bpmn-ld/examples/positive/process-attributes.jsonld +49 -0
- package/skills/bpmn-ld/examples/positive/script-task.jsonld +18 -0
- package/skills/bpmn-ld/examples/positive/signal.jsonld +150 -0
- package/skills/bpmn-ld/examples/positive/sub-process.jsonld +31 -0
- package/skills/bpmn-ld/examples/positive/targeted-compensation.jsonld +40 -0
- package/skills/bpmn-ld/examples/positive/task-implementation.jsonld +18 -0
- package/skills/bpmn-ld/examples/positive/task-message-references.jsonld +151 -0
- package/skills/bpmn-ld/examples/positive/transaction.jsonld +48 -0
- package/skills/bpmn-ld/references/clarification-and-refinement.md +60 -0
- package/skills/bpmn-ld/references/common-mistakes.md +110 -0
- package/skills/bpmn-ld/references/explain-and-document.md +36 -0
- package/skills/bpmn-ld/references/modify-existing-model.md +49 -0
- package/skills/bpmn-ld/references/patterns.md +292 -0
- package/skills/bpmn-ld/references/render-output.md +1 -0
- package/skills/bpmn-ld/references/rule-catalogue.md +183 -0
- package/skills/bpmn-ld/references/vocabulary-summary.md +65 -0
- package/skills/bpmn-ld/template.jsonld +14 -0
- package/templates/combined.jsonld +3 -0
- package/templates/core.jsonld +170 -0
- package/templates/core.shapes.ttl +398 -0
- package/templates/core.ttl +993 -0
- package/templates/di.jsonld +37 -0
- package/templates/di.ttl +167 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const EXIT_OK = 0;
|
|
2
|
+
export declare const EXIT_CHECK_FAILED = 1;
|
|
3
|
+
export declare const EXIT_BAD_INPUT = 2;
|
|
4
|
+
export interface CliResult {
|
|
5
|
+
exitCode: number;
|
|
6
|
+
stdout: string;
|
|
7
|
+
stderr: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const USAGE = "Usage: check-xml <input.bpmn> [options]\n\nChecks a BPMN 2.0 XML file with tools independent of this project:\n xsd validation against the normative BPMN 2.0 XSD\n moddle import with bpmn-moddle\n lint bpmnlint with the generic recommended rule set\n\nOptions:\n --json Write the report as JSON to standard output\n -h, --help Show this help\n\nExit codes:\n 0 No check reported an error (warnings are allowed)\n 1 At least one check reported an error\n 2 Usage error or unreadable input\n";
|
|
10
|
+
export declare const runCheckXml: (argv: string[]) => Promise<CliResult>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { checkXml } from "./check-xml/check.js";
|
|
3
|
+
export const EXIT_OK = 0;
|
|
4
|
+
export const EXIT_CHECK_FAILED = 1;
|
|
5
|
+
export const EXIT_BAD_INPUT = 2;
|
|
6
|
+
export const USAGE = `Usage: check-xml <input.bpmn> [options]
|
|
7
|
+
|
|
8
|
+
Checks a BPMN 2.0 XML file with tools independent of this project:
|
|
9
|
+
xsd validation against the normative BPMN 2.0 XSD
|
|
10
|
+
moddle import with bpmn-moddle
|
|
11
|
+
lint bpmnlint with the generic recommended rule set
|
|
12
|
+
|
|
13
|
+
Options:
|
|
14
|
+
--json Write the report as JSON to standard output
|
|
15
|
+
-h, --help Show this help
|
|
16
|
+
|
|
17
|
+
Exit codes:
|
|
18
|
+
0 No check reported an error (warnings are allowed)
|
|
19
|
+
1 At least one check reported an error
|
|
20
|
+
2 Usage error or unreadable input
|
|
21
|
+
`;
|
|
22
|
+
class UsageError extends Error {
|
|
23
|
+
}
|
|
24
|
+
const parseArgs = (argv) => {
|
|
25
|
+
let input;
|
|
26
|
+
let json = false;
|
|
27
|
+
for (const arg of argv) {
|
|
28
|
+
if (arg === "-h" || arg === "--help")
|
|
29
|
+
return "help";
|
|
30
|
+
else if (arg === "--json")
|
|
31
|
+
json = true;
|
|
32
|
+
else if (arg.startsWith("-"))
|
|
33
|
+
throw new UsageError(`unknown option ${arg}`);
|
|
34
|
+
else if (input !== undefined)
|
|
35
|
+
throw new UsageError(`unexpected extra argument ${arg}`);
|
|
36
|
+
else
|
|
37
|
+
input = arg;
|
|
38
|
+
}
|
|
39
|
+
if (input === undefined)
|
|
40
|
+
throw new UsageError("missing input file");
|
|
41
|
+
return { input, json };
|
|
42
|
+
};
|
|
43
|
+
const readText = (path) => {
|
|
44
|
+
try {
|
|
45
|
+
return readFileSync(path, "utf8");
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const reason = error.code === "ENOENT" ? "no such file" : (error.message ?? "cannot read");
|
|
49
|
+
throw new UsageError(`cannot read ${path}: ${reason}`);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const formatIssue = (issue) => {
|
|
53
|
+
const rule = issue.rule ? ` [${issue.rule}]` : "";
|
|
54
|
+
const location = issue.location ? ` (${issue.location})` : "";
|
|
55
|
+
return ` ${issue.severity}:${rule} ${issue.message}${location}`;
|
|
56
|
+
};
|
|
57
|
+
const formatText = (report) => Object.entries(report.checks)
|
|
58
|
+
.map(([name, check]) => [`${name}: ${check.status}`, ...check.issues.map(formatIssue)].join("\n"))
|
|
59
|
+
.join("\n") + "\n";
|
|
60
|
+
export const runCheckXml = async (argv) => {
|
|
61
|
+
let options;
|
|
62
|
+
let xml;
|
|
63
|
+
try {
|
|
64
|
+
options = parseArgs(argv);
|
|
65
|
+
if (options === "help")
|
|
66
|
+
return { exitCode: EXIT_OK, stdout: USAGE, stderr: "" };
|
|
67
|
+
xml = readText(options.input);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof UsageError)
|
|
71
|
+
return { exitCode: EXIT_BAD_INPUT, stdout: "", stderr: `error: ${error.message}\n\n${USAGE}` };
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
const report = await checkXml(xml);
|
|
75
|
+
const stdout = options.json ? `${JSON.stringify(report, null, 2)}\n` : formatText(report);
|
|
76
|
+
return { exitCode: report.ok ? EXIT_OK : EXIT_CHECK_FAILED, stdout, stderr: "" };
|
|
77
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { analyze } from "../analyze/analyze.js";
|
|
4
|
+
import { ROOT } from "../paths.js";
|
|
5
|
+
export const analyzeConverted = (document) => {
|
|
6
|
+
const local = { ...document, "@context": [pathToFileURL(join(ROOT, "contexts/combined.jsonld")).href, document["@context"][1]] };
|
|
7
|
+
return analyze(local, document["@context"][1]["@base"]);
|
|
8
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Warning } from "./warnings.ts";
|
|
2
|
+
export interface ConvertOptions {
|
|
3
|
+
base?: string;
|
|
4
|
+
fileName?: string;
|
|
5
|
+
}
|
|
6
|
+
export type { Warning };
|
|
7
|
+
export type Node = Record<string, any>;
|
|
8
|
+
export interface ConvertResult {
|
|
9
|
+
document: {
|
|
10
|
+
"@context": [string, {
|
|
11
|
+
"@base": string;
|
|
12
|
+
} & Record<string, unknown>];
|
|
13
|
+
"@graph": Node[];
|
|
14
|
+
};
|
|
15
|
+
warnings: Warning[];
|
|
16
|
+
}
|
|
17
|
+
export declare const COMBINED_CONTEXT_IRI: string;
|
|
18
|
+
export declare const defaultBase: (fileName?: string) => string;
|
|
19
|
+
export declare const convert: (xml: string, options?: ConvertOptions) => ConvertResult;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { basename, extname } from "node:path";
|
|
2
|
+
import { BPMN_NAMESPACE } from "../namespace.js";
|
|
3
|
+
import { PUBLISH_BASE } from "../versioning.js";
|
|
4
|
+
import { ConversionError } from "./errors.js";
|
|
5
|
+
import { CONTAINMENT, concreteElement, ELEMENT_MAPPINGS, isEmptyRequired, isMapped, MODEL_NAMESPACE, ROOT_ELEMENTS } from "./mapping.js";
|
|
6
|
+
import { extensionProperties, Prefixes } from "./extensions.js";
|
|
7
|
+
import { assertSupportedNamespaces } from "./namespaces.js";
|
|
8
|
+
import { collectWarnings } from "./warnings.js";
|
|
9
|
+
import { readXml } from "./xml-reader.js";
|
|
10
|
+
export const COMBINED_CONTEXT_IRI = `${PUBLISH_BASE}/latest/contexts/combined.jsonld`;
|
|
11
|
+
const DEFAULT_MODEL_NAME = "model";
|
|
12
|
+
export const defaultBase = (fileName) => {
|
|
13
|
+
const name = fileName ? basename(fileName, extname(fileName)) : "";
|
|
14
|
+
return `${new URL(BPMN_NAMESPACE).origin}/models/${encodeURIComponent(name || DEFAULT_MODEL_NAME)}/`;
|
|
15
|
+
};
|
|
16
|
+
const mapElement = (element, root, prefixes) => {
|
|
17
|
+
const mapping = ELEMENT_MAPPINGS[element.name];
|
|
18
|
+
const node = {};
|
|
19
|
+
if (!mapping.anonymous && element.attributes.id !== undefined)
|
|
20
|
+
node.id = element.attributes.id;
|
|
21
|
+
node.type = mapping.type;
|
|
22
|
+
for (const [attribute, term] of Object.entries(mapping.attributes)) {
|
|
23
|
+
if (attribute !== "id" && element.attributes[attribute] !== undefined && element.attributes[attribute] !== "")
|
|
24
|
+
node[term] = element.attributes[attribute];
|
|
25
|
+
}
|
|
26
|
+
for (const attribute of mapping.booleans ?? []) {
|
|
27
|
+
if (node[attribute] !== undefined)
|
|
28
|
+
node[attribute] = node[attribute] === "true";
|
|
29
|
+
}
|
|
30
|
+
for (const attribute of mapping.hashPrefixed ?? []) {
|
|
31
|
+
const value = node[attribute];
|
|
32
|
+
if (typeof value === "string" && value.startsWith("##"))
|
|
33
|
+
node[attribute] = value.slice(2);
|
|
34
|
+
}
|
|
35
|
+
for (const child of element.children) {
|
|
36
|
+
const textTerm = mapping.textChildren?.[child.name];
|
|
37
|
+
if (child.namespace === MODEL_NAMESPACE && textTerm !== undefined)
|
|
38
|
+
node[textTerm] = child.text;
|
|
39
|
+
}
|
|
40
|
+
for (const child of element.children) {
|
|
41
|
+
const listTerm = mapping.textLists?.[child.name];
|
|
42
|
+
if (child.namespace === MODEL_NAMESPACE && listTerm !== undefined)
|
|
43
|
+
(node[listTerm] ??= []).push(child.text);
|
|
44
|
+
}
|
|
45
|
+
for (const lookup of (mapping.lookups ?? []).filter((candidate) => candidate.exportOnly !== true)) {
|
|
46
|
+
const reference = element.attributes[lookup.attribute];
|
|
47
|
+
const target = root.children.find((candidate) => candidate.namespace === MODEL_NAMESPACE && candidate.name === lookup.root && candidate.attributes.id === reference);
|
|
48
|
+
if (target?.attributes[lookup.from] !== undefined)
|
|
49
|
+
node[lookup.term] = target.attributes[lookup.from];
|
|
50
|
+
}
|
|
51
|
+
if (mapping.bodyTerm !== undefined && element.text !== "")
|
|
52
|
+
node[mapping.bodyTerm] = element.text;
|
|
53
|
+
for (const attribute of mapping.numbers ?? []) {
|
|
54
|
+
if (node[attribute] !== undefined)
|
|
55
|
+
node[attribute] = Number(node[attribute]);
|
|
56
|
+
}
|
|
57
|
+
for (const declared of element.children) {
|
|
58
|
+
const single = mapping.singles?.[declared.name];
|
|
59
|
+
const child = concreteElement(declared);
|
|
60
|
+
if (!isMapped(child) || single === undefined || isEmptyRequired(child))
|
|
61
|
+
continue;
|
|
62
|
+
const mapped = mapElement(child, root, prefixes);
|
|
63
|
+
const prefix = mapping.derivedChildIds?.[single];
|
|
64
|
+
if (prefix !== undefined && mapped.id === undefined && node.id !== undefined)
|
|
65
|
+
mapped.id = `${prefix}${node.id}`;
|
|
66
|
+
node[single] = mapped;
|
|
67
|
+
}
|
|
68
|
+
for (const child of element.children) {
|
|
69
|
+
const property = CONTAINMENT[element.name]?.[child.name];
|
|
70
|
+
if (!isMapped(child) || property === undefined)
|
|
71
|
+
continue;
|
|
72
|
+
const members = (node[property] ??= []);
|
|
73
|
+
members.push(mapElement(child, root, prefixes));
|
|
74
|
+
}
|
|
75
|
+
Object.assign(node, extensionProperties(element, prefixes));
|
|
76
|
+
return node;
|
|
77
|
+
};
|
|
78
|
+
export const convert = (xml, options = {}) => {
|
|
79
|
+
const root = readXml(xml);
|
|
80
|
+
assertSupportedNamespaces(root);
|
|
81
|
+
if (root.name !== "definitions" || root.namespace !== MODEL_NAMESPACE) {
|
|
82
|
+
const found = root.namespace ? `{${root.namespace}}${root.name}` : root.name;
|
|
83
|
+
throw new ConversionError("not-bpmn-definitions", `root element is ${found}, expected a definitions element in the BPMN 2.0 model namespace ${MODEL_NAMESPACE}`);
|
|
84
|
+
}
|
|
85
|
+
const prefixes = new Prefixes(root);
|
|
86
|
+
const graph = root.children
|
|
87
|
+
.filter((child) => isMapped(child) && ROOT_ELEMENTS.includes(child.name))
|
|
88
|
+
.map((child) => mapElement(child, root, prefixes));
|
|
89
|
+
return {
|
|
90
|
+
document: {
|
|
91
|
+
"@context": [COMBINED_CONTEXT_IRI, { "@base": options.base ?? defaultBase(options.fileName), ...prefixes.context() }],
|
|
92
|
+
"@graph": graph,
|
|
93
|
+
},
|
|
94
|
+
warnings: collectWarnings(root),
|
|
95
|
+
};
|
|
96
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Warning } from "./warnings.ts";
|
|
2
|
+
import type { XmlElement } from "./xml-reader.ts";
|
|
3
|
+
export type ExtensionValue = string | {
|
|
4
|
+
[property: string]: ExtensionValue | ExtensionValue[];
|
|
5
|
+
};
|
|
6
|
+
type ExtensionProperties = Record<string, ExtensionValue | ExtensionValue[]>;
|
|
7
|
+
export declare const isExtensionNamespace: (namespace: string) => boolean;
|
|
8
|
+
export declare const isExtensionAttribute: (key: string) => boolean;
|
|
9
|
+
export declare class Prefixes {
|
|
10
|
+
private readonly hints;
|
|
11
|
+
private readonly declared;
|
|
12
|
+
private readonly terms;
|
|
13
|
+
private readonly byNamespace;
|
|
14
|
+
private readonly byPrefix;
|
|
15
|
+
private generated;
|
|
16
|
+
constructor(root: XmlElement);
|
|
17
|
+
private available;
|
|
18
|
+
prefixFor(namespace: string): string;
|
|
19
|
+
context(): Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export declare const extensionProperties: (element: XmlElement, prefixes: Prefixes) => ExtensionProperties;
|
|
22
|
+
export declare const extensionWarnings: (container: XmlElement) => Warning[];
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { BPMN_NAMESPACES, MODEL_NAMESPACE, XSI_NAMESPACE } from "./mapping.js";
|
|
2
|
+
import { loadContextTerms } from "./mapping-check.js";
|
|
3
|
+
const ATTRIBUTE_NAMESPACE = /^\{(.*)\}(.*)$/;
|
|
4
|
+
const ABSOLUTE_NAMESPACE = /^[A-Za-z][A-Za-z0-9+.-]*:/;
|
|
5
|
+
const GENERAL_DELIMITER = /[:/?#[\]@]$/;
|
|
6
|
+
const XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace";
|
|
7
|
+
const RESERVED_PREFIXES = ["xml", "xmlns", "xsi"];
|
|
8
|
+
const MIXED_CONTENT = "text content cannot be represented next to attributes or child elements";
|
|
9
|
+
export const isExtensionNamespace = (namespace) => ABSOLUTE_NAMESPACE.test(namespace) && !BPMN_NAMESPACES.includes(namespace) && namespace !== XSI_NAMESPACE && namespace !== XML_NAMESPACE;
|
|
10
|
+
const isIgnoredNamespace = (namespace) => namespace === XSI_NAMESPACE || namespace === XML_NAMESPACE;
|
|
11
|
+
export const isExtensionAttribute = (key) => {
|
|
12
|
+
const match = ATTRIBUTE_NAMESPACE.exec(key);
|
|
13
|
+
return match !== null && isExtensionNamespace(match[1]);
|
|
14
|
+
};
|
|
15
|
+
const walkDeclarations = (element, visit) => {
|
|
16
|
+
element.declarations.forEach(([prefix, namespace]) => visit(prefix, namespace));
|
|
17
|
+
element.children.forEach((child) => walkDeclarations(child, visit));
|
|
18
|
+
};
|
|
19
|
+
export class Prefixes {
|
|
20
|
+
hints = new Map();
|
|
21
|
+
declared = new Set();
|
|
22
|
+
terms = new Set(Object.keys(loadContextTerms()));
|
|
23
|
+
byNamespace = new Map();
|
|
24
|
+
byPrefix = new Map();
|
|
25
|
+
generated = 0;
|
|
26
|
+
constructor(root) {
|
|
27
|
+
walkDeclarations(root, (prefix, namespace) => {
|
|
28
|
+
this.declared.add(prefix);
|
|
29
|
+
if (prefix !== "")
|
|
30
|
+
this.hints.set(namespace, [...(this.hints.get(namespace) ?? []), prefix]);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
available(prefix) {
|
|
34
|
+
return !RESERVED_PREFIXES.includes(prefix) && !this.terms.has(prefix) && !this.byPrefix.has(prefix);
|
|
35
|
+
}
|
|
36
|
+
prefixFor(namespace) {
|
|
37
|
+
const known = this.byNamespace.get(namespace);
|
|
38
|
+
if (known !== undefined)
|
|
39
|
+
return known;
|
|
40
|
+
let prefix = (this.hints.get(namespace) ?? []).find((hint) => this.available(hint));
|
|
41
|
+
while (prefix === undefined) {
|
|
42
|
+
const candidate = `ns${++this.generated}`;
|
|
43
|
+
if (this.available(candidate) && !this.declared.has(candidate))
|
|
44
|
+
prefix = candidate;
|
|
45
|
+
}
|
|
46
|
+
this.byNamespace.set(namespace, prefix);
|
|
47
|
+
this.byPrefix.set(prefix, namespace);
|
|
48
|
+
return prefix;
|
|
49
|
+
}
|
|
50
|
+
context() {
|
|
51
|
+
return Object.fromEntries([...this.byPrefix].map(([prefix, namespace]) => [prefix, GENERAL_DELIMITER.test(namespace) ? namespace : { "@id": namespace, "@prefix": true }]));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const add = (target, name, value) => {
|
|
55
|
+
const existing = target[name];
|
|
56
|
+
target[name] = existing === undefined ? value : [...(Array.isArray(existing) ? existing : [existing]), value];
|
|
57
|
+
};
|
|
58
|
+
const addAttributes = (target, element, prefixes, unqualified) => {
|
|
59
|
+
for (const [key, value] of Object.entries(element.attributes)) {
|
|
60
|
+
const match = ATTRIBUTE_NAMESPACE.exec(key);
|
|
61
|
+
if (match) {
|
|
62
|
+
if (isExtensionNamespace(match[1]))
|
|
63
|
+
add(target, `${prefixes.prefixFor(match[1])}:${match[2]}`, value);
|
|
64
|
+
}
|
|
65
|
+
else if (unqualified)
|
|
66
|
+
add(target, `${prefixes.prefixFor(element.namespace)}:${key}`, value);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const addChildren = (target, element, prefixes) => {
|
|
70
|
+
for (const child of element.children) {
|
|
71
|
+
if (isExtensionNamespace(child.namespace))
|
|
72
|
+
add(target, `${prefixes.prefixFor(child.namespace)}:${child.name}`, valueOf(child, prefixes));
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const valueOf = (element, prefixes) => {
|
|
76
|
+
const properties = {};
|
|
77
|
+
addAttributes(properties, element, prefixes, true);
|
|
78
|
+
addChildren(properties, element, prefixes);
|
|
79
|
+
return Object.keys(properties).length === 0 ? element.text : properties;
|
|
80
|
+
};
|
|
81
|
+
const containers = (element) => element.children.filter((child) => child.namespace === MODEL_NAMESPACE && child.name === "extensionElements");
|
|
82
|
+
export const extensionProperties = (element, prefixes) => {
|
|
83
|
+
const properties = {};
|
|
84
|
+
addAttributes(properties, element, prefixes, false);
|
|
85
|
+
for (const container of containers(element))
|
|
86
|
+
addChildren(properties, container, prefixes);
|
|
87
|
+
return properties;
|
|
88
|
+
};
|
|
89
|
+
const rejected = (child) => ({ kind: "foreign-namespace", construct: child.name, location: child.location });
|
|
90
|
+
const unrepresentable = (element) => {
|
|
91
|
+
const warnings = [];
|
|
92
|
+
const hasProperties = Object.keys(element.attributes).some((key) => !ATTRIBUTE_NAMESPACE.test(key) || isExtensionAttribute(key)) || element.children.some((child) => isExtensionNamespace(child.namespace));
|
|
93
|
+
if (hasProperties && element.text !== "")
|
|
94
|
+
warnings.push({ ...rejected(element), message: MIXED_CONTENT });
|
|
95
|
+
for (const key of Object.keys(element.attributes)) {
|
|
96
|
+
const match = ATTRIBUTE_NAMESPACE.exec(key);
|
|
97
|
+
if (match && !isExtensionNamespace(match[1]) && !isIgnoredNamespace(match[1])) {
|
|
98
|
+
warnings.push({ kind: "foreign-namespace", construct: `${element.name}@${match[2]}`, location: `${element.location}/@${match[2]}` });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return [...warnings, ...element.children.flatMap((child) => (isExtensionNamespace(child.namespace) ? unrepresentable(child) : [rejected(child)]))];
|
|
102
|
+
};
|
|
103
|
+
export const extensionWarnings = (container) => container.children.flatMap((child) => (isExtensionNamespace(child.namespace) ? unrepresentable(child) : [rejected(child)]));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Store } from "n3";
|
|
2
|
+
import type { ElementMapping } from "./mapping.ts";
|
|
3
|
+
export interface MappingTables {
|
|
4
|
+
elements: Record<string, ElementMapping>;
|
|
5
|
+
containment: Record<string, Record<string, string>>;
|
|
6
|
+
}
|
|
7
|
+
export interface MappingProblem {
|
|
8
|
+
term: string;
|
|
9
|
+
kind: "class" | "property";
|
|
10
|
+
where: string;
|
|
11
|
+
reason: "not-in-context" | "not-in-ontology";
|
|
12
|
+
}
|
|
13
|
+
export declare const CONTEXT_FILES: string[];
|
|
14
|
+
export declare const loadContextTerms: () => Record<string, string>;
|
|
15
|
+
export declare const checkMapping: (tables: MappingTables, store: Store, context: Record<string, string>) => MappingProblem[];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { ROOT } from "../paths.js";
|
|
4
|
+
import { declaredClasses, declaredProperties } from "../ontology.js";
|
|
5
|
+
export const CONTEXT_FILES = ["contexts/core.jsonld", "contexts/di.jsonld"];
|
|
6
|
+
export const loadContextTerms = () => {
|
|
7
|
+
const raw = {};
|
|
8
|
+
for (const file of CONTEXT_FILES) {
|
|
9
|
+
Object.assign(raw, JSON.parse(readFileSync(join(ROOT, file), "utf8"))["@context"]);
|
|
10
|
+
}
|
|
11
|
+
const expand = (value) => {
|
|
12
|
+
const [prefix, local] = value.split(":");
|
|
13
|
+
const base = raw[prefix];
|
|
14
|
+
return typeof base === "string" && local !== undefined ? `${base}${local}` : value;
|
|
15
|
+
};
|
|
16
|
+
const terms = {};
|
|
17
|
+
for (const [term, entry] of Object.entries(raw)) {
|
|
18
|
+
const id = typeof entry === "string" ? entry : entry["@id"];
|
|
19
|
+
if (id !== undefined && !id.startsWith("@"))
|
|
20
|
+
terms[term] = expand(id);
|
|
21
|
+
}
|
|
22
|
+
return terms;
|
|
23
|
+
};
|
|
24
|
+
const usedTerms = (tables) => {
|
|
25
|
+
const used = [];
|
|
26
|
+
const property = (term, where) => used.push({ term, kind: "property", where });
|
|
27
|
+
for (const [element, mapping] of Object.entries(tables.elements)) {
|
|
28
|
+
used.push({ term: mapping.type, kind: "class", where: `${element}.type` });
|
|
29
|
+
for (const [attribute, term] of Object.entries(mapping.attributes)) {
|
|
30
|
+
if (attribute !== "id")
|
|
31
|
+
property(term, `${element}.attributes.${attribute}`);
|
|
32
|
+
}
|
|
33
|
+
for (const field of ["singles", "textChildren", "textLists"]) {
|
|
34
|
+
for (const [child, term] of Object.entries(mapping[field] ?? {}))
|
|
35
|
+
property(term, `${element}.${field}.${child}`);
|
|
36
|
+
}
|
|
37
|
+
for (const lookup of mapping.lookups ?? [])
|
|
38
|
+
property(lookup.term, `${element}.lookups.${lookup.attribute}`);
|
|
39
|
+
for (const term of mapping.booleans ?? [])
|
|
40
|
+
property(term, `${element}.booleans`);
|
|
41
|
+
for (const term of mapping.numbers ?? [])
|
|
42
|
+
property(term, `${element}.numbers`);
|
|
43
|
+
if (mapping.bodyTerm !== undefined)
|
|
44
|
+
property(mapping.bodyTerm, `${element}.bodyTerm`);
|
|
45
|
+
}
|
|
46
|
+
for (const [element, children] of Object.entries(tables.containment)) {
|
|
47
|
+
for (const [child, term] of Object.entries(children))
|
|
48
|
+
property(term, `containment.${element}.${child}`);
|
|
49
|
+
}
|
|
50
|
+
return used;
|
|
51
|
+
};
|
|
52
|
+
export const checkMapping = (tables, store, context) => {
|
|
53
|
+
const classes = declaredClasses(store);
|
|
54
|
+
const properties = declaredProperties(store);
|
|
55
|
+
const problems = [];
|
|
56
|
+
for (const { term, kind, where } of usedTerms(tables)) {
|
|
57
|
+
const iri = context[term];
|
|
58
|
+
if (iri === undefined) {
|
|
59
|
+
problems.push({ term, kind, where, reason: "not-in-context" });
|
|
60
|
+
}
|
|
61
|
+
else if (!(kind === "class" ? classes : properties).has(iri)) {
|
|
62
|
+
problems.push({ term, kind, where, reason: "not-in-ontology" });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return problems;
|
|
66
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const MODEL_NAMESPACE = "http://www.omg.org/spec/BPMN/20100524/MODEL";
|
|
2
|
+
export declare const DI_NAMESPACE = "http://www.omg.org/spec/BPMN/20100524/DI";
|
|
3
|
+
export declare const DC_NAMESPACE = "http://www.omg.org/spec/DD/20100524/DC";
|
|
4
|
+
export declare const DD_NAMESPACE = "http://www.omg.org/spec/DD/20100524/DI";
|
|
5
|
+
export declare const XSI_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
|
|
6
|
+
export declare const BPMN_NAMESPACES: string[];
|
|
7
|
+
export declare const REFERENCE_ATTRIBUTES: string[];
|
|
8
|
+
export declare const REFERENCE_CHILDREN: string[];
|
|
9
|
+
export interface ElementMapping {
|
|
10
|
+
consumed?: string[];
|
|
11
|
+
type: string;
|
|
12
|
+
attributes: Record<string, string>;
|
|
13
|
+
booleans?: string[];
|
|
14
|
+
hashPrefixed?: string[];
|
|
15
|
+
numbers?: string[];
|
|
16
|
+
textChildren?: Record<string, string>;
|
|
17
|
+
textLists?: Record<string, string>;
|
|
18
|
+
lookups?: Lookup[];
|
|
19
|
+
bodyTerm?: string;
|
|
20
|
+
singles?: Record<string, string>;
|
|
21
|
+
anonymous?: boolean;
|
|
22
|
+
requiresBody?: boolean;
|
|
23
|
+
requiresChild?: string;
|
|
24
|
+
derivedChildIds?: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
export interface Lookup {
|
|
27
|
+
attribute: string;
|
|
28
|
+
root: string;
|
|
29
|
+
from: string;
|
|
30
|
+
term: string;
|
|
31
|
+
exportOnly?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare const ELEMENT_MAPPINGS: Record<string, ElementMapping>;
|
|
34
|
+
export declare const ELEMENT_NAMESPACES: Record<string, string>;
|
|
35
|
+
export declare const isEmptyRequired: (element: {
|
|
36
|
+
name: string;
|
|
37
|
+
text: string;
|
|
38
|
+
children: {
|
|
39
|
+
name: string;
|
|
40
|
+
}[];
|
|
41
|
+
}) => boolean;
|
|
42
|
+
export declare const concreteElement: <T extends {
|
|
43
|
+
namespace: string;
|
|
44
|
+
name: string;
|
|
45
|
+
attributes: Record<string, string>;
|
|
46
|
+
}>(element: T) => T;
|
|
47
|
+
export declare const isMapped: (element: {
|
|
48
|
+
namespace: string;
|
|
49
|
+
name: string;
|
|
50
|
+
}) => boolean;
|
|
51
|
+
export declare const CONTAINMENT: Record<string, Record<string, string>>;
|
|
52
|
+
export declare const ROOT_ELEMENTS: string[];
|