RIOT support for undefined prefix mode.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ef245546
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ef245546
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ef245546

Branch: refs/heads/master
Commit: ef245546d21aad00b178b4d76b5a59792339e55f
Parents: 816e49c
Author: Andy Seaborne <[email protected]>
Authored: Tue Apr 19 13:48:32 2016 +0100
Committer: Andy Seaborne <[email protected]>
Committed: Tue Apr 19 13:48:32 2016 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/query/ARQ.java    | 12 +++----
 .../jena/riot/system/ParserProfileBase.java     |  6 +++-
 .../jena/riot/system/ParserProfileChecker.java  |  4 ++-
 .../org/apache/jena/riot/system/RiotLib.java    | 38 +++++++++++++++++---
 .../org/apache/jena/sparql/lang/ParserBase.java |  7 ++--
 5 files changed, 49 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/ef245546/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java 
b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
index 75d1306..4691e42 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
@@ -18,9 +18,8 @@
 
 package org.apache.jena.query;
 
-import java.util.function.Function ;
-
 import org.apache.jena.riot.RIOT ;
+import org.apache.jena.riot.system.RiotLib ;
 import org.apache.jena.sparql.SystemARQ ;
 import 
org.apache.jena.sparql.algebra.optimize.TransformOrderByDistinctApplication ;
 import org.apache.jena.sparql.core.assembler.AssemblerUtils ;
@@ -254,14 +253,13 @@ public class ARQ
     public static final Symbol serviceAllowed = Service.serviceAllowed ;
     
     /** If set to true, the parsers will convert undefined prefixes to a URI
-     * according to the fixup function {@link #fixupPrefixes}.
-     * Normally, false.
+     * according to the fixup function {@link RiotLib#fixupPrefixes}.
+     * Normally, unset (which equates to false).
+     * 
+     * @see RiotLib#isPrefixIRI
      */
     public static final Symbol fixupUndefinedPrefixes   = 
SystemARQ.allocSymbol("fixupPrefixes") ;
     
