Skip to content

feat(metadata): JSON-LD-Export/Import + Sidecar (PR3/4)#39

Merged
lepy merged 1 commit into
masterfrom
feat/metadata-jsonld-sidecar
Jun 26, 2026
Merged

feat(metadata): JSON-LD-Export/Import + Sidecar (PR3/4)#39
lepy merged 1 commit into
masterfrom
feat/metadata-jsonld-sidecar

Conversation

@lepy

@lepy lepy commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Kern-PR der Maschinenlesbarkeit: Metadaten als selbstbeschreibendes JSON-LD (Linked Data) — und als Sidecar neben dem Datenblob ablegbar.

sdata/semantic.py (pure-Python)

  • to_jsonld(metadata): @id = did:suuid:<sname>:sdata; @type = [sdata:<Klasse>, <BFO-IRI>]; reservierte _sdata_* → schema.org/DCAT/PROV (name/identifier/generatedAtTime/wasDerivedFrom/isPartOf/…).
    Hybrid-Attributmodell: einheitenbehaftet → qudt:Quantity-Knoten; unit-los + ontology → getypter Knoten; sonst typisiertes Literal. ontology = @type/Klasse; Prädikat = sdata:<name>.
  • from_jsonld(): verlustarmer Round-Trip (dtype via XSD bzw. JSON-Typ für list/json; Provenienz-DIDs → snames).
  • write_sidecar()/read_sidecar(): <sname>.meta.jsonld (Verzeichnis oder Datei).

Beispiel

{ "@id": "did:suuid:Base__specimen_01__…:sdata",
  "@type": ["sdata:Base", "bfo:BFO_0000004"], "name": "specimen_01",
  "sdata:force_x": {"@type":"qudt:Quantity","value":{"@value":12.5,"@type":"xsd:double"},
                    "unitRef":"unit:KiloN","symbol":"kN"},
  "sdata:material_id": {"@value":"DP800","@type":"xsd:string"},
  "sdata:phase": {"@type":"bfo:Quality","value":{"@value":"martensite","@type":"xsd:string"}} }

Kompatibilität & Tests

Additive Delegatoren auf Metadata/Base (lazy import); keine Default-Verhaltensänderung, keine Pflicht-Dependency. 437 passed, 8 skipped, Coverage 100 %.

Macht Metadaten maschinenlesbar/vollqualifizierend als selbstbeschreibendes
JSON-LD (Linked Data) und ablegbar als Sidecar neben dem Datenblob.

sdata/semantic.py (pure-Python):
- to_jsonld(metadata): @id = did:suuid:<sname>:sdata, @type = [sdata:<Klasse>,
  BFO-IRI der Topologieklasse], reservierte _sdata_*-Felder -> schema.org/DCAT/
  PROV-Terme (name/identifier/generatedAtTime/wasDerivedFrom/isPartOf/…).
  Hybrid-Attributmodell: einheitenbehaftet -> qudt:Quantity-Knoten (value+unit),
  unit-los+ontology -> getypter Knoten, sonst typisiertes Literal. ontology ist
  stets @type/Klasse des Werts; Prädikat = sdata:<name>.
- from_jsonld(): Round-Trip zurück zu Metadata (dtype via XSD bzw. JSON-Typ für
  list/json; Provenienz-DIDs -> snames).
- write_sidecar()/read_sidecar(): <sname>.meta.jsonld (Verzeichnis oder Datei).

Additive Delegatoren auf Metadata (to_jsonld/from_jsonld/write_sidecar/
read_sidecar) und Base (to_jsonld/write_sidecar/read_sidecar) via lazy import.
Keine Default-Verhaltensänderung, keine Pflicht-Dependency.

Tests: tests/test_semantic_jsonld.py (Struktur, Round-Trip inkl. bytes/list/json,
Provenienz, Sidecar). Coverage 100%.
@lepy lepy merged commit 354f310 into master Jun 26, 2026
@lepy lepy deleted the feat/metadata-jsonld-sidecar branch June 26, 2026 08:38
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