
                                  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-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 fro 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.
