Apache Jena
Copyright 2011-2018 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.
