   =========================================================================
   ==  NOTICE file corresponding to the section 4 d of                    ==
   ==  the Apache License, Version 2.0,                                   ==
   ==  in this case for the Apache XmlSchema distribution.                ==
   =========================================================================

   This product includes software developed by
   The Apache Software Foundation (http://www.apache.org/).

   Please read the different LICENSE files present in the licenses directory of
   this distribution.

   Portions Copyright 2006 International Business Machines Corp.
