Class RDF4J

java.lang.Object
org.apache.commons.rdfrdf4j.RDF4J
All Implemented Interfaces:
org.apache.commons.rdf.api.RDF

public final class RDF4J extends Object implements org.apache.commons.rdf.api.RDF
RDF4J implementation of RDF.

The RDF4J() constructor uses a SimpleValueFactory to create corresponding RDF4J Value instances. Alternatively, this factory can be constructed with a different ValueFactory using RDF4J(ValueFactory).

asRDFTerm(Value) can be used to convert any RDF4J Value to an RDFTerm. Note that adapted BNodes are considered equal if they are converted with the same RDF4J instance and have the same BNode.getID().

createGraph() creates a new Graph backed by LinkedHashModel. To use other models, see asGraph(Model).

To adapt a RDF4J Repository as a Dataset or Graph, use asDataset(Repository, Option...) or asGraph(Repository, Option...).

asTriple(Statement) can be used to convert a RDF4J Statement to a Commons RDF Triple, and equivalent asQuad(Statement) to convert a Quad.

To convert any Triple or Quad to RDF4J Statement, use asStatement(TripleLike). This recognizes previously converted RDF4JTriples and RDF4JQuads without re-converting their RDF4JTripleLike.asStatement().

Likewise, asValue(RDFTerm) can be used to convert any Commons RDF RDFTerm to a corresponding RDF4J Value. This recognizes previously converted RDF4JTerms without re-converting their RDF4JTerm.asValue().

For the purpose of BlankNode equivalence, this factory contains an internal UUID salt that is used by adapter methods like asQuad(Statement), asTriple(Statement), asRDFTerm(Value) as well as createBlankNode(String). As RDF4J BNode instances from multiple repositories or models may have the same BNode.getID(), converting them with the above methods might cause accidental BlankNode equivalence. Note that the Graph and Dataset adapter methods like asDataset(Repository, Option...) and asGraph(Repository, Option...) therefore uses a unique RDF4J internally.

