Skip to content

DPROD Contracts: DataOffer target and DataContract acceptsOffer cardinality — basket model (5.8 + 5.9) #189

@jgeluk

Description

@jgeluk

Track: DPROD 1.1 data-contracts post-merge follow-up from PR #156. Stephen's feedback (2026-05-14).

Plan items 5.8 + 5.9 of `dprod-contracts/docs/changes-plan.md`. Coupled — decide together. Stephen's reference-data use case has hundreds of distributions from one provider, of which any subscriber takes a different subset. The 1:1 model (one DataOffer per DataContract) either forces 80+ near-duplicate contracts, or one contract referencing a 100-distribution offer with extra metadata about which 80 obligations apply.

Stephen's proposal:

  • 5.8 Tighten `odrl:target` on `dprod:DataOffer` to exactly 1 — each offer is for one distribution
  • 5.9 Loosen `dprod:acceptsOffer` on `dprod:DataContract` from `1` to `1..*` — a contract is a basket of accepted offers

Knock-on effects to model:

SHACL shape impact: `DataOfferShape` adds `sh:maxCount 1` on `odrl:target`; `DataContractShape` removes `sh:maxCount 1` on `dprod:acceptsOffer`.

Examples to update: `baseline.ttl`, `data-contract.ttl` — show the basket pattern.

cc @tonyseale @matthiasautrata @stevefisher

Metadata

Metadata

Assignees

No one assigned

    Labels

    modelingModeling decisions & ontology designshapesSHACL shapes and validation

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions