You can't use variables in property paths, so

?p1/?p2

isn't a legal property path.  You shouldn't be able to parse it as a
legal query.  As an alternative (which I'm not sure will work, but it
might be worth investigating), you could use a
ParameterizedSparqlString with "?s ?p1/?p2 ?o" as content and do
substitutions on ?p1 and ?p2 in that, which would generate a legal
query.  I'm not sure whether the substitution would be performed
before any parsing has to happen though (that's why I'm not *sure*
that this would work).

On Thu, Jul 14, 2016 at 12:47 PM, A. Soroka <[email protected]> wrote:
> I don't quite see how this would cause the problem, but I do note that of the 
> three bindings in your code below, the first is _not_ to "s" (as you say in 
> your description), but to "o".
>
> ---
> A. Soroka
> The University of Virginia Library
>
>> On Jul 14, 2016, at 12:09 PM, Chris Jones <[email protected]> wrote:
>>
>> I'm building a simple query of the form "?s ?p1 / ?p2 ?o" and binding s, p1, 
>> and p2 using QuerySolutionMap. I get this error back:
>>
>> Exception in thread "main" org.apache.jena.query.QueryParseException: 
>> Encountered " "/" "/ "" at line 1, column 26.
>>
>> Here's the code that reproduces the error, using Jena 3.1.0:
>>
>> package org.cjones.test;
>>
>> import org.apache.jena.query.*;
>> import org.apache.jena.rdf.model.ResourceFactory;
>> import org.apache.jena.tdb.TDBFactory;
>>
>> public class Test {
>>    public static void main(String[] args) {
>>        Dataset dataset = TDBFactory.createDataset("db");
>>        String queryStr ="select ?o where { ?s ?p1 / ?p2 ?o }";
>>        QuerySolutionMap bindings =new QuerySolutionMap();
>>        bindings.add("o", 
>> ResourceFactory.createResource("http://example.com/Alice";));
>>        bindings.add("p1", 
>> ResourceFactory.createResource("http://example.com/boss";));
>>        bindings.add("p2", 
>> ResourceFactory.createResource("http://example.com/givenName";));
>>        dataset.begin(ReadWrite.READ);
>>        QueryExecution qe = QueryExecutionFactory.create(queryStr, dataset, 
>> bindings);
>>        ResultSet rs = qe.execSelect();
>>        // ... dataset.end();
>>    }
>> }
>>
>> I don't think I'm doing anything wrong, am I?
>>
>> Chris
>>
>



-- 
Joshua Taylor, http://www.cs.rpi.edu/~tayloj/

Reply via email to