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 ) ) {
