Apache Jena
Copyright 2011-2020 The Apache Software Foundation

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

Portions of this software were originally based on the following:
  - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP
  - Copyright 2010, 2011 Epimorphics Ltd.
  - Copyright 2010, 2011 Talis Systems Ltd.
These have been licensed to the Apache Software Foundation under a software grant.

This product includes software developed by
PluggedIn Software under a BSD license.

This product includes software developed by Mort Bay Consulting Pty. Ltd.
   Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.

Portions of this software are from Apache Xerces and were originally based on the following:
  - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
  - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.

This product includes software developed at the Open Geospatial Consortium:
http://www.opengeospatial.org/ogc/software
