From: Burak Y. <bur...@gm...> - 2012-12-20 10:21:47
|
Hello, I' ve reorganize my query as you say without any nesting UNION. So for this query with "30 BLOCKS and 29 UNIONS" it worked successfully. But when block size grows bigger, I' ve received two different errors. First: For this query with "56 BLOCKS and 55 UNIONS" I' ve received this error: "Virtuoso 37000 Error SP031: SPARQL: Internal error: The length of generated SQL text has exceeded 10000 lines of code". Second: For this query with "57 BLOCKS and 56 UNIONS" I' ve received this error: "Virtuoso 37000 Error SP031: SPARQL compiler: The nesting depth of subexpressions exceed limits of SPARQL compiler". In spite of there is no nesting in the query, it sends me this error. I use pure POST request to send these queries. How can we overcome these two different errors? Best Regards, Burak Yönyül 2012/12/18 Ivan Mikhailov <imi...@op...> > Hello Burak > > If you want to get tens of result columns, not a long narrow result set > for all, > then you can simply remove extra nesting from your original query. > You can put all UNION mambers to one level. Even if UNION is specified > in the SPARQL spec as a binary operation you don't have to write so many > braces (like '+' that is binary as well, but you don't have to write > ((((1+2)+3)+4)+5), because 1+2+3+4+5 is quite OK). > > So > > SELECT * > WHERE > { > { ?y_0 <http://www.w3.org/2002/07/owl#sameAs> > <http://dbpedia.org/resource/Tetrahydrocannabinol> . > ?Int_0 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_0 . > ?Int_0 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_0 . > ?Int_0 > <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_0 > } > UNION > { ?y_1 <http://www.w3.org/2002/07/owl#sameAs> > <http://dbpedia.org/resource/Mescaline> . > ?Int_1 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_1 . > ?Int_1 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_1 . > ?Int_1 > <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_1 > } > > UNION > { ?y_2 <http://www.w3.org/2002/07/owl#sameAs> > <http://dbpedia.org/resource/Bacillus_Calmette-Gu%C3%A9rin> . > ?Int_2 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_2 . > ?Int_2 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_2 . > ?Int_2 > <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_2 > } > > ... > > UNION > { ?y_30 <http://www.w3.org/2002/07/owl#sameAs> > <http://dbpedia.org/resource/Cannabinol> . > ?Int_30 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_30 . > ?Int_30 > < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_30 . > ?Int_30 > <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_30 > } > } > > > will work fine. > > Best Regards > > Ivan Mikhailov > OpenLink Software > http://virtuoso.openlinksw.com > > > > On Mon, 2012-12-17 at 20:05 +0100, Patrick van Kleef wrote: > > Hello Burak Yönyül, > > > > > > > I cannot execute queries which are greater than a few kilobytes on > Virtuoso. I've loaded example drugbank dataset into Virtuoso Opensource 6.1 > and I'm trying to execute the query in the file I've attached here, on my > local drugbank dataset with the sparql endpoint " > http://155.223.24.47:8893/drugbank/sparql". But when I execute this I get > "HTTPException: 400 Bad Request". How can I execute queries greater than 25 > KB? > > > > I promised i would also have a look at the query itself and see if it > could be simplified. > > > > Your query consists of a union of repeating patterns like this: > > > > { ?y_0 <http://www.w3.org/2002/07/owl#sameAs> < > http://dbpedia.org/resource/Tetrahydrocannabinol> . > > ?Int_0 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_0 . > > ?Int_0 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_0 . > > ?Int_0 <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_0 > > } > > UNION > > { ?y_1 <http://www.w3.org/2002/07/owl#sameAs> < > http://dbpedia.org/resource/Mescaline> . > > ?Int_1 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_1 . > > ?Int_1 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_1 . > > ?Int_1 <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_1 > > } > > etc. > > > > In this case you should be able to use the SPARQL 1.1 IN construction[1] > as in: > > > > SELECT * WHERE { > > ?y_0 <http://www.w3.org/2002/07/owl#sameAs> ?d_1 . > > FILTER (?d_1 in ( > > <http://dbpedia.org/resource/Tetrahydrocannabinol> , > > <http://dbpedia.org/resource/Mescaline>, > > <http://dbpedia.org/resource/Bacillus_Calmette-Gu%C3%A9rin>, > > <http://dbpedia.org/resource/Sugammadex>, > > <http://dbpedia.org/resource/Carnitine> > > )). > > > > ?Int_0 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug1> > ?y_0 . > > ?Int_0 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/interactionDrug2> > ?IntDrug_0 . > > ?Int_0 < > http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/text> > ?IntEffect_0 > > } > > > > which results in a much shorter query. > > > > See also: > > [1] http://www.w3.org/TR/sparql11-query/#func-in > > > > > > Best regards, > > > > Patrick > > |