Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@ section for the full explanation).
Two probes, because Cloudflare 403s the runner on ordinary paths but exempts `/.well-known/`
(#112): the origin for artifact completeness, the canonical host for the Worker's rewrite and
content types. Probe the origin, not `material-identity.eu`, for anything outside `.well-known`
- `examples/` — reference examples (#130), **not entries**: never under `published/`, keep their own
licence (the steel content spec is CC-BY-4.0, a byte-identical copy from material-identity/schema).
Copied wholesale into `site/examples/` with a derived `/examples/` page; the Worker types `.json`
there. `test/examples.test.ts` fails if any `dictionaryReference` does not resolve under `published/`
- `REVIEW.md` — what reviewers check beyond CI; read it before reviewing any publish PR
- `standards/` — local-only licensed docs; only its README is committed

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ served with a short cache, so no derived view can ever contradict an entry.
| [`/dictionary.ttl`](https://material-identity.eu/dictionary.ttl) | the whole dictionary as RDF; semantics declared in [`/context.jsonld`](https://material-identity.eu/context.jsonld) |
| [`/feed.xml`](https://material-identity.eu/feed.xml) | new and superseded entries |
| [`/about`](https://material-identity.eu/about) | what this is, what it promises, what it is not |
| [`/examples/`](https://material-identity.eu/examples/) | a content specification that uses the dictionary, as a reference example: not part of the dictionary, and it keeps its own licence ([`examples/`](examples/README.md)) |

RDF is a *second* serialization, never a mutation of the first: `/def/<uuid>.json` carries no
`@context` and never will.
Expand Down
49 changes: 49 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Examples

Material that shows the dictionary in use. **Nothing here is part of the dictionary.** These
files are not entries, they carry no `/def/<uuid>` identifier, and they sit outside
`published/`, so the add-only rule and the two-yes gate do not apply to them. The build copies
this directory into the site unchanged, and it is served at
[`https://material-identity.eu/examples/`](https://material-identity.eu/examples/) (#130).

## Content specifications

A **content specification** is layer 1 of the [addressing model](../README.md#terminology):
the set of data elements a passport for one product group carries. Its id is reissued only
when its shape changes or when a meaning it references changes. Layer 2 is the dictionary
release it pins, and layer 3 is the dictionary element id each membership points at.

| File | Source | Status |
|---|---|---|
| [`content-specifications/dpp-steel-v0.0.2.lock.json`](content-specifications/dpp-steel-v0.0.2.lock.json) | [material-identity/schema](https://github.com/material-identity/schema) `dpp/v0.0.2/specifications/steel.lock.json` at commit [`eb99ea2`](https://github.com/material-identity/schema/commit/eb99ea20cd0670d5b070aa7830653c4955b1c8b9) (merge of [material-identity/schema#380](https://github.com/material-identity/schema/pull/380)) | **published** in material-identity/schema `main`, DPP v0.0.2 |

The copy is byte-identical to its source:
SHA-256 `b94be652ae86178d1d371a9df5d1bfc3cba3b86afcd1b8f8aa257ef4ac021a3f`. The specification
is maintained in material-identity/schema, not here. When the source changes, replace the file
with a fresh copy and update the commit and hash above. Never edit it in place.

### How it uses this dictionary

The specification pins one dictionary release (`"dictionary": { "release": "v2026.10.01" }`).
Each membership in `elements` (and the nested `elements` and `item` of a collection) refers to
one dictionary entry and adds the facts that belong to the specification, not to the concept:

| Field | Meaning |
|---|---|
| `dictionaryReference` | the entry, as `https://material-identity.eu/def/<uuid>` |
| `objectType` | the entry's object type, repeated so a consumer can shape the data without fetching the entry first |
| `isMandatory` | whether this specification requires the element |
| `accessCategory` | who may see the value (`public`, `legitimateInterest`, `authorityOnly`). This is informative: the legal act is normative and the passport interface enforces it |
| `granularity` | the level the value is stated at: `model`, `batch`, `item` or `operator` |
| `condition` | for an optional element, when it becomes mandatory, in `en` and `de` |

Mandatoriness and access belong to the membership, never to the entry: the same entry can be
mandatory and public in one specification and optional or restricted in another. A test
(`test/examples.test.ts`, part of `npm test` and so of `pr-checks`) fails when any `dictionaryReference` in
`content-specifications/*.json` does not resolve to a file under `published/`.

## Licence

The example keeps **its own licence**: CC-BY-4.0, the data licence of material-identity/schema
(stated in the file's own `$comment`). The dictionary's CC0 1.0 dedication does **not** cover
it. If you reuse it, attribute material-identity/schema.
Loading
Loading