rug-compling / noordergraf

http://noordergraf.rug.nl
0 stars 0 forks source link

representation of gender/person #11

Closed jobos closed 3 years ago

jobos commented 3 years ago

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:

tomb:t00000.p2 a t:person.n.01 ;
  :gender t:female.n.02 ;
  :nam "ANJE REKER" .
pebbe commented 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.

pebbe commented 3 years ago

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 ) ) .
}
pebbe commented 3 years ago

Ik heb de oude situatie hersteld, zonder :gender