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