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:
@justin2004
Ok, seems you've dumped the wdt:P279 property.
But it's widely crowd-sourced (any WD editor can change it) and is not a proper class hierarchy.
Have you analyzed the structure of that subClassOf graph?
So these 3M explicit triples could result in hundreds of millions of inferred triples.