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 2016/03/08 10:19:55 UTC
[1/5] jena git commit: Associate a ProgressMonitor with a StreamRDF.
Repository: jena
Updated Branches:
refs/heads/master 3061cea27 -> 106aae5af
Associate a ProgressMonitor with a StreamRDF.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/5bc88315
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/5bc88315
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/5bc88315
Branch: refs/heads/master
Commit: 5bc88315ae5ec1c8bb75a794f6f8ca157ebcc6f3
Parents: 3061cea
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Mar 6 22:56:03 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 6 23:08:06 2016 +0000
----------------------------------------------------------------------
.../jena/riot/system/ProgressStreamRDF.java | 65 ++++++++++++++++++++
1 file changed, 65 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/5bc88315/jena-arq/src/main/java/org/apache/jena/riot/system/ProgressStreamRDF.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/ProgressStreamRDF.java b/jena-arq/src/main/java/org/apache/jena/riot/system/ProgressStreamRDF.java
new file mode 100644
index 0000000..f57d41e
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ProgressStreamRDF.java
@@ -0,0 +1,65 @@
+/*
+ * 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;
+
+import org.apache.jena.atlas.lib.ProgressMonitor ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.core.Quad ;
+
+/** Send ticks to a {@link ProgressMonitor} as triples and quads
+ * are sent along the {@link StreamRDF}.
+ */
+
+public class ProgressStreamRDF extends StreamRDFWrapper {
+
+ private final ProgressMonitor monitor ;
+
+ public ProgressStreamRDF(StreamRDF other, ProgressMonitor monitor) {
+ super(other);
+ this.monitor = monitor ;
+ }
+
+ // Better that the app call start/finish on the monitor so that a number of
+ // inputs on the stream can call start/finish. i.e the monitor can be used
+ // for a batch of oeprations.
+
+// @Override
+// public void start() {
+// monitor.start();
+// super.start();
+// }
+//
+// @Override
+// public void finish() {
+// super.finish();
+// monitor.finish();
+// }
+
+ @Override
+ public void triple(Triple triple) {
+ super.triple(triple);
+ monitor.tick();
+ }
+
+ @Override
+ public void quad(Quad quad) {
+ super.quad(quad);
+ monitor.tick();
+ }
+}
[2/5] jena git commit: Adjust for FactoryRDF
Posted by an...@apache.org.
Adjust for FactoryRDF
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/1818bb50
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/1818bb50
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/1818bb50
Branch: refs/heads/master
Commit: 1818bb50e6613eb606f6191242becae43099d82a
Parents: ed9f62a
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Mar 6 23:00:36 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 6 23:08:21 2016 +0000
----------------------------------------------------------------------
.../apache/jena/hadoop/rdf/io/input/util/RdfIOUtils.java | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/1818bb50/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/input/util/RdfIOUtils.java
----------------------------------------------------------------------
diff --git a/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/input/util/RdfIOUtils.java b/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/input/util/RdfIOUtils.java
index 475330b..26fe661 100644
--- a/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/input/util/RdfIOUtils.java
+++ b/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/input/util/RdfIOUtils.java
@@ -24,12 +24,7 @@ import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.jena.hadoop.rdf.io.RdfIOConstants;
import org.apache.jena.riot.lang.LabelToNode;
-import org.apache.jena.riot.system.ErrorHandlerFactory;
-import org.apache.jena.riot.system.IRIResolver;
-import org.apache.jena.riot.system.ParserProfile;
-import org.apache.jena.riot.system.ParserProfileBase;
-import org.apache.jena.riot.system.PrefixMapFactory;
-import org.apache.jena.riot.system.Prologue;
+import org.apache.jena.riot.system.* ;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,7 +56,7 @@ public class RdfIOUtils {
Prologue prologue = new Prologue(PrefixMapFactory.createForInput(), IRIResolver.createNoResolve());
UUID seed = RdfIOUtils.getSeed(context, path);
LabelToNode labelMapping = LabelToNode.createScopeByDocumentHash(seed);
- return new ParserProfileBase(prologue, ErrorHandlerFactory.errorHandlerStd, labelMapping);
+ return new ParserProfileBase(prologue, ErrorHandlerFactory.errorHandlerStd, RiotLib.factoryRDF(labelMapping));
}
/**
[5/5] jena git commit: This closes #128.
Posted by an...@apache.org.
This closes #128.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/106aae5a
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/106aae5a
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/106aae5a
Branch: refs/heads/master
Commit: 106aae5af58738d251b4da199646404c5e897d5a
Parents: 8abe54d
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Mar 8 09:19:49 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Mar 8 09:19:49 2016 +0000
----------------------------------------------------------------------
----------------------------------------------------------------------
[4/5] jena git commit: Return expression for getExpr.
Posted by an...@apache.org.
Return expression for getExpr.
Aggregation is often over one expression.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/8abe54da
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/8abe54da
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/8abe54da
Branch: refs/heads/master
Commit: 8abe54da96f14b8a4b0a63c34fc5e3d175010a0f
Parents: 1818bb5
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Mar 8 09:17:34 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Mar 8 09:17:34 2016 +0000
----------------------------------------------------------------------
.../apache/jena/sparql/expr/aggregate/AccumulatorExpr.java | 2 +-
.../java/org/apache/jena/sparql/expr/aggregate/AggCustom.java | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/8abe54da/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AccumulatorExpr.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AccumulatorExpr.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AccumulatorExpr.java
index d36dbe7..8393c51 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AccumulatorExpr.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AccumulatorExpr.java
@@ -26,7 +26,7 @@ import org.apache.jena.sparql.expr.NodeValue ;
import org.apache.jena.sparql.function.FunctionEnv ;
/** Accumulator that passes down every value of an expression */
-abstract class AccumulatorExpr implements Accumulator
+public abstract class AccumulatorExpr implements Accumulator
{
private long count = 0 ;
protected long errorCount = 0 ;
http://git-wip-us.apache.org/repos/asf/jena/blob/8abe54da/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggCustom.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggCustom.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggCustom.java
index ab70376..9a2b2ec 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggCustom.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggCustom.java
@@ -111,7 +111,12 @@ public class AggCustom extends AggregatorBase
public Node getValueEmpty() { return AggregateRegistry.getNoGroupValue(iri) ; }
@Override
- public Expr getExpr() { return null ; }
+ public Expr getExpr() {
+ if ( exprList.size() == 0 )
+ return null;
+ else
+ return exprList.get(0);
+ }
public String getIRI() { return iri ; }
[3/5] jena git commit: JENA-1147: Introduce FactoryRDF and use in
ParserProfile.
Posted by an...@apache.org.
JENA-1147: Introduce FactoryRDF and use in ParserProfile.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ed9f62a0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ed9f62a0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ed9f62a0
Branch: refs/heads/master
Commit: ed9f62a0fe3d5616737725fc27205c03859424a6
Parents: 5bc8831
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Mar 6 22:58:26 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 6 23:08:21 2016 +0000
----------------------------------------------------------------------
.../org/apache/jena/riot/lang/LangEngine.java | 12 +-
.../org/apache/jena/riot/system/FactoryRDF.java | 56 ++++++++
.../jena/riot/system/FactoryRDFCaching.java | 110 ++++++++++++++++
.../apache/jena/riot/system/FactoryRDFStd.java | 108 +++++++++++++++
.../apache/jena/riot/system/ParserProfile.java | 14 +-
.../jena/riot/system/ParserProfileBase.java | 82 ++++++------
.../jena/riot/system/ParserProfileChecker.java | 44 +++----
.../org/apache/jena/riot/system/RiotLib.java | 25 +++-
.../riot/system/SerializationFactoryFinder.java | 12 +-
.../engine/binding/BindingInputStream.java | 4 +-
.../apache/jena/riot/system/TS_RiotSystem.java | 5 +
.../apache/jena/riot/system/TestFactoryRDF.java | 132 +++++++++++++++++++
.../jena/riot/system/TestFactoryRDFCaching.java | 47 +++++++
.../apache/jena/atlas/lib/cache/CacheInfo.java | 58 ++++----
.../src/main/java/riotcmd/CmdLangParse.java | 7 +-
15 files changed, 587 insertions(+), 129 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
index bf698fd..25a2d39 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
@@ -20,9 +20,9 @@ package org.apache.jena.riot.lang;
import static org.apache.jena.riot.tokens.TokenType.EOF ;
import static org.apache.jena.riot.tokens.TokenType.NODE ;
+
import org.apache.jena.atlas.AtlasException ;
import org.apache.jena.atlas.iterator.PeekIterator ;
-import org.apache.jena.graph.Node ;
import org.apache.jena.riot.RiotParseException ;
import org.apache.jena.riot.system.ErrorHandler ;
import org.apache.jena.riot.system.ParserProfile ;
@@ -117,11 +117,11 @@ public class LangEngine
}
}
- protected final Node scopedBNode(Node scopeNode, String label)
- {
- return profile.getLabelToNode().get(scopeNode, label) ;
- }
-
+// protected final Node scopedBNode(Node scopeNode, String label)
+// {
+// return profile.getLabelToNode().get(scopeNode, label) ;
+// }
+//
protected final void expectOrEOF(String msg, TokenType tokenType)
{
// DOT or EOF
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDF.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDF.java b/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDF.java
new file mode 100644
index 0000000..d2ba8f8
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDF.java
@@ -0,0 +1,56 @@
+/*
+ * 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;
+
+import org.apache.jena.datatypes.RDFDatatype ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.Quad ;
+
+/**
+ * Create core RDF objects: {@link Node}s, {@link Triple}s, {@link Quad}s,
+ * {@link Graph}, {@link DatasetGraph}s.
+ * <p>
+ */
+public interface FactoryRDF {
+ // ?? Are these too varied?
+ public Graph createGraph() ;
+ // ?? Are these too varied?
+ public DatasetGraph createDatasetGraph() ;
+ public Triple createTriple(Node subject, Node predicate, Node object) ;
+ public Quad createQuad(Node graph, Node subject, Node predicate, Node object) ;
+ public Node createURI(String uriStr) ;
+ public Node createTypedLiteral(String lexical, RDFDatatype datatype) ;
+ public Node createLangLiteral(String lexical, String langTag) ;
+ public Node createStringLiteral(String lexical) ;
+ /** Create a blank node */
+ public Node createBlankNode() ;
+ /** Create a blank node with the given string as internal system id */
+ public Node createBlankNode(String label) ;
+ /** Create a blank with the internal system id taken from 128 bit number provided.
+ */
+ public Node createBlankNode(long mostSigBits, long leastSigBits) ;
+
+// // Object for scope better?
+// public Node createBlankNode(Node scope, String label) ;
+// // Object for scope better?
+// public Node createBlankNode(Node scope) ;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFCaching.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFCaching.java b/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFCaching.java
new file mode 100644
index 0000000..03982b6
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFCaching.java
@@ -0,0 +1,110 @@
+/*
+ * 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;
+
+import java.util.concurrent.ExecutionException ;
+
+import org.apache.jena.ext.com.google.common.cache.Cache ;
+import org.apache.jena.atlas.lib.cache.CacheInfo ;
+import org.apache.jena.datatypes.RDFDatatype ;
+import org.apache.jena.datatypes.xsd.XSDDatatype ;
+import org.apache.jena.ext.com.google.common.cache.CacheBuilder ;
+import org.apache.jena.ext.com.google.common.cache.CacheStats ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.riot.RiotException ;
+import org.apache.jena.riot.lang.LabelToNode ;
+import org.apache.jena.sparql.graph.NodeConst ;
+
+/** Adds some caching of created nodes - the caching is tuned to RIOT parser usage */
+public class FactoryRDFCaching extends FactoryRDFStd {
+ public static final int DftNodeCacheSize = 5000 ;
+
+ // Control the setup - for one thread; start size = 50% of full size, no stats
+ private final Cache<String, Node> cache ;
+
+ public FactoryRDFCaching() {
+ this(DftNodeCacheSize) ;
+ }
+
+ public FactoryRDFCaching(int cacheSize) {
+ super() ;
+ cache = setCache(cacheSize) ;
+ }
+
+ private Cache<String, Node> setCache(int cacheSize) {
+ return CacheBuilder.newBuilder()
+ .maximumSize(cacheSize)
+ .initialCapacity(cacheSize/2)
+ //.recordStats()
+ .concurrencyLevel(1)
+ .build() ;
+ }
+
+ public FactoryRDFCaching(int cacheSize, LabelToNode labelMapping) {
+ super(labelMapping) ;
+ cache = setCache(cacheSize) ;
+ }
+
+ @Override
+ public Node createURI(String uriStr) {
+ try {
+ return cache.get(uriStr, ()->RiotLib.createIRIorBNode(uriStr)) ;
+ }
+ catch (ExecutionException e) {
+ throw new RiotException("Execution exception filling cache <"+uriStr+">", e) ;
+ }
+ }
+
+ // A few constants
+
+ @Override
+ public Node createTypedLiteral(String lexical, RDFDatatype datatype) {
+ if ( XSDDatatype.XSDinteger.equals(datatype) ) {
+ switch(lexical) {
+ case "0" : return NodeConst.nodeZero ;
+ case "1" : return NodeConst.nodeOne ;
+ case "2" : return NodeConst.nodeTwo ;
+ case "-1" : return NodeConst.nodeMinusOne ;
+ }
+ // fallthrough.
+ } else if ( XSDDatatype.XSDboolean.equals(datatype) ) {
+ switch(lexical) {
+ case "true" : return NodeConst.nodeTrue ;
+ case "false" : return NodeConst.nodeFalse ;
+ }
+ // fallthrough.
+ }
+ return super.createTypedLiteral(lexical, datatype) ;
+ }
+
+ @Override
+ public Node createStringLiteral(String lexical) {
+ if ( lexical.isEmpty() )
+ return NodeConst.emptyString ;
+ return super.createStringLiteral(lexical) ;
+ }
+
+ public CacheInfo stats() {
+ CacheStats stats = cache.stats() ;
+ if ( stats.missCount() == 0 && stats.hitCount() == 0 )
+ // Stats not enabled - all counts zero.
+ return null ;
+ return new CacheInfo(DftNodeCacheSize, stats) ;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFStd.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFStd.java b/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFStd.java
new file mode 100644
index 0000000..4d0ca87
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/FactoryRDFStd.java
@@ -0,0 +1,108 @@
+/*
+ * 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;
+
+import org.apache.jena.datatypes.RDFDatatype ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.NodeFactory ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.riot.lang.LabelToNode ;
+import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.DatasetGraphFactory ;
+import org.apache.jena.sparql.core.Quad ;
+import org.apache.jena.sparql.graph.GraphFactory ;
+
+public class FactoryRDFStd implements FactoryRDF {
+ // Needs reset?
+ private final LabelToNode labelMapping ;
+
+ public FactoryRDFStd() {
+ this(SyntaxLabels.createLabelToNode()) ;
+ }
+
+ public FactoryRDFStd(LabelToNode labelMapping) {
+ this.labelMapping = labelMapping ;
+ }
+
+ @Override
+ public Graph createGraph() {
+ return GraphFactory.createDefaultGraph() ;
+ }
+
+ @Override
+ public DatasetGraph createDatasetGraph() {
+ return DatasetGraphFactory.create(); // createTxnMem() ;
+ }
+
+ @Override
+ public Triple createTriple(Node subject, Node predicate, Node object) {
+ return Triple.create(subject, predicate, object);
+ }
+
+ @Override
+ public Quad createQuad(Node graph, Node subject, Node predicate, Node object) {
+ return Quad.create(graph, subject, predicate, object) ;
+ }
+
+ @Override
+ public Node createURI(String uriStr) {
+ return RiotLib.createIRIorBNode(uriStr) ;
+ //return NodeFactory.createURI(uriStr) ;
+ }
+
+ @Override
+ public Node createTypedLiteral(String lexical, RDFDatatype datatype) {
+ return NodeFactory.createLiteral(lexical, datatype) ;
+ }
+
+ @Override
+ public Node createLangLiteral(String lexical, String langTag) {
+ return NodeFactory.createLiteral(lexical, langTag) ;
+ }
+
+ @Override
+ public Node createStringLiteral(String lexical) {
+ return NodeFactory.createLiteral(lexical) ;
+ }
+
+ @Override
+ public Node createBlankNode(long mostSigBits, long leastSigBits) {
+ // XXX Style: Do this fast. Guava? Apache commons? Special case for char[32]
+ // (Eventually, blank node Nodes will have two longs normally.)
+ return createBlankNode(String.format("%08X%08X", mostSigBits, leastSigBits)) ;
+ }
+
+ // Fixed scope.
+ private static Node scope = NodeFactory.createURI("urn:jena:global_scope") ;
+ // Scope
+ @Override
+ public Node createBlankNode(String label) {
+ //return NodeFactory.createBlankNode(label) ;
+ return labelMapping.get(scope, label) ;
+ }
+
+ // Scope
+ @Override
+ public Node createBlankNode() {
+ //return NodeFactory.createBlankNode() ;
+ return labelMapping.create() ;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
index 670f691..6969991 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
@@ -18,12 +18,10 @@
package org.apache.jena.riot.system;
-
import org.apache.jena.datatypes.RDFDatatype ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.Triple ;
import org.apache.jena.iri.IRI ;
-import org.apache.jena.riot.lang.LabelToNode ;
import org.apache.jena.riot.tokens.Token ;
import org.apache.jena.sparql.core.Quad ;
@@ -55,21 +53,23 @@ public interface ParserProfile
/** Create a fresh blank node */
public Node createBlankNode(Node scope, long line, long col) ;
- /** Make a node from a token - called after all else has been tried - return null for no such node */
+ /** Make a node from a token - called after all else has been tried to handle special cases
+ * Return null for "no special node recoginzed"
+ */
public Node createNodeFromToken(Node scope, Token token, long line, long col) ;
/** Make any node from a token as appropriate */
public Node create(Node currentGraph, Token token) ;
-
- public LabelToNode getLabelToNode() ;
- public void setLabelToNode(LabelToNode labelToNode) ;
-
+
public ErrorHandler getHandler() ;
public void setHandler(ErrorHandler handler) ;
public Prologue getPrologue() ;
public void setPrologue(Prologue prologue) ;
+ public FactoryRDF getFactoryRDF() ;
+ public void setFactoryRDF(FactoryRDF factory) ;
+
public boolean isStrictMode() ;
public void setStrictMode(boolean mode) ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/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 3299c46..e743cdc 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
@@ -18,6 +18,8 @@
package org.apache.jena.riot.system ;
+import java.util.Objects ;
+
import org.apache.jena.datatypes.RDFDatatype ;
import org.apache.jena.datatypes.xsd.XSDDatatype ;
import org.apache.jena.graph.Node ;
@@ -26,7 +28,6 @@ import org.apache.jena.graph.Triple ;
import org.apache.jena.iri.IRI ;
import org.apache.jena.riot.RiotException ;
import org.apache.jena.riot.SysRIOT ;
-import org.apache.jena.riot.lang.LabelToNode ;
import org.apache.jena.riot.tokens.Token ;
import org.apache.jena.riot.tokens.TokenType ;
import org.apache.jena.sparql.core.Quad ;
@@ -38,17 +39,20 @@ import org.apache.jena.sparql.core.Quad ;
public class ParserProfileBase implements ParserProfile {
protected ErrorHandler errorHandler ;
protected Prologue prologue ;
- protected LabelToNode labelMapping ;
protected boolean strictMode = SysRIOT.isStrictMode() ;
+ protected FactoryRDF factory ;
public ParserProfileBase(Prologue prologue, ErrorHandler errorHandler) {
- this(prologue, errorHandler, SyntaxLabels.createLabelToNode()) ;
+ this(prologue, errorHandler, RiotLib.factoryRDF()) ;
}
- public ParserProfileBase(Prologue prologue, ErrorHandler errorHandler, LabelToNode labelMapping) {
+ public ParserProfileBase(Prologue prologue, ErrorHandler errorHandler, FactoryRDF factory) {
+ Objects.requireNonNull(prologue) ;
+ Objects.requireNonNull(errorHandler) ;
+ Objects.requireNonNull(factory) ;
this.prologue = prologue ;
this.errorHandler = errorHandler ;
- this.labelMapping = labelMapping ;
+ this.factory = factory ;
}
@Override
@@ -72,15 +76,15 @@ public class ParserProfileBase implements ParserProfile {
}
@Override
- public LabelToNode getLabelToNode() {
- return labelMapping ;
+ public FactoryRDF getFactoryRDF() {
+ return factory;
}
@Override
- public void setLabelToNode(LabelToNode mapper) {
- labelMapping = mapper ;
+ public void setFactoryRDF(FactoryRDF factory) {
+ this.factory = factory;
}
-
+
@Override
public String resolveIRI(String uriStr, long line, long col) {
return prologue.getResolver().resolveToString(uriStr) ;
@@ -93,44 +97,44 @@ public class ParserProfileBase implements ParserProfile {
@Override
public Quad createQuad(Node g, Node s, Node p, Node o, long line, long col) {
- return new Quad(g, s, p, o) ;
+ return factory.createQuad(g, s, p, o);
}
@Override
public Triple createTriple(Node s, Node p, Node o, long line, long col) {
- return new Triple(s, p, o) ;
+ return factory.createTriple(s, p, o);
}
@Override
public Node createURI(String uriStr, long line, long col) {
- return RiotLib.createIRIorBNode(uriStr) ;
+ return factory.createURI(uriStr);
}
@Override
public Node createBlankNode(Node scope, String label, long line, long col) {
- return labelMapping.get(scope, label) ;
+ return factory.createBlankNode(label);
}
@Override
public Node createBlankNode(Node scope, long line, long col) {
- return labelMapping.create() ;
+ return factory.createBlankNode();
}
@Override
public Node createTypedLiteral(String lexical, RDFDatatype dt, long line, long col) {
- return NodeFactory.createLiteral(lexical, dt) ;
+ return factory.createTypedLiteral(lexical, dt);
}
@Override
public Node createLangLiteral(String lexical, String langTag, long line, long col) {
- return NodeFactory.createLiteral(lexical, langTag) ;
+ return factory.createLangLiteral(lexical, langTag);
}
@Override
public Node createStringLiteral(String lexical, long line, long col) {
- return NodeFactory.createLiteral(lexical) ;
+ return factory.createStringLiteral(lexical);
}
-
+
/** Special token forms */
@Override
public Node createNodeFromToken(Node scope, Token token, long line, long col) {
@@ -144,27 +148,31 @@ public class ParserProfileBase implements ParserProfile {
@Override
public Node create(Node currentGraph, Token token) {
- // Dispatches to the underlying operation
+ return create(this, currentGraph, token) ;
+ }
+
+ private static Node create(ParserProfile pp, Node currentGraph, Token token) {
+ // Dispatches to the underlying ParserProfile operation
long line = token.getLine() ;
long col = token.getColumn() ;
String str = token.getImage() ;
switch (token.getType()) {
case BNODE :
- return createBlankNode(currentGraph, str, line, col) ;
+ return pp.createBlankNode(currentGraph, str, line, col) ;
case IRI :
- return createURI(str, line, col) ;
+ return pp.createURI(str, line, col) ;
case PREFIXED_NAME : {
String prefix = str ;
String suffix = token.getImage2() ;
- String expansion = expandPrefixedName(prefix, suffix, token) ;
- return createURI(expansion, line, col) ;
+ String expansion = expandPrefixedName(pp, prefix, suffix, token) ;
+ return pp.createURI(expansion, line, col) ;
}
case DECIMAL :
- return createTypedLiteral(str, XSDDatatype.XSDdecimal, line, col) ;
+ return pp.createTypedLiteral(str, XSDDatatype.XSDdecimal, line, col) ;
case DOUBLE :
- return createTypedLiteral(str, XSDDatatype.XSDdouble, line, col) ;
+ return pp.createTypedLiteral(str, XSDDatatype.XSDdouble, line, col) ;
case INTEGER :
- return createTypedLiteral(str, XSDDatatype.XSDinteger, line, col) ;
+ return pp.createTypedLiteral(str, XSDDatatype.XSDinteger, line, col) ;
case LITERAL_DT : {
Token tokenDT = token.getSubToken2() ;
String uriStr ;
@@ -176,41 +184,41 @@ public class ParserProfileBase implements ParserProfile {
case PREFIXED_NAME : {
String prefix = tokenDT.getImage() ;
String suffix = tokenDT.getImage2() ;
- uriStr = expandPrefixedName(prefix, suffix, tokenDT) ;
+ uriStr = expandPrefixedName(pp, prefix, suffix, tokenDT) ;
break ;
}
default :
throw new RiotException("Expected IRI for datatype: " + token) ;
}
- uriStr = resolveIRI(uriStr, tokenDT.getLine(), tokenDT.getColumn()) ;
+ uriStr = pp.resolveIRI(uriStr, tokenDT.getLine(), tokenDT.getColumn()) ;
RDFDatatype dt = NodeFactory.getType(uriStr) ;
- return createTypedLiteral(str, dt, line, col) ;
+ return pp.createTypedLiteral(str, dt, line, col) ;
}
case LITERAL_LANG :
- return createLangLiteral(str, token.getImage2(), line, col) ;
+ return pp.createLangLiteral(str, token.getImage2(), line, col) ;
case STRING :
case STRING1 :
case STRING2 :
case LONG_STRING1 :
case LONG_STRING2 :
- return createStringLiteral(str, line, col) ;
+ return pp.createStringLiteral(str, line, col) ;
default : {
- Node x = createNodeFromToken(currentGraph, token, line, col) ;
+ Node x = pp.createNodeFromToken(currentGraph, token, line, col) ;
if (x != null)
return x ;
- errorHandler.fatal("Not a valid token for an RDF term: " + token, line, col) ;
+ pp.getHandler().fatal("Not a valid token for an RDF term: " + token, line, col) ;
return null ;
}
}
}
- private String expandPrefixedName(String prefix, String localPart, Token token) {
- String expansion = prologue.getPrefixMap().expand(prefix, localPart) ;
+ private static String expandPrefixedName(ParserProfile pp, String prefix, String localPart, Token token) {
+ String expansion = pp.getPrologue().getPrefixMap().expand(prefix, localPart) ;
if (expansion == null)
- errorHandler.fatal("Undefined prefix: " + prefix, token.getLine(), token.getColumn()) ;
+ pp.getHandler().fatal("Undefined prefix: " + prefix, token.getLine(), token.getColumn()) ;
return expansion ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/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 30809a6..920ce55 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
@@ -26,7 +26,6 @@ import org.apache.jena.iri.IRI ;
import org.apache.jena.riot.RiotException ;
import org.apache.jena.riot.checker.CheckerIRI ;
import org.apache.jena.riot.checker.CheckerLiterals ;
-import org.apache.jena.riot.lang.LabelToNode ;
import org.apache.jena.sparql.core.Quad ;
import org.apache.jena.sparql.util.FmtUtils ;
@@ -40,8 +39,7 @@ import org.apache.jena.sparql.util.FmtUtils ;
* </ul>
*/
-public class ParserProfileChecker extends ParserProfileBase // implements
- // ParserProfile
+public class ParserProfileChecker extends ParserProfileBase // implements ParserProfile
{
private boolean checkLiterals = true ;
@@ -49,8 +47,8 @@ public class ParserProfileChecker extends ParserProfileBase // implements
super(prologue, errorHandler) ;
}
- public ParserProfileChecker(Prologue prologue, ErrorHandler errorHandler, LabelToNode labelMapping) {
- super(prologue, errorHandler, labelMapping) ;
+ public ParserProfileChecker(Prologue prologue, ErrorHandler errorHandler, FactoryRDF factory) {
+ super(prologue, errorHandler, factory) ;
}
@Override
@@ -105,19 +103,9 @@ public class ParserProfileChecker extends ParserProfileBase // implements
@Override
public Node createURI(String x, long line, long col) {
- try {
- if ( RiotLib.isBNodeIRI(x) )
- return RiotLib.createIRIorBNode(x) ;
- else {
- String resolvedIRI = resolveIRI(x, line, col) ;
- return NodeFactory.createURI(resolvedIRI) ;
- }
- }
- catch (RiotException ex) {
- // Error was handled.
- // errorHandler.error(ex.getMessage(), line, col) ;
- throw ex ;
- }
+ if ( ! RiotLib.isBNodeIRI(x) )
+ x = resolveIRI(x, line, col) ;
+ return super.createURI(x, line, col) ;
}
@Override
@@ -134,14 +122,14 @@ public class ParserProfileChecker extends ParserProfileBase // implements
return n ;
}
- @Override
- public Node createStringLiteral(String lexical, long line, long col) {
- return NodeFactory.createLiteral(lexical) ;
- }
-
- @Override
- public Node createBlankNode(Node scope, String label, long line, long col) {
- return labelMapping.get(scope, label) ;
- }
-
+ // No checks
+// @Override
+// public Node createStringLiteral(String lexical, long line, long col) {
+// return super.createStringLiteral(lexical, line, col) ;
+// }
+//
+// @Override
+// public Node createBlankNode(Node scope, String label, long line, long col) {
+// return super.createBlankNode(scope, label, line, col) ;
+// }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/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 0455295..76ec07f 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
@@ -38,10 +38,7 @@ 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.Lang ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.riot.SysRIOT ;
-import org.apache.jena.riot.WriterDatasetRIOT ;
+import org.apache.jena.riot.* ;
import org.apache.jena.riot.lang.LabelToNode ;
import org.apache.jena.riot.tokens.Token ;
import org.apache.jena.riot.tokens.Tokenizer ;
@@ -82,7 +79,7 @@ public class RiotLib
return skolomizedBNodes && iri.startsWith(bNodeLabelStart) ;
}
- private static ParserProfile profile = profile(RDFLanguages.TURTLE, null, null) ;
+ private static ParserProfile profile = profile(RDFLanguages.TURTLE, null, ErrorHandlerFactory.errorHandlerStd) ;
static {
PrefixMap pmap = profile.getPrologue().getPrefixMap() ;
pmap.add("rdf", ARQConstants.rdfPrefix) ;
@@ -147,9 +144,23 @@ public class RiotLib
prologue = new Prologue(PrefixMapFactory.createForInput(), IRIResolver.createNoResolve()) ;
if ( checking )
- return new ParserProfileChecker(prologue, handler, labelToNode) ;
+ return new ParserProfileChecker(prologue, handler, factoryRDF(labelToNode)) ;
else
- return new ParserProfileBase(prologue, handler, labelToNode) ;
+ return new ParserProfileBase(prologue, handler, factoryRDF(labelToNode)) ;
+ }
+
+ /** Create a new (notinfluenced by anything else) FactoryRDF
+ * using the label to blank node scheme provided.
+ */
+ public static FactoryRDF factoryRDF(LabelToNode labelMapping) {
+ return new FactoryRDFStd(labelMapping);
+ }
+
+ /** Create a new (not influenced by anything else) FactoryRDF
+ * using the label to blank node scheme scope by this FactoryRDF.
+ */
+ public static FactoryRDF factoryRDF() {
+ return factoryRDF(SyntaxLabels.createLabelToNode());
}
/** Get triples with the same subject */
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/riot/system/SerializationFactoryFinder.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/SerializationFactoryFinder.java b/jena-arq/src/main/java/org/apache/jena/riot/system/SerializationFactoryFinder.java
index 281defe..3334122 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/SerializationFactoryFinder.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/SerializationFactoryFinder.java
@@ -81,9 +81,11 @@ public class SerializationFactoryFinder
@Override
public Iterator<Triple> createDeserializer(InputStream in)
{
- Tokenizer tokenizer = TokenizerFactory.makeTokenizerASCII(in) ;
- ParserProfileBase profile = new ParserProfileBase(new Prologue(null, IRIResolver.createNoResolve()), null, LabelToNode.createUseLabelEncoded()) ;
- LangNTriples parser = new LangNTriples(tokenizer, profile, null) ;
+ Tokenizer tokenizer = TokenizerFactory.makeTokenizerASCII(in);
+ ParserProfileBase profile = new ParserProfileBase(new Prologue(null, IRIResolver.createNoResolve()),
+ ErrorHandlerFactory.errorHandlerNoWarnings,
+ RiotLib.factoryRDF(LabelToNode.createUseLabelEncoded()));
+ LangNTriples parser = new LangNTriples(tokenizer, profile, null);
return parser ;
}
@@ -110,7 +112,9 @@ public class SerializationFactoryFinder
public Iterator<Quad> createDeserializer(InputStream in)
{
Tokenizer tokenizer = TokenizerFactory.makeTokenizerASCII(in) ;
- ParserProfileBase profile = new ParserProfileBase(new Prologue(null, IRIResolver.createNoResolve()), null, LabelToNode.createUseLabelEncoded()) ;
+ ParserProfileBase profile = new ParserProfileBase(new Prologue(null, IRIResolver.createNoResolve()),
+ ErrorHandlerFactory.errorHandlerNoWarnings,
+ RiotLib.factoryRDF(LabelToNode.createUseLabelEncoded())) ;
LangNQuads parser = new LangNQuads(tokenizer, profile, null) ;
return parser ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
index 786f6f7..e54c919 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
@@ -82,8 +82,8 @@ public class BindingInputStream extends LangEngine implements Iterator<Binding>,
// Don't do anything with IRIs.
Prologue prologue = new Prologue(PrefixMapFactory.createForInput(), IRIResolver.createNoResolve()) ;
ErrorHandler handler = ErrorHandlerFactory.getDefaultErrorHandler() ;
- ParserProfile profile = new ParserProfileBase(prologue, handler) ;
- profile.setLabelToNode(LabelToNode.createUseLabelAsGiven()) ;
+ FactoryRDF factory = RiotLib.factoryRDF(LabelToNode.createUseLabelAsGiven()) ;
+ ParserProfile profile = new ParserProfileBase(prologue, handler, factory) ;
// Include safe bNode labels.
return profile ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/test/java/org/apache/jena/riot/system/TS_RiotSystem.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/system/TS_RiotSystem.java b/jena-arq/src/test/java/org/apache/jena/riot/system/TS_RiotSystem.java
index 4229e78..7b4f08d 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/system/TS_RiotSystem.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/system/TS_RiotSystem.java
@@ -30,6 +30,9 @@ import org.junit.runners.Suite.SuiteClasses ;
@SuiteClasses({
TestChecker.class
, TestStreamRDF.class
+ , TestFactoryRDF.class
+ , TestFactoryRDFCaching.class
+
// Prefix Map implementations
, TestPrefixMap.class
, TestPrefixMapWrapper.class
@@ -37,11 +40,13 @@ import org.junit.runners.Suite.SuiteClasses ;
, TestFastAbbreviatingPrefixMap.class
, TestPrefixMapExtended1.class
, TestPrefixMapExtended2.class
+
, TestIO_JenaReaders.class
, TestIO_JenaWriters.class
, TestLangRegistration.class
, TestFormatRegistration.class
, TestJsonLDReadWrite.class // Some simple testing of the jsonld-java engine.
+
// May be subject to performance vagaries, with the improvements made
// to the fast implementation this should be fairly safe
//, TestAbbreviationPerformance.class
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDF.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDF.java b/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDF.java
new file mode 100644
index 0000000..75ae5f4
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDF.java
@@ -0,0 +1,132 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertNotEquals ;
+import static org.junit.Assert.assertNotNull ;
+import static org.junit.Assert.assertTrue ;
+
+import org.apache.jena.datatypes.xsd.XSDDatatype ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.riot.lang.LabelToNode ;
+import org.apache.jena.riot.system.FactoryRDF ;
+import org.apache.jena.riot.system.FactoryRDFStd ;
+import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.Quad ;
+import org.apache.jena.vocabulary.RDF ;
+import org.junit.Test ;
+
+public class TestFactoryRDF {
+ protected FactoryRDF factory = new FactoryRDFStd(LabelToNode.createUseLabelAsGiven()) ;
+
+ @Test public void factoryRDF_blanknode_01() {
+ Node n1 = factory.createBlankNode() ;
+ assertTrue(n1.isBlank()) ;
+ Node n2 = factory.createBlankNode() ;
+ assertNotEquals(n1, n2);
+ }
+
+ @Test public void factoryRDF_blanknode_02() {
+ Node n1 = factory.createBlankNode("ABCDE") ;
+ assertTrue(n1.isBlank()) ;
+ Node n2 = factory.createBlankNode("ABCDE") ;
+ assertEquals(n1, n2);
+ assertEquals("ABCDE", n1.getBlankNodeLabel()) ;
+ }
+
+ @Test public void factoryRDF_blanknode_03() {
+ Node n1 = factory.createBlankNode(0x1234L, 0x5678L) ;
+ assertTrue(n1.isBlank()) ;
+ Node n2 = factory.createBlankNode(0x1234L, 0x5678L) ;
+ assertEquals(n1, n2);
+ assertEquals("0000123400005678", n1.getBlankNodeLabel()) ;
+ }
+
+ @Test public void factoryRDF_uri_02() {
+ Node n = factory.createURI("http://example/") ;
+ assertTrue(n.isURI()) ;
+ assertEquals("http://example/", n.getURI()) ;
+ }
+
+ @Test public void factoryRDF_uri_03() {
+ Node n = factory.createURI("_:abc") ; // Blank node!
+ assertTrue(n.isBlank()) ;
+ assertEquals("abc", n.getBlankNodeLabel()) ;
+ }
+
+ @Test public void factoryRDF_literal_01() {
+ Node n = factory.createStringLiteral("hello") ;
+ assertTrue(n.isLiteral()) ;
+ assertEquals("hello", n.getLiteralLexicalForm()) ;
+ assertEquals(XSDDatatype.XSDstring, n.getLiteralDatatype()) ;
+ assertEquals("", n.getLiteralLanguage()) ;
+ }
+
+ @Test public void factoryRDF_literal_02() {
+ Node n = factory.createLangLiteral("xyz", "en") ;
+ assertTrue(n.isLiteral()) ;
+ assertEquals("xyz", n.getLiteralLexicalForm()) ;
+ assertEquals(RDF.dtLangString, n.getLiteralDatatype()) ;
+ assertEquals("en", n.getLiteralLanguage()) ;
+ }
+
+ @Test public void factoryRDF_literal_03() {
+ Node n = factory.createTypedLiteral("1", XSDDatatype.XSDinteger) ;
+ assertTrue(n.isLiteral()) ;
+ assertEquals("1", n.getLiteralLexicalForm()) ;
+ assertEquals(XSDDatatype.XSDinteger, n.getLiteralDatatype()) ;
+ assertEquals("", n.getLiteralLanguage()) ;
+ }
+
+ @Test public void factoryRDF_triple_01() {
+ Node s = factory.createURI("http://test/s") ;
+ Node p = factory.createURI("http://test/p") ;
+ Node o = factory.createURI("http://test/o") ;
+ Triple triple = factory.createTriple(s, p, o) ;
+ assertEquals(s, triple.getSubject()) ;
+ assertEquals(p, triple.getPredicate()) ;
+ assertEquals(o, triple.getObject()) ;
+ }
+
+ @Test public void factoryRDF_quad_01() {
+ Node g = factory.createURI("http://test/g") ;
+ Node s = factory.createURI("http://test/s") ;
+ Node p = factory.createURI("http://test/p") ;
+ Node o = factory.createURI("http://test/o") ;
+ Quad quad = factory.createQuad(g, s, p, o) ;
+ assertEquals(g, quad.getGraph()) ;
+ assertEquals(s, quad.getSubject()) ;
+ assertEquals(p, quad.getPredicate()) ;
+ assertEquals(o, quad.getObject()) ;
+ }
+
+ @Test public void factoryRDF_graph_01() {
+ Graph graph = factory.createGraph() ;
+ assertNotNull(graph) ;
+ }
+
+ @Test public void factoryRDF_dataset_01() {
+ DatasetGraph dsg = factory.createDatasetGraph() ;
+ assertNotNull(dsg) ;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDFCaching.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDFCaching.java b/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDFCaching.java
new file mode 100644
index 0000000..b51c391
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/riot/system/TestFactoryRDFCaching.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+
+import static org.junit.Assert. * ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.riot.lang.LabelToNode ;
+import org.apache.jena.riot.system.FactoryRDFCaching ;
+import org.junit.Test ;
+
+public class TestFactoryRDFCaching extends TestFactoryRDF {
+
+ public TestFactoryRDFCaching() {
+ super.factory = new FactoryRDFCaching(100, LabelToNode.createUseLabelAsGiven()) ;
+ }
+
+ @Test public void factory_cache_01() {
+ Node n1 = factory.createStringLiteral("") ;
+ Node n2 = factory.createStringLiteral("") ;
+ assertSame(n1, n2);
+ }
+
+ @Test public void factory_cache_02() {
+ Node n1 = factory.createURI("http://test/n1") ;
+ Node n2 = factory.createURI("http://test/n2") ;
+ Node n3 = factory.createURI("http://test/n1") ;
+ assertSame(n1, n3);
+ }
+}
+
+
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheInfo.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheInfo.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheInfo.java
index 11fafc5..9a4fae1 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheInfo.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheInfo.java
@@ -21,42 +21,28 @@ package org.apache.jena.atlas.lib.cache;
import org.apache.jena.ext.com.google.common.cache.CacheStats ;
/** Simplified version of Guava's CacheStats (and abstractign away from Guava cache implementation) */
- public class CacheInfo {
- public final long requests;
- public final long hits;
- public final long misses;
- public final double hitRate;
- public final int cacheSize;
+public class CacheInfo {
+ public final long requests;
+ public final long hits;
+ public final long misses;
+ public final double hitRate;
+ public final int cacheSize;
- public CacheInfo(int cacheSize, CacheStats stats) {
- this(cacheSize, stats.requestCount(), stats.hitCount(), stats.missCount(), stats.hitRate() ) ;
- }
-
- public CacheInfo(int cacheSize, long requests, long hits, long misses, double hitRate) {
- this.cacheSize = cacheSize ;
- this.requests = requests ;
- this.hits = hits ;
- this.misses = misses ;
- this.hitRate = hitRate ;
- }
+ public CacheInfo(int cacheSize, CacheStats stats) {
+ this(cacheSize, stats.requestCount(), stats.hitCount(), stats.missCount(), stats.hitRate() ) ;
+ }
- @Override
- public String toString() {
- return String.format("size=%,d count=%,d hits=%,d misses=%,d rate=%.1f",
- cacheSize, requests, hits, misses, hitRate) ;
- }
-
-// private void details(String label, CacheGuava<?, ?> cache, int cacheSize) {
-// System.out.printf("%s [%,d]\n", label, cacheSize) ;
-// CacheStats stats = ((CacheGuava<?, ?>)cache).stats() ;
-//// System.out.printf(" Cache usage: %,d\n", cache.size()) ;
-// System.out.printf(" Requests: %,d\n", stats.requestCount()) ;
-// System.out.printf(" Hit rate: %.1f%%\n", 100*stats.hitRate()) ;
-//// System.out.printf(" Hits: %,d\n", stats.hitCount()) ;
-//// System.out.printf(" Misses: %,d\n", stats.missCount()) ;
-//// if ( stats.loadSuccessCount() != stats.missCount() ) {
-//// System.out.printf(" Load success: %,d\n", stats.loadSuccessCount()) ;
-//// System.out.printf(" Load ex: %,d\n", stats.loadExceptionCount()) ;
-//// }
+ public CacheInfo(int cacheSize, long requests, long hits, long misses, double hitRate) {
+ this.cacheSize = cacheSize ;
+ this.requests = requests ;
+ this.hits = hits ;
+ this.misses = misses ;
+ this.hitRate = hitRate ;
+ }
- }
\ No newline at end of file
+ @Override
+ public String toString() {
+ return String.format("size=%,d count=%,d hits=%,d misses=%,d rate=%.1f",
+ cacheSize, requests, hits, misses, hitRate) ;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/ed9f62a0/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
----------------------------------------------------------------------
diff --git a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
index 61f3b96..080edd7 100644
--- a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
+++ b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
@@ -276,8 +276,11 @@ public abstract class CmdLangParse extends CmdGeneral
} else
reader.setParserProfile(RiotLib.profile(baseURI, false, false, errHandler)) ;
- if ( labelsAsGiven )
- reader.getParserProfile().setLabelToNode(LabelToNode.createUseLabelAsGiven()) ;
+ if ( labelsAsGiven ) {
+ FactoryRDF f = RiotLib.factoryRDF(LabelToNode.createUseLabelAsGiven()) ;
+ reader.getParserProfile().setFactoryRDF(f);
+ }
+
modTime.startTimer() ;
sink.start() ;
reader.read(in, baseURI, ct, sink, null) ;