<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>ASF: The Apache Xalan Project</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" type="text/css" href="resources/apache-xalan.css" />
</head>
<!--
 * 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.
 -->
<body>
<div id="title">
<table class="HdrTitle">
<tbody>
<tr>
<th rowspan="2">
<a href="http://xalan.apache.org/index.html">
<img alt="Trademark Logo" src="resources/Xalan-Logo-tm.png" width="190" height="90" />
</a>
</th>
<th text-align="center" width="75%">
<a href="index.html">Apache Xalan Project </a>
</th>
</tr>
<tr>
<td valign="middle">The Apache Xalan Project</td>
</tr>
</tbody>
</table>
<table class="HdrButtons" align="center" border="1">
<tbody>
<tr>
<td>
<a href="http://www.apache.org">Apache Foundation</a>
</td>
<td>
<a href="http://xalan.apache.org">Xalan Project</a>
</td>
<td>
<a href="http://xerces.apache.org">Xerces Project</a>
</td>
<td>
<a href="http://www.w3.org/TR">Web Consortium</a>
</td>
<td>
<a href="http://www.oasis-open.org/standards">Oasis Open</a>
</td>
</tr>
</tbody>
</table>
</div>
<div id="navLeft">
<ul>
<li>Apache Xalan<br />
</li>
<li>
<a href="charter.html">Charter</a>
</li>
<li>
<a href="http://wiki.apache.org/xalan">Xalan Wiki</a>
</li></ul><hr /><ul></ul>
<p class="navGroup">
<em>Projects</em>
</p><ul>
<li>
<a href="xalan-c/index.html">Xalan C++</a>
</li>
<li>
<a href="xalan-j/index.html">Xalan Java 2.7.2</a>
</li>
<li>
<a href="old/xalan-j/index.html">Xalan Java 2.7.1</a>
</li></ul><hr /><ul></ul>
<p class="navGroup">
<em>Mail Lists</em>
</p><ul>
<li>
<a href="http://marc.info/?l=xalan-dev">Developers</a>
</li>
<li>
<a href="http://marc.info/?l=xalan-c-users">C Users</a>
</li>
<li>
<a href="http://marc.info/?l=xalan-j-users">J Users</a>
</li></ul><hr /><ul></ul>
<p class="navGroup">
<em>Resources</em>
</p><ul>
<li>
<a href="http://www.apache.org/">Apache</a>
</li>
<li>
<a href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
</li>
<li>
<a href="http://www.apache.org/licenses/">Licenses</a>
</li>
<li>
<a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a href="http://www.apache.org/security/">Security</a>
</li></ul><hr /><ul></ul>
</div>
<div id="content">
<h2>The Apache Xalan Project</h2>
<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
<a href="http://www.w3.org/TR/xslt">W3C XSL Transformations (XSLT) 
Version 1.0</a> and the <a href="http://www.w3.org/TR/xpath">XML Path Language (XPath) Version 1.0</a> 
recommendations.
</p> 
<p>
<b>Contents:</b>
</p>
<ul>
<li>
<a href="#XalanProjects">Apache Xalan Projects</a>
</li>
<li>
<a href="#XsltAndXpath">What is XSLT and XPath?</a>
</li>
<li>
<a href="#License">License information</a>
</li>
<li>
<a href="#GetInvolved">Getting Involved</a>
</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>
<a name="XalanProjects">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Apache Xalan Projects</h3>
<p>There are currently two subprojects under the Apache Xalan Project:  
<a href="xalan-c/index.html">Xalan C++</a>, and 
<a href="xalan-j/index.html">Xalan Java</a>, representing
C++ and Java implementations of the 
<a href="http://www.w3.org/TR/xslt">W3C XSL Transformations (XSLT) 
Version 1.0</a> and the 
<a href="http://www.w3.org/TR/xpath">XML Path Language (XPath) Version 1.0</a> 
recommendations.
</p> 
<p>Both the Java and C++ development teams provide libraries and 
executable programs to transform XML documents using XSLT stylesheets.
</p>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Xalan C++ Project</h4>
<p>The <a href="xalan-c/index.html">Xalan-C</a> project officially
released version 1.12 on the 7th June, 2020.  The focus of this release
was stability and compatibility, fixing critical bugs and updating the
codebase to work with modern C++ standards and compilers, and adding a
CMake-based build to support all platforms with a single well-supported
build tool.  The full changes are documented in the
<a href="xalan-c/releases.html">Release History</a>.
</p>
<p>Xalan-C 1.12 supports C++ development and has been successfully
tested on the following platforms:</p>
<ul>
<li>FreeBSD-12 with LLVM 8</li>
<li>Linux and GCC 7.4 and GCC 9.3</li>
<li>MacOS and Xcode 9.4</li>
<li>Microsoft Visual Studio 2019</li>
<li>Microsoft Visual Studio 2017</li>
<li>Microsoft Visual Studio 2015</li>
</ul>
<p>Xalan-C should work on any platform supported by CMake with a
standard C++ compiler.
</p>
<p>
Older releases are available on the
<a href="http://archive.apache.org/dist/xml/xalan-c">Apache Archives</a>.
</p>

<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Xalan Java Project</h4>
<p>The <a href="xalan-j/index.html">Xalan-Java 2.7.2</a> was released in April 2014.  You can download the current release
the current <a href="http://www.apache.org/dyn/closer.cgi/xalan/xalan-j/">Xalan-Java 2.7.2</a> release for your development. The
current work in progress can be found in the 
<a href="http://svn.apache.org/repos/asf/xalan/xalan-j/trunk/">subversion repository</a>.
</p>
<p>The current release fixes a security issue that was registered against version 2.7.1.
</p>
<p>The old <a href="old/xalan-j/index.html">Xalan-J 2.7.1</a>
distributions are still available on the 
<a href="http://archive.apache.org/dist/xml/xalan-j">Apache Archives</a>.
</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>


<a name="XsltAndXpath">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>What is XSLT and XPath?</h3>
<p>XSLT is the first part of the 
<a href="http://www.w3.org/TR/xsl/">Extensible Stylesheet Language (XSL)</a>. 
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 
<a href="http://xmlgraphics.apache.org/fop/">Apache XML Graphics (Formatting Objects Project)</a>.
</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>

<a name="License">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>License information</h3>
<p>Xalan C++ and Xalan Java are made available under the <a href="http://www.apache.org/licenses/LICENSE-2.0">
Apache Software License, Version 2.0.</a>
</p>

<a name="GetInvolved">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Getting Involved</h3> 
<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 [<a href="mailto:dev@xalan.apache.org">xalan-dev</a>]
 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++ 
 [<a href="mailto:c-users@xalan.apache.org">xalan-c-users</a>] is 
for general user comments on the Xalan C++ project.</p>

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

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


<p align="right" size="2">
<a href="#content">(top)</a>
</p>
</div>
<div id="footer">Copyright © 1999-2014 The Apache Software Foundation<br />Apache, Xalan, and the Feather logo are trademarks of The Apache Software Foundation<div class="small">Web Page created on - Sun 2020-06-07</div>
</div>
</body>
</html>