-    /** Function applied to undefined prefixes to convert to a URI string */  
-    public static final Function<String,String> fixupPrefixes      = (x) -> 
"::"+x ;
-    
     /**
      * A Long value that specifies the number of bindings (or triples for 
CONSTRUCT queries) to be stored in memory by sort
      * operations or hash tables before switching to temporary disk files.  
The value defaults to -1, which will always

http://git-wip-us.apache.org/repos/asf/jena/blob/ef245546/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
index e743cdc..8ed68e3 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
@@ -26,6 +26,7 @@ import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.iri.IRI ;
+import org.apache.jena.query.ARQ ;
 import org.apache.jena.riot.RiotException ;
 import org.apache.jena.riot.SysRIOT ;
 import org.apache.jena.riot.tokens.Token ;
@@ -217,8 +218,11 @@ public class ParserProfileBase implements ParserProfile {
 
     private static String expandPrefixedName(ParserProfile pp, String prefix, 
String localPart, Token token) {
         String expansion = pp.getPrologue().getPrefixMap().expand(prefix, 
localPart) ;
-        if (expansion == null)
+        if (expansion == null) {
+            if ( ARQ.isTrue(ARQ.fixupUndefinedPrefixes) )
+                return RiotLib.fixupPrefixIRI(prefix, localPart) ;
             pp.getHandler().fatal("Undefined prefix: " + prefix, 
token.getLine(), token.getColumn()) ;
+        }
         return expansion ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/ef245546/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileChecker.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileChecker.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileChecker.java
index 920ce55..aa33649 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileChecker.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileChecker.java
@@ -103,7 +103,9 @@ public class ParserProfileChecker extends ParserProfileBase 
// implements Parser
 
     @Override
     public Node createURI(String x, long line, long col) {
-        if ( ! RiotLib.isBNodeIRI(x) )
+        if ( RiotLib.isBNodeIRI(x) ) {}
+        else if ( RiotLib.isPrefixIRI(x) ) {}
+        else
             x = resolveIRI(x, line, col) ;
         return super.createURI(x, line, col) ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/ef245546/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
index 01161dd..cde6a91 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
@@ -29,6 +29,8 @@ import static org.apache.jena.riot.writer.WriterConst.rdfNS ;
 import java.io.OutputStream ;
 import java.io.Writer ;
 import java.util.* ;
+import java.util.function.Function ;
+import java.util.function.Predicate ;
 
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.iterator.Iter ;
@@ -38,7 +40,10 @@ import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.query.ARQ ;
-import org.apache.jena.riot.* ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFLanguages ;
+import org.apache.jena.riot.SysRIOT ;
+import org.apache.jena.riot.WriterDatasetRIOT ;
 import org.apache.jena.riot.lang.LabelToNode ;
 import org.apache.jena.riot.tokens.Token ;
 import org.apache.jena.riot.tokens.Tokenizer ;
@@ -73,12 +78,37 @@ public class RiotLib
         return NodeFactory.createURI(iri) ;
     }
 
-    /** Test whether  */
-    public static boolean isBNodeIRI(String iri)
-    {
+    /** Test whether a IRI is a ARQ-encoded blank node. */
+    public static boolean isBNodeIRI(String iri) {
         return skolomizedBNodes && iri.startsWith(bNodeLabelStart) ;
     }
     
+    // These two must be in-step.
+    /** Function applied to undefined prefixes to convert to a URI string */  
+    public static final Function<String,String> fixupPrefixes      = (x) -> 
"::"+x ;
+
+    /** Function to test for undefined prefix URIs*/  
+    public static final Predicate<String> testFixupedPrefixURI     = (x) -> 
x.startsWith("::") ;
+    
+    /** Test whether a IRI is a ARQ-encoded blank node. */
+    public static boolean isPrefixIRI(String iri) {
+        return testFixupedPrefixURI.test(iri) ;
+    }
+    
+    /** Convert an prefix name (qname) to an IRI, for when the prerix is nor 
defined.
+     * @see ARQ#fixupUndefinedPrefixes
+     */
+    public static String fixupPrefixIRI(String prefix, String localPart) {
+        return fixupPrefixIRI(prefix+":"+localPart) ;
+    }
+
+    /** Convert an prefix name (qname) to an IRI, for when the prerix is nor 
defined.
+     * @see ARQ#fixupUndefinedPrefixes
+     */
+    public static String fixupPrefixIRI(String prefixedName) {
+        return fixupPrefixes.apply(prefixedName) ;
+    }
+    
     private static ParserProfile profile = profile(RDFLanguages.TURTLE, null, 
ErrorHandlerFactory.errorHandlerStd) ;
     static {
         PrefixMap pmap = profile.getPrologue().getPrefixMap() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/ef245546/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
index 90d5164..075d6b1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
@@ -268,9 +268,6 @@ public class ParserBase
         return iriStr ;
     }
     
-    // Pragmatic.
-    private final boolean fixupUndefinedPrefixedNames = 
ARQ.isTrue(ARQ.fixupUndefinedPrefixes) ;
-    
     protected String resolvePName(String prefixedName, int line, int column) {
         // It's legal.
         int idx = prefixedName.indexOf(':') ;
@@ -284,8 +281,8 @@ public class ParserBase
 
         String s = getPrologue().expandPrefixedName(prefixedName) ;
         if ( s == null ) {
-            if ( fixupUndefinedPrefixedNames )
-                return ARQ.fixupPrefixes.apply(prefixedName) ;
+            if ( ARQ.isTrue(ARQ.fixupUndefinedPrefixes) )
+                return RiotLib.fixupPrefixes.apply(prefixedName) ;
             throwParseException("Unresolved prefixed name: " + prefixedName, 
line, column) ;
         }
         return s ;

Reply via email to