Hi Ivan,

On Thu, Oct 15, 2009 at 5:26 PM, Ivan Mikhailov
<imikhai...@openlinksw.com> wrote:
> Aldo,
>
> I've reproduced the bug, will fix it.
> Thank you for the report (and for your patience while I was unable to
> understand the problem).

Cool.
BTW. It was my fault because I didn't isolate the error I meant to
pinpoint in the first example.

Subqueries are very useful when generating queries on the fly. You can
mix and match them with little code to create more complex queries (
as if they were procedures, but this provides some advantages ).

Thanks!
A


>
> Best Regards,
>
> Ivan Mikhailov
> OpenLink Software
> http://virtuoso.openlinksw.com
>
> On Thu, 2009-10-15 at 06:30 -0300, Aldo Bucchi wrote:
>> Hi Ivan,
>>
>> On Thu, Oct 15, 2009 at 6:08 AM, Ivan Mikhailov
>> <imikhai...@openlinksw.com> wrote:
>> > Hello Aldo,
>> >
>> >> Isn't there any way that the compiler can detect which variables are
>> > being referenced  in the select projections part?
>> >
>> > It detects, but you write "select ?text", not "select ?s ?text" in 
>> > subqueries.
>>
>> But try it:
>>
>> select distinct ?text where {
>>  { select ?text where {?s rdfs:label ?text} } union { select ?text
>> where {?s rdfs:comment ?text} }
>> } limit 10
>>
>> You'll get an error as well:
>> http://bit.ly/3vNARm
>>
>> >
>> > Like in SQL, Datalog and other similar languages, variables inside
>> > subexpressions are not in the surrounding scope, you should place ?s to
>> > the inner SELECT result-list to refer to it at the upper level.
>> > Similarly, ?text is usable not because it appears in { ?s
>> > rdfs:label ?text } but because it is found after SELECT. It could be,
>> > say,
>> > { select (?inner_s) as ?s (?inner_text) as ?text
>> > where {?inner_s rdfs:label ?inner_text} }
>> > to provide values for ?s and ?text even if there are no such variables
>> > in subquery at all.
>>
>> Yes, this part is clear.
>> The way I see it is that all variables projected ( select'ed ) by the
>> inner expression become "potentially" available for the outer
>> expression.
>> This only happens IF the outer expression binds them as well in the
>> conditions clause. ( it doesn't suffice for it to "select" them ).
>>
>> It is that IF that makes me mad every now and then.
>>
>> >
>> > Next version of SPARQL compiler may contain special check for
>> > "namesakes" in different scopes, to keep the author warned.
>>
>> The author says: "All warnings are welcome!" ;)
>>
>> Regards,
>> A
>>
>> >
>> > Best Regards,
>> > Ivan.
>> >
>> > On Thu, 2009-10-15 at 05:33 -0300, Aldo Bucchi wrote:
>> >> Hi,
>> >>
>> >> There is a general caveat when building SPARQL Unions of Subqueries in
>> >> Virtuoso which I believe is unnecessary.
>> >>
>> >> The following query works fine.
>> >>
>> >> select distinct ?s ?text where {
>> >>   { ?s rdfs:label ?text } union { ?s rdfs:comment ?text }
>> >> } limit 10
>> >>
>> >> But assume I want to complicate it a bit by using subqueries ( in this
>> >> case it makes no sense, but there are definitely use cases for this,
>> >> like combing results of complex queries )
>> >>
>> >> select distinct ?s ?text where {
>> >>   { select ?text where {?s rdfs:label ?text} } union { select ?text
>> >> where {?s rdfs:comment ?text} }
>> >> } limit 10
>> >>
>> >> The latter query will yield an error:
>> >>
>> >> 37000 Error SP031: SPARQL compiler: Variable 's' is used in the query
>> >> result set but not assigned
>> >>
>> >> So, it follows that I need to bind the variables at least once in the
>> >> outer pattern.
>> >> Fine, I can do that:
>> >>
>> >> select distinct ?s ?text where {
>> >>   ?s ?p ?text .
>> >>   { select ?text where {?s rdfs:label ?text} } union { select ?text
>> >> where {?s rdfs:comment ?text} }
>> >> } limit 10
>> >>
>> >> And it works ;)
>> >>
>> >> But, here's the observation: Why do I HAVE to declare the variables 
>> >> outside?
>> >> Isn't there any way that the compiler can detect which variables are
>> >> being referenced  in the select projections part?
>> >>
>> >> When dealing with complex queries I usually find myself writing dummy
>> >> BGPs, for example:
>> >>
>> >> ?interestingSubject ?xx1 ?xx2 .
>> >> ?xx3 ?xx4 ?interestingObject .
>> >> { subquery1... } union { subquery2...} union {subquery3...}
>> >>
>> >> Will enabling this "automatically" introduce ambiguity?
>> >>
>> >> Regards,
>> >> A
>> >>
>> >>
>> >
>> >
>>
>>
>>
>> --
>> Aldo Bucchi
>> skype:aldo.bucchi
>> http://www.univrz.com/
>> http://aldobucchi.com/
>>
>> PRIVILEGED AND CONFIDENTIAL INFORMATION
>> This message is only for the use of the individual or entity to which it is
>> addressed and may contain information that is privileged and confidential. If
>> you are not the intended recipient, please do not distribute or copy this
>> communication, by e-mail or otherwise. Instead, please notify us immediately 
>> by
>> return e-mail.
>>
>> ------------------------------------------------------------------------------
>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA
>> is the only developer event you need to attend this year. Jumpstart your
>> developing skills, take BlackBerry mobile applications to market and stay
>> ahead of the curve. Join us from November 9 - 12, 2009. Register now!
>> http://p.sf.net/sfu/devconference
>> _______________________________________________
>> Virtuoso-users mailing list
>> Virtuoso-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/virtuoso-users
>
>



-- 
Aldo Bucchi
skype:aldo.bucchi
http://www.univrz.com/
http://aldobucchi.com/

PRIVILEGED AND CONFIDENTIAL INFORMATION
This message is only for the use of the individual or entity to which it is
addressed and may contain information that is privileged and confidential. If
you are not the intended recipient, please do not distribute or copy this
communication, by e-mail or otherwise. Instead, please notify us immediately by
return e-mail.

Reply via email to