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.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://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#>>\n" > + > "PREFIX 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-**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#>>\n" > + > "PREFIX dc: > <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-**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 . } >> } >> >> 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@**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 >>>> >>>> >>>> >> >