Apache Jena
Copyright 2011-2023 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.
   under an Apache License.

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
