<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6001.18226" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>You're approaching this with a SQL mindset, and in my view 
that's not the right place to start - we're dealing here with hierarchies rather 
than tables.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>I think it's often best to forget FLWOR expressions for 
this kind of thing and go back to basic XPath, because XPath is 
more&nbsp;natural to the hierarchical structure of XML. Keep FLWOR expressions 
for when you need to do real joins using value-based 
relationships.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>I'm having a little trouble working out what your query is 
intended to mean. The predicate:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT color=#0000ff><FONT 
color=#000000>(($figure/title='Examples'&nbsp;or $section/title='Syntax) or 
($figure/title='Examples' and </FONT><A 
href="mailto:$figure/image/@source='example.gif'">$figure/image/@source='example.gif'</A><FONT 
color=#000000>)))</FONT></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>has the form </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>(A or B) or (A and C)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>which is equivalent to</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>(A or B)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>But let's imagine that the second test on $figure/title was 
looking for 'Examples2', I would then write the query as</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>book[author='Dan Suciu'][section/title='Syntax' or 
section/figure/title='Examples' or section/figure[title='Examples2' and <A 
href="mailto:image/@source='example.gif'">image/@source='example.gif'</A>]]</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>No need for XQuery here - XPath 1.0 is quite 
sufficient.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2>Michael Kay</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=175041917-23042009><FONT face=Arial 
color=#0000ff size=2><A 
href="http://www.saxonica.com/">http://www.saxonica.com/</A></FONT></SPAN></DIV><BR>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> talk-bounces@x-query.com 
  [mailto:talk-bounces@x-query.com] <B>On Behalf Of </B>Eric 
  Robinson<BR><B>Sent:</B> 23 April 2009 17:50<BR><B>To:</B> 
  talk@x-query.com<BR><B>Subject:</B> [xquery-talk] outer 
  for<BR></FONT><BR></DIV>
  <DIV></DIV>
  <TABLE cellSpacing=0 cellPadding=0 border=0>
    <TBODY>
    <TR>
      <TD vAlign=top>
        <DIV>I was wondering if someone can help me with a xquery issue I am 
        having.</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>What I am trying to do is create a web page that will allow a user 
        to enter information about what they are looking for in a xml document 
        and return to them the xml document if it matches their criteria. I 
        thought I had it all working till I hit an issue with missing repeatable 
        complex types.</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>Example of xml and xquery that works.</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>&lt;book&gt;</DIV>
        <DIV>&nbsp; &lt;title&gt;Data on the web&lt;/title&gt;</DIV>
        <DIV>&nbsp; &lt;author&gt;Dan Suciu&lt;/author&gt;</DIV>
        <DIV>&nbsp; &lt;section&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;title&gt;Introduction&lt;/title&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;figure&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        &lt;title&gt;Traditional&lt;/title&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;image 
        source="csarch.gih"/&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;/figure&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;figure&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        &lt;title&gt;Examples&lt;/title&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;image 
        source="example.gif"/&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;/figure&gt;</DIV>
        <DIV>&nbsp; &lt;/section&gt;</DIV>
        <DIV>&nbsp; &lt;section&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;title&gt;Syntax&lt;/title&gt;</DIV>
        <DIV>&nbsp; &lt;/section&gt;</DIV>
        <DIV>&lt;/book&gt;</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>for $book in /book</DIV>
        <DIV>for $section in $book/section</DIV>
        <DIV>for $figure in $section/figure</DIV>
        <DIV>where ($book/author='Dan Suciu' and (($figure/title='Examples' and 
        $section/title='Syntax) or ($figure/title='Examples' and <A 
        href="mailto:$figure/image/@source='example.gif'">$figure/image/@source='example.gif'</A>)))</DIV>
        <DIV>return $book</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>Since the xml matches the where at </DIV>
        <DIV>&lt;figure&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        &lt;title&gt;Examples&lt;/title&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;image 
        source="example.gif"/&gt;</DIV>
        <DIV>&lt;/figure&gt;</DIV>
        <DIV>it returns me the enitre document like I want.</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>Example that breaks my xquery.</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>&lt;book&gt;</DIV>
        <DIV>&lt;title&gt;Data on the web&lt;/title&gt;</DIV>
        <DIV>&nbsp; &lt;author&gt;Dan Suciu&lt;/author&gt;</DIV>
        <DIV>&nbsp; &lt;section&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;title&gt;Introduction&lt;/title&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp;&lt;/section&gt;</DIV>
        <DIV>&nbsp; &lt;section&gt;</DIV>
        <DIV>&nbsp;&nbsp;&nbsp; &lt;title&gt;Syntax&lt;/title&gt;</DIV>
        <DIV>&nbsp; &lt;/section&gt;</DIV>
        <DIV>&lt;/book&gt;</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>for $book in /book</DIV>
        <DIV>for $section in $book/section</DIV>
        <DIV>for $figure in $section/figure</DIV>
        <DIV>where ($book/author='Dan Suciu' and 
        (($figure/title='Examples'&nbsp;or $section/title='Syntax) or 
        ($figure/title='Examples' and <A 
        href="mailto:$figure/image/@source='example.gif'">$figure/image/@source='example.gif'</A>)))</DIV>
        <DIV>return $book</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>This will always return nothing because there is no 
        /book/section/figure in the xml.</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>I believe once "outer for" is implemented I will be able to do 
        </DIV>
        <DIV>&nbsp;</DIV>
        <DIV>for $book in /book</DIV>
        <DIV>for $section in $book/section</DIV>
        <DIV>outer for $figure in $section/figure</DIV>
        <DIV>where ($book/author='Dan Suciu' and 
        (($figure/title='Examples'&nbsp;or $section/title='Syntax) or 
        ($figure/title='Examples' and <A 
        href="mailto:$figure/image/@source='example.gif'">$figure/image/@source='example.gif'</A>)))</DIV>
        <DIV>return $book</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>Anyone have any ideas how I could get this to work?</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>&nbsp;</DIV>
        <DIV>&nbsp;</DIV></TD></TR></TBODY></TABLE><BR></BLOCKQUOTE></BODY></HTML>