Looking at "Creating class level relations for easier querying of the GO"

The problem you are solving is the one of limited inferencing in RDF engines; in particular, queries such as:

SELECT *
WHERE
 {
   ?whole rdfs:subClassOf ?sub.
   ?sub rdf:type owl:Restriction.
   ?sub owl:onProperty <http://purl.org/obo/owl/part_of>.
   ?sub owl:someValuesFrom ?part.
 }

are (1) awkward to express and (2) do not take into account the declared transitivity of part_of, thus returning incomplete answers.

It seems that (1) is just the price you pay for the RDF-OWL combination. However (2) is a major problem with most existing triplestores.

Your solution is to insert relations at the class level, such that you can query:

select *
where
 {
   ?whole <http://purl.org/obo/owl/part_of> ?part.
   ?whole rdfs:label ?wlabel.
 }

This certainly helps with (1) - you don't explicitly say, but I am guessing that you get support for (2) through basic RDFS transitivity that comes for free with virtuoso?

I actually like your solution, but I would have thought the OWL purists would have disliked it, even with the punning caveat. It is compatible with the OBO relations view of the world, in which relations can be said to hold between types by virtue of their corresponding instances; and you don't have to worry about the inforation loss re existential restrictions since this is essentially built in to the relation.

It does seem like a limited trick unless you get some of the OWL semantics from this alternate layering onto RDF - for example, how would you handle instantiation?


On Apr 16, 2007, at 10:31 PM, Alan Ruttenberg wrote:


I've started a page where I and others can document some of the SPARQL queries and techniques that are being explored as we progress towards the demo. The intention is to have a place to record things that are learned for later reference.

http://esw.w3.org/topic/HCLS/HCLSIG_Demo_QueryScratch

Regards,
Alan





Reply via email to