Closed jobos closed 3 years ago
Dit is minder bezwaarlijk wanneer je de context kunt gebruiken.
Bijvoorbeeld, in plaats van dit:
SELECT ?person {
?person a t:person.n.01 .
}
...dit:
SELECT ?person {
?t :ent ?person .
}
Helaas kan dat niet omdat :ent
ook andere zaken als object kan hebben.
Als dit je invoer is:
@prefix ex: <http://localhost/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
ex:mens a skos:Concept ;
skos:narrower ex:man , ex:vrouw .
ex:man a skos:Concept ;
rdfs:subClassOf ex:mens .
ex:vrouw a skos:Concept ;
rdfs:subClassOf ex:mens .
ex:jan a ex:man .
ex:anna a ex:vrouw .
En je doet deze query:
PREFIX ex: <http://localhost/>
SELECT ?a {
?a a ex:mens .
}
Dan krijg je aanvankelijk niets.
Maar als je in AllegroGraph de optie Reasoning aanzet, dan krijg je wel wat:
<http://localhost/anna>
<http://localhost/jan>
AllegroGraph kan inferentie doen op basis van rdfs:subClassOf
maar niet op basis van skos:narrower
en skos:broader
.
Zonder inferentie kun je dit doen:
PREFIX ex: <http://localhost/>
SELECT ?a {
{
{ ?a a ex:mens . }
UNION
{ ?a a ex:man . }
UNION
{ ?a a ex:vrouw . }
}
}
Of korter:
PREFIX ex: <http://localhost/>
SELECT ?a {
?a a ?type .
FILTER ( ?type IN ( ex:mens, ex:man, ex:vrouw ) ) .
}
Ik heb de oude situatie hersteld, zonder :gender
Voor het zoeken met sparql is het handig om op het hoogste niveau één term te gebruiken als type. Daarom heb ik van geslacht een aparte eigenschap gemaakt: