Question

How can I ensure that a resource is a dbpedia-owl:Person? Currently I have a a pattern like the following. What can I add to this query to ensure that each ?node is also a dbpedia-owl:Person?

?node dbpedia-owl:something ?edge .
Was it helpful?

Solution

As I replied on the DBpedia mailing list, you can use something like

select * where {
  ?influencer dbpedia-owl:influenced ?influencee .
  dbpedia-owl:Person ^a ?influencer, ?influencee .
}

That uses some syntactic sugar that SPARQL defines, but without it, it's simply

select * where {
  ?influencer dbpedia-owl:influenced ?influencee .
  ?influencer a dbpedia-owl:Person .
  ?influencee a dbpedia-owl:Person .
}

It doesn't matter which order you put the triple patterns in. E.g., you could also write

select * where {
  ?influencer a dbpedia-owl:Person .
  ?influencer dbpedia-owl:influenced ?influencee .
  ?influencee a dbpedia-owl:Person .
}

or

select * where {
  ?influencer a dbpedia-owl:Person .
  ?influencee a dbpedia-owl:Person .
  ?influencer dbpedia-owl:influenced ?influencee .
}

RDF is a graph based data representation, and a graph is a set of directed edges. The order of triples in the pattern doesn't matter.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top