Viewing the go-plus ontology in a freshly installed, stock Protégé 5, I found a useful inference in the entities tab for http://purl.obolibrary.org/obo/GO_0003215:
'cardiac right ventricle morphogenesis' 'results in morphogenesis of' some 'cardiac ventricle'
'results in morphogenesis of' in this case is http://purl.obolibrary.org/obo/RO_0002298 and 'cardiac ventricle' is http://purl.obolibrary.org/obo/UBERON_0002082
If I load the same ontology into Virtuoso Open Source 07.20.3217 and describe http://purl.obolibrary.org/obo/GO_0003215, no relationship with 'cardiac ventricle' is listed. (Even after enabling OWL inference.)
However, http://purl.obolibrary.org/obo/GO_0003215 is linked to an anonymous node with
rdf:type owl:Restriction
owl:onProperty n3:RO_0002298
owl:someValuesFrom n3:UBERON_0002080
Where n3
is http://purl.obolibrary.org/obo/
Is there a Virtuoso configuration that would make this relationship clear in a describe
view?
Is there some concise SPARQL syntax that would make the relationship clear? Currently, I'm using
select distinct ?goid (str(?goterm) as ?go_str)
?svf (str(?anatomy ) as ?anat_str)
where
{
?goid obo:hasOBONamespace 'biological_process'^^xsd:string .
?goid rdfs:label ?goterm .
?goid rdfs:subClassOf+ ?parent .
?parent owl:someValuesFrom* ?svf .
?svf rdfs:subClassOf+
<http://purl.obolibrary.org/obo/UBERON_0001062> .
?svf rdfs:label ?anatomy
}
There are many things in play here.
You can use Property Paths for transitivity, as described in comment by @ASKW.
If you want to leverage Virtuoso's built-in reasoning for relationship types described by RDF Schema (rdfs:subClassOf
, rdfs:subPropertyOf
, rdfs:subClassOf
) or OWL (owl:equivalentProperty
, owl:equivalentClass
, owl:SymmetricProperty
, owl:inverseOf
, etc.), then you can leverage the inference rules pragma as described in @MarkMiller's comments (note reference to a blog post about that usage pattern).
If you want to write custom inference rules (i.e., use SPARQL as your Inference Rules language), then you will need Virtuoso 8.0 (coming soon) which delivers that capability. Note, this is the ultimate solution, as you can write your own algorithms using SPARQL.