Simple API for XML (SAX), a standard application interface for processing XML.
SAX is not maintained as part of GNU Classpath, but is used with GNU Classpath.

Last imported version sax2r3 final from http://www.saxproject.org/

All files are distributed with the following short notice:

  NO WARRANTY!  This class is in the Public Domain.

The www.saxproject.org explains:

  Copyright Status

  SAX is free!

  In fact, it's not possible to own a license to SAX, since it's been
  placed in the public domain.

  No Warranty

  Because SAX is released to the public domain, there is no warranty
  for the design or for the software implementation, to the extent
  permitted by applicable law. Except when otherwise stated in writing
  the copyright holders and/or other parties provide SAX "as is" without
  warranty of any kind, either expressed or implied, including, but not
  limited to, the implied warranties of merchantability and fitness for
  a particular purpose. The entire risk as to the quality and
  performance of SAX is with you. Should SAX prove defective, you assume
  the cost of all necessary servicing, repair or correction.

  In no event unless required by applicable law or agreed to in
  writing will any copyright holder, or any other party who may modify
  and/or redistribute SAX, be liable to you for damages, including any
  general, special, incidental or consequential damages arising out of
  the use or inability to use SAX (including but not limited to loss of
  data or data being rendered inaccurate or losses sustained by you or
  third parties or a failure of the SAX to operate with any other
  programs), even if such holder or other party has been advised of the
  possibility of such damages.

  Copyright Disclaimers

  This page includes statements to that effect by David Megginson, who
  would have been able to claim copyright for the original work.

  SAX 1.0

  Version 1.0 of the Simple API for XML (SAX), created collectively by
  the membership of the XML-DEV mailing list, is hereby released into
  the public domain.

  No one owns SAX: you may use it freely in both commercial and
  non-commercial applications, bundle it with your software
  distribution, include it on a CD-ROM, list the source code in a book,
  mirror the documentation at your own web site, or use it in any other
  way you see fit.

  David Megginson, sax@megginson.com
  1998-05-11

  SAX 2.0

  I hereby abandon any property rights to SAX 2.0 (the Simple API for
  XML), and release all of the SAX 2.0 source code, compiled code, and
  documentation contained in this distribution into the Public
  Domain. SAX comes with NO WARRANTY or guarantee of fitness for any
  purpose.

  David Megginson, david@megginson.com
  2000-05-05

