Hi, Rob, Andy.

Yes! That solved it!

Thanks a lot!

--
diogo patrão




On Tue, Aug 27, 2013 at 2:04 PM, Andy Seaborne <[email protected]> wrote:

> On 27/08/13 17:16, Rob Vesse wrote:
>
>> I think the problem is that in the cases where this does not apply you
>> return the original input rather than making a copy so you overwrite
>> some/all of your changes
>>
>> Try replacing the following:
>>
>> return opUnion;
>>
>> With the following:
>>
>> return super.transform(opUnion, left, right);
>>
>> NB - I haven't tested this, but based on my experience of extending
>> TransformCopy this is likely the culprit.
>>
>> Rob
>>
>
> Yes.  In
>
>
> public Op transform(OpUnion opUnion, Op left, Op right)
>
> opUnion is the original input, and left/right the new sub ops due to the
> transforming the elements below this union, so you can see both original
> and sub-writes.
>
>         Andy
>
>
>
>
>
>>
>> On 8/26/13 6:22 PM, "Diogo FC Patrao" <[email protected]> wrote:
>>
>>  Hi all,
>>>
>>> I'm having trouble figuring out how Transformer class is working. See my
>>> classes below:
>>>
>>>
>>> public class GrumpyOptimizer extends TransformCopy {
>>>
>>> @Override
>>> public Op transform(OpUnion opUnion, Op left, Op right) {
>>> if ( !( left instanceof OpService && right instanceof OpService))
>>> return opUnion;
>>> Node l = ((OpService)left).getService()**;
>>> Node r = ((OpService)right).getService(**);
>>>
>>> // both runs go inside this if
>>> if (l.toString().**compareToIgnoreCase(r.**toString()) > 0 ) {
>>> return new OpUnion( right, left );
>>> }
>>> return opUnion;
>>> }
>>>
>>> }
>>>
>>> // --- test
>>>
>>> GrumpyOptimizer go = new GrumpyOptimizer();
>>>
>>> System.out.println("Teste 1");
>>>
>>>   Query query = QueryFactory.create("SELECT ?a {" +
>>>
>>> //** "{ SERVICE <http://3.com/> { ?a <
>>> http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <http://marafo.com/teste>
>>> } }" +
>>>
>>> //** "UNION " +
>>>
>>>   "{ SERVICE <http://2.com/> { ?a <
>>> http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <http://marafo.com/teste>
>>> } }" +
>>>
>>>   "UNION " +
>>>
>>>   "{ SERVICE <http://1.com/> { ?a <
>>> http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>>> >
>>> <http://marafo.com/chatuba>
>>> } } }" );
>>>
>>>
>>> Op op = Algebra.compile(query);
>>>
>>> System.out.println(op);
>>>
>>>   op = Transformer.transform(go, op);
>>>
>>> System.out.println(op);
>>>
>>> Ok; when running the code above keeping the commented lines, I get the
>>> expected result below:
>>>
>>> Teste optimizer
>>> (project (?a)
>>>   (union
>>>     (service <http://2.com/>
>>>       (bgp (triple ?a 
>>> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/teste>)))
>>>     (service <http://1.com/>
>>>       (bgp (triple ?a 
>>> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/chatuba>))))**)
>>>
>>> (project (?a)
>>>   (union
>>>     (service <http://1.com/>
>>>       (bgp (triple ?a 
>>> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/chatuba>)))
>>>     (service <http://2.com/>
>>>       (bgp (triple ?a 
>>> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/teste>)))))
>>>
>>>
>>> It "orders" the services by endpoint URL; however, If I uncomment the
>>> lines
>>> marked with //**, nothing changes:
>>>
>>> Teste optimizer
>>> (project (?a)
>>>   (union
>>>     (union
>>>       (service <http://3.com/>
>>>         (bgp (triple ?a <http://www.w3.org/1999/02/22-**
>>> rdf-syntax-ns#type <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/teste>)))
>>>       (service <http://2.com/>
>>>         (bgp (triple ?a <http://www.w3.org/1999/02/22-**
>>> rdf-syntax-ns#type <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/teste>))))
>>>     (service <http://1.com/>
>>>       (bgp (triple ?a 
>>> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/chatuba>))))**)
>>>
>>> (project (?a)
>>>   (union
>>>     (union
>>>       (service <http://3.com/>
>>>         (bgp (triple ?a <http://www.w3.org/1999/02/22-**
>>> rdf-syntax-ns#type <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/teste>)))
>>>       (service <http://2.com/>
>>>         (bgp (triple ?a <http://www.w3.org/1999/02/22-**
>>> rdf-syntax-ns#type <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/teste>))))
>>>     (service <http://1.com/>
>>>       (bgp (triple ?a 
>>> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
>>> <
>>> http://marafo.com/chatuba>))))**)
>>>
>>> I wasn't expecting that the whole thing would be sorted, but at least the
>>> first two OpService should. In case you're wondering, it gets into the IF
>>> that flip the nodes in both cases.
>>>
>>> It's running JENA 2.10.1-SNAPSHOT (apr-4).
>>>
>>> Thanks in advance!
>>>
>>> --
>>> diogo patrão
>>>
>>
>>
>

Reply via email to