1

I have a query like this:

SELECT  ?r ?r1 ?r2 ?r3 ?r4
WHERE
  { ?r  ?r1  ?r2 ;
        ?r3  ?r4
  }

I want to transform every triple with a optional element like:

SELECT  ?r ?r1 ?r2 ?r3 ?r4 ?r5
WHERE
  { {?r  ?r1  ?r2 .} OPTIONAL {?r ?r1 ?r5 .}
    {?r   ?r3  ?r4 .} OPTIONAL {?r ?r3 ?r5 .}
  }

basically i am trying to visit all ElementPathBlock, find a triple and transform it into :

{?r ?r1 ?r2 .} transform into {?r ?r1 ?r2 .} OPTIONAL {?r ?r1 ?r5 .}

But I cannot modify an Element while visiting it. Is there a way to do it in Jena?

Adrika
  • 51
  • 2
  • I mean, you could use [`ElementTransformer`](https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformer.html) or not? – UninformedUser Nov 13 '20 at 04:55
  • I solved the issue by extending the [ElementTransformCopyBase](https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformCopyBase.html) Class. Then I used [QueryTransformOps.transform](https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.html#transform-org.apache.jena.query.Query-org.apache.jena.sparql.syntax.syntaxtransform.ElementTransform-org.apache.jena.sparql.expr.ExprTransform-) to acheive the transformation I wanted. – Adrika Nov 13 '20 at 20:54

0 Answers0