See Also:
  • RDF
  • Constructor Details

    • RDF4J

      public RDF4J()
      Constructs an RDF4J.
    • RDF4J

      public RDF4J(UUID salt)
      Constructs an RDF4J.

      This constructor may be used if reproducible BlankNode.uniqueReference() in BlankNode is desirable.

      Parameters:
      salt - An UUID salt to be used by any created BlankNodes for the purpose of BlankNode.uniqueReference()
    • RDF4J

      public RDF4J(org.eclipse.rdf4j.model.ValueFactory valueFactory)
      Constructs an RDF4J.

      This constructor is intended for use with the value factory from Repository.getValueFactory() when using Repository-based graphs and datasets.

      Parameters:
      valueFactory - The RDF4J ValueFactory to use
    • RDF4J

      public RDF4J(org.eclipse.rdf4j.model.ValueFactory valueFactory, UUID salt)
      Constructs an RDF4J.

      This constructor may be used if reproducible BlankNode.uniqueReference() in BlankNode is desirable.

      Parameters:
      valueFactory - The RDF4J ValueFactory to use
      salt - An UUID salt to be used by any created BlankNodes for the purpose of BlankNode.uniqueReference()
  • Method Details

    • asRDFTerm

      public static RDF4JTerm asRDFTerm(org.eclipse.rdf4j.model.Value value, UUID salt)
      Adapt a RDF4J Value as a Commons RDF RDFTerm.

      The value will be of the same kind as the term, e.g. a BNode is converted to a BlankNode, a IRI is converted to a IRI and a Literal. is converted to a Literal

      Parameters:
      value - The RDF4J Value to convert.
      salt - A UUID salt to use for uniquely mapping any BNodes. The salt should typically be the same for multiple statements in the same Repository or Model to ensure BlankNode.equals(Object) and BlankNode.uniqueReference() works as intended.
      Returns:
      A RDFTerm that corresponds to the RDF4J value
      Throws:
      IllegalArgumentException - if the value is not a BNode, Literal or IRI
    • asDataset

      public RDF4JDataset asDataset(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options)
      Adapt an RDF4J Repository as a Commons RDF Dataset.

      Changes to the dataset are reflected in the repository, and vice versa.

      Note: Some operations on the RDF4JDataset requires the use of try-with-resources to close underlying RepositoryConnections, including RDF4JDataset.iterate(), RDF4JDataset.stream() and RDF4JDataset.getGraphNames().

      Parameters:
      repository - RDF4J Repository to connect to.
      options - Zero or more RDF4J.Option
      Returns:
      A Dataset backed by the RDF4J repository.
    • asGraph

      public RDF4JGraph asGraph(org.eclipse.rdf4j.model.Model model)
      Adapt an RDF4J Model as a Commons RDF Graph.

      Changes to the graph are reflected in the model, and vice versa.

      Parameters:
      model - RDF4J Model to adapt.
      Returns:
      Adapted Graph.
    • asGraph

      public RDF4JGraph asGraph(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options)
      Adapt an RDF4J Repository as a Commons RDF Graph.

      The graph will only include triples in the default graph (equivalent to context new Resource[0]{null}) in RDF4J).

      Changes to the graph are reflected in the repository, and vice versa.

      Note: Some operations on the RDF4JGraph requires the use of try-with-resources to close underlying RepositoryConnections, including RDF4JGraph.iterate() and RDF4JGraph.stream().

      Parameters:
      repository - RDF4J Repository to connect to.
      options - Zero or more RDF4J.Option
      Returns:
      A Graph backed by the RDF4J repository.
    • asGraph

      public RDF4JGraph asGraph(org.eclipse.rdf4j.repository.Repository repository, Set<? extends org.apache.commons.rdf.api.BlankNodeOrIRI> contexts, RDF4J.Option... option)
      Adapt an RDF4J Repository as a Commons RDF Graph.

      The graph will include triples in the specified contexts.

      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.

      Note: Some operations on the RDF4JGraph requires the use of try-with-resources to close underlying RepositoryConnections, including RDF4JGraph.iterate() and RDF4JGraph.stream().

      Parameters:
      repository - RDF4J Repository to connect to.
      contexts - A Set of BlankNodeOrIRI specifying the graph names to use as a context. The set may include the value null to indicate the default graph. The empty set indicates any context, e.g. the union graph.
      option - Zero or more RDF4J.Options
      Returns:
      A Graph backed by the RDF4J repository.
    • asGraphUnion

      public RDF4JGraph asGraphUnion(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options)
      Adapt an RDF4J Repository as a Commons RDF Graph.

      The graph will include triples in any contexts (e.g. the union graph).

      Changes to the graph are reflected in the repository, and vice versa.

      Parameters:
      repository - RDF4J Repository to connect to.
      options - Zero or more RDF4J.Option
      Returns:
      A union Graph backed by the RDF4J repository.
    • asQuad

      public RDF4JQuad asQuad(org.eclipse.rdf4j.model.Statement statement)
      Adapt a RDF4J Statement as a Commons RDF Quad.

      For the purpose of BlankNode equivalence, this method will use an internal salt UUID that is unique per instance of RDF4J.

      NOTE: If combining RDF4J Statements multiple repositories or models, then their BNodes may have the same BNode.getID(), which with this method would become equivalent according to BlankNode.equals(Object) and BlankNode.uniqueReference(), unless a separate RDF4J instance is used per RDF4J repository/model.

      Parameters:
      statement - The statement to convert
      Returns:
      A RDF4JQuad that is equivalent to the statement
    • asRDFTerm

      public RDF4JBlankNode asRDFTerm(org.eclipse.rdf4j.model.BNode value)
      Adapt a RDF4J BNode as a Commons RDF BlankNode

      For the purpose of BlankNode equivalence, this method will use an internal salt UUID that is unique per instance of RDF4J.

      NOTE: If combining RDF4J values from multiple repositories or models, then their BNodes may have the same BNode.getID(), which with this method would become equivalent according to BlankNode.equals(Object) and BlankNode.uniqueReference(), unless a separate RDF4J instance is used per RDF4J repository/model.

      Parameters:
      value - The RDF4J BNode to convert.
      Returns:
      A RDF4JBlankNode that corresponds to the RDF4J BNode
    • asRDFTerm

      public RDF4JLiteral asRDFTerm(org.eclipse.rdf4j.model.Literal value)
      Adapt a RDF4J Literal as a Commons RDF Literal

      Parameters:
      value - The RDF4J Literal to convert.
      Returns:
      A RDF4JLiteral that corresponds to the RDF4J literal
    • asRDFTerm

      public RDF4JIRI asRDFTerm(org.eclipse.rdf4j.model.IRI value)
      Adapt a RDF4J IRI as a Commons RDF IRI

      Parameters:
      value - The RDF4J Value to convert.
      Returns:
      A RDF4JIRI that corresponds to the RDF4J IRI
    • asRDFTerm

      public RDF4JBlankNodeOrIRI asRDFTerm(org.eclipse.rdf4j.model.Resource value)
      Adapt a RDF4J Resource as a Commons RDF BlankNodeOrIRI

      Parameters:
      value - The RDF4J Value to convert.
      Returns:
      A RDF4JBlankNodeOrIRI that corresponds to the RDF4J Resource
    • asRDFTerm

      public RDF4JTerm asRDFTerm(org.eclipse.rdf4j.model.Value value)
      Adapt a RDF4J Value as a Commons RDF RDFTerm.

      The value will be of the same kind as the term, e.g. a BNode is converted to a BlankNode, a IRI is converted to a IRI and a Literal. is converted to a Literal

      For the purpose of BlankNode equivalence, this method will use an internal salt UUID that is unique per instance of RDF4J.

      NOTE: If combining RDF4J values from multiple repositories or models, then their BNodes may have the same BNode.getID(), which with this method would become equivalent according to BlankNode.equals(Object) and BlankNode.uniqueReference(), unless a separate RDF4J instance is used per RDF4J repository/model.

      Parameters:
      value - The RDF4J Value to convert.
      Returns:
      A RDFTerm that corresponds to the RDF4J value
      Throws:
      IllegalArgumentException - if the value is not a BNode, Literal or IRI
    • asStatement

      public org.eclipse.rdf4j.model.Statement asStatement(org.apache.commons.rdf.api.TripleLike tripleLike)
      Adapt a Commons RDF Triple or Quad as a RDF4J Statement.

      If the tripleLike argument is an RDF4JTriple or a RDF4JQuad, then its RDF4JTripleLike.asStatement() is returned as-is. Note that this means that a RDF4JTriple would preserve its Statement.getContext(), and that any BlankNodes would be deemed equivalent in RDF4J if they have the same BNode.getID().

      Parameters:
      tripleLike - A Triple or Quad to adapt
      Returns:
      A corresponding Statement
    • asTriple

      public RDF4JTriple asTriple(org.eclipse.rdf4j.model.Statement statement)
      Adapt a RDF4J Statement as a Commons RDF Triple.

      For the purpose of BlankNode equivalence, this method will use an internal salt UUID that is unique per instance of RDF4J.

      NOTE: If combining RDF4J statements from multiple repositories or models, then their BNodes may have the same BNode.getID(), which with this method would become equivalent according to BlankNode.equals(Object) and BlankNode.uniqueReference(), unless a separate RDF4J instance is used per RDF4J repository/model.

      Parameters:
      statement - The RDF4J Statement to adapt.
      Returns:
      A RDF4JTriple that is equivalent to the statement
    • asValue

      public org.eclipse.rdf4j.model.Value asValue(org.apache.commons.rdf.api.RDFTerm term)
      Adapt a Commons RDF RDFTerm as a RDF4J Value.

      The value will be of the same kind as the term, e.g. a BlankNode is converted to a BNode, a IRI is converted to a IRI and a Literal is converted to a Literal.

      If the provided RDFTerm is null, then the returned value is null.

      If the provided term is an instance of RDF4JTerm, then the RDF4JTerm.asValue() is returned without any conversion. Note that this could mean that a Value from a different kind of ValueFactory could be returned.

      Parameters:
      term - RDFTerm to adapt to RDF4J Value
      Returns:
      Adapted RDF4J Value
    • createBlankNode

      public RDF4JBlankNode createBlankNode()
      Specified by:
      createBlankNode in interface org.apache.commons.rdf.api.RDF
    • createBlankNode

      public RDF4JBlankNode createBlankNode(String name)
      Specified by:
      createBlankNode in interface org.apache.commons.rdf.api.RDF
    • createDataset

      public RDF4JDataset createDataset()

      Note: Some operations on the RDF4JDataset requires the use of try-with-resources to close underlying RepositoryConnections, including RDF4JDataset.iterate(), RDF4JDataset.stream() and RDF4JDataset.getGraphNames().

      Specified by:
      createDataset in interface org.apache.commons.rdf.api.RDF
    • createGraph

      public RDF4JGraph createGraph()
      Specified by:
      createGraph in interface org.apache.commons.rdf.api.RDF
    • createIRI

      public RDF4JIRI createIRI(String iri) throws IllegalArgumentException
      Specified by:
      createIRI in interface org.apache.commons.rdf.api.RDF
      Throws:
      IllegalArgumentException
    • createLiteral

      public RDF4JLiteral createLiteral(String lexicalForm) throws IllegalArgumentException
      Specified by:
      createLiteral in interface org.apache.commons.rdf.api.RDF
      Throws:
      IllegalArgumentException
    • createLiteral

      public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, org.apache.commons.rdf.api.IRI dataType) throws IllegalArgumentException
      Specified by:
      createLiteral in interface org.apache.commons.rdf.api.RDF
      Throws:
      IllegalArgumentException
    • createLiteral

      public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, String languageTag) throws IllegalArgumentException
      Specified by:
      createLiteral in interface org.apache.commons.rdf.api.RDF
      Throws:
      IllegalArgumentException
    • createQuad

      public org.apache.commons.rdf.api.Quad createQuad(org.apache.commons.rdf.api.BlankNodeOrIRI graphName, org.apache.commons.rdf.api.BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, org.apache.commons.rdf.api.RDFTerm object) throws IllegalArgumentException
      Specified by:
      createQuad in interface org.apache.commons.rdf.api.RDF
      Throws:
      IllegalArgumentException
    • createTriple

      public RDF4JTriple createTriple(org.apache.commons.rdf.api.BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, org.apache.commons.rdf.api.RDFTerm object) throws IllegalArgumentException
      Specified by:
      createTriple in interface org.apache.commons.rdf.api.RDF
      Throws:
      IllegalArgumentException
    • getValueFactory

      public org.eclipse.rdf4j.model.ValueFactory getValueFactory()