The CurrentSVN sources conform to the ASF License version 2.0.

The ASF licensing information needs to be updated in the documentation.

A copy of The Apache Software Foundation License version 2.0 needs to
replace the following file in the repository.

   xalan/c/trunk/xdocs/sources/xalan/License

A NOTICE file needs to be ratified by the XALAN PMC and added to the
repository documentation.

   xalan/c/trunk/xdocs/sources/xalan/NOTICE

Here is some possible text for the NOTICE file.

   =======================================================================
   == NOTICE file corresponding to section 4(d) of the Apache License.  ==
   == Version 2.0, in this case for the Apache Xalan distribution.      ==
   =======================================================================

   Apache XALAN-C
   Copyright (c) 1999-2011 The Apache Software Foundation

   This product includes software developed at
   The Apache Software Foundation (http://www.apache.org/).

   This software is based on the ASF XERCES-C project.

   Portions of this software were originally based on the following:
     - software copyright (c) 1999, IBM Corporation. (http://www.ibm.com).

   Additional copyright submissions and contributions:
