You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2020/11/24 21:44:58 UTC

[jena] branch windows-file updated (2982c75 -> 8520af2)

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

andy pushed a change to branch windows-file
in repository https://gitbox.apache.org/repos/asf/jena.git.


 discard 2982c75  Investigation: Windows+file:
     new 8520af2  Investigation: Windows+file:

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (2982c75)
            \
             N -- N -- N   refs/heads/windows-file (8520af2)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java      | 7 -------
 .../main/java/org/apache/jena/riot/system/stream/LocatorFile.java  | 4 +---
 2 files changed, 1 insertion(+), 10 deletions(-)


[jena] 01/01: Investigation: Windows+file:

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8520af2d452826d7fa167efd1e0da9b8ca42ab6d
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Tue Nov 24 18:40:53 2020 +0000

    Investigation: Windows+file:
---
 jena-arq/pom.xml                                   |   3 +
 .../main/java/org/apache/jena/riot/RDFDataMgr.java |   2 +-
 .../java/org/apache/jena/riot/RDFLanguages.java    |  22 +++-
 .../jena/riot/system/stream/LocatorFile.java       |  54 ++++++----
 .../java/org/apache/jena/riot/TestLangRIOT.java    |  20 ++--
 .../apache/jena/riot/stream/TestStreamManager.java | 111 ++++++++++++--------
 .../apache/jena/riot/thrift/TestThriftSetup.java   |   2 +-
 .../src/main/java/org/apache/jena/atlas/io/IO.java |  75 +++++++++++--
 .../java/org/apache/jena/atlas/lib/IRILib.java     |   2 +-
 jena-cmds/src/main/java/tdb/tdbloader.java         |   2 +-
 jena-cmds/src/main/java/tdb2/tdbloader.java        |   2 +-
 .../main/java/org/apache/jena/util/FileUtils.java  | 116 ++++++++++-----------
 .../org/apache/jena/fuseki/build/FusekiConfig.java |   4 +-
 .../java/org/apache/jena/fuseki/system/Upload.java |   4 +-
 .../apache/jena/fuseki/main/cmds/FusekiMain.java   |   2 +-
 .../java/org/apache/jena/fuseki/cmd/FusekiCmd.java |   2 +-
 .../jena/rdfconnection/RDFConnectionLocal.java     |   2 +-
 .../jena/rdfconnection/RDFConnectionRemote.java    |   4 +-
 pom.xml                                            |   9 ++
 19 files changed, 276 insertions(+), 162 deletions(-)

diff --git a/jena-arq/pom.xml b/jena-arq/pom.xml
index faf5cc9..2105a2e 100644
--- a/jena-arq/pom.xml
+++ b/jena-arq/pom.xml
@@ -173,8 +173,11 @@
                 tests for partial testing during development.
                 TC_Examples does not run in the the build.
             -->
+            <include>**/TS_IO2.java</include>
+            <!--
             <include>**/TS_*.java</include>
             <include>**/Scripts_*.java</include>
+            -->
           </includes>
         </configuration>
       </plugin>
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 6e98e1a..954a9eb 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
@@ -707,7 +707,7 @@ public class RDFDataMgr
         if ( base == null )
             base = SysRIOT.chooseBaseIRI(uri) ;
         if ( hintLang == null )
-            hintLang = RDFLanguages.filenameToLang(uri) ;
+            hintLang = RDFLanguages.uriToLang(uri) ;
         parseFromURI(sink, uri, base, hintLang, context);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
index 0c8393e..8c376ca 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
@@ -26,6 +26,8 @@ import org.apache.jena.atlas.io.IO;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.atlas.web.MediaType ;
+import org.apache.jena.base.Sys;
+import org.apache.jena.riot.system.stream.LocatorFile;
 import org.apache.jena.util.FileUtils ;
 
 /** Central registry of RDF languages and syntaxes.
@@ -399,13 +401,17 @@ public class RDFLanguages
     }
 
     /** Try to map a resource name to a {@link Lang}; return null on no registered mapping */
-    public static Lang resourceNameToLang(String resourceName) { return filenameToLang(resourceName) ; }
+    public static Lang resourceNameToLang(String resourceName) { return uriToLang(resourceName) ; }
 
     /** Try to map a resource name to a {@link Lang}; return the given default where there is no registered mapping */
     public static Lang resourceNameToLang(String resourceName, Lang dftLang) { return filenameToLang(resourceName, dftLang) ; }
 
+    /** @deprecated Use {@link #uriToLang}. */
+    @Deprecated
+    public static Lang filenameToLang(String uriOrFilename) { return uriToLang(uriOrFilename); }
+
     /** Try to map a URI or file name to a {@link Lang}; return null on no registered mapping. */
-    public static Lang filenameToLang(String filename)
+    public static Lang uriToLang(String filename)
     {
         if ( filename == null )
             return null;
@@ -415,15 +421,21 @@ public class RDFLanguages
         int iHash = filename.indexOf('#');
         if ( iHash  > 0 )
             filename = filename.substring(0, iHash);
-        // Gzip or BZip2 compressed?
+        // Compressed?
+        if ( LocatorFile.DEBUG )
+            System.out.println("Before: "+filename);
         filename = IO.filenameNoCompression(filename);
+        if ( LocatorFile.DEBUG )
+            System.out.println("After1: "+filename);
+        if ( LocatorFile.DEBUG )
+            System.out.println("After2: "+FileUtils.getFilenameExt(filename));
         return fileExtToLang(FileUtils.getFilenameExt(filename));
     }
 
     /** Try to map a file name to a {@link Lang}; return the given default where there is no registered mapping */
     public static Lang filenameToLang(String filename, Lang dftLang)
     {
-        Lang lang = filenameToLang(filename) ;
+        Lang lang = uriToLang(filename) ;
         return (lang == null) ? dftLang : lang ;
     }
 
@@ -449,7 +461,7 @@ public class RDFLanguages
     {
         if ( resourceName == null )
             return null ;
-        Lang lang = filenameToLang(resourceName) ;
+        Lang lang = uriToLang(resourceName) ;
         if ( lang == null )
             return null ;
         return lang.getContentType() ;
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
index 984846a..760326d 100644
--- 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
@@ -34,14 +34,13 @@ 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{LocationMapping}) as it applies only to files.
+ *  location mapping (see {@link LocationMapper}) as it applies only to files.
  */
 
 public class LocatorFile implements Locator
 {
-    // Implementation note:
-    // Java7: Path.resolve may provide an answer from the intricies of MS Windows
-    
+    public static boolean DEBUG = false;
+
     static Logger log = LoggerFactory.getLogger(LocatorFile.class) ;
     private final String thisDir ;
     private final String thisDirLogStr ;
@@ -50,7 +49,7 @@ public class LocatorFile implements Locator
      * 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,
@@ -58,7 +57,7 @@ public class LocatorFile implements Locator
      * <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}.  
+     * of this {@code LocatorFile}.
      */
     public LocatorFile(String dir)
     {
@@ -71,27 +70,32 @@ public class LocatorFile implements Locator
         else
             thisDirLogStr = "" ;
         thisDir = dir ;
+
+        if ( DEBUG ) {
+            System.out.println("LocatorFile("+dir+") -> thisDir="+dir+"  thisDirLogStr="+thisDir);
+        }
+
     }
 
     /** Processing the filename for file: or relative filename
-     *  and return a filename suitable for file operations. 
+     *  and return a filename suitable for file operations.
      */
     public String toFileName(String filenameIRI)
     {
-        // Do not use directly : it will ignore the directory. 
+        // Do not use directly : it will ignore the directory.
         //IRILib.filenameToIRI
-        
+
         String scheme = FileUtils.getScheme(filenameIRI) ;
         String fn = filenameIRI ;
         // Windows : C:\\ is not a scheme name!
-        if ( scheme != null ) 
+        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. 
+                // drive letter as making this a JVM relative filename.
                 return fn ;
             }
             else if ( scheme.length() > 1 )
@@ -101,14 +105,14 @@ public class LocatorFile implements Locator
                     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  
+     * a setting for directory name thisDir
      */
     private String absolute(String fn)
     {
@@ -116,7 +120,7 @@ public class LocatorFile implements Locator
             fn = thisDir+File.separator+fn ;
         return fn ;
     }
-    
+
     public String getThisDir()
     {
         return thisDir ;
@@ -133,10 +137,10 @@ public class LocatorFile implements Locator
         String fn = toFileName(fileIRI) ;
         if ( fn == null )
             return false ;
-        
+
         return exists$(fn) ;
     }
-    
+
     private boolean exists$(String fn)
     {
         if ( fn.equals("-") )
@@ -144,14 +148,22 @@ public class LocatorFile implements Locator
         return new File(fn).exists() ;
     }
 
-    /** Open anything that looks a bit like a file name */ 
+    /** Open anything that looks a bit like a file name */
     @Override
     public TypedInputStream open(String filenameIRI)
     {
+        if ( LocatorFile.DEBUG ) {
+            System.out.println("> LocatiorFile.open: "+filenameIRI);
+            System.out.println("  thisDir = "+thisDir);
+            System.out.println("  thisDirLogStr = "+thisDirLogStr);
+        }
+
         String fn = toFileName(filenameIRI) ;
+        if ( LocatorFile.DEBUG )
+            System.out.println("  LocatiorFile.open#toFileName: "+fn);
         if ( fn == null )
             return null ;
-        
+
         try {
             if ( ! exists$(fn) )
             {
@@ -163,13 +175,13 @@ public class LocatorFile implements Locator
             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)
@@ -180,7 +192,7 @@ public class LocatorFile implements Locator
             return null ;
         }
     }
