<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->
<s1 title="Supported Interfaces in &xslt4j;">
  <ul>
    <li><link anchor="public">Public interfaces</link></li>
    <li><link anchor="experimental">Experimental interfaces</link></li>
    <li><link anchor="internal">Internal interfaces</link></li>
  </ul><anchor name="public"/>
  <s2 title="Public interfaces">
  <p>A public interface of &xslt4j2; is an API that a typical client developer
     should code against.  Such interfaces are usually based upon
     World-Wide Web Consortium (W3C) recommendations, such as XSLT 1.0 and
     XPath 1.0, or Java Specification Requests (JSR's) with a status of
     "Final Release", such as JAXP.</p>
  <p>The &xslt4j2; team will support use of public interfaces, and will
     attempt to fix severe bugs in such interfaces.</p>
  <p>A particular version of a public interface will be supported for all
     the maintenance drops of a particular version and release of &xslt4j2;
     (that is, for a release that changes just the third digit of the
     version number).  At the point a new version of &xslt4j2; is made
     available, (that is, a release that changes the first or second digit
     of the version number) such interfaces could change to reflect the
     latest standard specifications.</p>
  <p>The public interfaces of &xslt4j2; are:</p>
  <ul>
    <li><jump href="http://java.sun.com/xml/jaxp/">JAXP 1.3</jump>
        interfaces found in the
        <jump href="apidocs/javax/xml/parsers/package-summary.html">
           <code>javax.xml.parsers</code></jump>,
        <jump href="apidocs/javax/xml/transform/package-summary.html">
           <code>javax.xml.transform</code></jump>,
        <jump href="apidocs/org/xml/sax/package-summary.html">
           <code>org.xml.sax</code></jump>,
        <jump href="apidocs/org/w3c/dom/package-summary.html">
           <code>org.w3c.dom</code></jump> and
        <jump href="apidocs/javax/xml/xpath/package-summary.html">
           <code>javax.xml.xpath</code></jump> packages. </li>
    <li>The &xslt4j2; specific XPath API, defined by the classes
      <ul>
        <li><jump href="apidocs/org/apache/xpath/XPathAPI.html">
          <code>org.apache.xpath.XPathAPI</code></jump></li>
        <li><jump href="apidocs/org/apache/xpath/CachedXPathAPI.html">
          <code>org.apache.xpath.CachedXPathAPI</code></jump></li>
      </ul>
    </li>
    <li>API's for using, configuring or defining a serializer, from the
        <code>org.apache.xml.serializer</code> package:
      <ul>
        <li><jump href="apidocs/org/apache/xml/serializer/OutputPropertiesFactory.html">
                <code>OutputPropertiesFactory</code></jump></li>
        <li><jump href="apidocs/org/apache/xml/serializer/SerializerFactory.html">
                <code>SerializerFactory</code></jump></li>
        <li><jump href="apidocs/org/apache/xml/serializer/Serializer.html">
                <code>Serializer</code></jump></li>
      </ul>
    </li>
    <li>Properties files for configuring a serializer.  (See
        <link idref="usagepatterns" anchor="outputprops">Setting output
        properties in your stylesheets</link> for more information.)
      <ul>
        <li><code>org/apache/xml/serializer/output_xml.properties</code></li>
        <li><code>org/apache/xml/serializer/output_html.properties</code></li>
        <li><code>org/apache/xml/serializer/output_text.properties</code></li>
      </ul>
    </li>
    <li>Command-line interfaces for performing transformations:
      <ul>
        <li><link idref="commandline">&xslt4j; Command-line utility</link></li>
        <li><link idref="xsltc_usage" anchor="compile">Compiling translets
              from the command line</link></li>
        <li><link idref="xsltc_usage" anchor="run">Running translets
              from the command line</link></li>
      </ul>
    </li>
  </ul>
  </s2><anchor name="experimental"/>
  <s2 title="Experimental interfaces">
  <p>Interfaces and classes that are designated experimental reflect recent
     World-Wide Web Consortium (W3C) draft recommendations or draft
     Java Specification Requests (JSR's).  Such an API is based upon
     a specification that is subject to change, and so is itself subject
     to change as the relevant standards body makes changes to the
     specification.</p>
  <p>If and when the specification upon which the API is based reaches its
     final published form, the API could become a Public interface in
     a subsequent release of &xslt4j2;, although the &xslt4j2; team could
     decide to simply withdraw the API, if it decided that making the API
     a public interface would not be appropriate.</p>
  <p>As the name suggests, experimental interfaces are provided in order to
     give users the opportunity to experiment with new features so that they
     can provide feed-back on those features.  They should not be used in
     production-level code.  The &xslt4j2; team may fix severe bugs in
     experimental interfaces.</p>
  <p>The experimental interfaces of &xslt4j2; are:</p>
  <ul>
    <li>The
        <jump href="http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226">
           DOM Level 3 XPath API</jump> found in the
        <jump href="apidocs/org/apache/xpath/domapi/package-summary.html">
           <code>org.apache.xpath.domapi</code></jump> package.</li>
  </ul>
  </s2><anchor name="internal"/>
  <s2 title="Internal interfaces">
  <p>All other classes are considered to be part of the internal interface of
     &xslt4j2;.  Some such classes or members of such classes may themselves
     be designated as <code>public</code> using the Java keyword, but that is
     a consequence of the internal organization of &xslt4j2;.</p>
  <p>Users who have complex and specific needs, such as the need to build
     their own XSLT or XPath processors, might use these internal interfaces,
     but their use is not supported.  In addition these interfaces are subject
     to change without notice.</p>
  </s2>
</s1>
