This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/main by this push:
     new 35706e4e69 Reformat in package oaj.riot.system.stream. Rebame package 
as 'streammgr'
35706e4e69 is described below

commit 35706e4e69cd56762432812f0cbb3311b8ae9b26
Author: Andy Seaborne <[email protected]>
AuthorDate: Sun Dec 14 11:42:31 2025 +0000

    Reformat in package oaj.riot.system.stream. Rebame package as 'streammgr'
---
 .../java/org/apache/jena/query/QueryFactory.java   |   2 +-
 .../main/java/org/apache/jena/riot/RDFDataMgr.java |   2 +-
 .../main/java/org/apache/jena/riot/RDFParser.java  |   2 +-
 .../org/apache/jena/riot/RDFParserBuilder.java     |   2 +-
 .../java/org/apache/jena/riot/ReadAnything.java    |   2 +-
 .../jena/riot/adapters/AdapterFileManager.java     |   2 +-
 .../org/apache/jena/riot/adapters/AdapterLib.java  |   2 +-
 .../jena/riot/adapters/AdapterLocationMapper.java  |   2 +-
 .../apache/jena/riot/adapters/AdapterLocator.java  |   2 +-
 .../org/apache/jena/riot/rowset/QueryResults.java  |   2 +-
 .../riot/system/stream/LocatorClassLoader.java     |  86 --------
 .../jena/riot/system/stream/LocatorFile.java       | 217 ---------------------
 .../apache/jena/riot/system/stream/LocatorZip.java | 118 -----------
 .../{stream => streammgr}/JenaIOEnvironment.java   |  28 +--
 .../{stream => streammgr}/LocationMapper.java      |  96 ++++-----
 .../riot/system/{stream => streammgr}/Locator.java |   8 +-
 .../riot/system/streammgr/LocatorClassLoader.java  |  84 ++++++++
 .../system/{stream => streammgr}/LocatorFTP.java   |  26 +--
 .../jena/riot/system/streammgr/LocatorFile.java    | 206 +++++++++++++++++++
 .../system/{stream => streammgr}/LocatorHTTP.java  |  26 +--
 .../system/{stream => streammgr}/LocatorStdin.java |   8 +-
 .../system/{stream => streammgr}/LocatorURL.java   |   2 +-
 .../jena/riot/system/streammgr/LocatorZip.java     | 111 +++++++++++
 .../{stream => streammgr}/StreamManager.java       |  88 ++++-----
 .../jena/sparql/resultset/ResultsReader.java       |   5 +-
 .../java/org/apache/jena/riot/TestRDFParser.java   |   4 +-
 .../apache/jena/riot/adapters/TestFileManager.java |   4 +-
 .../org/apache/jena/riot/stream/TestLocators.java  |   2 +-
 .../apache/jena/riot/stream/TestStreamManager.java |   6 +-
 .../main/java/org/apache/jena/fuseki/Fuseki.java   |   6 +-
 .../main/java/org/apache/jena/shacl/Imports.java   |   4 +-
 .../org/apache/jena/shex/runner/ShexTests.java     |   6 +-
 32 files changed, 569 insertions(+), 592 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java 
b/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java
index ca69f70121..f4fecf96b3 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java
@@ -23,7 +23,7 @@ import java.io.InputStream;
 import org.apache.jena.atlas.io.IO;
 import org.apache.jena.irix.IRIs;
 import org.apache.jena.irix.IRIx;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.shared.NotFoundException;
 import org.apache.jena.sparql.lang.SPARQLParser;
 import org.apache.jena.sparql.lang.SPARQLParserRegistry;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java 
b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
index 163263ed90..e755b0238b 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
@@ -33,7 +33,7 @@ import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.lang.IteratorParsers;
 import org.apache.jena.riot.system.StreamRDF;
 import org.apache.jena.riot.system.StreamRDFLib;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.riot.writer.NQuadsWriter;
 import org.apache.jena.riot.writer.NTriplesWriter;
 import org.apache.jena.sparql.core.DatasetGraph;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java 
b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
index 9a9bf179cd..ee3c884f51 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java
@@ -50,7 +50,7 @@ import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.process.normalize.StreamCanonicalLangTag;
 import org.apache.jena.riot.process.normalize.StreamCanonicalLiterals;
 import org.apache.jena.riot.system.*;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.riot.web.HttpNames;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.DatasetGraphFactory;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java 
b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java
index aebb15e1e7..938a518159 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java
@@ -36,7 +36,7 @@ import org.apache.jena.rdf.model.Model;
 import org.apache.jena.riot.RDFParser.LangTagForm;
 import org.apache.jena.riot.lang.LabelToNode;
 import org.apache.jena.riot.system.*;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.util.Context;
 import org.apache.jena.sparql.util.ContextAccumulator;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java 
b/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java
index e012d8af2f..521f78e056 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java
@@ -31,7 +31,7 @@ import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.resultset.ResultSetReaderRegistry;
 import org.apache.jena.riot.system.StreamRDF;
 import org.apache.jena.riot.system.StreamRDFLib;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.shared.NotFoundException;
 import org.apache.jena.sparql.resultset.ResultsReader;
 import org.apache.jena.sparql.resultset.SPARQLResult;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java
index d5d849a7c6..4e8bc3c456 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java
@@ -30,7 +30,7 @@ import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.Lang;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RDFLanguages;
-import org.apache.jena.riot.system.stream.*;
+import org.apache.jena.riot.system.streammgr.*;
 import org.apache.jena.shared.NotFoundException;
 import org.apache.jena.util.FileManager;
 import org.apache.jena.util.FileUtils;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLib.java 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLib.java
index 8040f86366..98e049beb0 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLib.java
@@ -21,7 +21,7 @@ package org.apache.jena.riot.adapters;
 import org.apache.jena.atlas.lib.Lib;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.riot.RiotException;
