Skip to content

docs(rdf): declare DCMI annotation values and OWL roles - #36

Open
jdsika wants to merge 1 commit into
feat/owlgen-iri-valued-metadatafrom
feat/owlgen-dcmi-agent-iris
Open

jdsika wants to merge 1 commit into
feat/owlgen-iri-valued-metadatafrom
feat/owlgen-dcmi-agent-iris

Conversation

@jdsika

@jdsika jdsika commented Oct 2, 2026 •

Copy link
Copy Markdown

2026-10-14: the example and tests are unchanged. #33 now renders a curie-typed annotation value as a string literal and follows --xsd-anyuri-as-iri for uri values; this example uses nodeidentifier for the publisher and string for the creator label, so its output is unchanged.

DCMI agent metadata can contain identifier nodes or textual identifiers. This documentation/test PR demonstrates the existing generic instantiates and scalar-range mechanism completed in #33, together with implements: [owl:AnnotationProperty] for OWL projection. It adds no compiler algorithm, vocabulary table, metamodel field or generator flag.

The published YAML is included directly in the OWL documentation and executed in tests. Its creator is a literal and its publisher is an IRI; both predicates are annotation properties and occur in no logical restrictions. A declared string containing a URL remains literal. The same mechanism works for custom predicates, as demonstrated by #33's generic example.

Standards and existing alternatives

DCMI Metadata Terms use rangeIncludes to suggest Agent values. This is not an rdfs:range restriction or an IRI-coercion algorithm. Creator and rightsHolder recommend URI identifiers while permitting literals. Declared LinkML ranges select the RDF terms; the established implements mapping selects the independent OWL annotation-property role. OWL typing constraints exclude incompatible logical roles.

Use native contributors for ordinary contributor identifiers. Native created_by maps to PAV, rather than DCMI creator. The publisher slot is declared in the metamodel but is not attached to CommonMetadata, Element or SchemaDefinition in the reviewed checkout; its constructor rejects a top-level publisher keyword. This declaration is therefore not a working native-field alternative here. The example uses explicit publisher annotations. Native license remains authoritative and string-valued.

Validation and boundaries

  • 270 focused tests passed, including all 18 required OWLAPI cases; four new cases execute the actual DCMI YAML with both native-URI modes and both type-object modes, metaclasses disabled. Every child artifact loads, saves and reloads with zero OWL 2 DL profile violations and retained creator/publisher annotations.
  • All 37 original child cases remain: four properties, OWL/SHACL value parity, CURIE/absolute nodes, names and URL literals, native contributor parity and undeclared-value preservation. Additional checks cover property declarations/restrictions and the native PAV creator mapping.
  • Existing OWL, SHACL, JSON Schema, ShEx, RDF, JSON-LD and Python generator suites: 393 passed, 6 skipped; 261 subtests passed.
  • Strict Sphinx, rendered shared-YAML equality, primary reference/fragment checks, Ruff and applicable hooks passed. Current DCMI deep links, including the inherited license guidance link, are corrected.
  • Production is unchanged from feat(rdf): preserve declared annotation terms and OWL roles #33 (owlgen.py SHA-256 c80049db…). Annotation metadata does not become instance validation; other formats retain their existing contracts. This does not add complete metadata-extension validation, structured agents, native-field RDF export policies, or all-schema/default-metaclass OWL 2 DL conformance. Prerequisite datatype/type-object limitations remain documented. No downstream files or migration artifacts are changed.

Rebased 2026-10-14 onto the updated #33 (stacked on #32). Full compiler suite 12,676 passed; strict Sphinx build passed. CI: see the checks on the current head (including the required OWLAPI consumer job).

Merge order

Merge #32 and #33 into main first. This PR is stacked on feat/owlgen-iri-valued-metadata (#33, itself on #32). After #33 merges, rebase #36 onto the resulting main commit, retarget its base to main, retain one feature commit and rerun all applicable CI for its resulting head. Squash merging #33 changes the prerequisite SHA. Do not merge #36 into the feature branch as a substitute for merging it into main. This review performs no merge or upstream PR creation.

