Hi, I can't resist to make the changes now ;-)
Hope this help. Hasan On Sat, Dec 8, 2012 at 10:09 PM, Hasan Hasan <ha...@trialox.org> wrote: > 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 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >> >