
                                  Apache Jena
                                  ===========

  Jena is a Java framework for building semantic web applications. It provides 
  tools and Java libraries to help you to develop semantic web and linked-data 
  apps, tools and servers.

  This distribution includes the following Apache Jena modules: 

  - jena-core: provides the Jena RDF APIs, Ontology APIs and Inference APIs. 
  - jena-arq:  SPARQL 1.1, query and update.
  - jena-cmds: Command line tools.
  - jena-tdb:  scalable and performant storage subsystem for Jena
  - jena-iri:  provides an implementation of RFC 3987 (IRI) and RFC 3986 (URI)

  Installing Jena
  ---------------

   To use Jena in your application, ensure all the .jar files in the lib/
   directory are on the classpath or available to your web application. Jena
   is built and test with these .jar files.

  Scripts
  -------

  The directories bat/ and bin/ provide script wrappers to run Jena command
  line tools.  The scripts can be copied to a convenient place on the
  command path.

  To use the Jena tools from the command line you need to set the JENA_HOME
  environment variable to point to the location where you have 
  unzipped the Jena distribution:

  Windows:
    set JENA_HOME=\path\to\apache-jena-x.y.z
    bat\sparql.bat --version    

  Linux:
    The command scripts automatically set JENA_HOME but if you want
    to switch to a different version from the same scripts:

    export JENA_HOME=/path/to/apache-jena-x.y.z
    bin/sparql --version    

  Where x.y.z is the version of the Jena command line tools you have 
  downloaded
    
  If you receive a class not found exception when trying to run one of the 
  scripts then you may have set JENA_HOME incorrectly. A quick and easy way
  to validate that JENA_HOME is set correctly is to run the following:
  
  Windows:
    cd %JENA_HOME%
    
  Linux:
    cd $JENA_HOME
    
  If this command returns an error then JENA_HOME is not pointed to a valid directory


  Website
  -------

  The Apache Jena website is available here:
  http://jena.apache.org/


  Documentation
  -------------

  Getting started: http://jena.apache.org/getting_started/
  Tutorials: http://jena.apache.org/tutorials/
  Documentation: http://jena.apache.org/documentation/

  Support is provided via users@jena.apache.org mailing list.
  See also: http://jena.apache.org/help_and_support/

  Sources and Getting Involved
  ----------------------------

  The Apache Jena source code repository is here:
  http://svn.apache.org/repos/asf/jena/

  If you are interested in getting involved with Apache Jena development: 
  http://jena.apache.org/getting_involved/

  Licensing
  ---------

  Jena is provided under the Apache Software License v2.0
  See LICENSE for the full text.

 Cryptographic Software Notice
 -----------------------------

 This distribution includes cryptographic software. The country in which
 you currently reside may have restrictions on the import, possession,
 use, and/or re-export to another country, of encryption software. BEFORE
 using any encryption software, please check your country's laws,
 regulations and policies concerning the import, possession, or use, and
 re-export of encryption software, to see if this is permitted. 
 See <http://www.wassenaar.org/> for more information.

 The U.S. Government Department of Commerce, Bureau of Industry and
 Security (BIS), has classified this software as Export Commodity
 Control Number (ECCN) 5D002.C.1, which includes information security
 software using or performing cryptographic functions with asymmetric
 algorithms. The form and manner of this Apache Software Foundation
 distribution makes it eligible for export under the License Exception
 ENC Technology Software Unrestricted (TSU) exception (see the BIS
 Export Administration Regulations, Section 740.13) for both object
 code and source code.

 The following provides more details on the included software that
 may be subject to export controls on cryptographic software:

  Apache Jena (distribution) includes
    Apache HttpComponents Client 
    Apache HttpComponents Core
  which interfaces with the Java Secure Socket Extension (JSSE) API
  to provide

     - HTTPS support

   Apache Jena (distribution) does not include any
   implementation of JSSE.
