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