Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
b90df10
Add dprod-contracts folder with data contract ontology files
tonyseale Jan 29, 2026
a60deca
Align dprod-contracts.ttl style with dprod-ontology.ttl conventions
tonyseale Jan 29, 2026
8793e23
Match the DPROD shapes formatting.
tonyseale Jan 29, 2026
dc2b0c9
Move to the new version of Data contracts by Mattias Autrata (it is m…
tonyseale Feb 26, 2026
c9357a5
Move to the new version of Data contracts by Mattias Autrata (it is m…
tonyseale Feb 26, 2026
c994721
Simplify the profile and the namespaces.
tonyseale Feb 27, 2026
1ae9ad6
Move domain vocabulary from dprod: to ex: in example files
tonyseale Mar 12, 2026
df4f450
Simplify profile, shapes, docs, and remove dprod-due.ttl
tonyseale Mar 12, 2026
c0e6ae8
Update README wording
tonyseale Mar 12, 2026
6a656b9
Simplify operand resolution examples in README
tonyseale Mar 12, 2026
b566b78
Rename to Data Offerer and then Data Contract, which make better sema…
tonyseale Mar 25, 2026
af67a6a
Add minimal DataContract example to overview Quick Start
tonyseale Apr 9, 2026
f73ba25
Move domain vocabulary from dprod: to ex: across all docs, shapes, an…
tonyseale Apr 9, 2026
f51b0b3
Remove DCON migration references from term-mapping doc
tonyseale Apr 16, 2026
8d59cff
Add Matthias Autrata as contributor to DPROD ontology
tonyseale Apr 16, 2026
d00379f
Add Matthias Autrata as editor in ReSpec template
tonyseale Apr 16, 2026
30bbc7e
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 20, 2026
73fc18c
docs(ontology): add Josh Cornejo as author
jgeluk Apr 20, 2026
70a4875
Add Matthias Autrata as editor in ReSpec template
tonyseale Apr 16, 2026
8bb9837
Fix stray merge conflict marker in main.py
tonyseale Apr 23, 2026
ce93a36
docs(ontology): add Matthias Autrata to authors list, add editor emails
jgeluk Apr 23, 2026
fec4d85
docs(ontology): move Jacobus Geluk from authors to editors
jgeluk Apr 23, 2026
8a6e928
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
d36728f
docs(ontology): add email for Carl Mattocks
jgeluk Apr 23, 2026
06284fa
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
33094fe
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
422f966
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
d23e555
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
be65db3
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
05940e2
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
8c9004d
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
d324ecd
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 23, 2026
53e549c
Merge branch 'develop' into add-dprod-contracts
jgeluk Apr 27, 2026
14aecd9
Apply outstanding review feedback from Matthias
tonyseale May 10, 2026
62dc20c
Apply review items 5.1, 5.2, 3.4 and capture Stephen's new feedback
tonyseale May 14, 2026
66e8d82
Merge remote-tracking branch 'upstream/add-dprod-contracts' into add-…
tonyseale May 20, 2026
0e1a388
Merge branch 'develop' into add-dprod-contracts
jgeluk May 28, 2026
1dc3883
chore(contracts): tidy add-dprod-contracts staging branch
jgeluk May 28, 2026
b7a9fef
feat(contracts): wire dprod-contracts into spec generator
jgeluk May 28, 2026
f6300fd
fix(contracts): describe reusable property groups
jgeluk May 28, 2026
6930185
Merge branch 'develop' into add-dprod-contracts
jgeluk May 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 159 additions & 0 deletions dprod-contracts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
# DPROD Data Contracts: Deterministic Policy Language for Data Governance

**An ODRL 2.2 profile with deterministic evaluation semantics for data governance.**

---

## What This Is

DPROD Contracts is an ODRL 2.2 profile. It uses ODRL terms for all standard constructs (Permission, Duty, Prohibition, Agreement, etc.) and only adds extensions where ODRL 2.2 leaves behavior undefined:

1. **Explicit lifecycle**: Pending -> Active -> Fulfilled/Violated (unified for duties and contracts)
2. **Bilateral agreements**: Both assigner and assignee may have duties
3. **Deterministic evaluation**: Total functions, no undefined states
4. **Formal verification target**: Amenable to Dafny, Why3, Coq
5. **Structured operand resolution**: SPARQL-style `dprod:path` property paths
6. **Recurring duties**: `recurrence` via RFC 5545 RRULE for scheduled obligations

DPROD Contracts is **specification-first**. The semantics document defines what any conformant implementation must do. Every DPROD policy is a valid ODRL 2.2 policy.

---

## Quick Start

See [examples/](examples/) for complete working policies:

- [data-contract.ttl](examples/data-contract.ttl) -- DataOffer, DataContract, bilateral duties
- [data-use-policy.ttl](examples/data-use-policy.ttl) -- Role-based access, purpose constraints

---

## What DPROD Contracts Adds to ODRL 2.2

| Extension | ODRL 2.2 | What DPROD Adds |
|-----------|----------|-----------------|
| Duty lifecycle | Undefined | Pending -> Active -> Fulfilled/Violated |
| Bilateral duties | Unilateral (assignee only) | Assigner duties + assignee duties |
| Conflict resolution | Configurable | Fixed: Prohibition > Permission |
| Evaluation order | Undefined | Deterministic left-to-right |
| Operand resolution | Implicit | Explicit `dprod:path` property paths (+ `dprod:select` for complex resolution) |
| Recurring duties | -- | `recurrence` via RFC 5545 RRULE with per-instance `deadline` |
| Contract types | -- | `DataOffer` (subclass of Offer), `DataContract` (subclass of Agreement) |

**Note**: DPROD Contracts is an ODRL profile, not a parallel vocabulary. Standard ODRL processors can parse DPROD policies; DPROD-aware processors additionally enforce lifecycle, bilateral duties, and deterministic evaluation.

---

## Design Principles

### 1. Specification Precedes Implementation

The [formal semantics](docs/formal-semantics.md) is the normative reference.

### 2. Total Functions

Every evaluation terminates with a defined result:

```
Eval : Request x PolicySet x State -> Decision x DutySet
```

### 3. Bilateral Agreements

Agreements return duties for **both** parties:

```
Result = {
decision: Permit | Deny | NotApplicable,
assignerDuties: Set<Duty>, // Provider obligations (SLAs)
assigneeDuties: Set<Duty>, // Consumer obligations
violations: Set<Duty>
}
```

### 4. Unified Lifecycle State

Duties and contracts share four states:

```
condition true
Pending ──────────────> Active
│ │
action done │ │ deadline passed
▼ ▼
Fulfilled Violated
```

An `odrl:Duty` progresses through `dprod:State` values. A `dprod:DataOffer` shares the same state machine.

### 5. Structured Operand Resolution

Operands resolve via `dprod:path` -- SPARQL-style property paths from the evaluation context:

```turtle
# Context-rooted (single-step): direct property on request
ex:environment dprod:path ex:environment .

# Asset-rooted (two-step): via odrl:target
ex:timeliness dprod:path (odrl:target ex:timeliness) .

# Agent-rooted (two-step): via odrl:assignee
ex:recipientType dprod:select "SELECT ?v WHERE { $request odrl:assignee/ex:recipientType ?v }" .
```

---

## Repository Structure

```
dprod-contracts/
├── dprod-contracts.ttl # Core ontology (ODRL profile extension)
├── dprod-contracts-shapes.ttl # SHACL validation shapes
├── dprod-contracts-prof.ttl # DXPROF profile declaration
├── examples/
│ ├── data-contract.ttl # Complete contract example (with recurrence)
│ ├── data-use-policy.ttl # Access control example
│ └── baseline.ttl # Comprehensive test data (8 offers, 2 contracts)
└── docs/
├── overview.md # What is DPROD Contracts? (start here)
├── specification.md # Technical vocabulary reference
├── term-mapping.md # Business term -> property mapping
├── formal-semantics.md # Formal semantics (normative)
├── contracts-guide.md # Data contract authoring guide
└── policy-writers-guide.md # Data use policy authoring guide
```


---

## Namespaces

| Prefix | Namespace | Role |
|--------|-----------|------|
| `odrl:` | `http://www.w3.org/ns/odrl/2/` | Primary -- all standard constructs |
| `dprod:` | `https://www.omg.org/spec/DPROD/` | Extensions (State, deadline, recurrence, DataOffer, DataContract, path, select, hierarchy) + domain-specific actions, operands, and concept values |

---

## Conformance

An implementation conforms to DPROD Contracts if:

1. It accepts policies that validate against `dprod-contracts-shapes.ttl`
2. It uses `odrl:Permission`, `odrl:Duty`, `odrl:Prohibition`, `odrl:Agreement` for standard constructs
3. Its evaluation function produces identical results for identical inputs
4. All functions are total (no undefined behavior)
5. State transitions match the operational semantics
6. Agreement evaluation returns duties for both assigner and assignee

---

## References

- [ODRL 2.2 Information Model](https://www.w3.org/TR/odrl-model/)
- [W3C Market Data Profile](https://www.w3.org/2021/md-odrl-profile/v1/)
- [W3C ODRL Profile Best Practices](https://www.w3.org/community/reports/odrl/CG-FINAL-profile-bp-20240808.html)

---

**Version**: 0.7 | **Date**: 2026-02-04
Loading
Loading