@jdsika jdsika self-assigned this Oct 2, 2026
jdsika added a commit to ASCS-eV/ontology-management-base that referenced this pull request Oct 2, 2026
Moves linkml and linkml-runtime to feat/envited-x-pipeline at e3081ef8b,
which adds ASCS-eV/linkml#36 (stacked on #33): gen-owl emits
dcterms:creator, dcterms:contributor, dcterms:publisher and
dcterms:rightsHolder as IRIs when their value is an IRI, as DCMI gives them
the range dcterms:Agent. A value in plain text keeps its literal.

No committed artifact changes: no schema uses these terms with an IRI yet.

Signed-off-by: jdsika <carlo.van-driesten@vdl.digital>
@jdsika
jdsika force-pushed the feat/owlgen-iri-valued-metadata branch from 6ac1208 to 4cf65e0 Compare October 5, 2026 11:13
@jdsika
jdsika marked this pull request as draft October 5, 2026 12:25
@jdsika jdsika changed the title feat(gen-owl): emit DCMI agent metadata as IRIs docs(rdf): model DCMI agent annotations with declared ranges Oct 5, 2026
@jdsika
jdsika force-pushed the feat/owlgen-dcmi-agent-iris branch from 9d1f7c9 to f2e5389 Compare October 5, 2026 12:29
@jdsika
jdsika force-pushed the feat/owlgen-iri-valued-metadata branch 2 times, most recently from 8f65be9 to 1e6c491 Compare October 12, 2026 15:22
@jdsika
jdsika force-pushed the feat/owlgen-iri-valued-metadata branch from 1e6c491 to 134f7db Compare October 12, 2026 16:14
@jdsika
jdsika force-pushed the feat/owlgen-dcmi-agent-iris branch from f2e5389 to ed8fcb1 Compare October 12, 2026 16:56
@jdsika jdsika changed the title docs(rdf): model DCMI agent annotations with declared ranges docs(rdf): declare DCMI annotation values and OWL roles Oct 12, 2026
@jdsika
jdsika marked this pull request as ready for review October 12, 2026 17:10
Demonstrate declared scalar ranges and the existing annotation-property
mapping with one published, executed DCMI metadata schema. Preserve the
four-property OWL/SHACL contracts and native contributor behavior.

Require real OWLAPI profile and annotation-retention checks in all four
URI/type-object modes. Clarify DCMI rangeIncludes, existing native mappings,
the standalone publisher support gap, and scalar projection boundaries.
Correct current DCMI reference anchors without changing production code.

Signed-off-by: jdsika <carlo.van-driesten@vdl.digital>
@jdsika
jdsika force-pushed the feat/owlgen-iri-valued-metadata branch from 134f7db to 6120dbf Compare October 14, 2026 06:44
@jdsika
jdsika force-pushed the feat/owlgen-dcmi-agent-iris branch from ed8fcb1 to 8112c1b Compare October 14, 2026 07:01
jdsika added a commit that referenced this pull request Oct 14, 2026
Review update replacing the earlier declared-annotation implementation
with the reviewed #33/#36: annotation values get the RDF term their
declared range gives slot values (curie stays a literal; gen-owl
--xsd-anyuri-as-iri makes uri/uriorcurie values IRIs), emitted metadata
predicates are declared as annotation properties, role collisions fail,
and the DCMI example and OWLAPI consumer gate are included. The
integration test declares its metadata slot an annotation property, as
the reviewed contract requires. Snapshots are regenerated; they differ
from the previous ones only by the annotation-property declarations.

Signed-off-by: jdsika <carlo.van-driesten@vdl.digital>
jdsika added a commit that referenced this pull request Oct 14, 2026
Review update replacing the earlier declared-annotation implementation
with the reviewed #33/#36: annotation values get the RDF term their
declared range gives slot values (curie stays a literal; gen-owl
--xsd-anyuri-as-iri makes uri/uriorcurie values IRIs), emitted metadata
predicates are declared as annotation properties, role collisions fail,
and the DCMI example and OWLAPI consumer gate are included. The
integration test declares its metadata slot an annotation property, as
the reviewed contract requires. Snapshots are regenerated; they differ
from the previous ones only by the annotation-property declarations.

Signed-off-by: jdsika <carlo.van-driesten@vdl.digital>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant