Releases: OO-LD/oold-schema
Release list
v1.0.0-rc.2
Second release candidate for v1.0. Addresses the review of rc.1 and adds a referenceable rule catalogue.
Rule catalogue
Every normative statement now carries a stable, citable id (OOLD-RT-08f2), so a validator finding can point at the requirement it enforces rather than only at its own check name.
meta/oold-rules.json, generated from:rule[...]markers in the spec prose.levelandtextare extracted, never authored, so the catalogue cannot drift from the specification.- Anchored badges in the spec and a searchable rule catalogue page.
- 66 rules across 7 areas, 41 machine-checkable. Each records
applies_to(document/implementation/advisory) andmachine_checkable. - Guarded by an accepted baseline, append-only enforcement against the last release, and a catalogue schema.
machine_checkable is deliberately not enforced: whether a given validator checks a rule is a fact about that implementation at a version, not about a spec release.
Review fixes from rc.1
type->@typealias was not round-trip safe. A plain-string term cannot carry@container, so a single@typecame back from RDF as a scalar and failed re-validation. The normative example now uses{ "@id": "@type", "@container": "@set" }. (#117)- The
$idMUST is now enforced. The dialect meta-schema is two-tier: the document-level resource carriesrequired: ["$id"], nested subschemas recurse into the base through$dynamicRefand so are not required to carry one. (#118) examples/defaultare load-bearing in the validation harness, anddocs/tooling.mdnow says so, including how the resultingGEN-INVALIDshould be read. (#120)- Persistent identifiers. Versioning examples use an immutable ref, and a schema published for long-term reuse should be identified by a w3id.org / PURL redirect or a DOI resolving to its current hosting. (#115)
Normative wording
An audit found requirements stated without an RFC 2119 keyword, which the catalogue therefore could not see. 24 are now catalogued, and three needed a decision rather than a keyword:
- The synonym processing contract said other keys are "preserved but not interpreted". That would have forbidden an implementation from reading extensions of its own, and collided with promotion, which deliberately drops the
x-oold-sssomblocks. Now: conformance MUST NOT depend on other keys, a processor MAY read them as its own extension. - Dereferencing an
x-oold-rangetarget was a single MUST that did not say who it bound. Split: a document SHOULD that a published reference points at a conforming target, and an implementation MUST that a loader validates what it fetched rather than assuming the target still conforms. - Embedded objects need an explicit
typeunder a type-scoped context or a frame that matches on@type, not only the former.
Keyword namespacing
x-sssom is renamed x-oold-sssom. The payload follows SSSOM, but the keyword name was OO-LD's own choice, so an unprefixed name claimed a global extension name the project does not own. @context is now the single exception to the x-oold- rule, and a genuinely forced one, since JSON-LD fixes that name.
Breaking changes since rc.1
x-sssom->x-oold-sssom(schema-level and insidex-oold-context)- schema documents now require
$idto validate against the dialect meta-schema - rule ids moved from sequential (
OOLD-RT-001) to hex (OOLD-RT-08f2)
Feedback
Comments on this release candidate are welcome in #116.
v1.0.0-rc.1
First release candidate for the v1.0 spec. A pre-release: /latest/ and the site default stay on v0.9.0; this candidate is served at /1.0.0-rc.1/.
Rolls up the term-mapping / type work (v0.9.0) plus the corrections from a spec review, each verified against a primary source (a live JSON-LD processor, the JSON Schema / JSON-LD 1.1 texts, SSSOM/SKOS).
Since v0.9.0
xsd:floatcorrectly reclassified - it is not JSON-native (onlyxsd:string/boolean/integer/doubleare elided on round-trip), so it is no longer forbidden; the datatype rule is reframed around default projections, with theuseNativeTypesassumption stated.- Compatibility claims corrected - JSON Schema 2020-12 treats unknown keywords as annotations, but strict-mode validators (Ajv) reject them; the "generic validators ignore" wording is fixed and separated from
$vocabularyrefusal. - Composition - object-valued embeds (including array items) SHOULD be property-scoped; a cyclic scoped context is broken by inlining the remote context locally, not by moving it to the root. Removed the unfounded
@propagate-array MUST; fixed the JSON-LD citation. - Mapping machinery - SKOS mapping predicates kept (reasoner-safe, not
owl:equivalent*); co-emission clarified as a pragmatic aid, not an entailment;x-oold-context/x-sssomCURIEs expand against a well-known prefix set the meta-schema defines (its@context), not the instance context; schema-levelx-sssomsubject is the schema$id; materialized@typealiasing follows term-vs-IRI semantics.
Remaining v1.0 gates
Not yet final: #25 (finalize edge cases) and #21 (backend impact review) are the outstanding gates before v1.0.0.
Full changelog: v0.9.0...v1.0.0-rc.1
v0.9.0
Term-mapping spec work from the OO-LD Scientific Profile requirements (#108; worked example #107, dataset model #109). Still pre-1.0: the remaining v1.0 gates are #25 (finalize edge cases) and #21 (backend impact review).
Highlights
- One term-mapping mechanism. The inline
*multi-mapping notation is removed;x-oold-contextis the single mechanism, with a small, stable processing contract: tooling reads onlypredicate_id(a SKOS mapping predicate, compared by IRI expansion withskos:built-in) andmapping_set_id(an inline, list-valued set-membership tag), over an open SSSOM slot bag (#110). - Selection and co-emission. Promotion selects one synonym per term by namespace order and/or mapping set; co-emission defaults to
skos:exactMatchonly (others opt-in). SSSOM is the RECOMMENDED carrier, not a normative dependency; the propagatableobject_source_versionslots pin ontology versions under composition. - Type unification.
x-oold-instance-rdf-typefeeds@type: a materialized type is an ordinary@type, aliased and mapping-set-selectable per profile, so class synonyms are justx-oold-contexton the type term. Co-typing and synonym-aliasing are orthogonal (#112). - Schema-level
x-sssomreplacesx-oold-iri(breaking rename). A schema's ontology correspondence is now the term-synonym mapping row lifted to the schema level (subject = the schema, keyed by object IRI,predicate_idexact/close). Migratex-oold-iri: "X"tox-sssom: { "X": { "predicate_id": "skos:exactMatch" } }. - Value-term aliases (
@vocab). Individual IRIs (e.g. units) can be declared as value terms and aliased by the samex-oold-contextmachinery, withenum/x-oold-rangeand no-collision (scoping / UUID) guidance. x-oold-rangebundling. Clarified that a range value is a dereferenceable reference an OO-LD loader MAY resolve (data bundling).
Full changelog: v0.8.0...v0.9.0
v0.8.0
First release since v0.7.0, consolidating the spec and tooling work toward v1.0. Not a 1.0 candidate yet: the remaining v1.0 gates are #25 (finalize edge cases - nullable types, composition with @context, circular $ref) and #21 (backend impact review).
Highlights
- Validator: exposed as a reusable
oold-validateCLI (#98); hardened for large, cyclic and scalar-leaf schemas (#99), and for real-world schema sets with structural embed detection and deterministic generation at bounded nodes (#103). - Round-trip contract: typed literals round-trip as native JSON values (#100); the no-coercion rule now covers every natively-JSON-encoded datatype, not just
xsd:string(#104). - Docs / site: canonical domain migrated to oo-ld.org (#101); serializations and neighbouring-formats guide - YAML-LD, CBOR-LD, CDDL - plus a large/bulk-data section (#105); clean spec URLs with no
index.html(#106); sharpened abstract and positioning (#102).
Full changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- Specify JSON-LD projection and round-trip for property value forms by @simontaurus in #92
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- docs: polyglot comparison + worked mappings (SPDX 3.0, Croissant, OCA, jargon.sh, TreeLDR, yml2vocab, REST-API-LD, WoT) by @simontaurus in #81
- spec: sharpen positioning (artefact-is-source, object-graph runtime, interlingua) by @simontaurus in #78
- spec: Semantic delivery profiles + SHACL/OWL generation-targets note by @simontaurus in #79
- spec: note SHACL 1.2 UI as the RDF-layer counterpart of x-oold-ui-* by @simontaurus in #80
- spec: document JSON-LD framing and auto-frame construction from an OO-LD schema by @simontaurus in #83
- spec: note SPARQL CONSTRUCT as an alternative to framing by @simontaurus in #84
- spec: composition-closure (unevaluatedProperties) and validator-vs-widget notes by @simontaurus in #85
- docs: weave the LLM Wiki motivation into the guide by @simontaurus in #86
- Technology migration guides + end-to-end example validation by @simontaurus in #88
Full Changelog: v0.5.0...v0.6.0
v0.4.0
What's Changed
- Target JSON-SCHEMA 2020-12 as the normative dialect by @simontaurus in #43
- Prefix OO-LD keywords with x-oold-, add dialect meta-schema and CI validation by @simontaurus in #44
- Finalize x-oold-range design (x-oold-ref, subschema forms) by @simontaurus in #45
- Formalize multilanguage support by @simontaurus in #46
- Recommend @Version 1.1 in generated JSON-LD contexts by @simontaurus in #47
- Formalize instance handling (schema reference, asymmetry, @id, type) by @simontaurus in #48
- Formalize remote @context composition rules by @simontaurus in #49
- Delivery to OpenAPI, MCP and LLM tooling (x-jsonld-* derivation) by @simontaurus in #50
Full Changelog: v0.3.0...v0.4.0
v0.3.0
v0.2.0
v0.1.0
add python code generation and related work