Hi Giuseppe, Hi Reto

I agree with your suggestion Giuseppe to use LinkedHashSets.
I'll make the changes tomorrow.

Good night
Hasan

On Sat, Dec 8, 2012 at 6:20 PM, Giuseppe Miscione <
g.misci...@innovationengineering.eu> wrote:

> Exactly, I was suggestion only to allocate LinkedHashSets instead of
> HashSets.
> I tried this solution on my code version, using LinkedHashSets in this
> classes:
>
>  * org.apache.clerezza.rdf.core.**sparql.query.impl.**
> SimpleBasicGraphPattern
>  * org.apache.clerezza.rdf.core.**sparql.query.impl.**SimpleConstructQuery
>  * org.apache.clerezza.rdf.core.**sparql.query.impl.**SimpleDataSet
>  * org.apache.clerezza.rdf.core.**sparql.query.impl.**
> SimpleGroupGraphPattern
>
> And the test case that I suggested doesn't fail anymore. On the other
> side, I checked the generated strings and the FILTER and OPTIONAL sentences
> are not in the original order. This is the original query:
>
> *PREFIX mo: <http://www.tech-it-easy-**project.eu/ontologies/market_**
> ontology.owl#<http://www.tech-it-easy-project.eu/ontologies/market_ontology.owl#>
> >**
> **PREFIX list: 
> <http://jena.hpl.hp.com/ARQ/**list#<http://jena.hpl.hp.com/ARQ/list#>
> >**
> **PREFIX owl: 
> <http://www.w3.org/2002/07/**owl#<http://www.w3.org/2002/07/owl#>
> >**
> **PREFIX rdf: 
> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> >**
> **PREFIX rdfs: 
> <http://www.w3.org/2000/01/**rdf-schema#<http://www.w3.org/2000/01/rdf-schema#>
> >**
> **PREFIX dc: 
> <http://purl.org/dc/elements/**1.1/<http://purl.org/dc/elements/1.1/>
> >**
> **SELECT ?property ?range ?property_description ?subproperty
> ?subproperty_description**
> **WHERE**
> **{**
> **    ?property a owl:ObjectProperty .**
> **    FILTER (?property != owl:bottomObjectProperty) .**
> **    {**
> **        {**
> **            ?property rdfs:domain ?superclass .**
> **            mo:Company rdfs:subClassOf ?superclass .**
> **        }**
> **        UNION**
> **        {**
> **            ?property rdfs:domain ?dunion .**
> **            ?dunion owl:unionOf ?dlist .**
> **            ?dlist list:member ?superclass .**
> **            mo:Company rdfs:subClassOf ?superclass .**
> **        }**
> **    }**
> **    {**
> **        {**
> **            ?property rdfs:range ?superrange .**
> **            ?range rdfs:subClassOf ?superrange .**
> **            FILTER (!isBlank(?range)) .**
> **        }**
> **        UNION**
> **        {**
> **            ?property rdfs:range ?range .**
> **            FILTER (!isBlank(?range)) .**
> **        }**
> **    } .**
> **    FILTER (?range != owl:Nothing) .**
> **    OPTIONAL { ?somesub rdfs:subClassOf ?range . FILTER(?somesub !=
> owl:Nothing && ?somesub != ?range)}**
> **    FILTER (!bound(?somesub)) .**
> **    OPTIONAL**
> **    {**
> **        ?subproperty rdfs:subPropertyOf ?property .**
> **        FILTER(?subproperty != owl:bottomObjectProperty && ?subproperty
> != ?property)**
> **        OPTIONAL { ?subproperty dc:description ?subproperty_description
> . }**
> **    }**
> **    OPTIONAL { ?property dc:description ?property_description . }**
> **} *
>
> And this is the serialized string:
>
> *SELECT ?property ?range ?property_description ?subproperty
> ?subproperty_description **
> **WHERE**
> **{**
> **    ?property 
> <http://www.w3.org/1999/02/22-**rdf-syntax-ns#type<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>>
> <http://www.w3.org/2002/07/**owl#ObjectProperty<http://www.w3.org/2002/07/owl#ObjectProperty>>
> .**
> **    {**
> **        {**
> **            ?property 
> <http://www.w3.org/2000/01/**rdf-schema#domain<http://www.w3.org/2000/01/rdf-schema#domain>>
> ?superclass .**
> **<http://www.tech-it-easy-**project.eu/ontologies/market_**
> ontology.owl#Company<http://www.tech-it-easy-project.eu/ontologies/market_ontology.owl#Company>>
> <http://www.w3.org/2000/01/**rdf-schema#subClassOf<http://www.w3.org/2000/01/rdf-schema#subClassOf>>
> ?superclass .**
> **        } **
> **        UNION**
> **        {**
> **            ?property 
> <http://www.w3.org/2000/01/**rdf-schema#domain<http://www.w3.org/2000/01/rdf-schema#domain>>
> ?dunion .**
> **            ?dunion 
> <http://www.w3.org/2002/07/**owl#unionOf<http://www.w3.org/2002/07/owl#unionOf>>
> ?dlist .**
> **            ?dlist 
> <http://jena.hpl.hp.com/ARQ/**list#member<http://jena.hpl.hp.com/ARQ/list#member>>
> ?superclass .**
> **<http://www.tech-it-easy-**project.eu/ontologies/market_**
> ontology.owl#Company<http://www.tech-it-easy-project.eu/ontologies/market_ontology.owl#Company>>
> <http://www.w3.org/2000/01/**rdf-schema#subClassOf<http://www.w3.org/2000/01/rdf-schema#subClassOf>>
> ?superclass .**
> **        }**
> **    }**
> **    {**
> **        {**
> **            ?property 
> <http://www.w3.org/2000/01/**rdf-schema#range<http://www.w3.org/2000/01/rdf-schema#range>>
> ?superrange .**
> **            ?range 
> <http://www.w3.org/2000/01/**rdf-schema#subClassOf<http://www.w3.org/2000/01/rdf-schema#subClassOf>>
> ?superrange .**
> **            FILTER (! (isBLANK(?range)))**
> **        }**
> **        UNION**
> **        {**
> **            ?property 
> <http://www.w3.org/2000/01/**rdf-schema#range<http://www.w3.org/2000/01/rdf-schema#range>>
> ?range .**
> **            FILTER (! (isBLANK(?range)))**
> **        }**
> **    }**
> **    OPTIONAL**
> **    {**
> **        ?somesub 
> <http://www.w3.org/2000/01/**rdf-schema#subClassOf<http://www.w3.org/2000/01/rdf-schema#subClassOf>>
> ?range .**
> **        FILTER (((?somesub) != 
> (<http://www.w3.org/2002/07/**owl#Nothing<http://www.w3.org/2002/07/owl#Nothing>>))
> && ((?somesub) != (?range)))**
> **    }**
> **    OPTIONAL**
> **    {**
> **        ?subproperty <http://www.w3.org/2000/01/**
> rdf-schema#subPropertyOf<http://www.w3.org/2000/01/rdf-schema#subPropertyOf>>
> ?property .**
> **        OPTIONAL { ?subproperty <http://purl.org/dc/elements/**
> 1.1/description <http://purl.org/dc/elements/1.1/description>>
> ?subproperty_description . }**
> **        FILTER (((?subproperty) != (<http://www.w3.org/2002/07/**
> owl#bottomObjectProperty<http://www.w3.org/2002/07/owl#bottomObjectProperty>>))
> && ((?subproperty) != (?property)))**
> **    }**
> **    OPTIONAL { ?property 
> <http://purl.org/dc/elements/**1.1/description<http://purl.org/dc/elements/1.1/description>>
> ?property_description . }**
> **    FILTER ((?property) != (<http://www.w3.org/2002/07/**
> owl#bottomObjectProperty<http://www.w3.org/2002/07/owl#bottomObjectProperty>
> >))**
> **    FILTER ((?range) != 
> (<http://www.w3.org/2002/07/**owl#Nothing<http://www.w3.org/2002/07/owl#Nothing>
> >))**
> **    FILTER (! (BOUND(?somesub)))**
> **} *
>
> I checked this version of the serialized query on the reasoner powered
> graph that raised the problem and it worked fine.
>
> Il 08/12/2012 17:54, Reto Bachmann-Gmür ha scritto:
>
>  Ok, so you're suggesting not to change any interface but simly the
>> implemenentation to preserve the order, if the order has no relevane by
>> the
>> sparql spec then I would prefer that solution.
>>
>> Cheers,
>> Reto
>>
>> On Sat, Dec 8, 2012 at 5:42 PM, Giuseppe Miscione <
>> g.miscione@**innovationengineering.eu<g.misci...@innovationengineering.eu>>
>> wrote:
>>
>>  Hi Reto,
>>> in revision 1353713 SimpleBasicGraphPattern contains this code:
>>>
>>> public SimpleBasicGraphPattern(Set<****TriplePattern> triplePatterns) {
>>>      this.triplePatterns = (triplePatterns == null)
>>>      ? new HashSet<TriplePattern>()
>>>      : triplePatterns;
>>> }
>>>
>>> This implementation uses an HashSet that will mess up the order of the
>>> added elements. By simply allocating a LinkedHashSet you'll keep the Set
>>> logic (no duplicates) and you'll preserve the order in which the elements
>>> are added to the set. BasicGraphPattern won't be affected at all, it will
>>> continue to espose a Set, but the underlying LinkedHashSet implementation
>>> will keep the order of the triple patterns.
>>> I don't know why Sets were used before (maybe to avoid the presence of a
>>> duplicate triple pattern in the same graph pattern?), but the solution
>>> implemented by Hasan completely changed the interface of
>>> BasicGraphPattern
>>> , deprecating a method and adding an equivalent one.
>>>
>>> Il 08/12/2012 17:13, Reto Bachmann-Gmür ha scritto:
>>>
>>>  Hi Giuseppe and Hasan
>>>>
>>>> If the order of the order of patter is relevant then this should model
>>>> this
>>>> as a list. Using LinkeddHashSet in BasicGraphPattern would tie this to a
>>>> particular implementation. As far as I know the order of the clauses has
>>>> no
>>>> relevance by the sparql spec (like the order of triples in a graph). But
>>>> we
>>>> could maybe change our implementation so that it no longer supports
>>>> querying by queries described as object trees but only as string, the
>>>> parsing necessary for the fastlane could be limited to detecting the
>>>> type
>>>> of query (to parse the result in the right way) and the graphs agains
>>>> which
>>>> the query is directed.
>>>>
>>>> Cheers,
>>>> Reto
>>>>
>>>>
>>>> On Sat, Dec 8, 2012 at 3:45 PM, Giuseppe Miscione <
>>>> g.miscione@**innovationenginee**ring.eu<http://innovationengineering.eu>
>>>> <g.miscione@**innovationengineering.eu<g.misci...@innovationengineering.eu>
>>>> >>
>>>> wrote:
>>>>
>>>>   Hi Hasan,
>>>>
>>>>> I had a look at the code changes that you've made.
>>>>> I saw that you introduced in the parser produced objects methods that
>>>>> now
>>>>> works with Lists and you've deprecated the methods working with Sets.
>>>>> Now,
>>>>> I have a personal cosideration: wouldn't it be easier to restore the
>>>>> old
>>>>> code and use LinkedHashSets instead of HashSets, without changing so
>>>>> much
>>>>> the class interfaces with the introduction of deprecated methods?
>>>>>
>>>>> Il 08/12/2012 14:27, Hasan Hasan ha scritto:
>>>>>
>>>>>    Hi Giuseppe
>>>>>
>>>>>  I have resolved the issue
>>>>>> CLEREZZA-725<https://issues.******apache.org/jira/browse/******
>>>>>> CLEREZZA-725 <http://apache.org/jira/browse/****CLEREZZA-725><
>>>>>> http://apache.**org/jira/browse/**CLEREZZA-725<http://apache.org/jira/browse/**CLEREZZA-725>
>>>>>> **>
>>>>>> <https://issues.**apache.org/**jira/browse/**CLEREZZA-725<http://apache.org/jira/browse/**CLEREZZA-725>
>>>>>> <htt**ps://issues.apache.org/jira/**browse/CLEREZZA-725<https://issues.apache.org/jira/browse/CLEREZZA-725>
>>>>>> >
>>>>>> which
>>>>>> reflects the problem you raised.
>>>>>>
>>>>>> Kind regards
>>>>>> Hasan
>>>>>>
>>>>>> On Tue, Dec 4, 2012 at 11:34 PM, Hasan Hasan <ha...@trialox.org>
>>>>>> wrote:
>>>>>>
>>>>>>    Thanks Giuseppe
>>>>>>
>>>>>>  *
>>>>>>> *
>>>>>>> I'll try the test as soon as I have time during this week.
>>>>>>>
>>>>>>> Cheers
>>>>>>> Hasan
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Dec 3, 2012 at 3:13 PM, Giuseppe Miscione <
>>>>>>> g.miscione@****innovationenginee**ring.eu<htt**
>>>>>>> p://innovationengineering.eu <http://innovationengineering.eu>>
>>>>>>> <g.miscione@**innovationengine**ering.eu<http://innovationengineering.eu>
>>>>>>> <g.miscione@**innovationengineering.eu<g.misci...@innovationengineering.eu>
>>>>>>> >
>>>>>>> wrote:
>>>>>>>
>>>>>>>    Hi Hasan,
>>>>>>>
>>>>>>>  I prepared a JUnit test method that clarifies the problem:
>>>>>>>>
>>>>>>>> @Test
>>>>>>>> public void testParseMultipleTimes() throws Exception {
>>>>>>>>        String queryString =
>>>>>>>>            "PREFIX mo: <http://www.tech-it-easy-**
>>>>>>>> project.eu/ontologies/market_********ontology.owl#<http://project.eu/ontologies/market_******ontology.owl#>
>>>>>>>> <http://**project.eu/ontologies/market_******ontology.owl#<http://project.eu/ontologies/market_****ontology.owl#>
>>>>>>>> >
>>>>>>>> <http://**project.eu/**ontologies/market_******ontology.owl#<http://project.eu/ontologies/market_****ontology.owl#>
>>>>>>>> <http://project.**eu/ontologies/market_****ontology.owl#<http://project.eu/ontologies/market_**ontology.owl#>
>>>>>>>> >
>>>>>>>> <http://www.**tech-it-easy-**p**roject.eu/**ontologies/**<http://project.eu/**ontologies/**>
>>>>>>>> market_ontology.**<http://**tech-it-easy-project.eu/****
>>>>>>>> ontologies/market_ontology.**<http://tech-it-easy-project.eu/**ontologies/market_ontology.**>
>>>>>>>> >
>>>>>>>>
>>>>>>>> owl#<http://www.tech-it-easy-****project.eu/ontologies/market_****<http://project.eu/ontologies/market_**>
>>>>>>>> ontology.owl#<http://www.tech-**it-easy-project.eu/ontologies/**
>>>>>>>> market_ontology.owl#<http://www.tech-it-easy-project.eu/ontologies/market_ontology.owl#>
>>>>>>>> >
>>>>>>>>
>>>>>>>>> \n"
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>            "PREFIX list: 
>>>>>>>> <http://jena.hpl.hp.com/ARQ/********list#<http://jena.hpl.hp.com/ARQ/******list#>
>>>>>>>> <http://jena.hpl.hp.**com/ARQ/****list#<http://jena.hpl.hp.com/ARQ/****list#>
>>>>>>>> >
>>>>>>>> <http://jena.hpl.hp.**com/ARQ/****list#<http://jena.hpl.hp.**
>>>>>>>> com/ARQ/**list# <http://jena.hpl.hp.com/ARQ/**list#>>
>>>>>>>> <http://jena.hpl.hp.com/**ARQ/****list#<http://jena.hpl.hp.com/**ARQ/**list#>
>>>>>>>> <http://jena.hpl.hp.**com/**ARQ/list#<http://jena.hpl.hp.com/**ARQ/list#>
>>>>>>>> ><
>>>>>>>> http://jena.hpl.hp.com/ARQ/****list#<http://jena.hpl.hp.com/ARQ/**list#><
>>>>>>>> http://jena.hpl.hp.com/ARQ/**list#<http://jena.hpl.hp.com/ARQ/list#>
>>>>>>>> >
>>>>>>>>
>>>>>>>>> \n"
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>            "PREFIX owl: 
>>>>>>>> <http://www.w3.org/2002/07/********owl#<http://www.w3.org/2002/07/******owl#>
>>>>>>>> <http://www.w3.org/**2002/07/****owl#<http://www.w3.org/2002/07/****owl#>
>>>>>>>> >
>>>>>>>> <http://www.w3.org/2002/**07/****owl#<http://www.w3.org/2002/**07/**owl#>
>>>>>>>> <http://www.w3.org/2002/**07/**owl#<http://www.w3.org/2002/07/**owl#>
>>>>>>>> >
>>>>>>>> <http://www.w3.org/2002/**07/****owl#<http://www.w3.org/2002/**07/**owl#>
>>>>>>>> <http://www.w3.org/2002/****07/owl#<http://www.w3.org/2002/**07/owl#>
>>>>>>>> ><
>>>>>>>> http://www.w3.org/2002/07/****owl#<http://www.w3.org/2002/07/**owl#><
>>>>>>>> http://www.w3.org/2002/07/**owl# <http://www.w3.org/2002/07/owl#>>
>>>>>>>>
>>>>>>>>> \n"
>>>>>>>>>>>
>>>>>>>>>> +
>>>>>>>>            "PREFIX rdf: 
>>>>>>>> <http://www.w3.org/1999/02/22-****<http://www.w3.org/1999/02/22-**>
>>>>>>>> ****rdf-syntax-ns# <http://www.w3.org/1999/02/22-**
>>>>>>>> ****rdf-syntax-ns#<http://www.w3.org/1999/02/22-****rdf-syntax-ns#>
>>>>>>>> ><
>>>>>>>> http://www.**w3.org/1999/02/**22-**rdf-**syntax-ns#<http://w3.org/1999/02/22-**rdf-**syntax-ns#>
>>>>>>>> <http://**www.w3.org/1999/02/22-**rdf-**syntax-ns#<http://www.w3.org/1999/02/22-**rdf-syntax-ns#>
>>>>>>>> >
>>>>>>>> <http://www.**w3.org/1999/02/****22-rdf-syntax-**ns#<http://w3.org/1999/02/**22-rdf-syntax-**ns#>
>>>>>>>> <http://**w3.org/1999/02/22-rdf-syntax-****ns#<http://w3.org/1999/02/22-rdf-syntax-**ns#>
>>>>>>>> >
>>>>>>>> <http://**www.w3.org/1999/02/**22-rdf-**syntax-ns#<http://www.w3.org/1999/02/22-rdf-**syntax-ns#>
>>>>>>>> <http://**www.w3.org/1999/02/22-rdf-**syntax-ns#<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>>>>>>> >
>>>>>>>>
>>>>>>>>> \n"
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>            "PREFIX rdfs: <http://www.w3.org/2000/01/*****
>>>>>>>> ***rdf-schema# <http://www.w3.org/2000/01/******rdf-schema#><
>>>>>>>> http://www.w3.**org/2000/01/****rdf-schema#<http://www.w3.org/2000/01/****rdf-schema#>
>>>>>>>> >
>>>>>>>> <http://www.w3.**org/2000/01/****rdf-schema#<http://www.w3.**
>>>>>>>> org/2000/01/**rdf-schema# <http://www.w3.org/2000/01/**rdf-schema#>
>>>>>>>> >
>>>>>>>> <http://www.w3.org/**2000/01/****rdf-schema#<http://www.w3.org/**2000/01/**rdf-schema#>
>>>>>>>> <http://www.w3.**org/**2000/01/rdf-schema#<http://www.w3.org/**2000/01/rdf-schema#>
>>>>>>>> >
>>>>>>>> <http://www.w3.org/**2000/01/**rdf-schema#<http://www.w3.org/**2000/01/rdf-schema#>
>>>>>>>> <http://www.w3.org/**2000/01/rdf-schema#<http://www.w3.org/2000/01/rdf-schema#>
>>>>>>>> >
>>>>>>>>
>>>>>>>>> \n"
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>            "PREFIX dc: 
>>>>>>>> <http://purl.org/dc/elements/********1.1/<http://purl.org/dc/elements/******1.1/>
>>>>>>>> <http://purl.org/dc/**elements/****1.1/<http://purl.org/dc/elements/****1.1/>
>>>>>>>> >
>>>>>>>> <http://purl.org/dc/****elements/**1.1/<http://purl.org/dc/**elements/**1.1/>
>>>>>>>> <http://purl.**org/dc/elements/**1.1/<http://purl.org/dc/elements/**1.1/>
>>>>>>>> >
>>>>>>>> <http://purl.org/dc/******elements/1.1/<http://purl.org/dc/****elements/1.1/>
>>>>>>>> <http://purl.org/**dc/**elements/1.1/<http://purl.org/dc/**elements/1.1/>
>>>>>>>> ><
>>>>>>>> http://purl.org/dc/elements/****1.1/<http://purl.org/dc/elements/**1.1/><
>>>>>>>> http://purl.org/dc/elements/**1.1/<http://purl.org/dc/elements/1.1/>
>>>>>>>> >
>>>>>>>>   \n"
>>>>>>>>
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>            "SELECT ?property ?range ?property_description
>>>>>>>> ?subproperty
>>>>>>>> ?subproperty_description\n" +
>>>>>>>>            "WHERE {\n" +
>>>>>>>>            "    ?property a owl:ObjectProperty .\n" +
>>>>>>>>            "    FILTER (?property != owl:bottomObjectProperty) .\n"
>>>>>>>> +
>>>>>>>>            "    {\n" +
>>>>>>>>            "        {\n" +
>>>>>>>>            "            ?property rdfs:domain ?superclass .\n" +
>>>>>>>>            "            mo:Company rdfs:subClassOf ?superclass .\n"
>>>>>>>> +
>>>>>>>>            "        }\n" +
>>>>>>>>            "        UNION\n" +
>>>>>>>>            "        {\n" +
>>>>>>>>            "            ?property rdfs:domain ?dunion .\n" +
>>>>>>>>            "            ?dunion owl:unionOf ?dlist .\n" +
>>>>>>>>            "            ?dlist list:member ?superclass .\n" +
>>>>>>>>            "            mo:Company rdfs:subClassOf ?superclass .\n"
>>>>>>>> +
>>>>>>>>            "        }\n" +
>>>>>>>>            "    }\n" +
>>>>>>>>            "    {\n" +
>>>>>>>>            "        {\n" +
>>>>>>>>            "            ?property rdfs:range ?superrange .\n" +
>>>>>>>>            "            ?range rdfs:subClassOf ?superrange .\n" +
>>>>>>>>            "            FILTER (!isBlank(?range)) .\n" +
>>>>>>>>            "        }\n" +
>>>>>>>>            "        UNION\n" +
>>>>>>>>            "        {\n" +
>>>>>>>>            "            ?property rdfs:range ?range .\n" +
>>>>>>>>            "            FILTER (!isBlank(?range)) .\n" +
>>>>>>>>            "        }\n" +
>>>>>>>>            "    } .\n" +
>>>>>>>>            "    FILTER (?range != owl:Nothing) .\n" +
>>>>>>>>            "    OPTIONAL { ?somesub rdfs:subClassOf ?range .
>>>>>>>> FILTER(?somesub
>>>>>>>> != owl:Nothing && ?somesub != ?range)}\n" +
>>>>>>>>            "    FILTER (!bound(?somesub)) .\n" +
>>>>>>>>            "    OPTIONAL {\n" +
>>>>>>>>            "        ?subproperty rdfs:subPropertyOf ?property .\n" +
>>>>>>>>            "        FILTER(?subproperty != owl:bottomObjectProperty
>>>>>>>> &&
>>>>>>>> ?subproperty != ?property)\n" +
>>>>>>>>            "        OPTIONAL { ?subproperty dc:description
>>>>>>>> ?subproperty_description . }\n" +
>>>>>>>>            "    }\n" +
>>>>>>>>            "    OPTIONAL { ?property dc:description
>>>>>>>> ?property_description
>>>>>>>> .
>>>>>>>> }\n" +
>>>>>>>>            "} ";
>>>>>>>>
>>>>>>>>        Query query1 = QueryParser.getInstance().********
>>>>>>>> parse(queryString);
>>>>>>>>        System.out.println(query1.********toString());
>>>>>>>>
>>>>>>>>        System.out.println("----------********-------------");
>>>>>>>>
>>>>>>>>        Thread.sleep(5000l);
>>>>>>>>
>>>>>>>>        Query query2 = QueryParser.getInstance().********
>>>>>>>> parse(queryString);
>>>>>>>>        System.out.println(query2.********toString());
>>>>>>>>
>>>>>>>>        Assert.assertEquals(query1.********toString(),
>>>>>>>> query2.toString());
>>>>>>>>
>>>>>>>> }
>>>>>>>>
>>>>>>>> By separating the two parse() calls with a 5 seconds sleep, you'll
>>>>>>>> see
>>>>>>>> that the two parsed objects will produce different strings. Without
>>>>>>>> the
>>>>>>>> Thread.sleep() call the test method doesn't fail, so I think there's
>>>>>>>> something time-related in the javacc parser that will mix up the
>>>>>>>> parsed
>>>>>>>> statements.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Giuseppe
>>>>>>>>
>>>>>>>> Il 03/12/2012 10:25, Giuseppe Miscione ha scritto:
>>>>>>>>
>>>>>>>>     Hi Hasan,
>>>>>>>>
>>>>>>>>   this is the query on which I was working:
>>>>>>>>
>>>>>>>>> PREFIX mo: <http://www.tech-it-easy-******pro**
>>>>>>>>> ject.eu/ontologies/market_** 
>>>>>>>>> <http://project.eu/ontologies/****<http://project.eu/ontologies/**>
>>>>>>>>> market_** 
>>>>>>>>> <http://project.eu/ontologies/**market_**<http://project.eu/ontologies/market_**>
>>>>>>>>> >>
>>>>>>>>> ontology.owl#<http://www.tech-******it-easy-project.eu/****
>>>>>>>>> ontologies/** <http://it-easy-project.eu/**ontologies/**><
>>>>>>>>> http://it-easy-**project.eu/ontologies/**<http://it-easy-project.eu/ontologies/**>
>>>>>>>>> >
>>>>>>>>> market_ontology.owl#<http://****www.tech-it-easy-project.eu/**<http://www.tech-it-easy-project.eu/**>
>>>>>>>>> ontologies/market_ontology.****owl#<http://www.tech-it-easy-**
>>>>>>>>> project.eu/ontologies/market_**ontology.owl#<http://www.tech-it-easy-project.eu/ontologies/market_ontology.owl#>
>>>>>>>>> >
>>>>>>>>> PREFIX list: 
>>>>>>>>> <http://jena.hpl.hp.com/ARQ/********list#<http://jena.hpl.hp.com/ARQ/******list#>
>>>>>>>>> <http://jena.hpl.hp.**com/ARQ/****list#<http://jena.hpl.hp.com/ARQ/****list#>
>>>>>>>>> >
>>>>>>>>> <http://jena.hpl.hp.**com/ARQ/****list#<http://jena.hpl.hp.**
>>>>>>>>> com/ARQ/**list# <http://jena.hpl.hp.com/ARQ/**list#>>
>>>>>>>>> <http://jena.hpl.hp.com/**ARQ/****list#<http://jena.hpl.hp.com/**ARQ/**list#>
>>>>>>>>> <http://jena.hpl.hp.**com/**ARQ/list#<http://jena.hpl.hp.com/**ARQ/list#>
>>>>>>>>> ><
>>>>>>>>> http://jena.hpl.hp.com/ARQ/****list#<http://jena.hpl.hp.com/ARQ/**list#>
>>>>>>>>> <http://jena.hpl.hp.com/**ARQ/list#<http://jena.hpl.hp.com/ARQ/list#>
>>>>>>>>> >
>>>>>>>>> PREFIX owl: 
>>>>>>>>> <http://www.w3.org/2002/07/********owl#<http://www.w3.org/2002/07/******owl#>
>>>>>>>>> <http://www.w3.org/**2002/07/****owl#<http://www.w3.org/2002/07/****owl#>
>>>>>>>>> >
>>>>>>>>> <http://www.w3.org/2002/**07/****owl#<http://www.w3.org/2002/**07/**owl#>
>>>>>>>>> <http://www.w3.org/2002/**07/**owl#<http://www.w3.org/2002/07/**owl#>
>>>>>>>>> >
>>>>>>>>> <http://www.w3.org/2002/**07/****owl#<http://www.w3.org/2002/**07/**owl#>
>>>>>>>>> <http://www.w3.org/2002/****07/owl#<http://www.w3.org/2002/**07/owl#>
>>>>>>>>> ><
>>>>>>>>> http://www.w3.org/2002/07/****owl#<http://www.w3.org/2002/07/**owl#><
>>>>>>>>> http://www.w3.org/2002/07/**owl# <http://www.w3.org/2002/07/owl#>
>>>>>>>>> >>>
>>>>>>>>> PREFIX rdf: 
>>>>>>>>> <http://www.w3.org/1999/02/22-********rdf-syntax-ns#<http://www.w3.org/1999/02/22-******rdf-syntax-ns#>
>>>>>>>>> <http://**www.w3.org/1999/02/22-****rdf-**syntax-ns#<http://www.w3.org/1999/02/22-****rdf-syntax-ns#>
>>>>>>>>> >
>>>>>>>>> <http://www.**w3.org/1999/02/**22-**rdf-**syntax-ns#<http://w3.org/1999/02/22-**rdf-**syntax-ns#>
>>>>>>>>> <http://**www.w3.org/1999/02/22-**rdf-**syntax-ns#<http://www.w3.org/1999/02/22-**rdf-syntax-ns#>
>>>>>>>>> >
>>>>>>>>> <http://www.**w3.org/1999/02/****22-rdf-syntax-**ns#<http://w3.org/1999/02/**22-rdf-syntax-**ns#>
>>>>>>>>> <http://**w3.org/1999/02/22-rdf-syntax-****ns#<http://w3.org/1999/02/22-rdf-syntax-**ns#>
>>>>>>>>> >
>>>>>>>>> <http://**www.w3.org/1999/02/**22-rdf-**syntax-ns#<http://www.w3.org/1999/02/22-rdf-**syntax-ns#>
>>>>>>>>> <http://**www.w3.org/1999/02/22-rdf-**syntax-ns#<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>>>>>>>> >
>>>>>>>>> PREFIX rdfs: 
>>>>>>>>> <http://www.w3.org/2000/01/********rdf-schema#<http://www.w3.org/2000/01/******rdf-schema#>
>>>>>>>>> <http://www.w3.**org/2000/01/****rdf-schema#<http://www.w3.org/2000/01/****rdf-schema#>
>>>>>>>>> >
>>>>>>>>> <http://www.w3.**org/2000/01/****rdf-schema#<http://www.w3.**
>>>>>>>>> org/2000/01/**rdf-schema#<http://www.w3.org/2000/01/**rdf-schema#>
>>>>>>>>> >
>>>>>>>>> <http://www.w3.org/**2000/01/****rdf-schema#<http://www.w3.org/**2000/01/**rdf-schema#>
>>>>>>>>> <http://www.w3.**org/**2000/01/rdf-schema#<http://www.w3.org/**2000/01/rdf-schema#>
>>>>>>>>> >
>>>>>>>>> <http://www.w3.org/**2000/01/**rdf-schema#<http://www.w3.org/**2000/01/rdf-schema#>
>>>>>>>>> <http://www.w3.org/**2000/01/rdf-schema#<http://www.w3.org/2000/01/rdf-schema#>
>>>>>>>>> >
>>>>>>>>> PREFIX dc: 
>>>>>>>>> <http://purl.org/dc/elements/********1.1/<http://purl.org/dc/elements/******1.1/>
>>>>>>>>> <http://purl.org/dc/**elements/****1.1/<http://purl.org/dc/elements/****1.1/>
>>>>>>>>> >
>>>>>>>>> <http://purl.org/dc/****elements/**1.1/<http://purl.org/dc/**elements/**1.1/>
>>>>>>>>> <http://purl.**org/dc/elements/**1.1/<http://purl.org/dc/elements/**1.1/>
>>>>>>>>> >
>>>>>>>>> <http://purl.org/dc/******elements/1.1/<http://purl.org/dc/****elements/1.1/>
>>>>>>>>> <http://purl.org/**dc/**elements/1.1/<http://purl.org/dc/**elements/1.1/>
>>>>>>>>> ><
>>>>>>>>> http://purl.org/dc/elements/****1.1/<http://purl.org/dc/elements/**1.1/>
>>>>>>>>> <http://purl.org/dc/**elements/1.1/<http://purl.org/dc/elements/1.1/>
>>>>>>>>> >
>>>>>>>>> SELECT ?property ?range ?property_description ?subproperty
>>>>>>>>> ?subproperty_description
>>>>>>>>> WHERE {
>>>>>>>>>        ?property a owl:ObjectProperty .
>>>>>>>>>        FILTER (?property != owl:bottomObjectProperty) .
>>>>>>>>>        {
>>>>>>>>>            {
>>>>>>>>>                ?property rdfs:domain ?superclass .
>>>>>>>>>                mo:Company rdfs:subClassOf ?superclass .
>>>>>>>>>            }
>>>>>>>>>            UNION
>>>>>>>>>            {
>>>>>>>>>                ?property rdfs:domain ?dunion .
>>>>>>>>>                ?dunion owl:unionOf ?dlist .
>>>>>>>>>                ?dlist list:member ?superclass .
>>>>>>>>>                mo:Company rdfs:subClassOf ?superclass .
>>>>>>>>>            }
>>>>>>>>>        }
>>>>>>>>>        {
>>>>>>>>>            {
>>>>>>>>>                ?property rdfs:range ?superrange .
>>>>>>>>>                ?range rdfs:subClassOf ?superrange .
>>>>>>>>>                FILTER (!isBlank(?range)) .
>>>>>>>>>            }
>>>>>>>>>            UNION
>>>>>>>>>            {
>>>>>>>>>                ?property rdfs:range ?range .
>>>>>>>>>                FILTER (!isBlank(?range)) .
>>>>>>>>>            }
>>>>>>>>>        } .
>>>>>>>>>        FILTER (?range != owl:Nothing) .
>>>>>>>>>        OPTIONAL { ?somesub rdfs:subClassOf ?range .
>>>>>>>>> FILTER(?somesub !=
>>>>>>>>> owl:Nothing && ?somesub != ?range)}
>>>>>>>>>        FILTER (!bound(?somesub)) .
>>>>>>>>>        OPTIONAL {
>>>>>>>>>            ?subproperty rdfs:subPropertyOf ?property .
>>>>>>>>>            FILTER(?subproperty != owl:bottomObjectProperty &&
>>>>>>>>> ?subproperty
>>>>>>>>> != ?property)
>>>>>>>>>            OPTIONAL { ?subproperty dc:description
>>>>>>>>> ?subproperty_description
>>>>>>>>> . }
>>>>>>>>>        }
>>>>>>>>>        OPTIONAL { ?property dc:description ?property_description .
>>>>>>>>> }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> Il 03/12/2012 07:53, Hasan Hasan ha scritto:
>>>>>>>>>
>>>>>>>>>    Hi Giuseppe
>>>>>>>>>
>>>>>>>>>  can you please provide an example of the query that you use and
>>>>>>>>>> that I
>>>>>>>>>> can
>>>>>>>>>> reproduce easily?
>>>>>>>>>> I will try to take some time this week to have a look.
>>>>>>>>>>
>>>>>>>>>> Kind regards
>>>>>>>>>> Hasan
>>>>>>>>>>
>>>>>>>>>> On Fri, Nov 30, 2012 at 5:36 PM, Giuseppe Miscione <
>>>>>>>>>> g.miscione@******innovationenginee**ring.eu<**htt**
>>>>>>>>>> p://innovationengineering.eu 
>>>>>>>>>> <http://innovationengineering.**eu<http://innovationengineering.eu>
>>>>>>>>>> >>
>>>>>>>>>>
>>>>>>>>>> <g.miscione@****innovationengine**ering.eu<htt**
>>>>>>>>>> p://innovationengineering.eu <http://innovationengineering.eu>>
>>>>>>>>>> <g.miscione@**innovationengine**ering.eu<http://innovationengineering.eu>
>>>>>>>>>> <g.miscione@**innovationengineering.eu<g.misci...@innovationengineering.eu>
>>>>>>>>>> >
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>     Hi all,
>>>>>>>>>>
>>>>>>>>>>   I found a bug in the SPARQL query execution chain, specifically
>>>>>>>>>> in
>>>>>>>>>>
>>>>>>>>>>> the
>>>>>>>>>>> *org.apache.clerezza.rdf.core.**********sparql.query.Query*
>>>>>>>>>>> objects
>>>>>>>>>>>
>>>>>>>>>>> serialization
>>>>>>>>>>> made with the *org.apache.clerezza.rdf.core.******
>>>>>>>>>>> ****sparql.query.impl.****
>>>>>>>>>>> SimpleStringQuerySerializer*
>>>>>>>>>>> methods.
>>>>>>>>>>> The problem comes from the fact that the javacc objects used for
>>>>>>>>>>> mapping
>>>>>>>>>>> triple patterns are not listed in the same order as in the
>>>>>>>>>>> original
>>>>>>>>>>> query
>>>>>>>>>>> string. *SimpleStringQuerySerializer* serializes patterns into
>>>>>>>>>>> the
>>>>>>>>>>> ouput
>>>>>>>>>>> string in the order returned by the javacc parser, and so the
>>>>>>>>>>> output
>>>>>>>>>>> string
>>>>>>>>>>> won't always be equivalent to the source one. Moreover, parsing
>>>>>>>>>>> multiple
>>>>>>>>>>> times the same query string will result in different output
>>>>>>>>>>> strings.
>>>>>>>>>>>
>>>>>>>>>>> This problem is even more annoying when executing (like in my
>>>>>>>>>>> case)
>>>>>>>>>>> queries on graphs enanched with Pellet reasoner, because it has
>>>>>>>>>>> obviuos
>>>>>>>>>>> difficulties in inferencing relations if the order of triple
>>>>>>>>>>> patterns
>>>>>>>>>>> in
>>>>>>>>>>> the query is not the provided one.
>>>>>>>>>>>
>>>>>>>>>>> I solved the problem in my environment by simply saving the
>>>>>>>>>>> original
>>>>>>>>>>> string into the parsed *Query *object and then making
>>>>>>>>>>> *SimpleStringQuerySerializer* returns this string, without any
>>>>>>>>>>> processing.
>>>>>>>>>>>
>>>>>>>>>>> Can anyone take a look at the serializer to find a maybe better
>>>>>>>>>>> solution
>>>>>>>>>>> to avoid this weird behaviour?
>>>>>>>>>>>
>>>>>>>>>>> Regards,
>>>>>>>>>>> Giuseppe Miscione
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>

Reply via email to