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/resource/>
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/