Repository: incubator-commonsrdf Updated Branches: refs/heads/master 5aa8d6cb7 -> 0bb936968
RDF4JTermFactory -> RDF4JFactory Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/d043b075 Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/d043b075 Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/d043b075 Branch: refs/heads/master Commit: d043b0759e8bd6d261db3fa03cdd0248b46cf47e Parents: 5aa8d6c Author: Stian Soiland-Reyes <st...@apache.org> Authored: Wed Oct 19 09:47:54 2016 +0100 Committer: Stian Soiland-Reyes <st...@apache.org> Committed: Wed Oct 19 09:47:54 2016 +0100 ---------------------------------------------------------------------- rdf4j/pom.xml | 2 +- .../commons/rdf/rdf4j/RDF4JBlankNode.java | 2 +- .../apache/commons/rdf/rdf4j/RDF4JDataset.java | 4 +- .../apache/commons/rdf/rdf4j/RDF4JFactory.java | 601 +++++++++++++++++++ .../apache/commons/rdf/rdf4j/RDF4JGraph.java | 10 +- .../org/apache/commons/rdf/rdf4j/RDF4JIRI.java | 2 +- .../apache/commons/rdf/rdf4j/RDF4JLiteral.java | 2 +- .../org/apache/commons/rdf/rdf4j/RDF4JQuad.java | 2 +- .../commons/rdf/rdf4j/RDF4JTermFactory.java | 601 ------------------- .../apache/commons/rdf/rdf4j/RDF4JTriple.java | 2 +- .../rdf/rdf4j/experimental/RDF4JParser.java | 12 +- .../rdf4j/impl/AbstractRepositoryGraphLike.java | 6 +- .../rdf/rdf4j/impl/InternalRDF4JFactory.java | 14 +- .../commons/rdf/rdf4j/impl/ModelGraphImpl.java | 6 +- .../apache/commons/rdf/rdf4j/impl/QuadImpl.java | 10 +- .../commons/rdf/rdf4j/impl/TripleImpl.java | 8 +- .../apache/commons/rdf/rdf4j/package-info.java | 8 +- .../apache/commons/rdf/rdf4j/BlankNodeTest.java | 2 +- .../org/apache/commons/rdf/rdf4j/GraphTest.java | 2 +- .../commons/rdf/rdf4j/MemoryGraphTest.java | 2 +- .../commons/rdf/rdf4j/NativeStoreGraphTest.java | 2 +- .../rdf/rdf4j/Rdf4JRDFTermFactoryTest.java | 2 +- src/site/markdown/implementations.md | 12 +- 23 files changed, 657 insertions(+), 657 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/pom.xml ---------------------------------------------------------------------- diff --git a/rdf4j/pom.xml b/rdf4j/pom.xml index ce21b98..0c6cb28 100644 --- a/rdf4j/pom.xml +++ b/rdf4j/pom.xml @@ -121,7 +121,7 @@ <!-- There are multiple RDF4J sail/repository implementations, we use the - below from RDF4JTermFactory. --> + below from RDF4JFactory. --> <dependency> <groupId>org.eclipse.rdf4j</groupId> <artifactId>rdf4j-sail-memory</artifactId> http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java index 3e5a055..2ed616f 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java @@ -27,7 +27,7 @@ import org.eclipse.rdf4j.model.BNode; * The underlying RDF4J {@link BNode} instance can * be retrieved with {@link #asValue()}. * - * @see RDF4JTermFactory#createBlankNode() + * @see RDF4JFactory#createBlankNode() */ public interface RDF4JBlankNode extends RDF4JBlankNodeOrIRI, BlankNode { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java index b00ab39..2066c34 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java @@ -30,8 +30,8 @@ import org.apache.commons.rdf.api.RDFTerm; /** * Marker interface for RDF4J implementations of Dataset. * - * @see RDF4JTermFactory#createDataset() - * @see RDF4JTermFactory#asRDFTermDataset(org.eclipse.rdf4j.repository.Repository, org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...) + * @see RDF4JFactory#createDataset() + * @see RDF4JFactory#asRDFTermDataset(org.eclipse.rdf4j.repository.Repository, org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...) */ public interface RDF4JDataset extends Dataset, RDF4JGraphLike<Quad> { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JFactory.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JFactory.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JFactory.java new file mode 100644 index 0000000..7d4eabe --- /dev/null +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JFactory.java @@ -0,0 +1,601 @@ +/** + * 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.commons.rdf.rdf4j; + +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; + +// To avoid confusion, avoid importing +// classes that are in both +// commons.rdf and openrdf.model (e.g. IRI, Literal) +import org.apache.commons.rdf.api.BlankNode; +import org.apache.commons.rdf.api.BlankNodeOrIRI; +import org.apache.commons.rdf.api.Dataset; +import org.apache.commons.rdf.api.Graph; +import org.apache.commons.rdf.api.Quad; +import org.apache.commons.rdf.api.RDFTerm; +import org.apache.commons.rdf.api.RDFTermFactory; +import org.apache.commons.rdf.api.Triple; +import org.apache.commons.rdf.api.TripleLike; +import org.apache.commons.rdf.rdf4j.impl.InternalRDF4JFactory; +import org.eclipse.rdf4j.model.BNode; +import org.eclipse.rdf4j.model.Model; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.LinkedHashModel; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.repository.Repository; +import org.eclipse.rdf4j.repository.RepositoryConnection; +import org.eclipse.rdf4j.repository.sail.SailRepository; +import org.eclipse.rdf4j.sail.Sail; +import org.eclipse.rdf4j.sail.memory.MemoryStore; + +/** + * RDF4J implementation of RDFTermFactory. + * <p> + * The {@link #RDF4JFactory()} constructor uses a {@link SimpleValueFactory} + * to create corresponding RDF4J {@link Value} instances. Alternatively, this + * factory can be constructed with a different {@link ValueFactory} using + * {@link #RDF4JFactory(ValueFactory)}. + * <p> + * {@link #asRDFTerm(Value)} can be used to convert any RDF4J {@link Value} to + * an RDFTerm. Note that adapted {@link BNode}s are considered equal if they are + * converted with the same {@link RDF4JFactory} instance and have the same + * {@link BNode#getID()}. + * <p> + * {@link #createGraph()} creates a new Graph backed by {@link LinkedHashModel}. + * To use other models, see {@link #asRDFTermGraph(Model)}. + * <p> + * To adapt a RDF4J {@link Repository} as a {@link Dataset} or {@link Graph}, + * use {@link #asRDFTermDataset(Repository, Option...)} + * or + * {@link #asRDFTermGraph(Repository, Option...)}. + * <p> + * {@link #asTriple(Statement)} can be used to convert a RDF4J {@link Statement} + * to a Commons RDF {@link Triple}, and equivalent {@link #asQuad(Statement)} to + * convert a {@link Quad}. + * <p> + * To convert any {@link Triple} or {@link Quad} to to RDF4J {@link Statement}, + * use {@link #asStatement(TripleLike)}. This recognises previously converted + * {@link RDF4JTriple}s and {@link RDF4JQuad}s without re-converting their + * {@link RDF4JTripleLike#asStatement()}. + * <p> + * Likewise, {@link #asValue(RDFTerm)} can be used to convert any Commons RDF + * {@link RDFTerm} to a corresponding RDF4J {@link Value}. This recognises + * previously converted {@link RDF4JTerm}s without re-converting their + * {@link RDF4JTerm#asValue()}. + * <p> + * For the purpose of {@link BlankNode} equivalence, this factory contains an + * internal {@link UUID} salt that is used by adapter methods like + * {@link #asQuad(Statement)}, {@link #asTriple(Statement)}, + * {@link #asRDFTerm(Value)} as well as {@link #createBlankNode(String)}. As + * RDF4J {@link BNode} instances from multiple repositories or models may have + * the same {@link BNode#getID()}, converting them with the above methods might + * cause accidental {@link BlankNode} equivalence. Note that the {@link Graph} + * and {@link Dataset} adapter methods like + * {@link #asRDFTermDataset(Repository, Option...)} + * and + * {@link #asRDFTermGraph(Repository, Option...)} + * therefore uses a unique {@link RDF4JFactory} internally. + * + */ +public final class RDF4JFactory implements RDFTermFactory { + + /** + * InternalRDF4JFactory is deliberately abstract + */ + private static InternalRDF4JFactory rdf4j = new InternalRDF4JFactory() { + }; + + public enum Option { + /** + * The Graph/Dataset should include any inferred statements + */ + includeInferred, + /** + * The graph/dataset should handle {@link Repository#initialize()} (if + * needed) and {@link Repository#shutDown()} on {@link Graph#close()} / + * {@link Dataset#close()}. + */ + handleInitAndShutdown + } + + private final UUID salt; + + private final ValueFactory valueFactory; + + /** + * Construct an {@link RDF4JFactory}. + * + */ + public RDF4JFactory() { + this(SimpleValueFactory.getInstance(), UUID.randomUUID()); + } + + /** + * Construct an {@link RDF4JFactory}. + * <p> + * This constructor is intended for use with the value factory from + * {@link Repository#getValueFactory()} when using + * Repository-based graphs and datasets. + * + * @param valueFactory + * The RDF4J {@link ValueFactory} to use + */ + public RDF4JFactory(ValueFactory valueFactory) { + this(valueFactory, UUID.randomUUID()); + } + + /** + * Construct an {@link RDF4JFactory}. + * <p> + * This constructor may be used if reproducible + * {@link BlankNode#uniqueReference()} in {@link BlankNode} is desirable. + * + * @param salt + * An {@link UUID} salt to be used by any created + * {@link BlankNode}s for the purpose of + * {@link BlankNode#uniqueReference()} + */ + public RDF4JFactory(UUID salt) { + this(SimpleValueFactory.getInstance(), salt); + } + /** + * Construct an {@link RDF4JFactory}. + * <p> + * This constructor may be used if reproducible + * {@link BlankNode#uniqueReference()} in {@link BlankNode} is desirable. + * + * @param valueFactory + * The RDF4J {@link ValueFactory} to use + * @param salt + * An {@link UUID} salt to be used by any created + * {@link BlankNode}s for the purpose of + * {@link BlankNode#uniqueReference()} + */ + public RDF4JFactory(ValueFactory valueFactory, UUID salt) { + this.valueFactory = valueFactory; + this.salt = salt; + } + + /** + * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Quad}. + * <p> + * For the purpose of {@link BlankNode} equivalence, this method will use an + * internal salt UUID that is unique per instance of + * {@link RDF4JFactory}. + * <p> + * <strong>NOTE:</strong> If combining RDF4J {@link Statement}s multiple + * repositories or models, then their {@link BNode}s may have the same + * {@link BNode#getID()}, which with this method would become equivalent + * according to {@link BlankNode#equals(Object)} and + * {@link BlankNode#uniqueReference()}, unless a separate + * {@link RDF4JFactory} instance is used per RDF4J repository/model. + * + * @param statement + * The statement to convert + * @return A {@link RDF4JQuad} that is equivalent to the statement + */ + public RDF4JQuad asQuad(final Statement statement) { + return rdf4j.createQuadImpl(statement, salt); + } + + /** + * + * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}. + * <p> + * The value will be of the same kind as the term, e.g. a + * {@link org.eclipse.rdf4j.model.BNode} is converted to a + * {@link org.apache.commons.rdf.api.BlankNode}, a + * {@link org.eclipse.rdf4j.model.IRI} is converted to a + * {@link org.apache.commons.rdf.api.IRI} and a + * {@link org.eclipse.rdf4j.model.Literal}. is converted to a + * {@link org.apache.commons.rdf.api.Literal} + * <p> + * For the purpose of {@link BlankNode} equivalence, this method will use an + * internal salt UUID that is unique per instance of + * {@link RDF4JFactory}. + * <p> + * <strong>NOTE:</strong> If combining RDF4J values from multiple + * repositories or models, then their {@link BNode}s may have the same + * {@link BNode#getID()}, which with this method would become equivalent + * according to {@link BlankNode#equals(Object)} and + * {@link BlankNode#uniqueReference()}, unless a separate + * {@link RDF4JFactory} instance is used per RDF4J repository/model. + * + * @param value + * The RDF4J {@link Value} to convert. + * @return A {@link RDFTerm} that corresponds to the RDF4J value + * @throws IllegalArgumentException + * if the value is not a BNode, Literal or IRI + */ + public RDF4JTerm asRDFTerm(Value value) { + return asRDFTerm(value, salt); + } + + /** + * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}. + * <p> + * The value will be of the same kind as the term, e.g. a + * {@link org.eclipse.rdf4j.model.BNode} is converted to a + * {@link org.apache.commons.rdf.api.BlankNode}, a + * {@link org.eclipse.rdf4j.model.IRI} is converted to a + * {@link org.apache.commons.rdf.api.IRI} and a + * {@link org.eclipse.rdf4j.model.Literal}. is converted to a + * {@link org.apache.commons.rdf.api.Literal} + * + * @param value + * The RDF4J {@link Value} to convert. + * @param salt + * A {@link UUID} salt to use for uniquely mapping any + * {@link BNode}s. The salt should typically be the same for + * multiple statements in the same {@link Repository} or + * {@link Model} to ensure {@link BlankNode#equals(Object)} and + * {@link BlankNode#uniqueReference()} works as intended. + * @return A {@link RDFTerm} that corresponds to the RDF4J value + * @throws IllegalArgumentException + * if the value is not a BNode, Literal or IRI + */ + public static RDF4JTerm asRDFTerm(final Value value, UUID salt) { + if (value instanceof BNode) { + return rdf4j.createBlankNodeImpl((BNode) value, salt); + } + if (value instanceof org.eclipse.rdf4j.model.Literal) { + return rdf4j.createLiteralImpl((org.eclipse.rdf4j.model.Literal) value); + } + if (value instanceof org.eclipse.rdf4j.model.IRI) { + return rdf4j.createIRIImpl((org.eclipse.rdf4j.model.IRI) value); + } + throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass()); + } + + /** + * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Dataset}. + * <p> + * Changes to the dataset are reflected in the repository, and vice versa. + * <p> + * <strong>Note:</strong> Some operations on the {@link RDF4JDataset} + * requires the use of try-with-resources to close underlying + * {@link RepositoryConnection}s, including + * {@link RDF4JDataset#iterate()}, + * {@link RDF4JDataset#stream()} and {@link RDF4JDataset#getGraphNames()}. + * + * @param repository + * RDF4J {@link Repository} to connect to. + * @param options + * Zero or more {@link Option} + * @return A {@link Dataset} backed by the RDF4J repository. + */ + public RDF4JDataset asRDFTermDataset(Repository repository, Option... options) { + EnumSet<Option> opts = optionSet(options); + return rdf4j.createRepositoryDatasetImpl(repository, + opts.contains(Option.handleInitAndShutdown), + opts.contains(Option.includeInferred)); + } + + /** + * Adapt an RDF4J {@link Model} as a Commons RDF {@link Graph}. + * <p> + * Changes to the graph are reflected in the model, and vice versa. + * + * @param model + * RDF4J {@link Model} to adapt. + * @return Adapted {@link Graph}. + */ + public RDF4JGraph asRDFTermGraph(Model model) { + return rdf4j.createModelGraphImpl(model, this); + } + + /** + * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}. + * <p> + * The graph will only include triples in the default graph (equivalent to + * context <code>new Resource[0]{null})</code> in RDF4J). + * <p> + * Changes to the graph are reflected in the repository, and vice versa. + * <p> + * <strong>Note:</strong> Some operations on the {@link RDF4JGraph} + * requires the use of try-with-resources to close underlying + * {@link RepositoryConnection}s, including + * {@link RDF4JGraph#iterate()} and + * {@link RDF4JGraph#stream()}. + * + * @param repository + * RDF4J {@link Repository} to connect to. + * @param options + * Zero or more {@link Option} + * @return A {@link Graph} backed by the RDF4J repository. + */ + public RDF4JGraph asRDFTermGraph(Repository repository, Option... options) { + EnumSet<Option> opts = optionSet(options); + return rdf4j.createRepositoryGraphImpl(repository, + opts.contains(Option.handleInitAndShutdown), + opts.contains(Option.includeInferred), + new Resource[]{null}); // default graph + } + + /** + * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}. + * <p> + * The graph will include triples in any contexts (e.g. the union graph). + * <p> + * Changes to the graph are reflected in the repository, and vice versa. + * + * @param repository + * RDF4J {@link Repository} to connect to. + * @param options + * Zero or more {@link Option} + * @return A union {@link Graph} backed by the RDF4J repository. + */ + public RDF4JGraph asRDFTermGraphUnion(Repository repository, Option... options) { + EnumSet<Option> opts = optionSet(options); + return rdf4j.createRepositoryGraphImpl(repository, + opts.contains(Option.handleInitAndShutdown), + opts.contains(Option.includeInferred), + new Resource[]{}); // union graph + + } + + /** + * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}. + * <p> + * The graph will include triples in the specified contexts. + * <p> + * Changes to the graph are reflected in the repository, and vice versa. + * Triples added/removed to the graph are reflected in all the specified + * contexts. + * <p> + * <strong>Note:</strong> Some operations on the {@link RDF4JGraph} + * requires the use of try-with-resources to close underlying + * {@link RepositoryConnection}s, including + * {@link RDF4JGraph#iterate()} and + * {@link RDF4JGraph#stream()}. + * + * @param repository + * RDF4J {@link Repository} to connect to. + * @param contexts + * A {@link Set} of {@link BlankNodeOrIRI} specifying the graph + * names to use as a context. The set may include the value + * <code>null</code> to indicate the default graph. The empty set + * indicates any context, e.g. the <em>union graph</em>. + * @param option + * Zero or more {@link Option}s + * @return A {@link Graph} backed by the RDF4J repository. + */ + public RDF4JGraph asRDFTermGraph(Repository repository, Set<? extends BlankNodeOrIRI> contexts, + Option... option) { + EnumSet<Option> opts = optionSet(option); + /** NOTE: asValue() deliberately CAN handle <code>null</code> */ + Resource[] resources = contexts.stream().map(g -> (Resource) asValue(g)).toArray(Resource[]::new); + return rdf4j.createRepositoryGraphImpl(Objects.requireNonNull(repository), + opts.contains(Option.handleInitAndShutdown), + opts.contains(Option.includeInferred), + resources); + } + + /** + * Adapt a Commons RDF {@link Triple} or {@link Quad} as a RDF4J + * {@link Statement}. + * <p> + * If the <code>tripleLike</code> argument is an {@link RDF4JTriple} or a + * {@link RDF4JQuad}, then its {@link RDF4JTripleLike#asStatement()} is + * returned as-is. Note that this means that a {@link RDF4JTriple} would + * preserve its {@link Statement#getContext()}, and that any + * {@link BlankNode}s would be deemed equivalent in RDF4J if they have the + * same {@link BNode#getID()}. + * + * @param tripleLike + * A {@link Triple} or {@link Quad} to adapt + * @return A corresponding {@link Statement} + */ + public Statement asStatement(TripleLike tripleLike) { + if (tripleLike instanceof RDF4JTripleLike) { + // Return original statement - this covers both RDF4JQuad and + // RDF4JTriple + return ((RDF4JTripleLike) tripleLike).asStatement(); + } + + org.eclipse.rdf4j.model.Resource subject = (org.eclipse.rdf4j.model.Resource) asValue(tripleLike.getSubject()); + org.eclipse.rdf4j.model.IRI predicate = (org.eclipse.rdf4j.model.IRI) asValue(tripleLike.getPredicate()); + Value object = asValue(tripleLike.getObject()); + + org.eclipse.rdf4j.model.Resource context = null; + if (tripleLike instanceof Quad) { + Quad quad = (Quad) tripleLike; + context = (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null)); + } + + return getValueFactory().createStatement(subject, predicate, object, context); + } + + /** + * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}. + * <p> + * For the purpose of {@link BlankNode} equivalence, this method will use an + * internal salt UUID that is unique per instance of + * {@link RDF4JFactory}. + * <p> + * <strong>NOTE:</strong> If combining RDF4J statements from multiple + * repositories or models, then their {@link BNode}s may have the same + * {@link BNode#getID()}, which with this method would become equivalent + * according to {@link BlankNode#equals(Object)} and + * {@link BlankNode#uniqueReference()}, unless a separate + * {@link RDF4JFactory} instance is used per RDF4J repository/model. + * + * @param statement + * The RDF4J {@link Statement} to adapt. + * @return A {@link RDF4JTriple} that is equivalent to the statement + */ + public RDF4JTriple asTriple(final Statement statement) { + return rdf4j.createTripleImpl(statement, salt); + } + + /** + * Adapt a Commons RDF {@link RDFTerm} as a RDF4J {@link Value}. + * <p> + * The value will be of the same kind as the term, e.g. a + * {@link org.apache.commons.rdf.api.BlankNode} is converted to a + * {@link org.eclipse.rdf4j.model.BNode}, a + * {@link org.apache.commons.rdf.api.IRI} is converted to a + * {@link org.eclipse.rdf4j.model.IRI} and a + * {@link org.apache.commons.rdf.api.Literal} is converted to a + * {@link org.eclipse.rdf4j.model.Literal}. + * <p> + * If the provided {@link RDFTerm} is <code>null</code>, then the returned + * value is <code>null</code>. + * <p> + * If the provided term is an instance of {@link RDF4JTerm}, then the + * {@link RDF4JTerm#asValue()} is returned without any conversion. Note that + * this could mean that a {@link Value} from a different kind of + * {@link ValueFactory} could be returned. + * + * @param term + * RDFTerm to adapt to RDF4J Value + * @return Adapted RDF4J {@link Value} + */ + public Value asValue(RDFTerm term) { + if (term == null) { + return null; + } + if (term instanceof RDF4JTerm) { + // One of our own - avoid converting again. + // (This is crucial to avoid double-escaping in BlankNode) + return ((RDF4JTerm) term).asValue(); + } + if (term instanceof org.apache.commons.rdf.api.IRI) { + org.apache.commons.rdf.api.IRI iri = (org.apache.commons.rdf.api.IRI) term; + return getValueFactory().createIRI(iri.getIRIString()); + } + if (term instanceof org.apache.commons.rdf.api.Literal) { + org.apache.commons.rdf.api.Literal literal = (org.apache.commons.rdf.api.Literal) term; + String label = literal.getLexicalForm(); + if (literal.getLanguageTag().isPresent()) { + String lang = literal.getLanguageTag().get(); + return getValueFactory().createLiteral(label, lang); + } + org.eclipse.rdf4j.model.IRI dataType = (org.eclipse.rdf4j.model.IRI) asValue(literal.getDatatype()); + return getValueFactory().createLiteral(label, dataType); + } + if (term instanceof BlankNode) { + // This is where it gets tricky to support round trips! + BlankNode blankNode = (BlankNode) term; + // FIXME: The uniqueReference might not be a valid BlankNode + // identifier.. + // does it have to be in RDF4J? + return getValueFactory().createBNode(blankNode.uniqueReference()); + } + throw new IllegalArgumentException("RDFTerm was not an IRI, Literal or BlankNode: " + term.getClass()); + } + + @Override + public RDF4JBlankNode createBlankNode() { + BNode bnode = getValueFactory().createBNode(); + return (RDF4JBlankNode) asRDFTerm(bnode); + } + + @Override + public RDF4JBlankNode createBlankNode(String name) { + BNode bnode = getValueFactory().createBNode(name); + return (RDF4JBlankNode) asRDFTerm(bnode); + } + + /** + * {@inheritDoc} + * <p> + * <strong>Note:</strong> Some operations on the {@link RDF4JDataset} + * requires the use of try-with-resources to close underlying + * {@link RepositoryConnection}s, including + * {@link RDF4JDataset#iterate()}, + * {@link RDF4JDataset#stream()} and {@link RDF4JDataset#getGraphNames()}. + * + */ + @Override + public RDF4JDataset createDataset() { + Sail sail = new MemoryStore(); + Repository repository = new SailRepository(sail); + return rdf4j.createRepositoryDatasetImpl(repository, true, false); + } + + @Override + public RDF4JGraph createGraph() { + return asRDFTermGraph(new LinkedHashModel()); + } + + @Override + public RDF4JIRI createIRI(String iri) throws IllegalArgumentException { + return (RDF4JIRI) asRDFTerm(getValueFactory().createIRI(iri)); + } + + @Override + public RDF4JLiteral createLiteral(String lexicalForm) + throws IllegalArgumentException { + org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm); + return (RDF4JLiteral) asRDFTerm(lit); + } + + @Override + public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, org.apache.commons.rdf.api.IRI dataType) + throws IllegalArgumentException { + org.eclipse.rdf4j.model.IRI iri = getValueFactory().createIRI(dataType.getIRIString()); + org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, iri); + return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit); + } + + @Override + public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, String languageTag) + throws IllegalArgumentException { + org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, languageTag); + return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit); + } + + @Override + public RDF4JTriple createTriple(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) + throws IllegalArgumentException { + final Statement statement = getValueFactory().createStatement( + (org.eclipse.rdf4j.model.Resource) asValue(subject), (org.eclipse.rdf4j.model.IRI) asValue(predicate), + asValue(object)); + return asTriple(statement); + } + + @Override + public Quad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, + RDFTerm object) throws IllegalArgumentException { + final Statement statement = getValueFactory().createStatement( + (org.eclipse.rdf4j.model.Resource) asValue(subject), (org.eclipse.rdf4j.model.IRI) asValue(predicate), + asValue(object), (org.eclipse.rdf4j.model.Resource) asValue(graphName)); + return asQuad(statement); + } + + public ValueFactory getValueFactory() { + return valueFactory; + } + + private EnumSet<Option> optionSet(Option... options) { + EnumSet<Option> opts = EnumSet.noneOf(Option.class); + opts.addAll(Arrays.asList(options)); + return opts; + } + + + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java index a83a9ab..b7ef9a2 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java @@ -33,10 +33,10 @@ import org.eclipse.rdf4j.repository.Repository; /** * Marker interface for RDF4J implementations of Graph. * - * @see RDF4JTermFactory#createGraph() - * @see RDF4JTermFactory#asRDFTermGraph(Model) - * @see RDF4JTermFactory#asRDFTermGraph(Repository, org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...) - * @see RDF4JTermFactory#asRDFTermGraphUnion(Repository, org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...) + * @see RDF4JFactory#createGraph() + * @see RDF4JFactory#asRDFTermGraph(Model) + * @see RDF4JFactory#asRDFTermGraph(Repository, org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...) + * @see RDF4JFactory#asRDFTermGraphUnion(Repository, org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...) * @see RDF4JDataset#getGraph() * @see RDF4JDataset#getGraph(BlankNodeOrIRI) */ @@ -64,7 +64,7 @@ public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> { * Note that the context mask itself cannot be <code>null</code>. * <p> * The returned set is an immutable copy; to specify a different mask, use - * {@link RDF4JTermFactory#asRDFTermGraph(Repository, Set, org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...)} + * {@link RDF4JFactory#asRDFTermGraph(Repository, Set, org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...)} * * @return The context mask as a set of {@link BlankNodeOrIRI} graph names, which * may contain the value <code>null</code>. http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java index 37efa0a..270567b 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java @@ -24,7 +24,7 @@ package org.apache.commons.rdf.rdf4j; * The underlying RDF4J {@link org.eclipse.rdf4j.model.IRI} * instance can be retrieved with {@link #asValue()}. * - * @see RDF4JTermFactory#createIRI(String) + * @see RDF4JFactory#createIRI(String) */ public interface RDF4JIRI extends RDF4JBlankNodeOrIRI, org.apache.commons.rdf.api.IRI { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java index 114d3f9..f6b0349 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java @@ -24,7 +24,7 @@ package org.apache.commons.rdf.rdf4j; * The underlying RDF4J {@link org.eclipse.rdf4j.model.Literal} instance can be * retrieved with {@link #asValue()}. * - * @see RDF4JTermFactory#createLiteral(String) + * @see RDF4JFactory#createLiteral(String) */ public interface RDF4JLiteral extends RDF4JTerm, org.apache.commons.rdf.api.Literal { } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java index 2d5b68f..d3fbcf0 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java @@ -22,7 +22,7 @@ import org.apache.commons.rdf.api.Quad; /** * Marker interface for RDF4J implementations of Quad. * - * @see RDF4JTermFactory#createQuad(org.apache.commons.rdf.api.BlankNodeOrIRI, org.apache.commons.rdf.api.BlankNodeOrIRI, org.apache.commons.rdf.api.IRI, org.apache.commons.rdf.api.RDFTerm) + * @see RDF4JFactory#createQuad(org.apache.commons.rdf.api.BlankNodeOrIRI, org.apache.commons.rdf.api.BlankNodeOrIRI, org.apache.commons.rdf.api.IRI, org.apache.commons.rdf.api.RDFTerm) */ public interface RDF4JQuad extends Quad, RDF4JTripleLike { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java deleted file mode 100644 index c503077..0000000 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java +++ /dev/null @@ -1,601 +0,0 @@ -/** - * 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.commons.rdf.rdf4j; - -import java.util.Arrays; -import java.util.EnumSet; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; - -// To avoid confusion, avoid importing -// classes that are in both -// commons.rdf and openrdf.model (e.g. IRI, Literal) -import org.apache.commons.rdf.api.BlankNode; -import org.apache.commons.rdf.api.BlankNodeOrIRI; -import org.apache.commons.rdf.api.Dataset; -import org.apache.commons.rdf.api.Graph; -import org.apache.commons.rdf.api.Quad; -import org.apache.commons.rdf.api.RDFTerm; -import org.apache.commons.rdf.api.RDFTermFactory; -import org.apache.commons.rdf.api.Triple; -import org.apache.commons.rdf.api.TripleLike; -import org.apache.commons.rdf.rdf4j.impl.InternalRDF4JFactory; -import org.eclipse.rdf4j.model.BNode; -import org.eclipse.rdf4j.model.Model; -import org.eclipse.rdf4j.model.Resource; -import org.eclipse.rdf4j.model.Statement; -import org.eclipse.rdf4j.model.Value; -import org.eclipse.rdf4j.model.ValueFactory; -import org.eclipse.rdf4j.model.impl.LinkedHashModel; -import org.eclipse.rdf4j.model.impl.SimpleValueFactory; -import org.eclipse.rdf4j.repository.Repository; -import org.eclipse.rdf4j.repository.RepositoryConnection; -import org.eclipse.rdf4j.repository.sail.SailRepository; -import org.eclipse.rdf4j.sail.Sail; -import org.eclipse.rdf4j.sail.memory.MemoryStore; - -/** - * RDF4J implementation of RDFTermFactory. - * <p> - * The {@link #RDF4JTermFactory()} constructor uses a {@link SimpleValueFactory} - * to create corresponding RDF4J {@link Value} instances. Alternatively, this - * factory can be constructed with a different {@link ValueFactory} using - * {@link #RDF4JTermFactory(ValueFactory)}. - * <p> - * {@link #asRDFTerm(Value)} can be used to convert any RDF4J {@link Value} to - * an RDFTerm. Note that adapted {@link BNode}s are considered equal if they are - * converted with the same {@link RDF4JTermFactory} instance and have the same - * {@link BNode#getID()}. - * <p> - * {@link #createGraph()} creates a new Graph backed by {@link LinkedHashModel}. - * To use other models, see {@link #asRDFTermGraph(Model)}. - * <p> - * To adapt a RDF4J {@link Repository} as a {@link Dataset} or {@link Graph}, - * use {@link #asRDFTermDataset(Repository, Option...)} - * or - * {@link #asRDFTermGraph(Repository, Option...)}. - * <p> - * {@link #asTriple(Statement)} can be used to convert a RDF4J {@link Statement} - * to a Commons RDF {@link Triple}, and equivalent {@link #asQuad(Statement)} to - * convert a {@link Quad}. - * <p> - * To convert any {@link Triple} or {@link Quad} to to RDF4J {@link Statement}, - * use {@link #asStatement(TripleLike)}. This recognises previously converted - * {@link RDF4JTriple}s and {@link RDF4JQuad}s without re-converting their - * {@link RDF4JTripleLike#asStatement()}. - * <p> - * Likewise, {@link #asValue(RDFTerm)} can be used to convert any Commons RDF - * {@link RDFTerm} to a corresponding RDF4J {@link Value}. This recognises - * previously converted {@link RDF4JTerm}s without re-converting their - * {@link RDF4JTerm#asValue()}. - * <p> - * For the purpose of {@link BlankNode} equivalence, this factory contains an - * internal {@link UUID} salt that is used by adapter methods like - * {@link #asQuad(Statement)}, {@link #asTriple(Statement)}, - * {@link #asRDFTerm(Value)} as well as {@link #createBlankNode(String)}. As - * RDF4J {@link BNode} instances from multiple repositories or models may have - * the same {@link BNode#getID()}, converting them with the above methods might - * cause accidental {@link BlankNode} equivalence. Note that the {@link Graph} - * and {@link Dataset} adapter methods like - * {@link #asRDFTermDataset(Repository, Option...)} - * and - * {@link #asRDFTermGraph(Repository, Option...)} - * therefore uses a unique {@link RDF4JTermFactory} internally. - * - */ -public final class RDF4JTermFactory implements RDFTermFactory { - - /** - * InternalRDF4JFactory is deliberately abstract - */ - private static InternalRDF4JFactory rdf4j = new InternalRDF4JFactory() { - }; - - public enum Option { - /** - * The Graph/Dataset should include any inferred statements - */ - includeInferred, - /** - * The graph/dataset should handle {@link Repository#initialize()} (if - * needed) and {@link Repository#shutDown()} on {@link Graph#close()} / - * {@link Dataset#close()}. - */ - handleInitAndShutdown - } - - private final UUID salt; - - private final ValueFactory valueFactory; - - /** - * Construct an {@link RDF4JTermFactory}. - * - */ - public RDF4JTermFactory() { - this(SimpleValueFactory.getInstance(), UUID.randomUUID()); - } - - /** - * Construct an {@link RDF4JTermFactory}. - * <p> - * This constructor is intended for use with the value factory from - * {@link Repository#getValueFactory()} when using - * Repository-based graphs and datasets. - * - * @param valueFactory - * The RDF4J {@link ValueFactory} to use - */ - public RDF4JTermFactory(ValueFactory valueFactory) { - this(valueFactory, UUID.randomUUID()); - } - - /** - * Construct an {@link RDF4JTermFactory}. - * <p> - * This constructor may be used if reproducible - * {@link BlankNode#uniqueReference()} in {@link BlankNode} is desirable. - * - * @param salt - * An {@link UUID} salt to be used by any created - * {@link BlankNode}s for the purpose of - * {@link BlankNode#uniqueReference()} - */ - public RDF4JTermFactory(UUID salt) { - this(SimpleValueFactory.getInstance(), salt); - } - /** - * Construct an {@link RDF4JTermFactory}. - * <p> - * This constructor may be used if reproducible - * {@link BlankNode#uniqueReference()} in {@link BlankNode} is desirable. - * - * @param valueFactory - * The RDF4J {@link ValueFactory} to use - * @param salt - * An {@link UUID} salt to be used by any created - * {@link BlankNode}s for the purpose of - * {@link BlankNode#uniqueReference()} - */ - public RDF4JTermFactory(ValueFactory valueFactory, UUID salt) { - this.valueFactory = valueFactory; - this.salt = salt; - } - - /** - * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Quad}. - * <p> - * For the purpose of {@link BlankNode} equivalence, this method will use an - * internal salt UUID that is unique per instance of - * {@link RDF4JTermFactory}. - * <p> - * <strong>NOTE:</strong> If combining RDF4J {@link Statement}s multiple - * repositories or models, then their {@link BNode}s may have the same - * {@link BNode#getID()}, which with this method would become equivalent - * according to {@link BlankNode#equals(Object)} and - * {@link BlankNode#uniqueReference()}, unless a separate - * {@link RDF4JTermFactory} instance is used per RDF4J repository/model. - * - * @param statement - * The statement to convert - * @return A {@link RDF4JQuad} that is equivalent to the statement - */ - public RDF4JQuad asQuad(final Statement statement) { - return rdf4j.createQuadImpl(statement, salt); - } - - /** - * - * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}. - * <p> - * The value will be of the same kind as the term, e.g. a - * {@link org.eclipse.rdf4j.model.BNode} is converted to a - * {@link org.apache.commons.rdf.api.BlankNode}, a - * {@link org.eclipse.rdf4j.model.IRI} is converted to a - * {@link org.apache.commons.rdf.api.IRI} and a - * {@link org.eclipse.rdf4j.model.Literal}. is converted to a - * {@link org.apache.commons.rdf.api.Literal} - * <p> - * For the purpose of {@link BlankNode} equivalence, this method will use an - * internal salt UUID that is unique per instance of - * {@link RDF4JTermFactory}. - * <p> - * <strong>NOTE:</strong> If combining RDF4J values from multiple - * repositories or models, then their {@link BNode}s may have the same - * {@link BNode#getID()}, which with this method would become equivalent - * according to {@link BlankNode#equals(Object)} and - * {@link BlankNode#uniqueReference()}, unless a separate - * {@link RDF4JTermFactory} instance is used per RDF4J repository/model. - * - * @param value - * The RDF4J {@link Value} to convert. - * @return A {@link RDFTerm} that corresponds to the RDF4J value - * @throws IllegalArgumentException - * if the value is not a BNode, Literal or IRI - */ - public RDF4JTerm asRDFTerm(Value value) { - return asRDFTerm(value, salt); - } - - /** - * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}. - * <p> - * The value will be of the same kind as the term, e.g. a - * {@link org.eclipse.rdf4j.model.BNode} is converted to a - * {@link org.apache.commons.rdf.api.BlankNode}, a - * {@link org.eclipse.rdf4j.model.IRI} is converted to a - * {@link org.apache.commons.rdf.api.IRI} and a - * {@link org.eclipse.rdf4j.model.Literal}. is converted to a - * {@link org.apache.commons.rdf.api.Literal} - * - * @param value - * The RDF4J {@link Value} to convert. - * @param salt - * A {@link UUID} salt to use for uniquely mapping any - * {@link BNode}s. The salt should typically be the same for - * multiple statements in the same {@link Repository} or - * {@link Model} to ensure {@link BlankNode#equals(Object)} and - * {@link BlankNode#uniqueReference()} works as intended. - * @return A {@link RDFTerm} that corresponds to the RDF4J value - * @throws IllegalArgumentException - * if the value is not a BNode, Literal or IRI - */ - public static RDF4JTerm asRDFTerm(final Value value, UUID salt) { - if (value instanceof BNode) { - return rdf4j.createBlankNodeImpl((BNode) value, salt); - } - if (value instanceof org.eclipse.rdf4j.model.Literal) { - return rdf4j.createLiteralImpl((org.eclipse.rdf4j.model.Literal) value); - } - if (value instanceof org.eclipse.rdf4j.model.IRI) { - return rdf4j.createIRIImpl((org.eclipse.rdf4j.model.IRI) value); - } - throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass()); - } - - /** - * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Dataset}. - * <p> - * Changes to the dataset are reflected in the repository, and vice versa. - * <p> - * <strong>Note:</strong> Some operations on the {@link RDF4JDataset} - * requires the use of try-with-resources to close underlying - * {@link RepositoryConnection}s, including - * {@link RDF4JDataset#iterate()}, - * {@link RDF4JDataset#stream()} and {@link RDF4JDataset#getGraphNames()}. - * - * @param repository - * RDF4J {@link Repository} to connect to. - * @param options - * Zero or more {@link Option} - * @return A {@link Dataset} backed by the RDF4J repository. - */ - public RDF4JDataset asRDFTermDataset(Repository repository, Option... options) { - EnumSet<Option> opts = optionSet(options); - return rdf4j.createRepositoryDatasetImpl(repository, - opts.contains(Option.handleInitAndShutdown), - opts.contains(Option.includeInferred)); - } - - /** - * Adapt an RDF4J {@link Model} as a Commons RDF {@link Graph}. - * <p> - * Changes to the graph are reflected in the model, and vice versa. - * - * @param model - * RDF4J {@link Model} to adapt. - * @return Adapted {@link Graph}. - */ - public RDF4JGraph asRDFTermGraph(Model model) { - return rdf4j.createModelGraphImpl(model, this); - } - - /** - * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}. - * <p> - * The graph will only include triples in the default graph (equivalent to - * context <code>new Resource[0]{null})</code> in RDF4J). - * <p> - * Changes to the graph are reflected in the repository, and vice versa. - * <p> - * <strong>Note:</strong> Some operations on the {@link RDF4JGraph} - * requires the use of try-with-resources to close underlying - * {@link RepositoryConnection}s, including - * {@link RDF4JGraph#iterate()} and - * {@link RDF4JGraph#stream()}. - * - * @param repository - * RDF4J {@link Repository} to connect to. - * @param options - * Zero or more {@link Option} - * @return A {@link Graph} backed by the RDF4J repository. - */ - public RDF4JGraph asRDFTermGraph(Repository repository, Option... options) { - EnumSet<Option> opts = optionSet(options); - return rdf4j.createRepositoryGraphImpl(repository, - opts.contains(Option.handleInitAndShutdown), - opts.contains(Option.includeInferred), - new Resource[]{null}); // default graph - } - - /** - * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}. - * <p> - * The graph will include triples in any contexts (e.g. the union graph). - * <p> - * Changes to the graph are reflected in the repository, and vice versa. - * - * @param repository - * RDF4J {@link Repository} to connect to. - * @param options - * Zero or more {@link Option} - * @return A union {@link Graph} backed by the RDF4J repository. - */ - public RDF4JGraph asRDFTermGraphUnion(Repository repository, Option... options) { - EnumSet<Option> opts = optionSet(options); - return rdf4j.createRepositoryGraphImpl(repository, - opts.contains(Option.handleInitAndShutdown), - opts.contains(Option.includeInferred), - new Resource[]{}); // union graph - - } - - /** - * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}. - * <p> - * The graph will include triples in the specified contexts. - * <p> - * Changes to the graph are reflected in the repository, and vice versa. - * Triples added/removed to the graph are reflected in all the specified - * contexts. - * <p> - * <strong>Note:</strong> Some operations on the {@link RDF4JGraph} - * requires the use of try-with-resources to close underlying - * {@link RepositoryConnection}s, including - * {@link RDF4JGraph#iterate()} and - * {@link RDF4JGraph#stream()}. - * - * @param repository - * RDF4J {@link Repository} to connect to. - * @param contexts - * A {@link Set} of {@link BlankNodeOrIRI} specifying the graph - * names to use as a context. The set may include the value - * <code>null</code> to indicate the default graph. The empty set - * indicates any context, e.g. the <em>union graph</em>. - * @param option - * Zero or more {@link Option}s - * @return A {@link Graph} backed by the RDF4J repository. - */ - public RDF4JGraph asRDFTermGraph(Repository repository, Set<? extends BlankNodeOrIRI> contexts, - Option... option) { - EnumSet<Option> opts = optionSet(option); - /** NOTE: asValue() deliberately CAN handle <code>null</code> */ - Resource[] resources = contexts.stream().map(g -> (Resource) asValue(g)).toArray(Resource[]::new); - return rdf4j.createRepositoryGraphImpl(Objects.requireNonNull(repository), - opts.contains(Option.handleInitAndShutdown), - opts.contains(Option.includeInferred), - resources); - } - - /** - * Adapt a Commons RDF {@link Triple} or {@link Quad} as a RDF4J - * {@link Statement}. - * <p> - * If the <code>tripleLike</code> argument is an {@link RDF4JTriple} or a - * {@link RDF4JQuad}, then its {@link RDF4JTripleLike#asStatement()} is - * returned as-is. Note that this means that a {@link RDF4JTriple} would - * preserve its {@link Statement#getContext()}, and that any - * {@link BlankNode}s would be deemed equivalent in RDF4J if they have the - * same {@link BNode#getID()}. - * - * @param tripleLike - * A {@link Triple} or {@link Quad} to adapt - * @return A corresponding {@link Statement} - */ - public Statement asStatement(TripleLike tripleLike) { - if (tripleLike instanceof RDF4JTripleLike) { - // Return original statement - this covers both RDF4JQuad and - // RDF4JTriple - return ((RDF4JTripleLike) tripleLike).asStatement(); - } - - org.eclipse.rdf4j.model.Resource subject = (org.eclipse.rdf4j.model.Resource) asValue(tripleLike.getSubject()); - org.eclipse.rdf4j.model.IRI predicate = (org.eclipse.rdf4j.model.IRI) asValue(tripleLike.getPredicate()); - Value object = asValue(tripleLike.getObject()); - - org.eclipse.rdf4j.model.Resource context = null; - if (tripleLike instanceof Quad) { - Quad quad = (Quad) tripleLike; - context = (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null)); - } - - return getValueFactory().createStatement(subject, predicate, object, context); - } - - /** - * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}. - * <p> - * For the purpose of {@link BlankNode} equivalence, this method will use an - * internal salt UUID that is unique per instance of - * {@link RDF4JTermFactory}. - * <p> - * <strong>NOTE:</strong> If combining RDF4J statements from multiple - * repositories or models, then their {@link BNode}s may have the same - * {@link BNode#getID()}, which with this method would become equivalent - * according to {@link BlankNode#equals(Object)} and - * {@link BlankNode#uniqueReference()}, unless a separate - * {@link RDF4JTermFactory} instance is used per RDF4J repository/model. - * - * @param statement - * The RDF4J {@link Statement} to adapt. - * @return A {@link RDF4JTriple} that is equivalent to the statement - */ - public RDF4JTriple asTriple(final Statement statement) { - return rdf4j.createTripleImpl(statement, salt); - } - - /** - * Adapt a Commons RDF {@link RDFTerm} as a RDF4J {@link Value}. - * <p> - * The value will be of the same kind as the term, e.g. a - * {@link org.apache.commons.rdf.api.BlankNode} is converted to a - * {@link org.eclipse.rdf4j.model.BNode}, a - * {@link org.apache.commons.rdf.api.IRI} is converted to a - * {@link org.eclipse.rdf4j.model.IRI} and a - * {@link org.apache.commons.rdf.api.Literal} is converted to a - * {@link org.eclipse.rdf4j.model.Literal}. - * <p> - * If the provided {@link RDFTerm} is <code>null</code>, then the returned - * value is <code>null</code>. - * <p> - * If the provided term is an instance of {@link RDF4JTerm}, then the - * {@link RDF4JTerm#asValue()} is returned without any conversion. Note that - * this could mean that a {@link Value} from a different kind of - * {@link ValueFactory} could be returned. - * - * @param term - * RDFTerm to adapt to RDF4J Value - * @return Adapted RDF4J {@link Value} - */ - public Value asValue(RDFTerm term) { - if (term == null) { - return null; - } - if (term instanceof RDF4JTerm) { - // One of our own - avoid converting again. - // (This is crucial to avoid double-escaping in BlankNode) - return ((RDF4JTerm) term).asValue(); - } - if (term instanceof org.apache.commons.rdf.api.IRI) { - org.apache.commons.rdf.api.IRI iri = (org.apache.commons.rdf.api.IRI) term; - return getValueFactory().createIRI(iri.getIRIString()); - } - if (term instanceof org.apache.commons.rdf.api.Literal) { - org.apache.commons.rdf.api.Literal literal = (org.apache.commons.rdf.api.Literal) term; - String label = literal.getLexicalForm(); - if (literal.getLanguageTag().isPresent()) { - String lang = literal.getLanguageTag().get(); - return getValueFactory().createLiteral(label, lang); - } - org.eclipse.rdf4j.model.IRI dataType = (org.eclipse.rdf4j.model.IRI) asValue(literal.getDatatype()); - return getValueFactory().createLiteral(label, dataType); - } - if (term instanceof BlankNode) { - // This is where it gets tricky to support round trips! - BlankNode blankNode = (BlankNode) term; - // FIXME: The uniqueReference might not be a valid BlankNode - // identifier.. - // does it have to be in RDF4J? - return getValueFactory().createBNode(blankNode.uniqueReference()); - } - throw new IllegalArgumentException("RDFTerm was not an IRI, Literal or BlankNode: " + term.getClass()); - } - - @Override - public RDF4JBlankNode createBlankNode() { - BNode bnode = getValueFactory().createBNode(); - return (RDF4JBlankNode) asRDFTerm(bnode); - } - - @Override - public RDF4JBlankNode createBlankNode(String name) { - BNode bnode = getValueFactory().createBNode(name); - return (RDF4JBlankNode) asRDFTerm(bnode); - } - - /** - * {@inheritDoc} - * <p> - * <strong>Note:</strong> Some operations on the {@link RDF4JDataset} - * requires the use of try-with-resources to close underlying - * {@link RepositoryConnection}s, including - * {@link RDF4JDataset#iterate()}, - * {@link RDF4JDataset#stream()} and {@link RDF4JDataset#getGraphNames()}. - * - */ - @Override - public RDF4JDataset createDataset() { - Sail sail = new MemoryStore(); - Repository repository = new SailRepository(sail); - return rdf4j.createRepositoryDatasetImpl(repository, true, false); - } - - @Override - public RDF4JGraph createGraph() { - return asRDFTermGraph(new LinkedHashModel()); - } - - @Override - public RDF4JIRI createIRI(String iri) throws IllegalArgumentException { - return (RDF4JIRI) asRDFTerm(getValueFactory().createIRI(iri)); - } - - @Override - public RDF4JLiteral createLiteral(String lexicalForm) - throws IllegalArgumentException { - org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm); - return (RDF4JLiteral) asRDFTerm(lit); - } - - @Override - public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, org.apache.commons.rdf.api.IRI dataType) - throws IllegalArgumentException { - org.eclipse.rdf4j.model.IRI iri = getValueFactory().createIRI(dataType.getIRIString()); - org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, iri); - return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit); - } - - @Override - public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, String languageTag) - throws IllegalArgumentException { - org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, languageTag); - return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit); - } - - @Override - public RDF4JTriple createTriple(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) - throws IllegalArgumentException { - final Statement statement = getValueFactory().createStatement( - (org.eclipse.rdf4j.model.Resource) asValue(subject), (org.eclipse.rdf4j.model.IRI) asValue(predicate), - asValue(object)); - return asTriple(statement); - } - - @Override - public Quad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, - RDFTerm object) throws IllegalArgumentException { - final Statement statement = getValueFactory().createStatement( - (org.eclipse.rdf4j.model.Resource) asValue(subject), (org.eclipse.rdf4j.model.IRI) asValue(predicate), - asValue(object), (org.eclipse.rdf4j.model.Resource) asValue(graphName)); - return asQuad(statement); - } - - public ValueFactory getValueFactory() { - return valueFactory; - } - - private EnumSet<Option> optionSet(Option... options) { - EnumSet<Option> opts = EnumSet.noneOf(Option.class); - opts.addAll(Arrays.asList(options)); - return opts; - } - - - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java index 7308f8f..e475a08 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java @@ -22,7 +22,7 @@ import org.apache.commons.rdf.api.Triple; /** * Marker interface for RDF4J implementations of Triple. * - * @see RDF4JTermFactory#createTriple(org.apache.commons.rdf.api.BlankNodeOrIRI, org.apache.commons.rdf.api.IRI, org.apache.commons.rdf.api.RDFTerm) + * @see RDF4JFactory#createTriple(org.apache.commons.rdf.api.BlankNodeOrIRI, org.apache.commons.rdf.api.IRI, org.apache.commons.rdf.api.RDFTerm) */ public interface RDF4JTriple extends Triple, RDF4JTripleLike { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java index 17aecf9..f9a1e74 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java @@ -34,7 +34,7 @@ import org.apache.commons.rdf.experimental.RDFParser; import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI; import org.apache.commons.rdf.rdf4j.RDF4JDataset; import org.apache.commons.rdf.rdf4j.RDF4JGraph; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; import org.apache.commons.rdf.simple.experimental.AbstractRDFParser; import org.eclipse.rdf4j.model.Model; import org.eclipse.rdf4j.model.Resource; @@ -101,20 +101,20 @@ public class RDF4JParser extends AbstractRDFParser<RDF4JParser> implements RDFPa } } - private RDF4JTermFactory rdf4jTermFactory; + private RDF4JFactory rdf4jTermFactory; private ParserConfig parserConfig = new ParserConfig(); @Override - protected RDF4JTermFactory createRDFTermFactory() { - return new RDF4JTermFactory(); + protected RDF4JFactory createRDFTermFactory() { + return new RDF4JFactory(); } @Override protected RDF4JParser prepareForParsing() throws IOException, IllegalStateException { RDF4JParser c = prepareForParsing(); - // Ensure we have an RDF4JTermFactory for conversion. + // Ensure we have an RDF4JFactory for conversion. // We'll make a new one if user has provided a non-RDF4J factory - c.rdf4jTermFactory = (RDF4JTermFactory) getRdfTermFactory().filter(RDF4JTermFactory.class::isInstance) + c.rdf4jTermFactory = (RDF4JFactory) getRdfTermFactory().filter(RDF4JFactory.class::isInstance) .orElseGet(c::createRDFTermFactory); return c; } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java index 00388b9..1948a32 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java @@ -22,7 +22,7 @@ import java.util.UUID; import org.apache.commons.rdf.api.TripleLike; import org.apache.commons.rdf.rdf4j.RDF4JGraphLike; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; import org.eclipse.rdf4j.model.Model; import org.eclipse.rdf4j.model.Statement; import org.eclipse.rdf4j.repository.Repository; @@ -34,7 +34,7 @@ abstract class AbstractRepositoryGraphLike<T extends TripleLike> protected final Repository repository; protected final boolean includeInferred; protected final boolean handleInitAndShutdown; - protected final RDF4JTermFactory rdf4jTermFactory; + protected final RDF4JFactory rdf4jTermFactory; protected final UUID salt; AbstractRepositoryGraphLike(Repository repository, UUID salt, boolean handleInitAndShutdown, boolean includeInferred) { @@ -45,7 +45,7 @@ abstract class AbstractRepositoryGraphLike<T extends TripleLike> if (handleInitAndShutdown && !repository.isInitialized()) { repository.initialize(); } - rdf4jTermFactory = new RDF4JTermFactory(repository.getValueFactory(), salt); + rdf4jTermFactory = new RDF4JFactory(repository.getValueFactory(), salt); } @Override http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/InternalRDF4JFactory.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/InternalRDF4JFactory.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/InternalRDF4JFactory.java index fa4344f..7744e01 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/InternalRDF4JFactory.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/InternalRDF4JFactory.java @@ -27,7 +27,7 @@ import org.apache.commons.rdf.rdf4j.RDF4JIRI; import org.apache.commons.rdf.rdf4j.RDF4JLiteral; import org.apache.commons.rdf.rdf4j.RDF4JQuad; import org.apache.commons.rdf.rdf4j.RDF4JTerm; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; import org.apache.commons.rdf.rdf4j.RDF4JTriple; import org.eclipse.rdf4j.model.BNode; import org.eclipse.rdf4j.model.IRI; @@ -42,17 +42,17 @@ import org.eclipse.rdf4j.repository.Repository; * <p> * <strong>Internal class:</strong> This "abstract" class is intended for * internal use by Commons RDF and may change in any minor update. Use instead - * {@link RDF4JTermFactory} methods like - * {@link RDF4JTermFactory#createBlankNode()}, - * {@link RDF4JTermFactory#asRDFTerm(org.eclipse.rdf4j.model.Value)} and - * {@link RDF4JTermFactory#asRDFTermGraph(Repository, org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...)} + * {@link RDF4JFactory} methods like + * {@link RDF4JFactory#createBlankNode()}, + * {@link RDF4JFactory#asRDFTerm(org.eclipse.rdf4j.model.Value)} and + * {@link RDF4JFactory#asRDFTermGraph(Repository, org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...)} * <p> * This class exists as a <code>public</code> bridge between the packages * {@link org.apache.commons.rdf.rdf4j} and * {@link org.apache.commons.rdf.rdf4j.impl} by exposing the package-public * constructors. * - * @see RDF4JTermFactory + * @see RDF4JFactory */ public abstract class InternalRDF4JFactory { @@ -103,7 +103,7 @@ public abstract class InternalRDF4JFactory { * factory to use for adapting graph triples * @return Adapted {@link RDF4JGraph} */ - public RDF4JGraph createModelGraphImpl(Model model, RDF4JTermFactory rdf4jTermFactory) { + public RDF4JGraph createModelGraphImpl(Model model, RDF4JFactory rdf4jTermFactory) { return new ModelGraphImpl(model, rdf4jTermFactory); } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java index a2aaf4b..0d2695e 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java @@ -31,7 +31,7 @@ import org.apache.commons.rdf.api.Triple; import org.apache.commons.rdf.rdf4j.ClosableIterable; import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI; import org.apache.commons.rdf.rdf4j.RDF4JGraph; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; import org.apache.commons.rdf.rdf4j.RDF4JTriple; import org.eclipse.rdf4j.model.Model; import org.eclipse.rdf4j.model.Resource; @@ -40,9 +40,9 @@ import org.eclipse.rdf4j.repository.Repository; final class ModelGraphImpl implements RDF4JGraph { private Model model; - private RDF4JTermFactory rdf4jTermFactory; + private RDF4JFactory rdf4jTermFactory; - ModelGraphImpl(Model model, RDF4JTermFactory rdf4jTermFactory) { + ModelGraphImpl(Model model, RDF4JFactory rdf4jTermFactory) { this.model = model; this.rdf4jTermFactory = rdf4jTermFactory; } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java index 18a0c84..cf60883 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java @@ -26,7 +26,7 @@ import org.apache.commons.rdf.api.Quad; import org.apache.commons.rdf.api.RDFTerm; import org.apache.commons.rdf.api.Triple; import org.apache.commons.rdf.rdf4j.RDF4JQuad; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; import org.eclipse.rdf4j.model.Statement; final class QuadImpl implements Quad, RDF4JQuad { @@ -65,23 +65,23 @@ final class QuadImpl implements Quad, RDF4JQuad { if (statement.getContext() == null) { return Optional.empty(); } - BlankNodeOrIRI g = (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getContext(), salt); + BlankNodeOrIRI g = (BlankNodeOrIRI) RDF4JFactory.asRDFTerm(statement.getContext(), salt); return Optional.of(g); } @Override public RDFTerm getObject() { - return RDF4JTermFactory.asRDFTerm(statement.getObject(), salt); + return RDF4JFactory.asRDFTerm(statement.getObject(), salt); } @Override public org.apache.commons.rdf.api.IRI getPredicate() { - return (org.apache.commons.rdf.api.IRI) RDF4JTermFactory.asRDFTerm(statement.getPredicate(), null); + return (org.apache.commons.rdf.api.IRI) RDF4JFactory.asRDFTerm(statement.getPredicate(), null); } @Override public BlankNodeOrIRI getSubject() { - return (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getSubject(), salt); + return (BlankNodeOrIRI) RDF4JFactory.asRDFTerm(statement.getSubject(), salt); } @Override http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java index e1dcb60..23041c4 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java @@ -23,7 +23,7 @@ import java.util.UUID; import org.apache.commons.rdf.api.BlankNodeOrIRI; import org.apache.commons.rdf.api.RDFTerm; import org.apache.commons.rdf.api.Triple; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; import org.apache.commons.rdf.rdf4j.RDF4JTriple; import org.eclipse.rdf4j.model.Statement; @@ -54,17 +54,17 @@ final class TripleImpl implements Triple, RDF4JTriple { @Override public RDFTerm getObject() { - return RDF4JTermFactory.asRDFTerm(statement.getObject(), salt); + return RDF4JFactory.asRDFTerm(statement.getObject(), salt); } @Override public org.apache.commons.rdf.api.IRI getPredicate() { - return (org.apache.commons.rdf.api.IRI) RDF4JTermFactory.asRDFTerm(statement.getPredicate(), null); + return (org.apache.commons.rdf.api.IRI) RDF4JFactory.asRDFTerm(statement.getPredicate(), null); } @Override public BlankNodeOrIRI getSubject() { - return (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getSubject(), salt); + return (BlankNodeOrIRI) RDF4JFactory.asRDFTerm(statement.getSubject(), salt); } @Override http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/package-info.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/package-info.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/package-info.java index a3928f3..f17a499 100644 --- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/package-info.java +++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/package-info.java @@ -18,9 +18,9 @@ /** * Commons RDF integration with <a href="http://rdf4j.org/">RDF4J</a>. * <p> - * Use the {@link org.apache.commons.rdf.rdf4j.RDF4JTermFactory} to convert + * Use the {@link org.apache.commons.rdf.rdf4j.RDF4JFactory} to convert * between Commons RDF and RDF4J types, for instance - * {@link org.apache.commons.rdf.rdf4j.RDF4JTermFactory#asQuad(org.eclipse.rdf4j.model.Statement)} + * {@link org.apache.commons.rdf.rdf4j.RDF4JFactory#asQuad(org.eclipse.rdf4j.model.Statement)} * converts a RDF4J {@link org.eclipse.rdf4j.model.Statement} to a * {@link org.apache.commons.rdf.api.Quad}. Converted RDF terms implement the * {@link org.apache.commons.rdf.rdf4j.RDF4JTerm} interface, and converted @@ -32,9 +32,9 @@ * {@link org.eclipse.rdf4j.repository.Repository} instances can be adapted to * Commons RDF {@link org.apache.commons.rdf.api.Graph} and * {@link org.apache.commons.rdf.api.Dataset}, e.g. using - * {@link org.apache.commons.rdf.rdf4j.RDF4JTermFactory#asRDFTermGraph(org.eclipse.rdf4j.model.Model)} + * {@link org.apache.commons.rdf.rdf4j.RDF4JFactory#asRDFTermGraph(org.eclipse.rdf4j.model.Model)} * or - * {@link org.apache.commons.rdf.rdf4j.RDF4JTermFactory#asRDFTermDataset(org.eclipse.rdf4j.repository.Repository, org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...)} + * {@link org.apache.commons.rdf.rdf4j.RDF4JFactory#asRDFTermDataset(org.eclipse.rdf4j.repository.Repository, org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...)} * The returned adapted graph/dataset is directly mapped, so changes are * propagated both ways. For convenience, the marker interface * {@link org.apache.commons.rdf.rdf4j.RDF4JGraph} and http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/BlankNodeTest.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/BlankNodeTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/BlankNodeTest.java index 09ae666..1da3c11 100644 --- a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/BlankNodeTest.java +++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/BlankNodeTest.java @@ -22,7 +22,7 @@ import org.apache.commons.rdf.api.BlankNode; public class BlankNodeTest extends AbstractBlankNodeTest { - RDF4JTermFactory factory = new RDF4JTermFactory(); + RDF4JFactory factory = new RDF4JFactory(); @Override protected BlankNode getBlankNode() { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/GraphTest.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/GraphTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/GraphTest.java index 09ad421..07b60c2 100644 --- a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/GraphTest.java +++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/GraphTest.java @@ -24,7 +24,7 @@ public class GraphTest extends AbstractGraphTest{ @Override public RDFTermFactory createFactory() { - return new RDF4JTermFactory(); + return new RDF4JFactory(); } } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/MemoryGraphTest.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/MemoryGraphTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/MemoryGraphTest.java index 3d99968..c275e67 100644 --- a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/MemoryGraphTest.java +++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/MemoryGraphTest.java @@ -35,7 +35,7 @@ public class MemoryGraphTest extends AbstractGraphTest { public static final class MemoryStoreFactory implements RDFTermFactory { - RDF4JTermFactory rdf4jFactory = new RDF4JTermFactory(new MemValueFactory()); + RDF4JFactory rdf4jFactory = new RDF4JFactory(new MemValueFactory()); public RDF4JBlankNode createBlankNode() { return rdf4jFactory.createBlankNode(); http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/NativeStoreGraphTest.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/NativeStoreGraphTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/NativeStoreGraphTest.java index 4d47e0c..77ee128 100644 --- a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/NativeStoreGraphTest.java +++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/NativeStoreGraphTest.java @@ -51,7 +51,7 @@ public class NativeStoreGraphTest extends AbstractGraphTest { public final class NativeStoreFactory implements RDFTermFactory { - RDF4JTermFactory rdf4jFactory = new RDF4JTermFactory(getRepository().getValueFactory()); + RDF4JFactory rdf4jFactory = new RDF4JFactory(getRepository().getValueFactory()); @Override public RDF4JGraph createGraph() { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/Rdf4JRDFTermFactoryTest.java ---------------------------------------------------------------------- diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/Rdf4JRDFTermFactoryTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/Rdf4JRDFTermFactoryTest.java index bc06c62..9dbbf4b 100644 --- a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/Rdf4JRDFTermFactoryTest.java +++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/Rdf4JRDFTermFactoryTest.java @@ -25,7 +25,7 @@ public class Rdf4JRDFTermFactoryTest extends AbstractRDFTermFactoryTest { @Override public RDFTermFactory createFactory() { - return new RDF4JTermFactory(); + return new RDF4JFactory(); } @Override http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/d043b075/src/site/markdown/implementations.md ---------------------------------------------------------------------- diff --git a/src/site/markdown/implementations.md b/src/site/markdown/implementations.md index 30235e1..0e4ab9b 100644 --- a/src/site/markdown/implementations.md +++ b/src/site/markdown/implementations.md @@ -131,20 +131,20 @@ The generalized triples/quads can be accessed as [org.apache.jena.graph.Triple]( ```java import org.apache.commons.rdf.api.Graph; import org.apache.commons.rdf.api.RDFTermFactory; -import org.apache.commons.rdf.rdf4j.RDF4JTermFactory; +import org.apache.commons.rdf.rdf4j.RDF4JFactory; -RDFTermFactory rdfTermFactory = new RDF4JTermFactory(); +RDFTermFactory rdfTermFactory = new RDF4JFactory(); Graph graph = rdfTermFactory.createGraph(); ``` -Objects created with [RDF4JTermFactory](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.html) implement interfaces like [RDF4JTerm](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTerm.html) and [RDF4JGraph](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraph.html) which give access to the underlying Jena objects through methods like [asValue()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTerm.html#asValue--) and [asRepository()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.html#asRepository--). +Objects created with [RDF4JFactory](apidocs/org/apache/commons/rdf/rdf4j/RDF4JFactory.html) implement interfaces like [RDF4JTerm](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTerm.html) and [RDF4JGraph](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraph.html) which give access to the underlying Jena objects through methods like [asValue()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTerm.html#asValue--) and [asRepository()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.html#asRepository--). -`RDF4JTermFactory` includes additional methods for converting from/to RDF4J and Commons RDF, like [asTriple(Statement)](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.html#asTriple-org.eclipse.rdf4j.model.Statement-) and -[asRDFTerm(Value)](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.html#asRDFTerm-org.eclipse.rdf4j.model.Value-). +`RDF4JFactory` includes additional methods for converting from/to RDF4J and Commons RDF, like [asTriple(Statement)](apidocs/org/apache/commons/rdf/rdf4j/RDF4JFactory.html#asTriple-org.eclipse.rdf4j.model.Statement-) and +[asRDFTerm(Value)](apidocs/org/apache/commons/rdf/rdf4j/RDF4JFactory.html#asRDFTerm-org.eclipse.rdf4j.model.Value-). #### Closing RDF4J resources -When using `RDF4JTermFactory` with an RDF4J `Repository`, e.g. from [asRDFTermGraph(Repository)](apidocs/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.html#asRDFTermGraph-org.eclipse.rdf4j.repository.Repository-org.apache.commons.rdf.rdf4j.RDF4JTermFactory.Option...-), care must be taken to close underlying resources when using the methods [stream()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraph.html#stream--) and [iterate()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraph.html#iterate--) for both `Graph`s and `Dataset`s. +When using `RDF4JFactory` with an RDF4J `Repository`, e.g. from [asRDFTermGraph(Repository)](apidocs/org/apache/commons/rdf/rdf4j/RDF4JFactory.html#asRDFTermGraph-org.eclipse.rdf4j.repository.Repository-org.apache.commons.rdf.rdf4j.RDF4JFactory.Option...-), care must be taken to close underlying resources when using the methods [stream()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraph.html#stream--) and [iterate()](apidocs/org/apache/commons/rdf/rdf4j/RDF4JGraph.html#iterate--) for both `Graph`s and `Dataset`s. This can generally achieved using a [try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) block, e.g.: