Description
Continuing #351:
https://graphdb.ontotext.com/documentation/11.0/rules-optimisations.html#propchain gives another important example:
a 2-place PropChain
instead of the general owl:propertyChainAxiom
.
owl:propertyChainAxiom
needs to unroll the rdf:List
representing the chain, which makes it harder to implement.
Most chains found in practice are 2-place chains (and a chain of any length can be implemented as a sequence of 2-place chains), so let's consider
PropChain(?p,?q,?r). ?x ?p ?y. ?y ?q ?z => ?x ?r ?z
https://rawgit2.com/VladimirAlexiev/my/master/pubs/extending-owl2/index.html gives yet more variations on the topic, eg
transitiveLeft
is like transitiveOver
, but extends the chain on the left not the right, i.e.
transitiveLeft(?p,?q). ?x ?q ?y. ?y ?p ?z => ?x ?p ?z
transitiveOver(?p,?q). ?x ?p ?y. ?y ?q ?z => ?x ?p ?z
https://graphdb.ontotext.com/documentation/11.0/rules-optimisations.html#translating-owl-constructs-to-specialized-property-constructs
shows how owl:TransitiveOver
and owl:propertyChainAxiom
can be converted to these specialized constructs.
Now, what does that mean for SHACL rules? I don't yet know, but it's in the vein of "special constructs can sometimes be implemented more efficiently than more generic or "standard" constructs".