Apache Taverna Server Usage Records
Copyright 2014-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 2010-2014 University of Manchester, UK
These have been licensed to the Apache Software Foundation under a software grant.

---------------------------------------------------------
org.apache.taverna.server.usagerecord.xml.urf classes are
derived from https://www.ogf.org/documents/GFD.98.pdf
and http://schemas.ogf.org/urf/2003/09/url

      Usage Record Working Group XML Schema definition (GFD.98)

      Copyright (C) Open Grid Forum (2006-2007). All Rights Reserved.

      This document and translations of it may be copied and furnished to
      others, and derivative works that comment on or otherwise explain it or
      assist in its implementation may be prepared, copied, published and
      distributed, in whole or in part, without restriction of any kind,
      provided that the above copyright notice and this paragraph are included
      on all such copies and derivative works. However, this document itself
      may not be modified in any way, such as by removing the copyright notice
      or references to the OGF or other organizations, except as needed for
      the purpose of developing Grid Recommendations in which case the
      procedures for copyrights defined in the OGF Document process must be
      followed, or as required to translate it into languages other than
      English.

      The limited permissions granted above are perpetual and will not be
      revoked by the OGF or its successors or assignees.

      This document and the information contained herein is provided on an "As
      Is" basis and the OGF disclaims all warranties, express or implied,
      including but not limited to any warranty that the use of the
      information herein will not infringe any rights or any implied
      warranties of merchantability or fitness for a particular purpose.
---------------------------------------------------------
org.apache.taverna.server.usagerecord.xml.urf2 classes are
derived from https://www.ogf.org/documents/GFD.204.pdf

  Copyright © Open Grid Forum (2006-2013). Some Rights Reserved.
 
  This document and translations of it may be copied and furnished to others,
  and derivative works that comment on or otherwise explain it or assist in its
  implementation may be prepared, copied, published and distributed, in whole
  or in part, without restriction of any kind, provided that the above
  copyright notice and this paragraph are included as references to the derived
  portions on all such copies and derivative works. The published OGF document
  from which such works are derived, however, may not be modified in any way,
  such as by removing the copyright notice or references to the OGF or other
  organizations, except as needed for the purpose of developing new or updated
  OGF documents in conformance with the procedures defined in the OGF Document
  Process, or as required to translate it into languages other than English.
  OGF, with the approval of its board, may remove this restriction for
  inclusion of OGF document content for the purpose of producing standards in
  cooperation with other international standards bodies.
 
  The limited permissions granted above are perpetual and will not be revoked
  by the OGF or its successors or assignees.
 ---------------------------------------------------------
