Apache UIMA sandbox -- Configurable Feature Extractor component
Copyright 2009 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This software contains parts of Apache XMLBeans
(http://xmlbeans.apache.org/), which contains the
following software:

    - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web
      Consortium (Massachusetts Institute of Technology, European Research
      Consortium for Informatics and Mathematics, Keio University)

    - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/,
      Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0
