Thomas, Yes, this is an intentional parser error. To make the FILTER condition meaningful, it should reside outside OPTIONAL, like this:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT ?name1 ?name2 ?document FROM <http://my_graph> WHERE { ?document dc:creator ?author1. ?author1 foaf:name ?name1. OPTIONAL { ?document dc:creator ?author2. ?author2 foaf:name ?name2. } FILTER (?author1!=?author2) . } Variable ?author1 is never bound inside the OPTIONAL clause, so FILTER (?author1!=?author2) does not differ from FILTER (?any_unused_variable_name != ?author2) . This is probably not what do you want. Semantics of SPARQL FILTER condition differs from semantics of SQL WHERE condition. We've decided that error message that violates The Spec is better than running query that match The Spec in an unusual way. You can add additional compile-time checks by placing define sql:signal-void-variables 1 line at the very beginning of the SPARQL statement (before all PREFIX and BASE declarations if present). Best Regards, Ivan Mikhailov, OpenLink Software. On Tue, 2008-02-19 at 16:14 +0100, Thomas Hornung wrote: > Hi, > > I have seen in a recent post a question regarding the SPARQL conformance > of Virtuoso. There you said, that "Virtuoso SPARQL does not match W3C > recommendation 100%". > > Right now I get a parser error message for a query, which is answered by > other SPARQL engines correctly. > > Is the parser error intentional or a bug? > > Here the query: > > PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > PREFIX dc: <http://purl.org/dc/elements/1.1/> > PREFIX dcterms: <http://purl.org/dc/terms/> > > SELECT ?name1 ?name2 ?document > FROM <http://my_graph> > WHERE { > ?document dc:creator ?author1. > ?author1 foaf:name ?name1. > OPTIONAL { > ?document dc:creator ?author2. > ?author2 foaf:name ?name2. > FILTER (?author1!=?author2). > } > } > > This is the error message: > > *** Error 37000: [Virtuoso Driver][Virtuoso Server]SQ074: Line 17 (...): > SP031: SPARQL compiler: Variable 'author1' is used in subexpressions of > the query but not assigned at ';' immediately before end of statement... > > > Thanks in advance, > Thomas > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Virtuoso-users mailing list > Virtuoso-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/virtuoso-users