You can filter out dbprop:
properties,
I'm trying to filter out certain properties (e.g., dbpprop:
ones) from
the result of a SPARQL query. I'm querying the DBpedia SPARQL endpoint.
If you're binding properties in your result set, and you want to exclude ones whose URI begins with the dbpprop:
prefix, you can do that with
filter(!strstarts(str(?p),str(dbpprop:)))
or you can filter out properties that don't have type rdf:Property
.
Your pseudocode looks like it's doing something slightly different though:
quantity_of_interest, property, value, property_type = sparqlQuery(query)
if property_type == rdf:Property:
pass
else:
return quantity_of_interest, property, value
Every property could have the type rdf:Property
, since it's the class of RDF properties. DBpedia might not have the triple
p rdf:type rdf:Property
for each property p
, of course, so you may still be able to filter things out like this. If that's what you want to do, you can do it with filter not exists { … }
:
filter not exists { ?p rdf:type rdf:Property }
For DBpedia, it's the same right now,
As it turns out, these will have the same effect on DBpedia, since there are no properties that have type rdf:Property
and aren't also dbpprop:
properties; the following query returns 0
:
select (count(*) as ?num) where {
?p a rdf:Property
filter( !strstarts( str(?p), str(dbpprop:) ) )
}
limit 100
but one option is more future compatible.
I'd strongly suggest using the strstarts
filter rather than the not exist
here, though. While the URI of a property can't change over time (i.e., a URI is constant), the triples about it can change. Thus, if you filter out dbpprop:
properties, then you'll never accidentally filter out more than you're expecting. However, if you filter out things that have rdf:Property
as a type, then you can easily lose results in the future if more p rdf:type rdf:Property
triples are added (and it seems like such an addition would be logically compatible).