Thanks both, Dave and Andy. This is exactly what I needed. It just seemed similar enough to the grammar bug that we ran into earlier that I wanted to check here first. Off to virtuoso-users I go with this information… Thanks, especially for the quick turnaround! //JT
On Tue, Oct 15, 2013 at 8:52 AM, Andy Seaborne <[email protected]> wrote: > Joshua, > > It's legal syntax. > > [[ > > Virtuoso 37000 Error SP031: SPARQL compiler: Object of transitive > triple pattern should be variable or QName or literal, not blank node > ]] > > suggests to me it is not an error in parsing but in translation/compilation > afterwards; it's quite specific to the form you've used. It might be doing > something special for "property*". > >> ObjectListPath >> ObjectPath > > ObjectPath ::= VarOrTerm | TriplesNodePath > > VarOrTerm covers the [] case, not the [ ... ] case. > > TriplesNodePath ::= CollectionPath | BlankNodePropertyListPath > > BlankNodePropertyListPath ::= '[' PropertyListPathNotEmpty ']' > > PropertyListPathNotEmpty ::= ... VerbSimple ObjectListPath ... > > matches "?p ?c" > > so [ ?prop ?c ] is OK. > > Andy > > PS The SPARQL validator at sparql.org is the grammar in the spec. The > parser and the HTML comes from the same javacc definition (HTML with a perl > script to format the output of javacc doc). It should be the post-REC > version. ARQ extensions are handled in the same grammar (as #ifdef !!) so > there is no manual intervention between master javacc and either spec or for > the strict SPARQL 1.1 parser. Well, that's the theory anyway. You'll have > to trust me as to the implementation of the theory. > > > On 15/10/13 13:21, Joshua TAYLOR wrote: >> >> Hi all, >> >> I recently posted an answer to a Stack Overflow question [1] that led >> me to write the query >> >> select ?prop ?c >> where { >> dbpedia:Milano dbpedia-owl:wikiPageRedirects* [ ?prop ?c ] . >> } >> >> and submit it to the DBpedia public endpoint [2] (which has the >> appropriate namespace prefixes defined), but I get this error message: >> >> """ >> Virtuoso 37000 Error SP031: SPARQL compiler: Object of transitive >> triple pattern should be variable or QName or literal, not blank node >> >> SPARQL query: >> define sql:big-data-const 0 >> #output-format:text/html >> define sql:signal-void-variables 1 define input:default-graph-uri >> <http://dbpedia.org> select ?prop ?c >> where { >> dbpedia:Milano dbpedia-owl:wikiPageRedirects* [ ?prop ?c ] . >> } >> """ >> >> If I explicitly define the prefixes >> >> prefix dbpedia: <http://dbpedia.org/resource/> >> prefix dbpedia-owl: <http://dbpedia.org/ontology/> >> select ?prop ?c >> where { >> rdf:Milano rdf:wikiPageRedirects* [ ?prop ?c ] . >> } >> >> and bring it over to sparql.org's validator, I get no complaints, and >> it says the query is equivalent to >> >> 1 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> >> 2 PREFIX dbpedia: <http://dbpedia.org/resouVirtuoso 37000 Error SP031: >> SPARQL compiler: Object of transitive > > triple pattern should be variable or QName or literal, not blank node > rce/> >> >> 3 >> 4 SELECT ?prop ?c >> 5 WHERE >> 6 { dbpedia:Milano (dbpedia-owl:wikiPageRedirects)* _:b0 . >> 7 _:b0 ?prop ?c >> 8 } >> >> which makes sense, based on 4.1.4 Syntax for Blank Nodes [4] from the >> spec which says: >> >> """ >> The following two forms >> [ :p "v" ] . >> [] :p "v" . >> allocate a unique blank node label (here "b57") and are equivalent to >> writing: >> _:b57 :p "v" . >> """ >> >> I've looked through the SPARQL 1.1 grammar, and traced down through >> >> GroupGraphPattern >> GroupGraphPatternSub >> TriplesBlock >> TriplesSameSubjectPath >> PropertyListPathNotEmpty >> ObjectListPath >> ObjectPath >> GraphNodePath >> VarOrTerm >> GraphTerm [3] >> >> at which point >> >> [109] GraphTerm ::= iri | RDFLiteral | NumericLiteral | >> BooleanLiteral | BlankNode | NIL >> [138] BlankNode ::= BLANK_NODE_LABEL | ANON >> >> so it seems like it's not legal (unfortunately). >> >> At first I'd though this might be a Virtuoso bug, since this would be >> pretty useful behavior to have, but now it looks like it might be a >> bug in the (Jena-based) validator. >> >> This seems like it might be related to an earlier "bug" in the spec >> that prevents property paths _within_ blank nodes [5]. Is this a bug >> in Jena or in Virtuoso? I'll file the bug report appropriately; I >> just need to know where to send it. >> >> Thanks, >> //JT >> >> [1] http://stackoverflow.com/q/19380175/1281433 >> [2] http://dbpedia.org/sparql >> [3] http://www.w3.org/TR/sparql11-query/#rGraphTerm >> [4] http://www.w3.org/TR/sparql11-query/#QSynBlankNodes >> [5] >> http://mail-archives.apache.org/mod_mbox/jena-users/201202.mbox/%[email protected]%3E >> > -- Joshua Taylor, http://www.cs.rpi.edu/~tayloj/
