docs← Back to article

Markdown for LLMs

DMN

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# DMN

**In short:** DMN is a standard table, not an engine — and the same table
means different things under different hit policies. This page is for
readers who model decisions in tables and want to know what survives a
move between engines, and what an Arxo law table adds.

## What DMN is for

The Decision Model and Notation is an OMG standard for executable decision
tables, run by engines such as the Camunda table library and the Drools
table engine. Its strengths are the tabular form business analysts read
directly, a shared interchange file across engines, a community conformance
suite as an independent check, and mature editors and platform runners for
organizations that already decide by table.

## Where it meets Arxo

One portable baseline table runs on two engines plus an Arxo law table:
row overlap, multiple results, no-match and default behavior, and table
edits must produce the same observed outcomes. The standard text — not any
one engine — supplies the expectations.

## Key differences

- **Name the hit policy, always.** Unique, any, priority, first, rule
  order, output order, and collect behave differently when several rows
  fire. Any comparison that omits the policy is comparing unknowns. The
  studied protocol deliberately excludes the priority policy from the
  portable baseline because platform support for it differs.
- **Library is not platform.** The Camunda table library implements more
  hit policies than the Camunda automation platform supports — "Camunda"
  below always means the studied library unless stated. Engine identity
  includes the deployment shape.
- **Overlap is a runtime incident in one engine and a static diagnostic in
  another.** Two rows firing under a single-result policy fails at
  evaluation in the table engines; Arxo reports it before execution.
  Different stage, same meaning — not a defect on either side.
- **No-match and null input are genuinely underspecified.** The standard
  leaves them open and engines diverge; the literature confirms the gap.
  The comparison records engine behavior as-is instead of declaring a
  winner.

## A concrete scenario

The prepared experiment crosses one portable table (fixed namespace, five
hit policies, no priority) with two engines and the Arxo law table over
fourteen cases plus four revision cases: a namespace upgrade, a threshold
change, an output-values extension, and a hit-policy switch. Three runners
execute at run time; expectations come from the standard text.

## Choosing and combining

Choose DMN when the organization already thinks in tables, when portability
across engines matters, or when analysts must read the logic directly.
Look to Arxo when overlapping rows need static detection with named
grounds, when decisions need dated editions and source-anchored provenance,
or when a table is one fragment of a larger normative model. Combined, DMN
can own the tabular fragment while Arxo frames it with editions, conflicts,
and review trails.

## Evidence and open questions

- Sources checked: September 2026 (the standard catalog, platform docs,
  both engine sources read at tags, and a paper on null semantics).
- Studied profile: OMG DMN 1.5 with the Camunda table library and the
  Drools table engine at pinned versions.
- Basis: confirmed by documentation and source reading plus a prepared
  protocol; comparative run not performed. Behaviors derived from code
  reading are marked as such until executed.
- Open: platform-versus-library version linkage, a future standard
  revision date, namespace acceptance in one engine, and the null-input
  path in the other.

## Sources and reproducible materials

- Companion page: [Coming from DMN](/comparisons/coming-from-dmn/) — a decision table and its Arxo counterpart.
- The standard: [OMG Decision Model and Notation](https://www.omg.org/)
- Table library: [github.com/camunda/dmn-scala](https://github.com/camunda/dmn-scala)
- Expression language: [feel-scala 1.22.1](https://github.com/camunda/feel-scala/releases/tag/1.22.1)
- Second engine: [github.com/kiegroup/drools](https://github.com/kiegroup/drools)
- Null-semantics analysis (CEUR):
  [ceur-ws.org/Vol-3229/paper61.pdf](https://ceur-ws.org/Vol-3229/paper61.pdf)