w3c / rdf-star

RDF-star specification
https://w3c.github.io/rdf-star/
Other
119 stars 23 forks source link

use case: compact serialization of OWL graphs #148

Closed cmungall closed 3 years ago

cmungall commented 3 years ago

As an OWL ontology provider who is responsible for providing multiple large biomedical ontologies, many including rich graph structures (partonomies, lineage hierarchies)

I want a compact OWL serialization that avoids generating 4 triples for each existential axiom, whilst retaining semantic rigor

So that users of my ontologies can naturally traverse ontology graphs using simple triples, and optionally look up the OWL semantics of each triple

This use case is outlined in more detail in my blog post: https://douroucouli.wordpress.com/2019/07/11/proposed-strategy-for-semantics-in-rdf-and-property-graphs/

The core idea is that instead of 4 triples for a TBox graph edge, as we have now:

Finger owl:subClassOf [
  a owl:Restriction ;
  owl:onProperty :part_of
  owl:someValuesFrom :Hand
]

we would have a triple linking finger to hand, with the OWL semantics of the triple specified as triples on the core triple:

<<:finger :part-of :hand>> owlstar:hasInterpretation
owlstar:SubClassOfSomeValuesFrom .

The proposed vocabulary is here https://github.com/cmungall/owlstar

Note I have phrased this use case as a provider of biomedical ontologies (I provide some of the major ones, including GO, Uberon, Mondo, and am part of the Open Bio Ontologies team), but I believe this would be broadly useful. In particular I think this would be useful in Wikidata, which already provides existential axioms as simple triples.

afs commented 3 years ago

@cmungall Added to the UCR document: https://w3c.github.io/rdf-star/UCR/rdf-star-ucr.html#compact-serialization-of-owl-graphs

If you have had time to look at the draft publication, do you see any new requirements?

rdf-star (the name for the community work) differs from RDF* (the original work) in that <<>> triples are not asserted. It is possible to make statements without requiring the asserted triple. The annotation syntax provides a way to assert and make statement about a triple:

:finger :part-of :hand {| owlstar:hasInterpretation owlstar:SubClassOfSomeValuesFrom |} .

is two triples:

:finger :part-of :hand .
<<:finger :part-of :hand >> owlstar:hasInterpretation owlstar:SubClassOfSomeValuesFrom .

Is your second example more like the annotation case?

cmungall commented 3 years ago

Thank you. I think the assertion syntax {|...|} works better for this use case