Apache UIMA sandbox -- Configurable Feature Extractor component
Copyright 2009-2011 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