-import org.apache.jena.riot.system.stream.*;
+import org.apache.jena.riot.system.streammgr.*;
 
 class AdapterLib {
     public static org.apache.jena.util.TypedStream convert(TypedInputStream 
in) {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocationMapper.java
 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocationMapper.java
index 6251534750..39571f0065 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocationMapper.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocationMapper.java
@@ -21,7 +21,7 @@ package org.apache.jena.riot.adapters;
 import java.util.Iterator ;
 
 import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.riot.system.stream.LocationMapper ;
+import org.apache.jena.riot.system.streammgr.LocationMapper;
 
 /** Adapter from Jena core LocationMapper to RIOT LocationMapper */ 
 
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocator.java 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocator.java
index 7cbedac4cf..4f65b13d46 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocator.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterLocator.java
@@ -19,7 +19,7 @@
 package org.apache.jena.riot.adapters;
 
 import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.riot.system.stream.Locator ;
+import org.apache.jena.riot.system.streammgr.Locator;
 
 public class AdapterLocator implements org.apache.jena.util.Locator
 {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java 
b/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java
index 8366645778..87a803f217 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java
@@ -24,7 +24,7 @@ import java.util.Objects;
 import org.apache.jena.atlas.web.ContentType;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.riot.*;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.sparql.exec.QueryExecResult;
 import org.apache.jena.sparql.exec.RowSet;
 import org.apache.jena.sparql.util.Context;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorClassLoader.java
 
b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorClassLoader.java
deleted file mode 100644
index 4c458d6bd0..0000000000
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorClassLoader.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.riot.system.stream;
-
-import java.io.InputStream ;
-
-import org.apache.jena.atlas.web.ContentType ;
-import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
-
-/** LocatorClassLoader provides access to Java resources.
- * File names should be an exact match for the java resource, i.e. no "file:"  
- * There is no scheme name for Java resources.
- */
-public class LocatorClassLoader  implements Locator
-{
-    static Logger log = LoggerFactory.getLogger(LocatorClassLoader.class) ;
-
-    private final ClassLoader classLoader ;
-    public LocatorClassLoader(ClassLoader _classLoader)
-    {
-        classLoader =_classLoader ;
-    }
-    
-    @Override
-    public boolean equals( Object other )
-    {
-        return 
-            other instanceof LocatorClassLoader 
-            && classLoader == ((LocatorClassLoader) other).classLoader;
-    }
-    
-    @Override
-    public int hashCode()
-        { return classLoader.hashCode(); }
-    
-    @Override
-    public TypedInputStream open(String resourceName)
-    {
-        if ( classLoader == null )
-            return null ;
-            
-        InputStream in = null;
-        try { in = classLoader.getResourceAsStream(resourceName) ; } catch 
(Exception ex) {}
-        if ( in == null )
-        {
-            if ( StreamManager.logAllLookups && log.isTraceEnabled() )
-                log.trace("Failed to open: "+resourceName) ;
-            return null ;
-        }
-        
-        if ( StreamManager.logAllLookups  && log.isTraceEnabled() )
-            log.trace("Found: "+resourceName) ;
-        
-        ContentType ct = RDFLanguages.guessContentType(resourceName) ;
-        // No sensible base URI.
-        return new TypedInputStream(in, ct, null) ;
-    }
-    
-    public ClassLoader getClassLoader()
-    {
-        return classLoader ;
-    }
-
-    @Override
-    public String getName() { return "ClassLoaderLocator" ; }
-    
-}
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java
deleted file mode 100644
index 3c96b56821..0000000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.riot.system.stream;
-
-import java.io.File ;
-import java.io.IOException ;
-import java.io.InputStream ;
-
-import org.apache.jena.atlas.io.IO ;
-import org.apache.jena.atlas.lib.IRILib ;
-import org.apache.jena.atlas.web.ContentType ;
-import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.irix.IRIs;
-import org.apache.jena.riot.RDFLanguages ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
-
-/** Location files in the filing system.
- *  A FileLocator can have a "current directory" - this is separate from any
- *  location mapping (see {@link LocationMapper}) as it applies only to files.
- */
-
-public class LocatorFile implements Locator
-{
-    static Logger log = LoggerFactory.getLogger(LocatorFile.class) ;
-    private final String thisDir ;
-    private final String thisDirLogStr ;
-
-    /** Create a LocatorFile without a specific working directory.
-     * Relative file names are relative to the working directory of the JVM.
-     */
-    public LocatorFile() { this(null) ; }
-
-    /** Create a LocatorFile that uses the argument as it's working directory.
-     * <p>
-     * The working directory should be a UNIX style file name,
-     * (relative or absolute), not a URI.
-     * <p>
-     * For MS Window, if asked to {@link #open} a file name with a drive 
letter,
-     * the code assumes it is not relative to the working directory
-     * of this {@code LocatorFile}.
-     */
-    public LocatorFile(String dir)
-    {
-        if ( dir != null )
-        {
-            if ( dir.endsWith("/") || dir.endsWith(java.io.File.separator) )
-                dir = dir.substring(0,dir.length()-1) ;
-            thisDirLogStr = " ["+dir+"]" ;
-        }
-        else
-            thisDirLogStr = "" ;
-        thisDir = dir ;
-    }
-
-    /** Processing the filename for file: or relative filename
-     *  and return a filename suitable for file operations.
-     */
-    public String toFileName(String filenameIRI)
-    {
-        // Do not use directly : it will ignore the directory.
-        //IRILib.filenameToIRI
-
-        String scheme = IRIs.scheme(filenameIRI) ;
-        String fn = filenameIRI ;
-        // Windows : C:\\ is not a scheme name!
-        if ( scheme != null )
-        {
-            if ( scheme.length() == 1 )
-            {
-                // Not perfect for MS Windows but if thisDir is set then
-                // the main use case is resolving relative (no drive)
-                // filenames against thisDir. Treat the presence of a
-                // drive letter as making this a JVM relative filename.
-                return fn ;
-            }
-            else if ( scheme.length() > 1 )
-            {
-                if ( ! scheme.equalsIgnoreCase("file") )
-                    // Not file: IRI
-                    return null ;
-                fn = IRILib.IRIToFilename(filenameIRI) ;
-                // fall through
-            }
-        }
-        // fn is the file name to use.
-        return absolute(fn) ;
-    }
-
-    /** Make a filename (no URI scheme, no windows drive) absolute if there is
-     * a setting for directory name thisDir
-     */
-    private String absolute(String fn)
-    {
-        if ( thisDir != null && ! fn.startsWith("/") && ! 
fn.startsWith(File.separator) )
-            fn = thisDir+File.separator+fn ;
-        return fn ;
-    }
-
-    public String getThisDir()
-    {
-        return thisDir ;
-    }
-
-    public boolean hasCurrentDir()
-    {
-        return thisDir != null ;
-    }
-
-    public boolean exists(String fileIRI)
-    {
-        String fn = toFileName(fileIRI) ;
-        if ( fn == null )
-            return false ;
-
-        return exists$(fn) ;
-    }
-
-    private boolean exists$(String fn)
-    {
-        if ( fn.equals("-") )
-            return true ;
-        return new File(fn).exists() ;
-    }
-
-    /** Open anything that looks a bit like a file name */
-    @Override
-    public TypedInputStream open(String filenameIRI)
-    {
-        String fn = toFileName(filenameIRI) ;
-        if ( fn == null )
-            return null ;
-
-        try {
-            if ( ! exists$(fn) )
-            {
-                if ( StreamManager.logAllLookups && log.isTraceEnabled())
-                    log.trace("Not found: "+filenameIRI+thisDirLogStr) ;
-                return null ;
-            }
-        } catch (Exception e) {
-            log.warn("Security problem testing for file", e);
-            return null;
-        }
-
-        try {
-            InputStream in = IO.openFileEx(fn) ;
-
-            if ( StreamManager.logAllLookups && log.isTraceEnabled() )
-                log.trace("Found: "+filenameIRI+thisDirLogStr) ;
-
-            ContentType ct = RDFLanguages.guessContentType(filenameIRI) ;
-            return new TypedInputStream(in, ct, filenameIRI) ;
-        } catch (IOException ioEx)
-        {
-            // Includes FileNotFoundException
-            // We already tested whether the file exists or not.
-            log.warn("File unreadable (but exists): "+fn+" Exception: 
"+ioEx.getMessage()) ;
-            return null ;
-        }
-    }
-
-    @Override
-    public String getName()
-    {
-        String tmp = "LocatorFile" ;
-        if ( thisDir != null )
-            tmp = tmp+"("+thisDir+")" ;
-        return tmp ;
-    }
-
-    @Override
-    public int hashCode()
-    {
-        final int prime = 31 ;
-        int result = 1 ;
-        result = prime * result + ((thisDir == null) ? 0 : thisDir.hashCode()) 
;
-        result = prime * result + ((thisDirLogStr == null) ? 0 : 
thisDirLogStr.hashCode()) ;
-        return result ;
-    }
-
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true ;
-        if (obj == null) return false ;
-        if (getClass() != obj.getClass()) return false ;
-        LocatorFile other = (LocatorFile)obj ;
-        if (thisDir == null)
-        {
-            if (other.thisDir != null) return false ;
-        } else
-            if (!thisDir.equals(other.thisDir)) return false ;
-        if (thisDirLogStr == null)
-        {
-            if (other.thisDirLogStr != null) return false ;
-        } else
-            if (!thisDirLogStr.equals(other.thisDirLogStr)) return false ;
-        return true ;
-    }
-}
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorZip.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorZip.java
deleted file mode 100644
index 2d71a8aee6..0000000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorZip.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.riot.system.stream;
-
-import java.io.IOException ;
-import java.io.InputStream ;
-import java.util.zip.ZipEntry ;
-import java.util.zip.ZipFile ;
-
-import org.apache.jena.atlas.web.ContentType ;
-import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.shared.JenaException ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
-
-/** Location files in a zip file */
-public class LocatorZip implements Locator
-{
-    private static Logger log = LoggerFactory.getLogger(LocatorZip.class) ;
-    private final String zipFileName ; 
-    private final ZipFile zipFile ;
-    
-    public LocatorZip(String zfn)
-    {
-        try {
-            zipFileName = zfn ;
-            zipFile = new ZipFile(zipFileName) ;
-        } catch  (IOException ex)
-        { 
-            throw new JenaException("Problems accessing "+zfn, ex) ;
-        }
-    }
-    
-    @Override
-    public TypedInputStream open(String filenameOrURI)
-    {
-        ZipEntry entry = zipFile.getEntry(filenameOrURI) ;
-        if ( entry == null )
-        {
-            if ( StreamManager.logAllLookups && log.isDebugEnabled() )
-                log.debug("Not found: "+zipFileName+" : "+filenameOrURI) ; 
-            return null ;
-            
-        }
-        try
-        {
-            InputStream in = zipFile.getInputStream(entry) ;
-            
-            if ( in == null )
-            {
-                if ( StreamManager.logAllLookups && log.isTraceEnabled() )
-                    log.trace("Not found: "+filenameOrURI) ; 
-                return null ;
-            }
-            
-            if ( StreamManager.logAllLookups  && log.isTraceEnabled() )
-                log.trace("Found: "+filenameOrURI) ;
-            
-            ContentType ct = RDFLanguages.guessContentType(filenameOrURI) ;
-            return new TypedInputStream(in, ct, filenameOrURI) ;
-        }
-        catch (IOException ex)
-        {
-            log.warn("IO Exception opening zip entry: " + filenameOrURI);
-            return null;
-        }
-    }
-
-    public String getZipFileName()
-    {
-        return zipFileName ;
-    }
-
-    @Override
-    public String getName() { return "LocatorZip("+zipFileName+")" ; } 
-
-    @Override
-    public int hashCode()
-    {
-        final int prime = 31 ;
-        int result = 1 ;
-        result = prime * result + ((zipFileName == null) ? 0 : 
zipFileName.hashCode()) ;
-        return result ;
-    }
-
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true ;
-        if (obj == null) return false ;
-        if (getClass() != obj.getClass()) return false ;
-        LocatorZip other = (LocatorZip)obj ;
-        if (zipFileName == null)
-        {
-            if (other.zipFileName != null) return false ;
-        } else
-            if (!zipFileName.equals(other.zipFileName)) return false ;
-        return true ;
-    }
-
-}
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/JenaIOEnvironment.java
 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/JenaIOEnvironment.java
similarity index 91%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/JenaIOEnvironment.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/JenaIOEnvironment.java
index b537358aa5..a7da3baecd 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/JenaIOEnvironment.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/JenaIOEnvironment.java
@@ -16,21 +16,21 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream;
+package org.apache.jena.riot.system.streammgr;
 
-import java.util.StringTokenizer ;
+import java.util.StringTokenizer;
 
-import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.rdf.model.* ;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.rdf.model.*;
 import org.apache.jena.riot.Lang;
 import org.apache.jena.riot.RDFLanguages;
 import org.apache.jena.riot.RDFParser;
-import org.apache.jena.riot.adapters.AdapterFileManager ;
-import org.apache.jena.shared.JenaException ;
+import org.apache.jena.riot.adapters.AdapterFileManager;
+import org.apache.jena.shared.JenaException;
 import org.apache.jena.util.SystemUtils;
-import org.apache.jena.vocabulary.LocationMappingVocab ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
+import org.apache.jena.vocabulary.LocationMappingVocab;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Code for using the general facilities of the location mapper/ filemanager 
subsystem
  *  and set up for Jena usage. e.g. find a location mapper with RDf 
description.
@@ -58,11 +58,11 @@ public class JenaIOEnvironment
     /** The default path for searching for the location mapper */
     public static final String DEFAULT_PATH =
         "location-mapping.ttl;location-mapping.rdf;"+
-        "etc/location-mapping.rdf;etc/location-mapping.ttl" ;
-    public static final String GlobalMapperSystemProperty1 = 
"http://jena.hpl.hp.com/2004/08/LocationMap"; ;
-    public static final String GlobalMapperSystemProperty2 = "LocationMap" ;
+        "etc/location-mapping.rdf;etc/location-mapping.ttl";
+    public static final String GlobalMapperSystemProperty1 = 
"http://jena.hpl.hp.com/2004/08/LocationMap";;
+    public static final String GlobalMapperSystemProperty2 = "LocationMap";
 
-    static String s_globalMapperPath = null ;
+    static String s_globalMapperPath = null;
 
     static private String getGlobalConfigPath() {
         if ( s_globalMapperPath == null )
@@ -99,7 +99,7 @@ public class JenaIOEnvironment
         LocationMapper locMap = new LocationMapper();
         StmtIterator mappings = m.listStatements(null, 
LocationMappingVocab.mapping, (RDFNode)null);
 
-        for ( ; mappings.hasNext() ; ) {
+        for (; mappings.hasNext(); ) {
             Statement s = mappings.nextStatement();
             Resource mapping = s.getResource();
 
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocationMapper.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocationMapper.java
similarity index 75%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocationMapper.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocationMapper.java
index 28df4c8e52..54861d62f9 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocationMapper.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocationMapper.java
@@ -16,18 +16,18 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream;
+package org.apache.jena.riot.system.streammgr;
 
-import java.util.Iterator ;
-import java.util.Map ;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.rdf.model.ModelFactory ;
-import org.apache.jena.rdf.model.Resource ;
-import org.apache.jena.vocabulary.LocationMappingVocab ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.vocabulary.LocationMappingVocab;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Alternative locations for URIs.  Maintains two maps:
@@ -43,9 +43,9 @@ import org.slf4j.LoggerFactory ;
 
 public class LocationMapper
 {
-    private static Logger log = LoggerFactory.getLogger(LocationMapper.class)  
;
-    private Map<String, String> altLocations = new ConcurrentHashMap<>() ;
-    private Map<String, String> altPrefixes = new ConcurrentHashMap<>() ;
+    private static Logger log = LoggerFactory.getLogger(LocationMapper.class) ;
+    private Map<String, String> altLocations = new ConcurrentHashMap<>();
+    private Map<String, String> altPrefixes = new ConcurrentHashMap<>();
 
     /** Create a LocationMapper with no mapping yet */
     public LocationMapper() { }
@@ -53,19 +53,19 @@ public class LocationMapper
     /** Deep copy of location and prefix maps */
     @Override
     public LocationMapper clone() {
-        return clone(this) ;
+        return clone(this);
     }
 
     private static LocationMapper clone(LocationMapper other) {
-        LocationMapper mapper = new LocationMapper() ;
-        mapper.altLocations.putAll(other.altLocations) ;
-        mapper.altPrefixes.putAll(other.altPrefixes) ;
-        return mapper ;
+        LocationMapper mapper = new LocationMapper();
+        mapper.altLocations.putAll(other.altLocations);
+        mapper.altPrefixes.putAll(other.altPrefixes);
+        return mapper;
     }
 
     public void copyFrom(LocationMapper lmap2) {
-        this.altLocations.putAll(lmap2.altLocations) ;
-        this.altPrefixes.putAll(lmap2.altPrefixes) ;
+        this.altLocations.putAll(lmap2.altLocations);
+        this.altPrefixes.putAll(lmap2.altPrefixes);
     }
 
     public boolean containsMapping(String uri) {
@@ -73,7 +73,7 @@ public class LocationMapper
     }
 
     public String altMapping(String uri) {
-        return altMapping(uri, uri) ;
+        return altMapping(uri, uri);
     }
 
     /**
@@ -89,9 +89,9 @@ public class LocationMapper
         if ( altLocations.isEmpty() && altPrefixes.isEmpty() )
             return otherwise;
         if ( altLocations.containsKey(uri) )
-            return altLocations.get(uri) ;
-        String newStart = null ;
-        String oldStart = null ;
+            return altLocations.get(uri);
+        String newStart = null;
+        String oldStart = null;
         for ( String prefix : altPrefixes.keySet() )
         {
             if ( uri.startsWith( prefix ) )
@@ -106,43 +106,43 @@ public class LocationMapper
         }
 
         if ( newStart != null )
-            return newStart + uri.substring(oldStart.length()) ;
+            return newStart + uri.substring(oldStart.length());
 
-        return otherwise ;
+        return otherwise;
     }
 
     public void addAltEntry(String uri, String alt) {
-        altLocations.put(uri, alt) ;
+        altLocations.put(uri, alt);
     }
 
     public void addAltPrefix(String uriPrefix, String altPrefix) {
-        altPrefixes.put(uriPrefix, altPrefix) ;
+        altPrefixes.put(uriPrefix, altPrefix);
     }
 
     /** Iterate over all the entries registered */
     public Iterator<String> listAltEntries() {
-        return altLocations.keySet().iterator() ;
+        return altLocations.keySet().iterator();
     }
 
     /** Iterate over all the prefixes registered */
     public Iterator<String> listAltPrefixes() {
-        return altPrefixes.keySet().iterator() ;
+        return altPrefixes.keySet().iterator();
     }
 
     public void removeAltEntry(String uri) {
-        altLocations.remove(uri) ;
+        altLocations.remove(uri);
     }
 
     public void removeAltPrefix(String uriPrefix) {
-        altPrefixes.remove(uriPrefix) ;
+        altPrefixes.remove(uriPrefix);
     }
 
     public String getAltEntry(String uri) {
-        return altLocations.get(uri) ;
+        return altLocations.get(uri);
     }
 
     public String getAltPrefix(String uriPrefix) {
-        return altPrefixes.get(uriPrefix) ;
+        return altPrefixes.get(uriPrefix);
     }
 
     /** Iterate over all the entries registered */
@@ -152,29 +152,29 @@ public class LocationMapper
 
     @Override
     public int hashCode() {
-        int x = 0 ;
-        x = x ^ altLocations.hashCode() ;
-        x = x ^ altPrefixes.hashCode() ;
-        return x ;
+        int x = 0;
+        x = x ^ altLocations.hashCode();
+        x = x ^ altPrefixes.hashCode();
+        return x;
     }
 
     @Override
     public boolean equals(Object obj) {
         if ( !(obj instanceof LocationMapper) )
-            return false ;
-        LocationMapper other = (LocationMapper)obj ;
+            return false;
+        LocationMapper other = (LocationMapper)obj;
 
         if ( !this.altLocations.equals(other.altLocations) )
-            return false ;
+            return false;
 
         if ( !this.altPrefixes.equals(other.altPrefixes) )
-            return false ;
-        return true ;
+            return false;
+        return true;
     }
 
     @Override
     public String toString() {
-        String s = "" ;
+        String s = "";
         for ( String k : altLocations.keySet() )
         {
             String v = altLocations.get( k );
@@ -186,14 +186,14 @@ public class LocationMapper
             String v = altPrefixes.get( k );
             s = s + "(Prefix:" + k + "=>" + v + ") ";
         }
-        return s ;
+        return s;
     }
 
     public Model toModel() {
-        Model m = ModelFactory.createDefaultModel() ;
-        m.setNsPrefix("lmap", 
"http://jena.hpl.hp.com/2004/08/location-mapping#";) ;
-        toModel(m) ;
-        return m ;
+        Model m = ModelFactory.createDefaultModel();
+        m.setNsPrefix("lmap", 
"http://jena.hpl.hp.com/2004/08/location-mapping#";);
+        toModel(m);
+        return m;
     }
 
     public void toModel(Model model) {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/Locator.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/Locator.java
similarity index 84%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/Locator.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/Locator.java
index 73e932257f..0bac4a35b4 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/Locator.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/Locator.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream;
+package org.apache.jena.riot.system.streammgr;
 
-import org.apache.jena.atlas.web.TypedInputStream ;
+import org.apache.jena.atlas.web.TypedInputStream;
 
 /**
  *  Interface to things that open TypedStreams from a place
@@ -27,6 +27,6 @@ import org.apache.jena.atlas.web.TypedInputStream ;
 public interface Locator
 {
     // Open a stream given a name of some kind (not necessarily an IRI).
-    public TypedInputStream open(String uri) ;
-    public String getName() ;
+    public TypedInputStream open(String uri);
+    public String getName();
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorClassLoader.java
 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorClassLoader.java
new file mode 100644
index 0000000000..f7b8c27623
--- /dev/null
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorClassLoader.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot.system.streammgr;
+
+import java.io.InputStream;
+
+import org.apache.jena.atlas.web.ContentType;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.riot.RDFLanguages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * LocatorClassLoader provides access to Java resources. File names should be 
an
+ * exact match for the java resource, i.e. no "file:" There is no scheme name 
for
+ * Java resources.
+ */
+public class LocatorClassLoader implements Locator {
+    static Logger log = LoggerFactory.getLogger(LocatorClassLoader.class);
+
+    private final ClassLoader classLoader;
+    public LocatorClassLoader(ClassLoader _classLoader) {
+        classLoader = _classLoader;
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        return other instanceof LocatorClassLoader && classLoader == 
((LocatorClassLoader)other).classLoader;
+    }
+
+    @Override
+    public int hashCode() {
+        return classLoader.hashCode();
+    }
+
+    @Override
+    public TypedInputStream open(String resourceName) {
+        if ( classLoader == null )
+            return null;
+
+        InputStream in = null;
+        try {
+            in = classLoader.getResourceAsStream(resourceName);
+        } catch (Exception ex) {}
+        if ( in == null ) {
+            if ( StreamManager.logAllLookups && log.isTraceEnabled() )
+                log.trace("Failed to open: " + resourceName);
+            return null;
+        }
+
+        if ( StreamManager.logAllLookups && log.isTraceEnabled() )
+            log.trace("Found: " + resourceName);
+
+        ContentType ct = RDFLanguages.guessContentType(resourceName);
+        // No sensible base URI.
+        return new TypedInputStream(in, ct, null);
+    }
+
+    public ClassLoader getClassLoader() {
+        return classLoader;
+    }
+
+    @Override
+    public String getName() {
+        return "ClassLoaderLocator";
+    }
+
+}
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFTP.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorFTP.java
similarity index 77%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFTP.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorFTP.java
index 1b1035b339..69ad7b7692 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFTP.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorFTP.java
@@ -16,26 +16,26 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream ;
+package org.apache.jena.riot.system.streammgr;
 
 import org.apache.jena.atlas.web.HttpException;
-import org.apache.jena.atlas.web.TypedInputStream ;
+import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.http.HttpOp;
-import org.apache.jena.riot.RiotException ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
+import org.apache.jena.riot.RiotException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Support for resources using the "ftp:" scheme */
 public class LocatorFTP extends LocatorURL {
-    private static Logger         log         = 
LoggerFactory.getLogger(LocatorFTP.class) ;
-    private static final String[] schemeNames = { "ftp" } ;
+    private static Logger         log         = 
LoggerFactory.getLogger(LocatorFTP.class);
+    private static final String[] schemeNames = { "ftp" };
 
     public LocatorFTP() {
-        super(schemeNames) ;
+        super(schemeNames);
     }
 
     @Override
-    protected Logger log() { return log ; }
+    protected Logger log() { return log; }
 
     @Override
     public TypedInputStream performOpen(String uri) {
@@ -44,19 +44,19 @@ public class LocatorFTP extends LocatorURL {
                 return HttpOp.httpGet(uri);
             }
             catch (HttpException ex) {
-                throw new RiotException("Bad FTP URL: "+uri, ex) ;
+                throw new RiotException("Bad FTP URL: "+uri, ex);
             }
         }
-        return null ;
+        return null;
     }
 
     @Override
     public String getName() {
-        return "LocatorFTP" ;
+        return "LocatorFTP";
     }
 
     @Override
     public int hashCode() {
-        return 57 ;
+        return 57;
     }
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorFile.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorFile.java
new file mode 100644
index 0000000000..bea2bffe78
--- /dev/null
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorFile.java
@@ -0,0 +1,206 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot.system.streammgr;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.jena.atlas.io.IO;
+import org.apache.jena.atlas.lib.IRILib;
+import org.apache.jena.atlas.web.ContentType;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.irix.IRIs;
+import org.apache.jena.riot.RDFLanguages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Location files in the filing system. A FileLocator can have a "current 
directory"
+ * - this is separate from any location mapping (see {@link LocationMapper}) 
as it
+ * applies only to files.
+ */
+
+public class LocatorFile implements Locator {
+    static Logger log = LoggerFactory.getLogger(LocatorFile.class);
+    private final String thisDir;
+    private final String thisDirLogStr;
+
+    /**
+     * Create a LocatorFile without a specific working directory. Relative 
file names
+     * are relative to the working directory of the JVM.
+     */
+    public LocatorFile() {
+        this(null);
+    }
+
+    /**
+     * Create a LocatorFile that uses the argument as it's working directory.
+     * <p>
+     * The working directory should be a UNIX style file name, (relative or
+     * absolute), not a URI.
+     * <p>
+     * For MS Window, if asked to {@link #open} a file name with a drive 
letter, the
+     * code assumes it is not relative to the working directory of this
+     * {@code LocatorFile}.
+     */
+    public LocatorFile(String dir) {
+        if ( dir != null ) {
+            if ( dir.endsWith("/") || dir.endsWith(java.io.File.separator) )
+                dir = dir.substring(0, dir.length() - 1);
+            thisDirLogStr = " [" + dir + "]";
+        } else
+            thisDirLogStr = "";
+        thisDir = dir;
+    }
+
+    /**
+     * Processing the filename for file: or relative filename and return a 
filename
+     * suitable for file operations.
+     */
+    public String toFileName(String filenameIRI) {
+        // Do not use directly : it will ignore the directory.
+        // IRILib.filenameToIRI
+
+        String scheme = IRIs.scheme(filenameIRI);
+        String fn = filenameIRI;
+        // Windows : C:\\ is not a scheme name!
+        if ( scheme != null ) {
+            if ( scheme.length() == 1 ) {
+                // Not perfect for MS Windows but if thisDir is set then
+                // the main use case is resolving relative (no drive)
+                // filenames against thisDir. Treat the presence of a
+                // drive letter as making this a JVM relative filename.
+                return fn;
+            } else if ( scheme.length() > 1 ) {
+                if ( !scheme.equalsIgnoreCase("file") )
+                    // Not file: IRI
+                    return null;
+                fn = IRILib.IRIToFilename(filenameIRI);
+                // fall through
+            }
+        }
+        // fn is the file name to use.
+        return absolute(fn);
+    }
+
+    /**
+     * Make a filename (no URI scheme, no windows drive) absolute if there is a
+     * setting for directory name thisDir
+     */
+    private String absolute(String fn) {
+        if ( thisDir != null && !fn.startsWith("/") && 
!fn.startsWith(File.separator) )
+            fn = thisDir + File.separator + fn;
+        return fn;
+    }
+
+    public String getThisDir() {
+        return thisDir;
+    }
+
+    public boolean hasCurrentDir() {
+        return thisDir != null;
+    }
+
+    public boolean exists(String fileIRI) {
+        String fn = toFileName(fileIRI);
+        if ( fn == null )
+            return false;
+
+        return exists$(fn);
+    }
+
+    private boolean exists$(String fn) {
+        if ( fn.equals("-") )
+            return true;
+        return new File(fn).exists();
+    }
+
+    /** Open anything that looks a bit like a file name */
+    @Override
+    public TypedInputStream open(String filenameIRI) {
+        String fn = toFileName(filenameIRI);
+        if ( fn == null )
+            return null;
+
+        try {
+            if ( !exists$(fn) ) {
+                if ( StreamManager.logAllLookups && log.isTraceEnabled() )
+                    log.trace("Not found: " + filenameIRI + thisDirLogStr);
+                return null;
+            }
+        } catch (Exception e) {
+            log.warn("Security problem testing for file", e);
+            return null;
+        }
+
+        try {
+            InputStream in = IO.openFileEx(fn);
+
+            if ( StreamManager.logAllLookups && log.isTraceEnabled() )
+                log.trace("Found: " + filenameIRI + thisDirLogStr);
+
+            ContentType ct = RDFLanguages.guessContentType(filenameIRI);
+            return new TypedInputStream(in, ct, filenameIRI);
+        } catch (IOException ioEx) {
+            // We already tested whether the file exists or not.
+            log.warn("File unreadable (but exists): " + fn + " : " + 
ioEx.getMessage());
+            return null;
+        }
+    }
+
+    @Override
+    public String getName() {
+        String tmp = "LocatorFile";
+        if ( thisDir != null )
+            tmp = tmp + "(" + thisDir + ")";
+        return tmp;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((thisDir == null) ? 0 : thisDir.hashCode());
+        result = prime * result + ((thisDirLogStr == null) ? 0 : 
thisDirLogStr.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        LocatorFile other = (LocatorFile)obj;
+        if ( thisDir == null ) {
+            if ( other.thisDir != null )
+                return false;
+        } else if ( !thisDir.equals(other.thisDir) )
+            return false;
+        if ( thisDirLogStr == null ) {
+            if ( other.thisDirLogStr != null )
+                return false;
+        } else if ( !thisDirLogStr.equals(other.thisDirLogStr) )
+            return false;
+        return true;
+    }
+}
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorHTTP.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorHTTP.java
similarity index 78%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorHTTP.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorHTTP.java
index a1167e36b5..6cd62a7ef5 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorHTTP.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorHTTP.java
@@ -16,40 +16,40 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream ;
+package org.apache.jena.riot.system.streammgr;
 
-import org.apache.jena.atlas.web.TypedInputStream ;
+import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.http.HttpOp;
-import org.apache.jena.riot.WebContent ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
+import org.apache.jena.riot.WebContent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Support for resources using the "http:" and "https" schemes */
 public class LocatorHTTP extends LocatorURL {
-    private static Logger         log         = 
LoggerFactory.getLogger(LocatorHTTP.class) ;
-    private static final String[] schemeNames = {"http", "https"} ;
+    private static Logger         log         = 
LoggerFactory.getLogger(LocatorHTTP.class);
+    private static final String[] schemeNames = {"http", "https"};
 
     public LocatorHTTP() {
-        super(schemeNames) ;
+        super(schemeNames);
     }
 
     @Override
-    protected Logger log() { return log ; }
+    protected Logger log() { return log; }
 
     @Override
     public TypedInputStream performOpen(String uri) {
         if ( uri.startsWith("http://";) || uri.startsWith("https://";) )
-            return HttpOp.httpGet(uri, WebContent.defaultRDFAcceptHeader) ;
-        return null ;
+            return HttpOp.httpGet(uri, WebContent.defaultRDFAcceptHeader);
+        return null;
     }
 
     @Override
     public String getName() {
-        return "LocatorHTTP" ;
+        return "LocatorHTTP";
     }
 
     @Override
     public int hashCode() {
-        return 57 ;
+        return 57;
     }
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorStdin.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorStdin.java
similarity index 86%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorStdin.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorStdin.java
index 827c74bd27..19786a67ef 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorStdin.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorStdin.java
@@ -16,17 +16,17 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream;
+package org.apache.jena.riot.system.streammgr;
 
-import org.apache.jena.atlas.web.TypedInputStream ;
+import org.apache.jena.atlas.web.TypedInputStream;
 
 /** Locator for the resource called "-" mapped to {@code System.in}. */
 public class LocatorStdin implements Locator {
     @Override
     public TypedInputStream open(String uri) {
         if ( uri.equals("-") )
-            return TypedInputStream.wrap(System.in) ;
-        return null ;
+            return TypedInputStream.wrap(System.in);
+        return null;
     }
 
     @Override
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorURL.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorURL.java
similarity index 97%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorURL.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorURL.java
index ad75936e8b..6922dc782d 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorURL.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorURL.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream;
+package org.apache.jena.riot.system.streammgr;
 
 import org.apache.jena.atlas.lib.Lib;
 import org.apache.jena.atlas.web.TypedInputStream;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorZip.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorZip.java
new file mode 100644
index 0000000000..3f73d77a82
--- /dev/null
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/LocatorZip.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot.system.streammgr;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.apache.jena.atlas.web.ContentType;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.riot.RDFLanguages;
+import org.apache.jena.shared.JenaException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/** Location files in a zip file */
+public class LocatorZip implements Locator {
+    private static Logger log = LoggerFactory.getLogger(LocatorZip.class);
+    private final String zipFileName;
+    private final ZipFile zipFile;
+
+    public LocatorZip(String zfn) {
+        try {
+            zipFileName = zfn;
+            zipFile = new ZipFile(zipFileName);
+        } catch (IOException ex) {
+            throw new JenaException("Problems accessing " + zfn, ex);
+        }
+    }
+
+    @Override
+    public TypedInputStream open(String filenameOrURI) {
+        ZipEntry entry = zipFile.getEntry(filenameOrURI);
+        if ( entry == null ) {
+            if ( StreamManager.logAllLookups && log.isDebugEnabled() )
+                log.debug("Not found: " + zipFileName + " : " + filenameOrURI);
+            return null;
+
+        }
+        try {
+            InputStream in = zipFile.getInputStream(entry);
+
+            if ( in == null ) {
+                if ( StreamManager.logAllLookups && log.isTraceEnabled() )
+                    log.trace("Not found: " + filenameOrURI);
+                return null;
+            }
+
+            if ( StreamManager.logAllLookups && log.isTraceEnabled() )
+                log.trace("Found: " + filenameOrURI);
+
+            ContentType ct = RDFLanguages.guessContentType(filenameOrURI);
+            return new TypedInputStream(in, ct, filenameOrURI);
+        } catch (IOException ex) {
+            log.warn("IO Exception opening zip entry: " + filenameOrURI);
+            return null;
+        }
+    }
+
+    public String getZipFileName() {
+        return zipFileName;
+    }
+
+    @Override
+    public String getName() {
+        return "LocatorZip(" + zipFileName + ")";
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((zipFileName == null) ? 0 : 
zipFileName.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        LocatorZip other = (LocatorZip)obj;
+        if ( zipFileName == null ) {
+            if ( other.zipFileName != null )
+                return false;
+        } else if ( !zipFileName.equals(other.zipFileName) )
+            return false;
+        return true;
+    }
+
+}
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
similarity index 76%
rename from 
jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java
rename to 
jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
index 64c774759d..73aa38d077 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
@@ -16,19 +16,19 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.system.stream ;
+package org.apache.jena.riot.system.streammgr;
 
-import java.util.ArrayList ;
-import java.util.Collections ;
-import java.util.List ;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.jena.atlas.lib.Lib;
-import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.riot.RiotNotFoundException ;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.riot.RiotNotFoundException;
 import org.apache.jena.riot.SysRIOT;
 import org.apache.jena.sparql.util.Context;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Management of stream opening, including redirecting through a location 
mapper
@@ -37,14 +37,14 @@ import org.slf4j.LoggerFactory ;
  */
 
 public class StreamManager {
-    private static Logger        log           = 
LoggerFactory.getLogger(StreamManager.class) ;
+    private static Logger        log           = 
LoggerFactory.getLogger(StreamManager.class);
 
-    public static boolean        logAllLookups = true ;
+    public static boolean        logAllLookups = true;
 
-    private List<Locator>        handlers      = new ArrayList<>() ;
-    private LocationMapper       mapper        = null ;
+    private List<Locator>        handlers      = new ArrayList<>();
+    private LocationMapper       mapper        = null;
 
-    private static StreamManager globalStreamManager ;
+    private static StreamManager globalStreamManager;
 
     /**
      * Return a default configuration StreamManager with a {@link LocatorFile},
@@ -57,14 +57,14 @@ public class StreamManager {
             .addLocator(new LocatorHTTP())
             .addLocator(new LocatorFTP())
             .addLocator(new 
LocatorClassLoader(StreamManager.class.getClassLoader()));
-        return streamManager ;
+        return streamManager;
     }
 
     /**
      * Return the global {@code StreamManager}.
      */
     public static StreamManager get() {
-        return globalStreamManager ;
+        return globalStreamManager;
     }
 
     /**
@@ -91,10 +91,10 @@ public class StreamManager {
      * Set the global {@code StreamManager}.
      */
     public static void setGlobal(StreamManager streamManager) {
-        globalStreamManager = streamManager ;
+        globalStreamManager = streamManager;
     }
 
-    static { setGlobal(createStd()) ; }
+    static { setGlobal(createStd()); }
 
     /** Create a {@code StreamManager} with no locator or location mapper. */
     public StreamManager() {}
@@ -102,14 +102,14 @@ public class StreamManager {
     /** Create a deep copy of this StreamManager */
     @Override
     public StreamManager clone() {
-        return clone(this) ;
+        return clone(this);
     }
 
     private static StreamManager clone(StreamManager other) {
-        StreamManager sm = new StreamManager() ;
-        sm.handlers.addAll(other.handlers) ;
-        sm.mapper = other.mapper == null ? null : other.mapper.clone() ;
-        return sm ;
+        StreamManager sm = new StreamManager();
+        sm.handlers.addAll(other.handlers);
+        sm.mapper = other.mapper == null ? null : other.mapper.clone();
+        return sm;
     }
 
     /**
@@ -118,14 +118,14 @@ public class StreamManager {
      */
     public TypedInputStream open(String filenameOrURI) {
         if ( log.isDebugEnabled() )
-            log.debug("open(" + filenameOrURI + ")") ;
+            log.debug("open(" + filenameOrURI + ")");
 
-        String uri = mapURI(filenameOrURI) ;
+        String uri = mapURI(filenameOrURI);
 
         if ( log.isDebugEnabled() && !uri.equals(filenameOrURI) )
-            log.debug("open: mapped to " + uri) ;
+            log.debug("open: mapped to " + uri);
 
-        return openNoMapOrNull(uri) ;
+        return openNoMapOrNull(uri);
     }
 
     /** Test whether a mapping exists */
@@ -136,19 +136,19 @@ public class StreamManager {
     /** Apply the mapping of a filename or URI */
     public String mapURI(String filenameOrURI) {
         if ( mapper == null )
-            return filenameOrURI ;
+            return filenameOrURI;
 
-        String uri = mapper.altMapping(filenameOrURI, null) ;
+        String uri = mapper.altMapping(filenameOrURI, null);
 
         if ( uri == null ) {
             if ( StreamManager.logAllLookups && log.isDebugEnabled() )
-                log.debug("Not mapped: " + filenameOrURI) ;
-            uri = filenameOrURI ;
+                log.debug("Not mapped: " + filenameOrURI);
+            uri = filenameOrURI;
         } else {
             if ( log.isDebugEnabled() )
-                log.debug("Mapped: " + filenameOrURI + " => " + uri) ;
+                log.debug("Mapped: " + filenameOrURI + " => " + uri);
         }
-        return uri ;
+        return uri;
     }
 
     /**
@@ -156,10 +156,10 @@ public class StreamManager {
      * mapping. Throws RiotNotFoundException if not found.
      */
     public TypedInputStream openNoMap(String filenameOrURI) {
-        TypedInputStream in = openNoMapOrNull(filenameOrURI) ;
+        TypedInputStream in = openNoMapOrNull(filenameOrURI);
         if ( in == null )
-            throw new RiotNotFoundException(filenameOrURI) ;
-        return in ;
+            throw new RiotNotFoundException(filenameOrURI);
+        return in;
     }
 
     /**
@@ -169,19 +169,19 @@ public class StreamManager {
 
     public TypedInputStream openNoMapOrNull(String filenameOrURI) {
         for (Locator loc : handlers) {
-            TypedInputStream in = loc.open(filenameOrURI) ;
+            TypedInputStream in = loc.open(filenameOrURI);
             if ( in != null ) {
                 if ( log.isDebugEnabled() )
-                    log.debug("Found: " + filenameOrURI + " (" + loc.getName() 
+ ")") ;
-                return in ;
+                    log.debug("Found: " + filenameOrURI + " (" + loc.getName() 
+ ")");
+                return in;
             }
         }
-        return null ;
+        return null;
     }
 
     /** Set the location mapping */
     public StreamManager locationMapper(LocationMapper mapper) {
-        this.mapper = mapper ;
+        this.mapper = mapper;
         return this;
     }
 
@@ -193,17 +193,17 @@ public class StreamManager {
 
     /** Return an immutable list of all the handlers */
     public List<Locator> locators() {
-        return Collections.unmodifiableList(handlers) ;
+        return Collections.unmodifiableList(handlers);
     }
 
     /** Remove a locator. */
     public void remove(Locator loc) {
-        handlers.remove(loc) ;
+        handlers.remove(loc);
     }
 
     /** Remove all locators */
     public void clearLocators() {
-        handlers.clear() ;
+        handlers.clear();
     }
 
     /**
@@ -211,7 +211,7 @@ public class StreamManager {
      * Returns {@code this} StreamManager.
      */
     public StreamManager addLocator(Locator loc) {
-        handlers.add(loc) ;
+        handlers.add(loc);
         return this;
     }
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java
index 94ca0f9a78..122462732d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java
@@ -28,10 +28,7 @@ import org.apache.jena.riot.*;
 import org.apache.jena.riot.rowset.RowSetReader;
 import org.apache.jena.riot.rowset.RowSetReaderFactory;
 import org.apache.jena.riot.rowset.RowSetReaderRegistry;
-//import org.apache.jena.riot.resultset.ResultSetReader;
-//import org.apache.jena.riot.resultset.ResultSetReaderFactory;
-//import org.apache.jena.riot.resultset.ResultSetReaderRegistry;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.sparql.exec.QueryExecResult;
 import org.apache.jena.sparql.exec.RowSet;
 import org.apache.jena.sparql.util.Context;
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TestRDFParser.java 
b/jena-arq/src/test/java/org/apache/jena/riot/TestRDFParser.java
index 2625c4865f..bd17f246fa 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/TestRDFParser.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/TestRDFParser.java
@@ -39,8 +39,8 @@ import org.apache.jena.riot.system.ErrorHandlerFactory;
 import org.apache.jena.riot.system.FactoryRDFStd;
 import org.apache.jena.riot.system.PrefixMap;
 import org.apache.jena.riot.system.PrefixMapFactory;
-import org.apache.jena.riot.system.stream.LocatorFile;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.LocatorFile;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sparql.graph.GraphFactory;
diff --git 
a/jena-arq/src/test/java/org/apache/jena/riot/adapters/TestFileManager.java 
b/jena-arq/src/test/java/org/apache/jena/riot/adapters/TestFileManager.java
index 06d9a43c18..71f69ba238 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/adapters/TestFileManager.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/adapters/TestFileManager.java
@@ -31,7 +31,7 @@ import org.apache.jena.ontology.OntModelSpec;
 import org.apache.jena.rdf.model.Model;
 import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.stream.TestLocationMapper;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.shared.NotFoundException;
 import org.apache.jena.util.FileManager;
 import org.apache.jena.util.LocationMapper;
@@ -84,7 +84,7 @@ public class TestFileManager
 
     @Test
     public void testFileManagerNoFile3() {
-        FileManager fileManager = new AdapterFileManager(new StreamManager(), 
new org.apache.jena.riot.system.stream.LocationMapper());
+        FileManager fileManager = new AdapterFileManager(new StreamManager(), 
new org.apache.jena.riot.system.streammgr.LocationMapper());
         fileManager.addLocatorFile();
         assertThrows(NotFoundException.class, 
()->fileManager.readModelInternal(ModelFactory.createDefaultModel(), 
filenameNonExistent));
     }
diff --git 
a/jena-arq/src/test/java/org/apache/jena/riot/stream/TestLocators.java 
b/jena-arq/src/test/java/org/apache/jena/riot/stream/TestLocators.java
index 2086764d5e..a4365641da 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/stream/TestLocators.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/stream/TestLocators.java
@@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.riot.WebContent;
-import org.apache.jena.riot.system.stream.LocatorFile;
+import org.apache.jena.riot.system.streammgr.LocatorFile;
 
 public class TestLocators
 {
diff --git 
a/jena-arq/src/test/java/org/apache/jena/riot/stream/TestStreamManager.java 
b/jena-arq/src/test/java/org/apache/jena/riot/stream/TestStreamManager.java
index 7f97cc34e1..499594b395 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/stream/TestStreamManager.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/stream/TestStreamManager.java
@@ -35,9 +35,9 @@ import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RiotNotFoundException;
 import org.apache.jena.riot.SysRIOT;
-import org.apache.jena.riot.system.stream.LocatorFile;
-import org.apache.jena.riot.system.stream.LocatorHTTP;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.LocatorFile;
+import org.apache.jena.riot.system.streammgr.LocatorHTTP;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.sparql.util.Context;
 
 public class TestStreamManager {
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
index 7d49fdca77..e44a8c91a8 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
@@ -27,9 +27,9 @@ import org.apache.jena.atlas.lib.DateTimeUtils;
 import org.apache.jena.atlas.lib.Version;
 import org.apache.jena.fuseki.system.FusekiCore;
 import org.apache.jena.query.ARQ;
-import org.apache.jena.riot.system.stream.LocatorFTP;
-import org.apache.jena.riot.system.stream.LocatorHTTP;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.LocatorFTP;
+import org.apache.jena.riot.system.streammgr.LocatorHTTP;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.sparql.util.Context;
 import org.apache.jena.sparql.util.Symbol;
 import org.apache.jena.web.HttpSC;
diff --git a/jena-shacl/src/main/java/org/apache/jena/shacl/Imports.java 
b/jena-shacl/src/main/java/org/apache/jena/shacl/Imports.java
index b0d79ca3ce..238580ac91 100644
--- a/jena-shacl/src/main/java/org/apache/jena/shacl/Imports.java
+++ b/jena-shacl/src/main/java/org/apache/jena/shacl/Imports.java
@@ -36,8 +36,8 @@ import org.apache.jena.irix.IRIs;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RDFParser;
 import org.apache.jena.riot.RiotParseException;
-import org.apache.jena.riot.system.stream.LocationMapper;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.LocationMapper;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.shacl.sys.ShaclSystem;
 import org.apache.jena.sparql.graph.GraphFactory;
 import org.apache.jena.system.G;
diff --git a/jena-shex/src/test/java/org/apache/jena/shex/runner/ShexTests.java 
b/jena-shex/src/test/java/org/apache/jena/shex/runner/ShexTests.java
index c64fd57a11..e6109ebf8d 100644
--- a/jena-shex/src/test/java/org/apache/jena/shex/runner/ShexTests.java
+++ b/jena-shex/src/test/java/org/apache/jena/shex/runner/ShexTests.java
@@ -29,9 +29,9 @@ import org.apache.jena.atlas.lib.Pair;
 import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.rdf.model.*;
-import org.apache.jena.riot.system.stream.Locator;
-import org.apache.jena.riot.system.stream.LocatorFile;
-import org.apache.jena.riot.system.stream.StreamManager;
+import org.apache.jena.riot.system.streammgr.Locator;
+import org.apache.jena.riot.system.streammgr.LocatorFile;
+import org.apache.jena.riot.system.streammgr.StreamManager;
 import org.apache.jena.shex.expressions.Sx2;
 import org.apache.jena.vocabulary.RDF;
 

Reply via email to