-    
+
     @Override
     public String getName()
     {
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TestLangRIOT.java b/jena-arq/src/test/java/org/apache/jena/riot/TestLangRIOT.java
index 590ab21..11e675d 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/TestLangRIOT.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/TestLangRIOT.java
@@ -25,31 +25,31 @@ import org.junit.Test ;
 
 public class TestLangRIOT
 {
-    @BeforeClass public static void beforeClass() { RDFLanguages.init() ; } 
-    
+    @BeforeClass public static void beforeClass() { RDFLanguages.init() ; }
+
     @Test public void lang_01() { test(RDFLanguages.NTRIPLES, "NT") ; }
     @Test public void lang_02() { test(RDFLanguages.NTRIPLES, "N-Triples") ; }
     @Test public void lang_03() { test(RDFLanguages.NTRIPLES, "N-TRIPLES") ; }
     @Test public void lang_04() { test(RDFLanguages.NTRIPLES, "NTRIPLE") ; }
     @Test public void lang_05() { test(RDFLanguages.NTRIPLES, "NTRIPLES") ; }
-    
+
     @Test public void lang_11() { test(RDFLanguages.TURTLE, "TTL") ; }
     @Test public void lang_12() { test(RDFLanguages.TURTLE, "TUrtLE") ; }
 
     @Test public void lang_21() { test(RDFLanguages.RDFXML, "RDF/XML") ; }
     @Test public void lang_22() { test(RDFLanguages.RDFXML, "RDFXML") ; }
     @Test public void lang_23() { test(RDFLanguages.RDFXML, "RDF/XML-ABBREV") ; }
-    
+
     @Test public void lang_30() { test(RDFLanguages.RDFJSON, "RDFJSON") ; }
     @Test public void lang_31() { test(RDFLanguages.RDFJSON, "RDF/json") ; }
 
     @Test public void lang_40() { test(RDFLanguages.NQUADS,  "N-QUADS") ; }
     @Test public void lang_41() { test(RDFLanguages.NQUADS, "NQuads") ; }
-    
+
     @Test public void lang_50() { test(RDFLanguages.TRIG,  "TriG") ; }
     @Test public void lang_51() { test(RDFLanguages.TRIG, "trig") ; }
     @Test public void lang_52() { test(RDFLanguages.TRIG, "TRIG") ; }
-    
+
     @Test public void guess_01() { guess("D.nt", RDFLanguages.NTRIPLES) ; }
     @Test public void guess_02() { guess("D.ttl.nt", RDFLanguages.NTRIPLES) ; }
 
@@ -57,19 +57,19 @@ public class TestLangRIOT
 
     @Test public void guess_04() { guess("D.rdf", RDFLanguages.RDFXML) ; }
     //@Test public void guess_05() { guess("D.owl", RDFLanguages.RDFXML) ; }
-    
+
     @Test public void guess_06() { guess("D.rj", RDFLanguages.RDFJSON) ; }
     // Jena2 - changed JENA-997 : @Test public void guess_07() { guess("D.json", RDFLanguages.RDFJSON) ; }
 
     @Test public void guess_08() { guess("D.nq", RDFLanguages.NQUADS) ; }
     @Test public void guess_09() { guess("D.trig", RDFLanguages.TRIG) ; }
     @Test public void guess_10() { guess("D.jsonld", RDFLanguages.JSONLD) ; }
-    
+
     // JENA-1467 : URI fragments
     @Test public void guess_11() { guess("http://example/foo/bar.ttl#frag", RDFLanguages.TTL) ; }
     @Test public void guess_12() { guess("bar.ttl#frag", RDFLanguages.TTL) ; }
 
-    
+
     private void test(Lang expected, String string)
     {
         Lang lang = RDFLanguages.nameToLang(string) ;
@@ -78,7 +78,7 @@ public class TestLangRIOT
 
     private void guess(String filename, Lang expected)
     {
-        Lang lang = RDFLanguages.filenameToLang(filename) ;
+        Lang lang = RDFLanguages.uriToLang(filename) ;
         assertEquals(expected, lang) ;
     }
 
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 e8d84a3..0405b51 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
@@ -36,97 +36,118 @@ import org.apache.jena.riot.system.stream.StreamManager ;
 import org.apache.jena.sparql.util.Context ;
 import org.junit.AfterClass ;
 import org.junit.BeforeClass ;
+import org.junit.FixMethodOrder;
 import org.junit.Test ;
+import org.junit.runners.MethodSorters;
 
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class TestStreamManager
 {
     private static final String directory = "testing/RIOT/StreamManager" ;
     private static final String absDirectory = new File(directory).getAbsolutePath() ;
-    
+
     private static StreamManager streamMgrDir ;
     private static StreamManager streamMgrHere ;
     private static StreamManager streamMgrNull ;
     private static StreamManager streamMgrStd ;
-    
+
     @BeforeClass static public void beforeClass()
-    { 
+    {
+        boolean bool = LocatorFile.DEBUG;
+        LocatorFile.DEBUG = true;
+
         streamMgrStd = StreamManager.get() ;
         streamMgrDir = new StreamManager() ;
         // Not current directory.
         streamMgrDir.addLocator(new LocatorFile(directory)) ;
         streamMgrDir.addLocator(new LocatorHTTP()) ;
-        
+
         streamMgrHere = new StreamManager() ;
         // Not current directory.
         streamMgrHere.addLocator(new LocatorFile()) ;
         streamMgrHere.addLocator(new LocatorHTTP()) ;
-        
+
         streamMgrNull = new StreamManager() ;
+        LocatorFile.DEBUG = false;
     }
-    
+
     @AfterClass static public void afterClass()
-    { 
+    {
         StreamManager.setGlobal(streamMgrStd) ;
+        LocatorFile.DEBUG = false;
     }
-    
+
     private static Context context(StreamManager streamMgr)
     {
         Context context = new Context() ;
         context.put(SysRIOT.sysStreamManager, streamMgr) ;
         return context ;
     }
-    
-    @Test public void fm_open_01()  { open(streamMgrNull, directory+"/D.ttl", context(streamMgrHere)) ; }
-    @Test public void fm_open_02()  { open(streamMgrHere, directory+"/D.ttl", null) ; }
-    
-    @Test public void fm_open_03()  { open(streamMgrNull,  "D.ttl", context(streamMgrDir)) ; }
-    @Test public void fm_open_04()  { open(streamMgrDir, "D.ttl", null) ; }
-
-    @Test public void fm_open_05()  { open(streamMgrHere, "file:"+directory+"/D.ttl", context(streamMgrHere)) ; }
-    @Test public void fm_open_06()  { open(streamMgrHere, "file:"+directory+"/D.ttl", null) ; }
-
-    @Test public void fm_open_07()  { open(streamMgrHere, "file:D.ttl", context(streamMgrDir)) ; }
-    @Test public void fm_open_08()  { open(streamMgrDir, "file:D.ttl", null) ; }
-    
-    @Test public void fm_open_09()  { open(streamMgrHere, absDirectory+"/D.ttl", null) ; }
-    @Test public void fm_open_10()  { open(streamMgrDir,  absDirectory+"/D.ttl", null) ; }
-    @Test public void fm_open_11()  { open(streamMgrDir,  "file://"+absDirectory+"/D.ttl", null) ; }
-    @Test public void fm_open_12()  { open(streamMgrHere, "file://"+absDirectory+"/D.ttl", null) ; }
-    
+
+    @Test public void fm_open_01()  { open("fm_open_01", streamMgrNull, directory+"/D.ttl", context(streamMgrHere)) ; }
+    @Test public void fm_open_02()  { open("fm_open_02", streamMgrHere, directory+"/D.ttl", null) ; }
+
+    @Test public void fm_open_03()  { open("fm_open_03", streamMgrNull,  "D.ttl", context(streamMgrDir)) ; }
+    @Test public void fm_open_04()  { open("fm_open_04", streamMgrDir, "D.ttl", null) ; }
+
+    @Test public void fm_open_05()  { open("fm_open_05", streamMgrHere, "file:"+directory+"/D.ttl", context(streamMgrHere)) ; }
+    @Test public void fm_open_06()  { open("fm_open_06", streamMgrHere, "file:"+directory+"/D.ttl", null) ; }
+
+    @Test public void fm_open_07()  { open("fm_open_07", streamMgrHere, "file:D.ttl", context(streamMgrDir)) ; }
+    @Test public void fm_open_08()  { open("fm_open_08", streamMgrDir, "file:D.ttl", null) ; }
+
+    @Test public void fm_open_09()  { open("fm_open_09", streamMgrHere, absDirectory+"/D.ttl", null) ; }
+    @Test public void fm_open_10()  { open("fm_open_10", streamMgrDir,  absDirectory+"/D.ttl", null) ; }
+    @Test public void fm_open_11()  { open("fm_open_11", streamMgrDir,  "file://"+absDirectory+"/D.ttl", null) ; }
+    @Test public void fm_open_12()  { open("fm_open_12", streamMgrHere, "file://"+absDirectory+"/D.ttl", null) ; }
+
     @Test (expected=RiotNotFoundException.class)
-    public void fm_open_20()        { open(null, "nosuchfile", context(streamMgrDir)) ; }
+    public void fm_open_20()        { open("fm_open_20", null, "nosuchfile", context(streamMgrDir)) ; }
     @Test (expected=RiotNotFoundException.class)
-    public void fm_open_21()        { open(streamMgrHere, "nosuchfile", null) ; }
-    
-    @Test public void fm_read_01()  { read("D.nt") ; }
-    @Test public void fm_read_02()  { read("D.ttl") ; }
-    @Test public void fm_read_03()  { read("D.rdf") ; }
-    @Test public void fm_read_04()  { read("D.rj") ; }
-    @Test public void fm_read_05()  { read("D.jsonld") ; }
-
-    @Test public void fm_read_11()  { read("file:D.nt") ; }
-    @Test public void fm_read_12()  { read("file:D.ttl") ; }
-    @Test public void fm_read_13()  { read("file:D.rdf") ; }
-    @Test public void fm_read_14()  { read("file:D.rj") ; }
-    @Test public void fm_read_15()  { read("file:D.jsonld") ; }
-    
+    public void fm_open_21()        { open("fm_open_21", streamMgrHere, "nosuchfile", null) ; }
+
+//    @Test public void fm_read_01()  { read("D.nt") ; }
+//    @Test public void fm_read_02()  { read("D.ttl") ; }
+//    @Test public void fm_read_03()  { read("D.rdf") ; }
+//    @Test public void fm_read_04()  { read("D.rj") ; }
+//    @Test public void fm_read_05()  { read("D.jsonld") ; }
+//
+//    @Test public void fm_read_11()  { read("file:D.nt") ; }
+//    @Test public void fm_read_12()  { read("file:D.ttl") ; }
+//    @Test public void fm_read_13()  { read("file:D.rdf") ; }
+//    @Test public void fm_read_14()  { read("file:D.rj") ; }
+//    @Test public void fm_read_15()  { read("file:D.jsonld") ; }
+
     // TriG
     // NQuads
-    
-    private static void open(StreamManager streamMgr, String dataName, Context context)
+
+    private static void open(String testName, StreamManager streamMgr, String dataName, Context context)
     {
+
+        boolean bool = LocatorFile.DEBUG;
+        LocatorFile.DEBUG = true;
+        if ( LocatorFile.DEBUG )
+            System.out.println("Test: "+testName);
+
         StreamManager.setGlobal(streamMgr) ;
         try {
-            TypedInputStream in = ( context != null ) 
+            TypedInputStream in = ( context != null )
                 ? RDFDataMgr.open(dataName, context)
                 : RDFDataMgr.open(dataName) ;
             assertNotNull(in) ;
             IO.close(in) ;
+        } catch (IllegalArgumentException ex) {
+            if ( LocatorFile.DEBUG )
+                System.out.println("Test: (stack): "+testName);
+            ex.printStackTrace();
         } finally {
             StreamManager.setGlobal(streamMgrStd) ;
+            if ( LocatorFile.DEBUG )
+                System.out.println();
+            LocatorFile.DEBUG = bool;
         }
     }
-    
+
     private static void read(String dataName)
     {
         try {
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
index 0b650a7..d35bfb6 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
@@ -33,7 +33,7 @@ public class TestThriftSetup {
     }
 
     @Test public void setup_02() {
-        Lang lang = RDFLanguages.filenameToLang("data.rt") ;
+        Lang lang = RDFLanguages.uriToLang("data.rt") ;
         assertEquals(lang, RDFTHRIFT) ;
     }
 
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/io/IO.java b/jena-base/src/main/java/org/apache/jena/atlas/io/IO.java
index fbc5e15..2bb9256 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/io/IO.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/io/IO.java
@@ -69,6 +69,10 @@ public class IO
         } catch (IOException ex) { IO.exception(ex); return null; }
     }
 
+    private static final String ext_gz = "gz";
+    private static final String ext_bz2 = "bz2";
+    private static final String ext_sz = "sz";
+
     /** Open an input stream to a file; do not mask IOExceptions.
      * If the filename is null or "-", return System.in
      * If the filename ends in .gz, wrap in GZIPInputStream
@@ -85,24 +89,77 @@ public class IO
             filename = IRILib.decodeHex(filename);
         }
         InputStream in = new FileInputStream(filename);
-        String ext = FilenameUtils.getExtension(filename);
+        String ext = getExtension(filename);
         switch ( ext ) {
             case "":        return in;
-            case "gz":      return new GZIPInputStream(in);
-            case "bz2":     return new BZip2CompressorInputStream(in);
-            case "sz":      return new SnappyCompressorInputStream(in);
+            case ext_gz:    return new GZIPInputStream(in);
+            case ext_bz2:   return new BZip2CompressorInputStream(in);
+            case ext_sz:    return new SnappyCompressorInputStream(in);
         }
         return in;
     }
 
-    private static String[] extensions = { "gz", "bz2", "sz" };
+    // ---- Extracted from Apache CommonsIO : FilenameUtils (2.8.0) because of the drive letter handling.
+    private static final int NOT_FOUND = -1;
+    private static final String EMPTY_STRING = "";
+    private static final String EXTENSION_SEPARATOR = ".";
+    private static final char UNIX_SEPARATOR = '/';
+    private static final char WINDOWS_SEPARATOR = '\\';
+
+    private static int indexOfLastSeparator(final String fileName) {
+        if (fileName == null) {
+            return NOT_FOUND;
+        }
+        final int lastUnixPos = fileName.lastIndexOf(UNIX_SEPARATOR);
+        final int lastWindowsPos = fileName.lastIndexOf(WINDOWS_SEPARATOR);
+        return Math.max(lastUnixPos, lastWindowsPos);
+    }
+
+    private static int indexOfExtension(final String fileName) throws IllegalArgumentException {
+        if (fileName == null) {
+            return NOT_FOUND;
+        }
+//        if (isSystemWindows()) {
+//            // Special handling for NTFS ADS: Don't accept colon in the fileName.
+//            final int offset = fileName.indexOf(':', getAdsCriticalOffset(fileName));
+//            if (offset != -1) {
+//                throw new IllegalArgumentException("NTFS ADS separator (':') in file name is forbidden.");
+//            }
+//        }
+        final int extensionPos = fileName.lastIndexOf(EXTENSION_SEPARATOR);
+        final int lastSeparator = indexOfLastSeparator(fileName);
+        return lastSeparator > extensionPos ? NOT_FOUND : extensionPos;
+    }
+
+    private static String getExtension(final String fileName) {
+        if (fileName == null) {
+            return null;
+        }
+        final int index = indexOfExtension(fileName);
+        if (index == -1) {
+            return "";
+        }
+        return fileName.substring(index + 1);
+    }
+
+    // ---- Apache CommonsIO : FilenameUtils
 
-    /** The filename without any compression extension, or the original filename.
-     *  It tests for compression types handled by {@link #openFileEx}.
+    /**
+     * The filename without any compression extension, or the original filename.
+     * It tests for compression types handled by {@link #openFileEx}.
      */
     static public String filenameNoCompression(String filename) {
-        if ( FilenameUtils.isExtension(filename, extensions) ) {
-            return FilenameUtils.removeExtension(filename);
+        // Apache CommonsIO 2.7+ rejects files names with ':' in
+        // where it is not a drive letters: C:/ -- "file:D.ttl" is rejected.
+        // Code extracted.
+        String ext = getExtension(filename);
+        switch ( ext ) {
+            case EMPTY_STRING:
+                return filename;
+            case ext_gz:
+            case ext_bz2:
+            case ext_sz:
+                return filename.substring(0, filename.length()-ext.length());
         }
         return filename;
     }
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
index 878eca1..3d35dd8 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
@@ -181,7 +181,7 @@ public class IRILib
         // so need strip the leading "/"
         fn = fixupWindows(fn);
 
-        return decode(fn) ;
+        return decodeHex(fn) ;
     }
 
     /** Convert a plain file name (no file:) to a file: URL */
diff --git a/jena-cmds/src/main/java/tdb/tdbloader.java b/jena-cmds/src/main/java/tdb/tdbloader.java
index ea8e4f1..a45bdf2 100644
--- a/jena-cmds/src/main/java/tdb/tdbloader.java
+++ b/jena-cmds/src/main/java/tdb/tdbloader.java
@@ -114,7 +114,7 @@ public class tdbloader extends CmdTDBGraph {
         // Check/warn that there are no quads formats mentioned
         
         for ( String url : urls ) {
-            Lang lang = RDFLanguages.filenameToLang(url);
+            Lang lang = RDFLanguages.uriToLang(url);
             if ( lang != null && RDFLanguages.isQuads(lang) ) {
                 throw new CmdException("Warning: Quads format given - only the default graph is loaded into the graph for --graph");
             }
diff --git a/jena-cmds/src/main/java/tdb2/tdbloader.java b/jena-cmds/src/main/java/tdb2/tdbloader.java
index 41d58d7..875ec86 100644
--- a/jena-cmds/src/main/java/tdb2/tdbloader.java
+++ b/jena-cmds/src/main/java/tdb2/tdbloader.java
@@ -141,7 +141,7 @@ public class tdbloader extends CmdTDBGraph {
         // Check/warn that there are no quads formats mentioned
         
         for ( String url : urls ) {
-            Lang lang = RDFLanguages.filenameToLang(url);
+            Lang lang = RDFLanguages.uriToLang(url);
             if ( lang != null && RDFLanguages.isQuads(lang) ) {
                 throw new CmdException("Warning: Quads format given - only the default graph is loaded into the graph for --graph");
             }
diff --git a/jena-core/src/main/java/org/apache/jena/util/FileUtils.java b/jena-core/src/main/java/org/apache/jena/util/FileUtils.java
index 9c6473f..18b0a76 100644
--- a/jena-core/src/main/java/org/apache/jena/util/FileUtils.java
+++ b/jena-core/src/main/java/org/apache/jena/util/FileUtils.java
@@ -38,11 +38,11 @@ public class FileUtils
     public static final String langNTriple      = "N-TRIPLE" ;
     public static final String langN3           = "N3" ;
     public static final String langTurtle       = "TURTLE" ;
-    
+
     static Charset utf8 = StandardCharsets.UTF_8 ;
-    
-    /** Create a reader that uses UTF-8 encoding */ 
-    
+
+    /** Create a reader that uses UTF-8 encoding */
+
     static public Reader asUTF8(InputStream in) {
         if ( JenaRuntime.runUnder(JenaRuntime.featureNoCharset) )
             return new InputStreamReader(in) ;
@@ -52,15 +52,15 @@ public class FileUtils
         return new InputStreamReader(in, utf8.newDecoder());
     }
 
-    /** Create a buffered reader that uses UTF-8 encoding */ 
-    
+    /** Create a buffered reader that uses UTF-8 encoding */
+
     static public BufferedReader asBufferedUTF8(InputStream in)
     {
         BufferedReader r = new BufferedReader(asUTF8(in)) ;
         return r ;
     }
 
-    /** Create a writer that uses UTF-8 encoding */ 
+    /** Create a writer that uses UTF-8 encoding */
 
     static public Writer asUTF8(OutputStream out) {
         if ( JenaRuntime.runUnder(JenaRuntime.featureNoCharset) )
@@ -68,14 +68,14 @@ public class FileUtils
         return new OutputStreamWriter(out, utf8.newEncoder());
     }
 
-    /** Create a print writer that uses UTF-8 encoding */ 
+    /** Create a print writer that uses UTF-8 encoding */
 
     static public PrintWriter asPrintWriterUTF8(OutputStream out) {
-        return new PrintWriter(asUTF8(out)); 
+        return new PrintWriter(asUTF8(out));
     }
-    
+
     /** Guess the language/type of model data.
-     * 
+     *
      * <ul>
      * <li> If the URI ends ".rdf", it is assumed to be RDF/XML</li>
      * <li> If the URI ends ".nt", it is assumed to be N-Triples</li>
@@ -95,12 +95,12 @@ public class FileUtils
         if (suffix.equals( "ttl" ))  return langTurtle ;
         if (suffix.equals( "rdf" ))  return langXML;
         if (suffix.equals( "owl" ))  return langXML;
-        return otherwise; 
-    }    
-   
-   
+        return otherwise;
+    }
+
+
     /** Guess the language/type of model data
-     * 
+     *
      * <ul>
      * <li> If the URI ends ".rdf", it is assumed to be RDF/XML</li>
      * <li> If the URI ends ".nt", it is assumed to be N-Triples</li>
@@ -117,16 +117,16 @@ public class FileUtils
     }
 
     /** Turn a file: URL or file name into a plain file name */
-    
+
     public static String toFilename(String filenameOrURI)
     {
         // Requirements of windows and Linux differ slightly here
         // Windows wants "file:///c:/foo" => "c:/foo"
         // but Linux only wants "file:///foo" => "/foo"
         // Pragmatically, a path of "/c:/foo", or "/foo" works everywhere.
-        // but not "//c:/foo" or "///c:/foo" 
+        // but not "//c:/foo" or "///c:/foo"
         // else IKVM thinks its a network path on Windows.
-        
+
         // If it's a a file: we apply %-decoding.
         // If there is no scheme name, we don't.
 
@@ -137,13 +137,13 @@ public class FileUtils
 
         if ( ! fn.startsWith("file:") )
             return fn ;
-        
+
         // file:
         // Convert absolute file names
         if ( fn.startsWith("file:///") )
             fn = fn.substring("file://".length()) ;
         else if ( fn.startsWith("file://localhost/") )
-            // NB Leaves the leading slash on. 
+            // NB Leaves the leading slash on.
             fn = fn.substring("file://localhost".length()) ;
         else
             // Just trim off the file:
@@ -151,10 +151,10 @@ public class FileUtils
 
         return decodeFileName(fn) ;
     }
-    
+
     public static String decodeFileName(String s)
     {
-        if ( s.indexOf('%') < 0 ) 
+        if ( s.indexOf('%') < 0 )
             return s ;
         int len = s.length();
         StringBuilder sbuff = new StringBuilder(len) ;
@@ -176,7 +176,7 @@ public class FileUtils
         }
         return sbuff.toString();
     }
-    
+
     /** Turn a plain filename into a "file:" URL
      * Use IRILib.filenameToIRI
      * This remains only for legacy compatibility.
@@ -187,10 +187,10 @@ public class FileUtils
         if ( filename.length()>5
         		&& filename.substring(0,5).equalsIgnoreCase("file:") )
             return filename ;
-        
+
         if ( filename.equals(".") )
             filename = "" ;
-        
+
         /**
          * Convert a File, note java.net.URI does the right thing.
          * viz:
@@ -202,36 +202,36 @@ public class FileUtils
          */
 		return "file://" + new File(filename).toURI().toString().substring(5);
     }
-    
-    /** Check whether 'name' is possibly a file reference  
-     * 
+
+    /** Check whether 'name' is possibly a file reference
+     *
      * @param name
-     * @return boolean False if clearly not a filename. 
+     * @return boolean False if clearly not a filename.
      */
     public static boolean isFile(String name)
     {
         String scheme = getScheme(name) ;
-        
+
         if ( scheme == null  )
             // No URI scheme - treat as filename
             return true ;
-        
+
         if ( scheme.equals("file") )
             // file: URI scheme
             return true ;
-            
+
         // Windows: "c:" etc
         if ( scheme.length() == 1 )
             // file: URI scheme
             return true ;
-        
+
         return false ;
     }
-    
+
     /** Check whether a name is an absolute URI (has a scheme name)
-     * 
+     *
      * @param name
-     * @return boolean True if there is a scheme name 
+     * @return boolean True if there is a scheme name
      */
     public static boolean isURI(String name)
     {
@@ -247,17 +247,17 @@ public class FileUtils
             if ( ch == ':' )
                 return uri.substring(0,i) ;
             if ( ! isASCIILetter(ch) )
-                // Some illegal character before the ':' 
+                // Some illegal character before the ':'
                 break ;
         }
         return null ;
     }
-    
+
     private static boolean isASCIILetter(char ch)
     {
         return ( ch >= 'a' && ch <= 'z' ) || ( ch >= 'A' && ch <= 'Z' ) ;
     }
-    
+
     /**
      * Get the directory part of a filename
      * @param filename
@@ -272,11 +272,11 @@ public class FileUtils
     /**
      Get the suffix part of a file name or a URL in file-like format.
      */
-    public static String getFilenameExt( String filename)
+    public static String getFilenameExt(String filename)
     {
-        int iSlash = filename.lastIndexOf( '/' );      
+        int iSlash = filename.lastIndexOf( '/' );
         int iBack = filename.lastIndexOf( '\\' );
-        int iExt = filename.lastIndexOf( '.' ); 
+        int iExt = filename.lastIndexOf( '.' );
         if (iBack > iSlash) iSlash = iBack;
         return iExt > iSlash ? filename.substring( iExt+1 ).toLowerCase() : "";
     }
@@ -285,7 +285,7 @@ public class FileUtils
      create a temporary file that will be deleted on exit, and do something
      sensible with any IO exceptions - namely, throw them up wrapped in
      a JenaException.
-     
+
      @param prefix the prefix for File.createTempFile
      @param suffix the suffix for File.createTempFile
      @return the temporary File
@@ -296,13 +296,13 @@ public class FileUtils
         if (result.exists()) return tempFileName( prefix, suffix );
         result.deleteOnExit();
         return result;
-    }  
-    
+    }
+
     /**
      Answer a File naming a freshly-created directory in the temporary directory. This
      directory should be deleted on exit.
      TODO handle threading issues, mkdir failure, and better cleanup
-     
+
      @param prefix the prefix for the directory name
      @return a File naming the new directory
      */
@@ -312,14 +312,14 @@ public class FileUtils
         if (result.exists()) return getScratchDirectory( prefix );
         if (result.mkdir() == false) throw new JenaException( "mkdir failed on " + result );
         result.deleteOnExit();
-        return result;   
-    } 
-    
+        return result;
+    }
+
     public static String getTempDirectory()
     { return JenaRuntime.getSystemProperty( "java.io.tmpdir" ); }
 
     private static int counter = 0;
-    
+
     private static int randomNumber()
     {
         return ++counter;
@@ -330,7 +330,7 @@ public class FileUtils
      Answer a BufferedReader than reads from the named resource file as
      UTF-8, possibly throwing WrappedIOExceptions.
      */
-    public static BufferedReader openResourceFile( String filename )  
+    public static BufferedReader openResourceFile( String filename )
     {
         try
         {
@@ -340,7 +340,7 @@ public class FileUtils
         catch (IOException e)
         { throw new WrappedIOException( e ); }
     }
-    
+
     /**
      * Open an resource file for reading.
      */
@@ -364,10 +364,10 @@ public class FileUtils
     }
 
     // TODO Replace with FileManager
-    public static BufferedReader readerFromURL( String urlStr ) 
+    public static BufferedReader readerFromURL( String urlStr )
     {
-        try { return asBufferedUTF8( new URL(urlStr).openStream() ); }    
-        catch (java.net.MalformedURLException e) 
+        try { return asBufferedUTF8( new URL(urlStr).openStream() ); }
+        catch (java.net.MalformedURLException e)
         { // Try as a plain filename.
             try { return asBufferedUTF8( new FileInputStream( urlStr ) ); }
             catch (FileNotFoundException f) { throw new WrappedIOException( f ); }
@@ -381,7 +381,7 @@ public class FileUtils
      * @return String
      * @throws IOException
      */
-    
+
     public static String readWholeFileAsUTF8(String filename) throws IOException {
         Path path = Paths.get(filename);
         byte b[] = Files.readAllBytes(path);
@@ -389,7 +389,7 @@ public class FileUtils
     }
 
     /** Read a whole stream as UTF-8
-     * 
+     *
      * @param in    InputStream to be read
      * @return      String
      * @throws IOException
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
index 3988818..4db88bd 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
@@ -23,7 +23,6 @@ import static java.util.stream.Collectors.toList;
 import static org.apache.jena.fuseki.build.BuildLib.getZeroOrOne;
 import static org.apache.jena.fuseki.build.BuildLib.nodeLabel;
 import static org.apache.jena.fuseki.server.FusekiVocab.*;
-import static org.apache.jena.riot.RDFLanguages.filenameToLang;
 import static org.apache.jena.riot.RDFParserRegistry.isRegistered;
 
 import java.io.File;
@@ -57,6 +56,7 @@ import org.apache.jena.query.ResultSet;
 import org.apache.jena.rdf.model.*;
 import org.apache.jena.rdf.model.impl.Util;
 import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFLanguages;
 import org.apache.jena.shared.JenaException;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.assembler.AssemblerUtils;
@@ -382,7 +382,7 @@ public class FusekiConfig {
         // Files that are not hidden.
         DirectoryStream.Filter<Path> filter = (entry)-> {
             File f = entry.toFile();
-            final Lang lang = filenameToLang(f.getName());
+            final Lang lang = RDFLanguages.uriToLang(f.getName());
             return ! f.isHidden() && f.isFile() && lang != null && isRegistered(lang);
         };
 
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/system/Upload.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/system/Upload.java
index ae619fd..078d4ff 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/system/Upload.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/system/Upload.java
@@ -134,7 +134,7 @@ public class Upload {
                     String name = fileStream.getName();
                     if ( name == null || name.equals("") )
                         ServletOps.errorBadRequest("No name for content - can't determine RDF syntax");
-                    lang = RDFLanguages.filenameToLang(name);
+                    lang = RDFLanguages.uriToLang(name);
                     if (name.endsWith(".gz"))
                         input = new GZIPInputStream(input);
                 }
@@ -240,7 +240,7 @@ public class Upload {
 
                     lang = RDFLanguages.contentTypeToLang(ct.getContentTypeStr());
                     if ( lang == null ) {
-                        lang = RDFLanguages.filenameToLang(name);
+                        lang = RDFLanguages.uriToLang(name);
 
                         // JENA-600 filenameToLang() strips off certain
                         // extensions such as .gz and
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
index 387a56e..793ff6e 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
@@ -298,7 +298,7 @@ public class FusekiMain extends CmdARQ {
                     throw new CmdException("File not found: " + filename);
 
                 // INITIAL DATA.
-                Lang language = RDFLanguages.filenameToLang(filename);
+                Lang language = RDFLanguages.uriToLang(filename);
                 if ( language == null )
                     throw new CmdException("Can't guess language for file: " + filename);
                 Txn.executeWrite(serverConfig.dsg,  ()-> {
diff --git a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
index 028bb55..32e5643 100644
--- a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
+++ b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
@@ -257,7 +257,7 @@ public class FusekiCmd {
                         pathname = filename.substring("file:".length());
                     if ( !FileOps.exists(filename) )
                         throw new CmdException("File not found: " + filename);
-                    Lang language = RDFLanguages.filenameToLang(filename);
+                    Lang language = RDFLanguages.uriToLang(filename);
                     if ( language == null )
                         throw new CmdException("Can't guess language for file: " + filename);
                     Txn.executeWrite(cmdLine.dsg, ()->{
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
index 8518f43..04efa59 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
@@ -166,7 +166,7 @@ public class RDFConnectionLocal implements RDFConnection {
 
     private void doPutPost(String graph, String file, boolean replace) {
         Objects.requireNonNull(file);
-        Lang lang = RDFLanguages.filenameToLang(file);
+        Lang lang = RDFLanguages.uriToLang(file);
         
         Txn.executeWrite(dataset,() ->{
             if ( RDFLanguages.isTriples(lang) ) {
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemote.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemote.java
index c758dd8..8a37c0b 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemote.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemote.java
@@ -398,7 +398,7 @@ public class RDFConnectionRemote implements RDFConnection {
      */
     protected void upload(String graph, String file, boolean replace) {
         // if triples
-        Lang lang = RDFLanguages.filenameToLang(file);
+        Lang lang = RDFLanguages.uriToLang(file);
         if ( RDFLanguages.isQuads(lang) )
             throw new ARQException("Can't load quads into a graph");
         if ( ! RDFLanguages.isTriples(lang) )
@@ -522,7 +522,7 @@ public class RDFConnectionRemote implements RDFConnection {
      * "Replace" implies PUT, otherwise a POST is used.
      */
     protected void doPutPostDataset(String file, boolean replace) {
-        Lang lang = RDFLanguages.filenameToLang(file);
+        Lang lang = RDFLanguages.uriToLang(file);
         File f = new File(file);
         long length = f.length();
         exec(()->{
diff --git a/pom.xml b/pom.xml
index afd01d1..36a3964 100644
--- a/pom.xml
+++ b/pom.xml
@@ -156,6 +156,15 @@
 
   <profiles>
     <profile>
+      <id>afs</id>
+      <modules>
+        <module>jena-base</module>
+        <module>jena-core</module>
+        <module>jena-arq</module>
+      </modules>
+    </profile>
+
+    <profile>
       <!--
           This is the dev profile, typically used locally with 
           "mvn clean install -Pdev".