---
title: The Jena StreamManager and LocationMapper
---

The StreamManager is a utility to find and read files into models.
There is a standard global StreamManager and applications may also
define specific ones by constructing additional StreamManagers.

The LocationMapper provides alternative locations for RDF data.

## The Stream Manager

Files are named by a string, according to the conventions of their
storage system. Typically this is by URI. There are a number of
storage system adapters provided:

- File locator (with own current directory)
- URL locator (HTTP and FTP)
- Class loader locator
- Zip file locator

The global stream manager has a file location, a URL locator and a
class loader (tried in that order).

A StreamManager can have an associated LocationMapper that transforms
names before use. This means local copies of documents can be used
transparently to the rest of the application.

A StreamManager provides an "open" operation to get an `InputStream`
to the resource.

## The LocationMapper configuration file

Location mapping files are RDF - they may be written in RDF/XML, Turtle
(file suffix `.ttl`) or N-Triples (file suffix `.nt`). The default
is RDF/XML unless one of these suffices is found.

    PREFIX lm: <http://jena.hpl.hp.com/2004/08/location-mapping#>

    [] lm:mapping
       [ lm:name "file:foo.ttl" ;     lm:altName "file:etc/foo.ttl" ] ,
       [ lm:prefix "file:etc/" ;      lm:altPrefix "file:ETC/" ] ,
       [ lm:name "file:etc/foo.ttl" ; lm:altName "file:DIR/foo.ttl" ]
       .

There are two types of location mapping: exact match renaming and
prefix renaming. When trying to find an alternative location, a
LocationMapper first tries for an exact match; if none is found,
the LocationMapper will search for the longest matching prefix. If
two are the same length, there is no guarantee on order tried;
there is no implied order in a location mapper configuration file
(it sets up two hash tables).

In the example above, `file:etc/foo.ttl` becomes `file:DIR/foo.ttl`
because that is an exact match. The prefix match of file:etc/ is
ignored.

All string tests are done case sensitively because the primary use
is for URLs.

Notes:

- Property values are not URIs, but strings. This is a system
  feature, not an RDF feature. Prefix mapping is name rewriting;
  alternate names are not treated as equivalent resources in the rest
  of Jena. While application writers are encouraged to use URIs to
  identify files, this is not always possible.
- There is no check to see if the alternative system resource is
  equivalent to the original.

A LocationMapper finds its configuration file by looking for the
following files, in order:

- `location-mapping.ttl`
- `location-mapping.rdf`
- `etc/location-mapping.rdf`
- `etc/location-mapping.ttl`

This is specified as a path - note the path separator is always
the character ';' regardless of operating system because URLs
contain ':'.

`location-mapping.ttl;location-mapping.rdf;etc/location-mapping.rdf;etc/location-mapping.ttl`

Applications can also set mappings programmatically.
No configuration file is necessary.

The base URI for reading models with the StreamManager will be the
original URI, not the alternative location.

### Debugging

If log4j2, set the logging level of the classes:

    logger.filemanager.name        = org.apache.jena.riot.system.stream.StreamManager
    logger.filemanager.level       = ALL
    logger.location-manager.name   = org.apache.jena.riot.system.stream.LocationMapper
    logger.location-manager.level  = ALL

### See also

Javadoc:

- [StreamManager](/documentation/javadoc/arq/org.apache.jena.arq/org/apache/jena/riot/system/stream/StreamManager.html)
- [LocationMapper](/documentation/javadoc/arq/org.apache.jena.arq/org/apache/jena/riot/system/stream/LocationMapper.html)
