The goal is simple: infer class membership (using rdfs:subClassOf and rdf:type predicates). Don't do it with a property path or something. You must let the reasoner do it.
I've tried to do this with a few reasoners. All unsuccessful.
- Apache Jena wasn't able to do it with 12GB of RAM.
- Stardog wasn't able to do it with 12GB of RAM.
- REQUIEM wasn't able to do it with 12GB of RAM.
In this zip file you'll find tbox.ttl
and abox.ttl
.
This is the query that should return 79 results:
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX ex: <http://example.com/>
SELECT *
WHERE
{ ex:condition0 a ?type
}
Without reasoning it yields 1 result:
type |
---|
http://www\.wikidata\.org/entity/Q32552 |
But with RDFS reasoning enabled there should be 79 results.
e.g.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex: <http://example.com/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX wd: <http://www.wikidata.org/entity/>
SELECT *
WHERE
{ ex:condition0 rdf:type/(rdfs:subClassOf)* ?type }
Yields:
Hi all,
I used this interesting challenge to spot bottlenecks in RDFSharp library (for those of you living in the .NET realm).
The first times it was not able to finish the task in linear time. Then I found chances of improvement which I'll make available in 3.1 milestone.
At the end RDFSharp reached the goal of answering 80 classes (we also include owl:NamedIndividual by default) in a reasoning time of 53 sec which took at its peak 5.7GB of memory. The platform for the experiment was a 32GB ThinkPad P53 running Windows 10 20H2.
Thanks and long life to the Semantic Web,
Marco