<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="../../make-menu.xsl" type="text/xsl"?><html>
   <head>
      <this-is section="sourcedocs" page="streaming" subpage="streamable-xpath"/>
      <!--
           Generated at 2010-10-29T18:20:48.427+01:00--><title>Saxonica: XSLT and XQuery Processing: Streamable path expressions</title>
      <meta name="coverage" content="Worldwide"/>
      <meta name="copyright" content="Copyright Saxonica Ltd"/>
      <meta name="title"
            content="Saxonica: XSLT and XQuery Processing: Streamable path expressions"/>
      <meta name="robots" content="noindex,nofollow"/>
      <link rel="stylesheet" href="../../saxondocs.css" type="text/css"/>
   </head>
   <body class="main">
      <h1>Streamable path expressions</h1>
      <p>The expression used as an argument to the <code>saxon:stream</code> function must consist of:</p>
      <ol>
         <li>
            <p>A call to the <code>document()</code> or <code>doc()</code> function, followed by</p>
         </li>
         <li>
            <p>A streamable pattern</p>
         </li>
      </ol>
      <p>Streamable patterns use a subset of XPath expression corresponding roughly to the rules for match patterns in XSLT
           (the reason for this is that both subsets are designed to make it efficient to test an individual node for membership of
           the selected set of nodes). There are some extensions and some restrictions.</p>
      <ul>
         <li>
            <p>Unlike XSLT match patterns, streamable patterns are not allowed to perform arbitrary navigation within a predicate.
              For example, <code>employee[id = preceding-sibling::employee/id]</code> is not allowed.</p>
            <p>More specifically, the predicate must not be positional (that is, it must not evaluate to a number, and
                    must not call <code>position()</code> or <code>last()</code>),
                    and it must only use downward selection from the context node (the self, child, attribute, descendant, 
                    descendant-or-self, or namespace axes)</p>
         </li>
         <li>
            <p>The streamable pattern that follows <code>doc()/</code> in the argument to <code>saxon:stream</code>
              must be a relative path: unlike XSLT match patterns, it may not start with "/" or "//" or with a call to the
              <code>key()</code> or <code>id()</code> function.</p>
         </li>
         <li>
            <p>Some of the restrictions in XSLT match patterns are relaxed, however: for example, the descendant axis can
             be used.</p>
         </li>
      </ul>
      <table width="100%">
         <tr>
            <td>
               <p align="right"><a class="nav" href="burst-mode-implementation.xml">Next</a></p>
            </td>
         </tr>
      </table>
   </body>
</html>