Skip to content

Publish visualization information for ontologies on …

Context

Iolanta used to load ontology visualization metadata from a bundled YAML-LD index wired into the codebase. That index was centralized and not usable by other publishers. Ontology publishers should be able to publish accompanying visualization information for an ontology, such as multilingual labels and VANN term groups, so Iolanta can discover and use it. The immediate target is ontology visualization data such as IBIS, while the mechanism should leave room for other resource types later.

The solution needs to:

  • Let a third-party ontology publisher publish visualization data without changing Iolanta's source tree.
  • Let Iolanta discover visualization data starting from the ontology IRI or from data already found while dereferencing it.
  • Support visualization data for ontologies Iolanta does not control and cannot ask to change, including RDF, RDFS, OWL, and other canonical vocabularies.
  • Keep visualization data in RDF or Linked Data so existing SPARQL loading and facet selection can consume it.
  • Support multiple complementary sources, because authoritative publisher data, community annotations, immutable snapshots, and local fallbacks may coexist.
  • Preserve the current expressivity of visualization overlays, including rdfs:label values with language tags and vann:termGroup group definitions.
  • Work for ontologies first without baking ontology-specific assumptions into the discovery layer.
  • Make discovery inspectable and debuggable, so Iolanta can report which visualization sources were found, loaded, skipped, or rejected.
  • Avoid treating third-party descriptions as authoritative merely because they are discoverable.

Decision

Use nanopublications as the primary public publication and discovery mechanism for third-party visualization information, with publisher-controlled links as an optimization when the ontology publisher cooperates, and Iolanta packages or plugins as local fallback. A visualization nanopublication should identify the ontology it describes and contain or reference RDF visualization data that Iolanta can load; the same reverse-description triple can also appear in catalog records, package metadata, or publisher-controlled visualization documents.

Status Item Discovery Description
Nanopublications ✅ Public query/discovery network Publish visualization assertions as provenance-carrying RDF publications that can be queried and cited independently of the ontology host. This covers RDF, RDFS, OWL, and other vocabularies whose canonical documents Iolanta cannot change.
Iolanta package or plugin metadata ✅ Local installed discovery Let installable Iolanta extensions ship visualization overlays for vocabularies they support. Bundled files under docs/visualizations/ remain authoring sources published to https://iolanta.tech/visualizations/ but are not loaded at runtime.
Publisher-controlled ontology RDF links to visualization RDF ⚠️ Only from cooperative ontology documents Accept as an optional discovery input when the ontology publisher controls the ontology document. This cannot cover RDF, RDFS, OWL, or other vocabularies whose canonical documents Iolanta cannot change, so it cannot be the primary mechanism.
Publisher-controlled HTTP Link headers with describedby ⚠️ Only from cooperative ontology origins Accept as an optional discovery input when the ontology publisher controls the HTTP response and can advertise visualization metadata with the describedby relation. This cannot cover vocabularies whose origin Iolanta does not control.
DCAT or VoID catalog as a selected mechanism ⚠️ Needs catalog discovery Useful as metadata inside or around nanopublications, but not sufficient as a selected mechanism without also choosing which catalog Iolanta should query.
Web Annotation as a selected mechanism ⚠️ Needs annotation index discovery Useful as a modeling pattern, but not sufficient as a selected mechanism without also choosing which annotation index Iolanta should query.
IPFS or IPLD as a selected mechanism ❌ No discovery by itself Useful for immutable visualization snapshots referenced from nanopublications, catalogs, publisher links, or plugin metadata, but content addressing does not solve discovery by itself.
Well-known visualization index on the ontology origin ❌ No discovery for uncontrolled origins Define an Iolanta-specific well-known URI, but this still requires control over the ontology origin, so it does not work for RDF, RDFS, OWL, or other canonical vocabularies Iolanta cannot ask to change.
LDP or Solid Type Index registry ⚠️ Needs registry discovery This gives an enumerable container, but Iolanta would still need to know which registry to ask, and it adds a server or account model that is heavier than publishing nanopublications.
Built-in centralized Iolanta visualization index as the primary mechanism ✅ Iolanta-controlled discovery only This was the previous runtime implementation. It required Iolanta source changes and did not let other publishers participate directly. Runtime discovery now queries the public nanopub registry instead.

Each selected publication mechanism must include RDF that links the visualization data back to the ontology it describes, so Iolanta can query by ontology IRI after the publication mechanism has exposed or indexed the RDF.

Consequences

  • Iolanta needs a discovery layer that can gather visualization candidates from more than one mechanism and load all accepted RDF graphs.
  • Files under docs/visualizations/ remain authoring sources and MkDocs static assets; they are not loaded at runtime. Runtime discovery uses signed visualization nanopublications from the public registry (see iolanta:visualizes).
  • Discovery and trust policy need to be separate: finding a visualization graph does not imply that Iolanta should prefer it over publisher-controlled, user-configured, or locally installed data.

Implementation Steps

  • Define the minimum RDF shape for a visualization document that describes an ontology — documented on iolanta:visualizes.
  • Replace the hardcoded visualization index load with a visualization discovery service — iolanta/discovery/visualization_nanopublications.py queries the Knowledge Pixels registry on the first Iolanta.render() per instance.
  • Teach the ontology facet to use discovered visualization graphs before rendering term groups and labels — assertion graphs from active visualization nanopubs are loaded into the local dataset; MkDocsOntologyFacet and OntologyFacet pick up vann:termGroup via the existing ontology SPARQL.
  • Keep bundled overlays as authoring sources while external publication mechanisms are introduced — docs/visualizations/ is published to https://iolanta.tech/visualizations/ but not read at runtime.
  • Add regression tests using IBIS-like ontology data and an externally published visualization graph — see tests/discovery/.