<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Copyright 1999-2014 The Apache Software Foundation.
 *
 * Licensed 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="The Apache Xalan Project">
<p>We are proud to release version 2.7.2 of our Xalan Java project.  This is
the first product distribution release of Xalan Java since Apache Xalan was
reformed in 2011.  It also fixes a security issue reported against the
previous version.
</p>
<p>The Apache Xalan Project develops and maintains libraries and programs
that transform XML documents using XSLT standard stylesheets.  Our
subprojects use the Java and C++ programing languages to implement
the XSLT libraries.
</p>
<p>The Apache Xalan Project was reformed in 2011. It started as a
subproject of Apache XML which has since been officially retired. 
The Apache Xalan Project continues as a top-level project governed by the
Apache Software Foundation as a collaborative software development community
dedicated to providing robust, full-featured, commercial-quality, and 
freely available XSLT support on a wide variety of platforms.
</p>
<p>The supported specifications are defined by the
<jump href="http://www.w3.org/TR/xslt">W3C XSL Transformations (XSLT) 
Version 1.0</jump> and the <jump href="http://www.w3.org/TR/xpath">XML Path Language (XPath) Version 1.0</jump> 
recommendations.
</p> 
<p><em>Contents:</em></p>
<ul>
<li><link anchor="XalanProjects">Apache Xalan Projects</link></li>
<li><link anchor="XsltAndXpath">What is XSLT and XPath?</link></li>
<li><link anchor="License">License information</link></li>
<li><link anchor="GetInvolved">Getting Involved</link></li>
</ul>
<p>The project name and logo are derived from the ancient Xalam musical
instrument found in Africa.  Note the difference in spelling. The project
name and logo are trademarks of the Apache Software Foundation.
</p>
<anchor name="XalanProjects"/>
<s2 title="Apache Xalan Projects">
<p>There are currently two subprojects under the Apache Xalan Project:  
<jump href="xalan-c/index.html">Xalan C++</jump>, and 
<jump href="xalan-j/index.html">Xalan Java</jump>, representing
C++ and Java implementations of the 
<jump href="http://www.w3.org/TR/xslt">W3C XSL Transformations (XSLT) 
Version 1.0</jump> and the 
<jump href="http://www.w3.org/TR/xpath">XML Path Language (XPath) Version 1.0</jump> 
recommendations.
</p> 
<p>Both the Java and C++ development teams provide libraries and 
executable programs to transform XML documents using XSLT stylesheets.
</p>
<s3 title="Xalan C++ Project">
<p>The <jump href="xalan-c/index.html">Xalan-C</jump> project officially
released version 1.11 on November 2, 2012.  The most significant
enhancement is the ability to supply top-level stylesheet parameters of
various types.  They include string, nodeset, and number.  A nodeset
paramter can be any parsed XML document or XML fragment.  A number
parameter can be any value of type double.  A string parameter is any
unicode text string.
</p>
<p>Xalan-C 1.11 supports C++ development and has been successfully tested on the
following platforms</p>
<ul>
<li>Microsoft Visual Studio 2003</li>
<li>Microsoft Visual Studio 2005</li>
<li>Microsoft Visual Studio 2008</li>
<li>Microsoft Visual Studio 2010</li>
<li>Linux and GCC 4.4.5</li>
<li>Solaris-10 with SunStudio-12.3</li>
<li>FreeBSD-9 with GCC 4.2</li>
<li>OpenBSD with GCC</li>
<li>AIX</li>
</ul>
<p>Xalan-C builds should also work for Mac OsX, HPUX, and some IBM mainframe
and AS400 platforms.
</p>
<p>The GNU make utility should be used with the UNIX/POSIX platforms.
</p>
<p>The <jump href="old/xalan-c/index.html">Xalan-1.10</jump> and older
releases are available on the <jump href="http://archive.apache.org/dist/xalan/xalan-c">
Apache Archives</jump>.
</p>
</s3>
<s3 title="Xalan Java Project">
<p>The <jump href="xalan-j/index.html">Xalan-Java 2.7.2</jump> was released in April 2014.  You can download the current release
the current <jump href="&xslt4j-distdir;">Xalan-Java 2.7.2</jump> release for your development. The
current work in progress can be found in the 
<jump href="http://svn.apache.org/repos/asf/xalan/xalan-j/trunk/">subversion repository</jump>.
</p>
<p>The current release fixes a security issue that was registered against version 2.7.1.
</p>
<p>The old <jump href="old/xalan-j/index.html">Xalan-J 2.7.1</jump>
distributions are still available on the 
<jump href="http://archive.apache.org/dist/xml/xalan-j">Apache Archives</jump>.
</p>
<p>This is a mature project. There has been some discussion about supporting XPath-2.
We could use your support in this major rework of the library. 
You can follow the efforts and post your own contributions 
on the Java users and developers mail lists.
</p>
</s3>
</s2>
<anchor name="XsltAndXpath"/>
<s2 title="What is XSLT and XPath?">
<p>XSLT is the first part of the 
<jump href="http://www.w3.org/TR/xsl/">Extensible Stylesheet Language (XSL)</jump>. 
It includes the XSL Transformation (XSLT) vocabulary and 
XPath, a language for addressing parts of XML documents. 
XSL also includes a vocabulary for specifying formatting semantics, however, 
this is not part of the Apache Xalan Project.  For more information on formatting objects, see the 
<jump href="http://xmlgraphics.apache.org/fop/">Apache XML Graphics (Formatting Objects Project)</jump>.
</p>
<p>XSLT implementations, sometimes referred to as XSLT processors, use an XSL stylesheet to transform
XML documents into HTML, text, or other XML document types.  
In structural terms, an XSL stylesheet 
specifies the transformation of one tree of nodes (the XML input) 
into another tree of nodes (the output or transformation result).
</p>
</s2>
<anchor name="License"/>
<s2 title="License information">
<p>Xalan C++ and Xalan Java are made available under the <jump href="http://www.apache.org/licenses/LICENSE-2.0">
Apache Software License, Version 2.0.</jump></p>
</s2>
<anchor name="GetInvolved"/>
<s2 title="Getting Involved"> 
<p>We always appreciate people and organizations that wish to help
in the development and project support efforts.</p>

<p>You can follow the activity by reviewing the project
mail lists.  Posting messages to these lists is how we
coordinate the activites related to the our projects.</p>

<p>The developers mail list [<jump href="mailto:dev@xalan.apache.org">xalan-dev</jump>]
 is for communicating issues to the Apache Xalan development teams.
Both the Java and C/C++ groups monitor the developers list.
All project change notices are posted to the developers list.</p>

<p>Each subproject has its own mail list for project specific user
issues.</p>

<p>The user list for Xalan C++ 
 [<jump href="mailto:c-users@xalan.apache.org">xalan-c-users</jump>] is 
for general user comments on the Xalan C++ project.</p>

<p>The user list for Xalan Java 
 [<jump href="mailto:j-users@xalan.apache.org">xalan-j-users</jump>] is
for general user comments on the Xalan Java project.</p>

<p>The Apache Software Foundation has guidance on 
 <jump href="http://www.apache.org/foundation/getinvolved.html">how to 
participate</jump> in the various development efforts.</p>
</s2>

</s1>
