<?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/xml/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>
