<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="../make-menu.xsl" type="text/xsl"?><html>
   <head>
      <this-is section="expressions" page="axissteps" subpage=""/>
      <!--
           Generated at 2011-12-09T20:47:22.916Z--><title>Saxonica: XSLT and XQuery Processing: Axis steps</title>
      <meta name="coverage" content="Worldwide"/>
      <meta name="copyright" content="Copyright Saxonica Ltd"/>
      <meta name="title" content="Saxonica: XSLT and XQuery Processing: Axis steps"/>
      <meta name="robots" content="noindex,nofollow"/>
      <link rel="stylesheet" href="../saxondocs.css" type="text/css"/>
   </head>
   <body class="main">
      <h1>Axis steps</h1>
      <p>The basic primitive for accessing a source document is the <i>axis step</i>. Axis steps 
may be combined into path expressions using the path operators <code>/</code> and <code>//</code>,
and they may be filtered using filter expressions in the same way as the result of any other
expression.</p>
      <p>An axis step has the basic form <code>axis :: node-test</code>, and selects nodes on a given axis
that satisfy the node-test. The axes available are:</p>
      <table>
         <tr>
            <td content="para">
               <p>ancestor</p>
            </td>
            <td content="para">
               <p>Selects ancestor nodes starting with the current node and ending
with the document node</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>ancestor-or-self</p>
            </td>
            <td content="para">
               <p>Selects the current node plus all ancestor nodes</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>attribute</p>
            </td>
            <td content="para">
               <p>Selects all attributes of the current node (if it is an element)</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>child</p>
            </td>
            <td content="para">
               <p>Selects the children of the current node, in documetn order</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>descendant</p>
            </td>
            <td content="para">
               <p>Selects the children of the current node and their children, recursively
(in document order)</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>descendant-or-self</p>
            </td>
            <td content="para">
               <p>Selects the current node plus all descendant nodes</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>following</p>
            </td>
            <td content="para">
               <p>Selects the nodes that follow the current node in document order,
other than its descendants</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>following-sibling</p>
            </td>
            <td content="para">
               <p>Selects all subsequent child nodes of the same
parent node</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>namespace</p>
            </td>
            <td content="para">
               <p>Selects all the in-scope namespaces for an element (this axis
is deprecated in XPath 2.0, but Saxon continues to support it)</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>parent</p>
            </td>
            <td content="para">
               <p>Selects the parent of the current node</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>preceding</p>
            </td>
            <td content="para">
               <p>Selects the nodes that precede the current node in document order,
other than its ancestors</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>preceding-sibling</p>
            </td>
            <td content="para">
               <p>Selects all preceding child nodes of the same
parent node</p>
            </td>
         </tr>
         <tr>
            <td content="para">
               <p>self</p>
            </td>
            <td content="para">
               <p>Selects the current node</p>
            </td>
         </tr>
      </table>
      <p>When the child axis is used, <code>child::</code> may be omitted, and when the attribute
axis is used, <code>attribute::</code> may be abbviated to <code>@</code>. The expression
<code>parent::node()</code> may be shortened to <code>..</code></p>
      <p><i>The expression <code>.</code> is no longer synonymous with <code>self::node()</code>,
since it may now select items that are not nodes. If the context item is not a node, any use of a
path expression will raise an error.</i></p>
      <p>The node-test may be, for example:</p>
      <ul>
         <li content="para">
            <p>a node name</p>
         </li>
         <li content="para">
            <p>
            <code>prefix:*</code> to select nodes in a given namespace</p>
         </li>
         <li content="para">
            <p>
            <code>*:localname</code> to select nodes with a given local name, regardless of namespace</p>
         </li>
         <li content="para">
            <p>
            <code>text()</code> (to select text nodes)</p>
         </li>
         <li content="para">
            <p>
            <code>node()</code> (to select any node)</p>
         </li>
         <li content="para">
            <p>
            <code>processing-instruction()</code> (to select any processing instruction)</p>
         </li>
         <li content="para">
            <p>
            <code>processing-instruction('literal')</code> to select processing instructions with the given name
            (target)</p>
         </li>
         <li content="para">
            <p>
            <code>comment()</code> to select comment nodes</p>
         </li>
         <li content="para">
            <p>
            <code>element()</code> or <code>element(*)</code> to select any element node</p>
         </li>
         <li content="para">
            <p>
            <code>element(N)</code> to select any element node named N</p>
         </li>
         <li content="para">
            <p>
            <code>element(*, T)</code> to select any element node whose type annotation
                     is T, or a subtype of T</p>
         </li>
         <li content="para">
            <p>
            <code>element(N, T)</code> to select any element node whose name is N
                    and whose type annotation is T, or a subtype of T</p>
         </li>
         <li content="para">
            <p>
            <code>schema-element(N)</code> to select any element node whose name is N,
            or an element in the substitution group of N, that conforms to the schema-defined
            type for a global element declaration named N in an imported schema</p>
         </li>
         <li content="para">
            <p>
            <code>attribute</code> or <code>attribute(*)</code> to select any attribute node</p>
         </li>
         <li content="para">
            <p>
            <code>attrbute(N)</code> to select any attribute node named N</p>
         </li>
         <li content="para">
            <p>
            <code>attribute(*, T)</code> to select any attribute node whose type annotation
                     is T, or a subtype of T</p>
         </li>
         <li content="para">
            <p>
            <code>attribute(N, T)</code> to select any attribute node whose name is N
                    and whose type annotation is T, or a subtype of T</p>
         </li>
         <li content="para">
            <p>
            <code>schema-attribute(N)</code> to select any attribute node whose name is N,
            that conforms to the schema-defined
            type for a global attribute declaration named N in an imported schema</p>
         </li>
      </ul>
      <table width="100%">
         <tr>
            <td>
               <p align="right"><a class="nav" href="parentheses.xml">Next</a></p>
            </td>
         </tr>
      </table>
   </body>
</html>