[ 
https://issues.apache.org/jira/browse/JENA-345?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13494173#comment-13494173
 ] 

Rob Vesse commented on JENA-345:
--------------------------------

Fix was relatively simple, I only needed to have execConstructTriples() check 
that triples were not malformed by modifying the code in 
TemplateLib.calcTriples() slightly

I saw that execConstruct() already called a function in ModelUtils to try to 
convert a Triple into a Statement which contained code for determining if a 
Triple was valid as a Statement so I extracted that part of the code into a 
separate helper function so it could be used from the calcTriples() call as 
well as internally within ModelUtils
                
> execConstructTriples() does not eliminate malformed triples from it's output
> ----------------------------------------------------------------------------
>
>                 Key: JENA-345
>                 URL: https://issues.apache.org/jira/browse/JENA-345
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: ARQ
>    Affects Versions: ARQ 2.9.4
>            Reporter: Rob Vesse
>            Assignee: Rob Vesse
>              Labels: construct, sparql
>
> Start from any model which has triples containing only literals as their 
> subjects, then try the following:
>     @Test public void testConstructRejectsBadTriples1()
>     {
>         String queryString = "CONSTRUCT { ?s ?p ?o } WHERE { ?o ?p ?s }";
>         Query q = QueryFactory.create(queryString);
>         
>         QueryExecution qExec = QueryExecutionFactory.create(q, m);
>         
>         Model resultModel = qExec.execConstruct();
>         assertEquals(0, resultModel.size());
>     }
>     
>     @Test public void testConstructRejectsBadTriples2()
>     {
>         String queryString = "CONSTRUCT { ?s ?p ?o } WHERE { ?o ?p ?s }";
>         Query q = QueryFactory.create(queryString);
>         
>         QueryExecution qExec = QueryExecutionFactory.create(q, m);
>         
>         Iterator<Triple> ts = qExec.execConstructTriples();
>         long count = 0;
>         while (ts.hasNext()) {
>             count++;
>             ts.next();
>         }
>         assertEquals(0, count);
>     }
> The first test passes because execConstruct() correctly rejects triples with 
> literal subjects as invalid, the second test fails because 
> execConstructTriples() does not follow this behavior.

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

Reply via email to