Like Antoine says, it depends heavily on the data the triple store will be indexing. The more heterogeneous the data, the better motivation there will be for reasoning. Thus, one of the best use-cases out there for reasoning at the moment is (ironically?) Linked Data.
Case and point; I want to ask for the pages about a resource ex:something
using SPARQL over a heterogeneous corpus of Linked Data, and I want fairly complete answers:
SELECT ?page
WHERE {
ex:something foaf:page ?page .
UNION { ?page foaf:topic ex:something . }
UNION { ?page foaf:primaryTopic ex:something . }
UNION { ex:something foaf:isPrimaryTopicOf ?page . }
UNION { ex:something foaf:weblog ?page . }
UNION { ex:something foaf:homepage ?page . }
UNION { ex:something foaf:tipjar ?page . }
UNION { ex:something foaf:openid ?page . }
UNION { ex:something po:microsite ?page . }
UNION { ex:something mo:biography ?page . }
UNION { ex:something mo:paid_download ?page . }
UNION { ex:something mo:onlinecommunity ?page . }
UNION { ex:something mo:discography ?page . }
UNION { ex:something mo:myspace ?page . }
UNION { ex:something mo:discogs ?page . }
UNION { ex:something mo:fanpage ?page . }
UNION { ex:something mo:review ?page . }
UNION { ex:something mo:amazon_asin ?page . }
UNION { ex:something mo:wikipedia ?page . }
UNION { ex:something mo:musicmoz ?page . }
UNION { ex:something mo:olga ?page . }
UNION { ex:something mo:mailorder ?page . }
UNION { ex:something mo:imdb ?page . }
UNION { ex:something mo:download ?page . }
UNION { ex:something mo:free_download ?page . }
UNION { ex:something mo:musicbrainz ?page . }
UNION { ex:something mo:preview_download ?page . }
UNION { ex:something mo:event_homepage ?page . }
UNION { ex:something mo:homepage ?page . }
UNION { ex:something mo:freedownload ?page . }
UNION { ex:something mo:licence ?page . }
UNION { ex:something mo:paiddownload ?page . }
UNION { ex:something doap:homepage ?page . }
UNION { ex:something rail:departures ?page . }
UNION { ex:something rail:arrivals ?page . }
UNION { ex:something xfn:mePage ?page . }
UNION { ex:something plink:profile ?page . }
UNION { ex:something plink:content ?page . }
UNION { ex:something plink:rss ?page . }
UNION { ex:something plink:foaf ?page . }
UNION { ex:something plink:atom ?page . }
UNION { ex:something plink:addFriend ?page . }
...
UNION { ex:somethingAlias foaf:page ?page . }
UNION { ?page foaf:primaryTopic ex:somethingAlias . }
...
}
Making out that list just ruined my day. If I also wanted to get rdfs:label
s, that would ruin my weekend. If I wanted to do this for all known aliases of ex:something
, that would ruin my "youth".
With reasoning enabled, you'd get the same answers with the non-day/weekend/youth-ruining query:
SELECT ?page
WHERE {
ex:something foaf:page ?page .
}
That's pretty much why you might want to do reasoning over a triple store.
Anyways, the best way of finding out what inferencing is useful would be to take real query-logs and figure out how many additional answers could be found with rule X
enabled. Unfortunately, not many people are using SPARQL endpoints and seemingly no-one has query-logs to share.
So instead, I'll just add my own (subjective) prioritised list for Linked Data to the pile:
owl:sameAs
owl:InverseFunctionalProperty
owl:FunctionalProperty
owl:inverseOf
rdfs:subPropertyOf
owl:equivalentProperty
rdfs:subClassOf
owl:equivalentClass
owl:SymmetricProperty
owl:TransitiveProperty
rdfs:domain
rdfs:range
The above considers (i) perceived usefulness for query-answering, (ii) current prevalence of use.
I've put rdfs:domain
and rdfs:range
so low because I tend only to notice them when they cause unnecessary grief (esp. in FOAF). This is a good example where, IMO, prevalence != usefulness
.
A high-level summary of priority would be:
- instance-equality-centric reasoning
- property-centric reasoning
- class-centric reasoning
There's a lot of instances out there that need to be aligned. After that, property "hierarchies" are typically much more detailed (and more interesting/nuanced) than class "hierarchies" in heterogeneously instantiated vocabularies (if you disagree, try reformulating the above foaf:page
example using classes from Linked Data vocabs). I think this trend will continue.