You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Andy Seaborne (JIRA)" <ji...@apache.org> on 2013/08/08 13:38:48 UTC

[jira] [Resolved] (JENA-502) VALUES keyword in subquery ignored in some cases.

     [ https://issues.apache.org/jira/browse/JENA-502?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andy Seaborne resolved JENA-502.
--------------------------------

       Resolution: Fixed
    Fix Version/s: Fuseki 0.2.8
                   Jena 2.10.2
    Reproduced In: Fuseki 0.2.7  (was: Fuseki 0.2.8)
    
> VALUES keyword in subquery ignored in some cases.
> -------------------------------------------------
>
>                 Key: JENA-502
>                 URL: https://issues.apache.org/jira/browse/JENA-502
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: Fuseki
>    Affects Versions: Fuseki 0.2.7, Fuseki 0.2.8
>         Environment: Ubuntu 13.04 x64
> OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.13.04.2)
>            Reporter: Barry Coughlan
>            Assignee: Andy Seaborne
>             Fix For: Jena 2.10.2, Fuseki 0.2.8
>
>
> Given the following data set in the graph "http://test.com":
> {code:title=data.ttl}
> @prefix : <http://example.com/>
> :s1 :type :thing .
> :s1 :p1 :o1 .
> :s2 :type :thing .
> :s2 :p1 :o1, :o2 .
> :s3 :type :thing .
> :s3 :p1 :o2 .
> {code}
> {code}s-put http://localhost:3030/ds/data http://test.com data.ttl{code}
> Suppose, as part of a subquery, we want to find all subjects that have (:p1 :o1):
> {code}
> PREFIX : <http://example.com/>
> SELECT *
> WHERE {
> SELECT DISTINCT ?s WHERE {
>   GRAPH <http://test.com> {
>      ?s :p1 ?obj .
>      VALUES ?obj { :o1 }
>   }
> }
> }
> {code}
> This returns the expected result (?s={:s1, :s2}). However when the GRAPH statement is outside the subquery:
> {code}
> PREFIX : <http://example.com/>
> SELECT *
> WHERE {
> GRAPH <http://test.com> {
>   SELECT DISTINCT ?s WHERE {
>      ?s :p1 ?obj .
>      VALUES ?obj { :o1 }
>   }
> }
> }
> {code}
> this returns ?s={:p1, :p2, :p3} - the VALUES block is ignored by the query, and removing the VALUES block gives the same result.
> Going back to the first query, let's try to select all triples with subjects restricted by the subquery:
> {code}
> PREFIX : <http://example.com/>
> SELECT ?s ?p ?o
> WHERE {
> {SELECT DISTINCT ?s WHERE {
>   GRAPH <http://test.com> {
>          ?s :p1 ?obj .
>      
>          VALUES ?obj { :o1 }
>   }
> }}
> GRAPH <http://test.com> { ?s ?p ?o }
> }
> {code}
> I expected the subquery to restrict ?s to {:s1, :s2} and the triple at the bottom to select all triples with that subject. This behaviour works as expected in OpenRDF Sesame. However, once again the VALUES keyword is ignored and the following output is observed:
> {code}
> s	p	o
> :s1	:type	:thing
> :s1	:p1	:o1
> :s2	:type	:thing
> :s2	:p1	:o1
> :s2	:p1	:o2
> :s3	:type	:thing
> :s3	:p1	:o2
> {code}
> I have tried this with other triples in the subquery, and the behaviour is as expected. It seems to be variables restricted with the VALUES keyword that misbehave.
> Another curiousity I found while trying to find a workaround. If I add the VALUES variable to the SELECT, changing the line {code}{SELECT DISTINCT ?s WHERE {{code} to {code}{SELECT DISTINCT ?s ?obj WHERE {{code} then I get the expected result of only :s1 and :s2 being selected. However, this is not suitable as a workaround because if there is more than one value in the VALUES block, there will be duplicate values for ?s.
> Sorry for the long bug report, I'm not exactly sure of what the problem is so thought I would give as much detail as possible. I discovered this first on 0.2.7 but ran most of these tests on the 0.2.8 build from jena-fuseki-0.2.8-20130804.075208-67-distribution.tar.gz.
> Regards,
> Barry

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira