0

I have an ARC2 based RDF store setup and filled with some data. The following query returns the expected results (all URIs of things of type vcard:Individual or foaf:Person) when I run it without the FILTER NOT EXISTS part:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX app: <http://example.com#>

SELECT ?person
WHERE {
  ?person rdf:type ?type .
  FILTER (?type = vcard:Individual || ?type = foaf:Person)
  FILTER NOT EXISTS {
    ?person app:id ?id
  }
}

When I try to exclude those things having the app:id property by running the full query, it fails with the following message:

Incomplete FILTER in ARC2_SPARQLPlusParser
Incomplete or invalid Group Graph pattern. Could not handle &quot;        FILTER NOT EXISTS {   &quot; in ARC2_SPARQLPlusParser

When testing the query in the query validator on sparql.org, there are no issues. Is there something wrong with my query that I am missing or is this a shortcoming of ARC2?

Can you think of an alternative query that I can try with ARC2 to get the desired result?

hielsnoppe
  • 2,819
  • 3
  • 31
  • 56

1 Answers1

3

ARC2 does not support SPARQL 1.1, thus, you have to use the common OPTIONAL-FILTER(!BOUND()) pattern:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX app: <http://example.com#>

SELECT ?person
WHERE {
  ?person rdf:type ?type .
  FILTER (?type = vcard:Individual || ?type = foaf:Person)
  OPTIONAL {
    ?person app:id ?id
  }
  FILTER ( !BOUND(?id) ) 
}
UninformedUser
  • 8,397
  • 1
  • 14
  • 23