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
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:
Knock-on effects to model:
dprod:DataDutysubtype) — basket-of-offers semantics may need explicit data-duty typing to distinguish provider-duties from consumer-duties across the basketSHACL 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