<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="../../make-menu.xsl" type="text/xsl"?><html>
   <head>
      <this-is section="changes" page="intro" subpage="spi-94"/>
      <!--
           Generated at 2011-12-09T20:47:22.916Z--><title>Saxonica: XSLT and XQuery Processing: Changes to system programming interfaces</title>
      <meta name="coverage" content="Worldwide"/>
      <meta name="copyright" content="Copyright Saxonica Ltd"/>
      <meta name="title"
            content="Saxonica: XSLT and XQuery Processing: Changes to system programming interfaces"/>
      <meta name="robots" content="noindex,nofollow"/>
      <link rel="stylesheet" href="../../saxondocs.css" type="text/css"/>
   </head>
   <body class="main">
      <h1>Changes to system programming interfaces</h1>
      <p><i>"System programming" interfaces are those interfaces that might be used by advanced applications, perhaps
     by code integrating Saxon within other products, but are unlikely to be used by typical user-written application code.
     </i></p>
      <p>The <a class="bodylink" href="../../javadoc/net/sf/saxon/event/Receiver.html"><code>Receiver</code></a> interface (widely used internally within
                     Saxon) has changed to reduce the dependency on the <a class="bodylink" href="../../javadoc/net/sf/saxon/om/NamePool.html"><code>NamePool</code></a>.
                     On the <code>startElement()</code> and <code>attribute()</code> calls, the names and types of elements and attributes are now
                     passed as object references rather than integer codes. Similarly on the <code>namespace()</code> call, the
                     integer namespace code is replaced with a reference to a <code>NamespaceBinding</code> object.</p>
      <p>Integer namespace codes allocated from the name pool are no longer used. They have been replaced with
                     the <a class="bodylink" href="../../javadoc/net/sf/saxon/om/NamespaceBinding.html"><code>NamespaceBinding</code></a> 
                     object which contains the prefix and URI as strings. The purpose of this change is
                     to reduce the number of synchronized calls on the <a class="bodylink" href="../../javadoc/net/sf/saxon/om/NamePool.html"><code>NamePool</code></a>, 
                     and hence to reduce contention; the performance
                     benefit from avoiding string comparisons did not justify the overhead caused by synchronization. This change
                     results in small changes to both the <a class="bodylink" href="../../javadoc/net/sf/saxon/om/NodeInfo.html"><code>NodeInfo</code></a> and 
                     <a class="bodylink" href="../../javadoc/net/sf/saxon/event/Receiver.html"><code>Receiver</code></a> 
                     interfaces.</p>
      <p>A new method <code>getSchemaType()</code> is added to the <a class="bodylink" href="../../javadoc/net/sf/saxon/om/NodeInfo.html"><code>NodeInfo</code></a>
                     interface, returning the type annotation as a <a class="bodylink" href="../../javadoc/net/sf/saxon/type/SchemaType.html"><code>SchemaType</code></a>
                     object. The existing <code>getTypeAnnotation()</code> method which returns the same information as an integer fingerprint
                     remains available for the time being.</p>
      <p>The mechanism for injecting trace calls into expressions has been generalised so that an arbitrary 
                     <a class="bodylink"
            href="../../javadoc/net/sf/saxon/expr/parser/CodeInjector.html"><code>CodeInjector</code></a> can
                     be supplied. This can be selective about what kind of expression it inserts into the parse tree, and where. This
                     gives a lot more flexibility for tools that add debugging or performance monitoring capabilities to the product.
            For XQuery this can be controlled at the level of the <a class="bodylink"
            href="../../javadoc/net/sf/saxon/query/StaticQueryContext.html"><code>StaticQueryContext</code></a>, for XSLT using the
            <a class="bodylink" href="../../javadoc/net/sf/saxon/trans/CompilerInfo.html"><code>CompilerInfo</code></a> object.</p>
      <p>In the expression tree, the representation of path expressions and axis expressions has changed. The class
                     <code>PathExpression</code> has disappeared; instead, the class <code>SlashExpression</code>
                     is used, wrapped in a <code>DocumentSorter</code> if sorting into document order and elimination
                     of duplicates is required. A subclass of <code>SlashExpression</code>, the <code>SimpleSlashExpression</code>,
                     is used for expressions of the form <code>$p/title</code> where the left-hand side selects a singleton and the
                     right-hand side is an axis expression; this optimization reduces the number of context objects that need
                     to be created, especially in XQuery where such constructs are very common.</p>
      <table width="100%">
         <tr>
            <td>
               <p align="right"><a class="nav" href="../intro93.xml">Next</a></p>
            </td>
         </tr>
      </table>
   </body>
</html>