Repository: jena
Updated Branches:
  refs/heads/master 952fa272a -> 316772cee


Feature to allow fixup of undeclared prefix names.

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

Branch: refs/heads/master
Commit: 199fcf56bd3566dbad6fd550972dca240dc1ef15
Parents: 952fa27
Author: Andy Seaborne <[email protected]>
Authored: Tue Apr 19 12:19:05 2016 +0100
Committer: Andy Seaborne <[email protected]>
Committed: Tue Apr 19 12:19:05 2016 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/query/ARQ.java    | 11 +++++++++
 .../org/apache/jena/sparql/lang/ParserBase.java | 24 ++++++++++++--------
 jena-cmds/src/main/java/arq/qparse.java         |  8 ++++++-
 3 files changed, 33 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/199fcf56/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 1842310..75d1306 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,6 +18,8 @@
 
 package org.apache.jena.query;
 
+import java.util.function.Function ;
+
 import org.apache.jena.riot.RIOT ;
 import org.apache.jena.sparql.SystemARQ ;
 import 
org.apache.jena.sparql.algebra.optimize.TransformOrderByDistinctApplication ;
@@ -251,6 +253,15 @@ 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.
+     */
+    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/199fcf56/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 fb8c120..953549c 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
@@ -286,25 +286,31 @@ public class ParserBase
         return iriStr ;
     }
     
-    protected String resolvePName(String qname, int line, int column)
+    // Pragmatic.
+    private final boolean fixupUndefinedPrefixedNames = 
ARQ.isTrue(ARQ.fixupUndefinedPrefixes) ;
+    
+    protected String resolvePName(String prefixedName, int line, int column)
     {
         // It's legal.
-        int idx = qname.indexOf(':') ;
+        int idx = prefixedName.indexOf(':') ;
         
         // -- Escapes in local name
-        String prefix = qname.substring(0, idx) ;
-        String local = qname.substring(idx+1) ;
+        String prefix = prefixedName.substring(0, idx) ;
+        String local = prefixedName.substring(idx+1) ;
         local = unescapePName(local, line, column) ;
-        qname = prefix+":"+local ;
+        prefixedName = prefix+":"+local ;
         // --
         
-        String s = getPrologue().expandPrefixedName(qname) ;
-        if ( s == null )
-            throwParseException("Unresolved prefixed name: "+qname, line, 
column) ;
+        String s = getPrologue().expandPrefixedName(prefixedName) ;
+        if ( s == null ) {
+            if ( fixupUndefinedPrefixedNames )
+                return ARQ.fixupPrefixes.apply(prefixedName) ;
+            throwParseException("Unresolved prefixed name: "+prefixedName, 
line, column) ;
+        }
         return s ;
     }
     
-    boolean skolomizedBNodes = ARQ.isTrue(ARQ.constantBNodeLabels) ;
+    private boolean skolomizedBNodes = ARQ.isTrue(ARQ.constantBNodeLabels) ;
     protected Node createNode(String iri)
     {
         if ( skolomizedBNodes )

http://git-wip-us.apache.org/repos/asf/jena/blob/199fcf56/jena-cmds/src/main/java/arq/qparse.java
----------------------------------------------------------------------
diff --git a/jena-cmds/src/main/java/arq/qparse.java 
b/jena-cmds/src/main/java/arq/qparse.java
index 749ab66..160bab4 100644
--- a/jena-cmds/src/main/java/arq/qparse.java
+++ b/jena-cmds/src/main/java/arq/qparse.java
@@ -50,6 +50,7 @@ public class qparse extends CmdARQ
     protected final ArgDecl argDeclPrint    = new ArgDecl(ArgDecl.HasValue, 
"print") ;
     protected final ArgDecl argDeclOpt      = new ArgDecl(ArgDecl.NoValue, 
"opt", "optimize") ;
     protected final ArgDecl argDeclExplain  = new ArgDecl(ArgDecl.NoValue, 
"explain") ;
+    protected final ArgDecl argDeclFixup    = new ArgDecl(ArgDecl.NoValue, 
"fixup") ;
     
     protected boolean printNone             = false ;
     protected boolean printQuery            = false ;
@@ -73,7 +74,8 @@ public class qparse extends CmdARQ
         super.getUsage().startCategory(null) ;
         super.add(argDeclPrint, "--print", "Print in various forms [query, op, 
quad, plan]") ;
         super.add(argDeclExplain, "--explain", "Print with algebra-level 
optimization") ;
-        super.add(argDeclOpt, "--opt", "[deprecated]") ; 
+        super.add(argDeclOpt, "--opt", "[deprecated]") ;
+        super.add(argDeclFixup, "--fixup", "Convert undeclared prefix names to 
URIs") ;
     }
     
     @Override
@@ -88,6 +90,10 @@ public class qparse extends CmdARQ
             printQuery = true ;
             printOpt = true ;
         }
+        if ( contains(argDeclFixup) ) {
+            // Fixup undeclared prefix names.
+            ARQ.set(ARQ.fixupUndefinedPrefixes, true);
+        }
 
         for ( String arg : getValues( argDeclPrint ) )
         {

Reply via email to