Class RDF4J
- All Implemented Interfaces:
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 BNode
s 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 to RDF4J Statement
,
use asStatement(TripleLike)
. This recognises previously converted
RDF4JTriple
s and RDF4JQuad
s without re-converting their
RDF4JTripleLike.asStatement()
.
Likewise, asValue(RDFTerm)
can be used to convert any Commons RDF
RDFTerm
to a corresponding RDF4J Value
. This recognises
previously converted RDF4JTerm
s 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:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static InternalRDF4JFactory
InternalRDF4JFactory is deliberately abstractprivate final UUID
private final org.eclipse.rdf4j.model.ValueFactory
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionasDataset
(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options) Adapt an RDF4JRepository
as a Commons RDFDataset
.asGraph
(org.eclipse.rdf4j.model.Model model) Adapt an RDF4JModel
as a Commons RDFGraph
.asGraph
(org.eclipse.rdf4j.repository.Repository repository, Set<? extends BlankNodeOrIRI> contexts, RDF4J.Option... option) Adapt an RDF4JRepository
as a Commons RDFGraph
.asGraph
(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options) Adapt an RDF4JRepository
as a Commons RDFGraph
.asGraphUnion
(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options) Adapt an RDF4JRepository
as a Commons RDFGraph
.asQuad
(org.eclipse.rdf4j.model.Statement statement) Adapt a RDF4JStatement
as a Commons RDFQuad
.asRDFTerm
(org.eclipse.rdf4j.model.BNode value) Adapt a RDF4JBNode
as a Commons RDFBlankNode
asRDFTerm
(org.eclipse.rdf4j.model.IRI value) Adapt a RDF4JIRI
as a Commons RDFIRI
asRDFTerm
(org.eclipse.rdf4j.model.Literal value) Adapt a RDF4JLiteral
as a Commons RDFLiteral
asRDFTerm
(org.eclipse.rdf4j.model.Resource value) Adapt a RDF4JResource
as a Commons RDFBlankNodeOrIRI
asRDFTerm
(org.eclipse.rdf4j.model.Value value) Adapt a RDF4JValue
as a Commons RDFRDFTerm
.static RDF4JTerm
Adapt a RDF4JValue
as a Commons RDFRDFTerm
.org.eclipse.rdf4j.model.Statement
asStatement
(TripleLike tripleLike) asTriple
(org.eclipse.rdf4j.model.Statement statement) Adapt a RDF4JStatement
as a Commons RDFTriple
.org.eclipse.rdf4j.model.Value
Adapt a Commons RDFRDFTerm
as a RDF4JValue
.Create a new blank node.createBlankNode
(String name) Create a blank node based on the given name.Create a new dataset.Create a new graph.Create an IRI from a (possibly escaped) String.createLiteral
(String lexicalForm) Create a simple literal.createLiteral
(String lexicalForm, String languageTag) Create a language-tagged literal.createLiteral
(String lexicalForm, IRI dataType) Create a literal with the specified data type.createQuad
(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) Create a quad.createTriple
(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) Create a triple.org.eclipse.rdf4j.model.ValueFactory
private EnumSet
<RDF4J.Option> optionSet
(RDF4J.Option... options)
-
Field Details
-
rdf4j
InternalRDF4JFactory is deliberately abstract -
salt
-
valueFactory
private final org.eclipse.rdf4j.model.ValueFactory valueFactory
-
-
Constructor Details
-
RDF4J
public RDF4J()Construct anRDF4J
. -
RDF4J
public RDF4J(org.eclipse.rdf4j.model.ValueFactory valueFactory) Construct anRDF4J
.This constructor is intended for use with the value factory from
Repository.getValueFactory()
when using Repository-based graphs and datasets.- Parameters:
valueFactory
- The RDF4JValueFactory
to use
-
RDF4J
Construct anRDF4J
.This constructor may be used if reproducible
BlankNode.uniqueReference()
inBlankNode
is desirable.- Parameters:
salt
- AnUUID
salt to be used by any createdBlankNode
s for the purpose ofBlankNode.uniqueReference()
-
RDF4J
Construct anRDF4J
.This constructor may be used if reproducible
BlankNode.uniqueReference()
inBlankNode
is desirable.- Parameters:
valueFactory
- The RDF4JValueFactory
to usesalt
- AnUUID
salt to be used by any createdBlankNode
s for the purpose ofBlankNode.uniqueReference()
-
-
Method Details
-
asQuad
Adapt a RDF4JStatement
as a Commons RDFQuad
.For the purpose of
BlankNode
equivalence, this method will use an internal salt UUID that is unique per instance ofRDF4J
.NOTE: If combining RDF4J
Statement
s multiple repositories or models, then theirBNode
s may have the sameBNode.getID()
, which with this method would become equivalent according toBlankNode.equals(Object)
andBlankNode.uniqueReference()
, unless a separateRDF4J
instance is used per RDF4J repository/model.- Parameters:
statement
- The statement to convert- Returns:
- A
RDF4JQuad
that is equivalent to the statement
-
asRDFTerm
Adapt a RDF4JValue
as a Commons RDFRDFTerm
.The value will be of the same kind as the term, e.g. a
BNode
is converted to aBlankNode
, aIRI
is converted to aIRI
and aLiteral
. is converted to aLiteral
For the purpose of
BlankNode
equivalence, this method will use an internal salt UUID that is unique per instance ofRDF4J
.NOTE: If combining RDF4J values from multiple repositories or models, then their
BNode
s may have the sameBNode.getID()
, which with this method would become equivalent according toBlankNode.equals(Object)
andBlankNode.uniqueReference()
, unless a separateRDF4J
instance is used per RDF4J repository/model.- Parameters:
value
- The RDF4JValue
to convert.- Returns:
- A
RDFTerm
that corresponds to the RDF4J value - Throws:
IllegalArgumentException
- if the value is not a BNode, Literal or IRI
-
asRDFTerm
Adapt a RDF4JBNode
as a Commons RDFBlankNode
For the purpose of
BlankNode
equivalence, this method will use an internal salt UUID that is unique per instance ofRDF4J
.NOTE: If combining RDF4J values from multiple repositories or models, then their
BNode
s may have the sameBNode.getID()
, which with this method would become equivalent according toBlankNode.equals(Object)
andBlankNode.uniqueReference()
, unless a separateRDF4J
instance is used per RDF4J repository/model.- Parameters:
value
- The RDF4JBNode
to convert.- Returns:
- A
RDF4JBlankNode
that corresponds to the RDF4J BNode
-
asRDFTerm
Adapt a RDF4JLiteral
as a Commons RDFLiteral
- Parameters:
value
- The RDF4JLiteral
to convert.- Returns:
- A
RDF4JLiteral
that corresponds to the RDF4J literal
-
asRDFTerm
Adapt a RDF4JIRI
as a Commons RDFIRI
- Parameters:
value
- The RDF4JValue
to convert.- Returns:
- A
RDF4JIRI
that corresponds to the RDF4J IRI
-
asRDFTerm
Adapt a RDF4JResource
as a Commons RDFBlankNodeOrIRI
- Parameters:
value
- The RDF4JValue
to convert.- Returns:
- A
RDF4JBlankNodeOrIRI
that corresponds to the RDF4J Resource
-
asRDFTerm
Adapt a RDF4JValue
as a Commons RDFRDFTerm
.The value will be of the same kind as the term, e.g. a
BNode
is converted to aBlankNode
, aIRI
is converted to aIRI
and aLiteral
. is converted to aLiteral
- Parameters:
value
- The RDF4JValue
to convert.salt
- AUUID
salt to use for uniquely mapping anyBNode
s. The salt should typically be the same for multiple statements in the sameRepository
orModel
to ensureBlankNode.equals(Object)
andBlankNode.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 RDF4JRepository
as a Commons RDFDataset
.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 underlyingRepositoryConnection
s, includingRDF4JDataset.iterate()
,RDF4JDataset.stream()
andRDF4JDataset.getGraphNames()
.- Parameters:
repository
- RDF4JRepository
to connect to.options
- Zero or moreRDF4J.Option
- Returns:
- A
Dataset
backed by the RDF4J repository.
-
asGraph
Adapt an RDF4JModel
as a Commons RDFGraph
.Changes to the graph are reflected in the model, and vice versa.
- Parameters:
model
- RDF4JModel
to adapt.- Returns:
- Adapted
Graph
.
-
asGraph
public RDF4JGraph asGraph(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options) Adapt an RDF4JRepository
as a Commons RDFGraph
.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 underlyingRepositoryConnection
s, includingRDF4JGraph.iterate()
andRDF4JGraph.stream()
.- Parameters:
repository
- RDF4JRepository
to connect to.options
- Zero or moreRDF4J.Option
- Returns:
- A
Graph
backed by the RDF4J repository.
-
asGraphUnion
public RDF4JGraph asGraphUnion(org.eclipse.rdf4j.repository.Repository repository, RDF4J.Option... options) Adapt an RDF4JRepository
as a Commons RDFGraph
.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
- RDF4JRepository
to connect to.options
- Zero or moreRDF4J.Option
- Returns:
- A union
Graph
backed by the RDF4J repository.
-
asGraph
public RDF4JGraph asGraph(org.eclipse.rdf4j.repository.Repository repository, Set<? extends BlankNodeOrIRI> contexts, RDF4J.Option... option) Adapt an RDF4JRepository
as a Commons RDFGraph
.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 underlyingRepositoryConnection
s, includingRDF4JGraph.iterate()
andRDF4JGraph.stream()
.- Parameters:
repository
- RDF4JRepository
to connect to.contexts
- ASet
ofBlankNodeOrIRI
specifying the graph names to use as a context. The set may include the valuenull
to indicate the default graph. The empty set indicates any context, e.g. the union graph.option
- Zero or moreRDF4J.Option
s- Returns:
- A
Graph
backed by the RDF4J repository.
-
asStatement
Adapt a Commons RDFTriple
orQuad
as a RDF4JStatement
.If the
tripleLike
argument is anRDF4JTriple
or aRDF4JQuad
, then itsRDF4JTripleLike.asStatement()
is returned as-is. Note that this means that aRDF4JTriple
would preserve itsStatement.getContext()
, and that anyBlankNode
s would be deemed equivalent in RDF4J if they have the sameBNode.getID()
. -
asTriple
Adapt a RDF4JStatement
as a Commons RDFTriple
.For the purpose of
BlankNode
equivalence, this method will use an internal salt UUID that is unique per instance ofRDF4J
.NOTE: If combining RDF4J statements from multiple repositories or models, then their
BNode
s may have the sameBNode.getID()
, which with this method would become equivalent according toBlankNode.equals(Object)
andBlankNode.uniqueReference()
, unless a separateRDF4J
instance is used per RDF4J repository/model.- Parameters:
statement
- The RDF4JStatement
to adapt.- Returns:
- A
RDF4JTriple
that is equivalent to the statement
-
asValue
Adapt a Commons RDFRDFTerm
as a RDF4JValue
.The value will be of the same kind as the term, e.g. a
BlankNode
is converted to aBNode
, aIRI
is converted to aIRI
and aLiteral
is converted to aLiteral
.If the provided
RDFTerm
isnull
, then the returned value isnull
.If the provided term is an instance of
RDF4JTerm
, then theRDF4JTerm.asValue()
is returned without any conversion. Note that this could mean that aValue
from a different kind ofValueFactory
could be returned.- Parameters:
term
- RDFTerm to adapt to RDF4J Value- Returns:
- Adapted RDF4J
Value
-
createBlankNode
Description copied from interface:RDF
Create a new blank node.The returned blank node MUST NOT be equal to any existing
BlankNode
instances according toBlankNode.equals(Object)
.- Specified by:
createBlankNode
in interfaceRDF
- Returns:
- A new, unique
BlankNode
-
createBlankNode
Description copied from interface:RDF
Create a blank node based on the given name.All
BlankNode
s created with the givenname
on a particular instance ofRDF
MUST be equivalent according toBlankNode.equals(Object)
,The returned BlankNode MUST NOT be equal to
BlankNode
instances returned for any othername
or those returned fromRDF.createBlankNode()
.The returned BlankNode SHOULD NOT be equivalent to any BlankNodes created on a different
RDF
instance, e.g. different instances ofRDF
should produce different blank nodes for the samename
unless they purposely are intending to create equivalentBlankNode
instances (e.g. a reinstatedSerializable
factory).- Specified by:
createBlankNode
in interfaceRDF
- Parameters:
name
- A non-empty, non-null, String that is unique to this blank node in the context of thisRDF
.- Returns:
- A BlankNode for the given name
-
createDataset
Create a new dataset. It is undefined if the dataset will be persisted by any underlying storage mechanism.Note: Some operations on the
RDF4JDataset
requires the use of try-with-resources to close underlyingRepositoryConnection
s, includingRDF4JDataset.iterate()
,RDF4JDataset.stream()
andRDF4JDataset.getGraphNames()
.- Specified by:
createDataset
in interfaceRDF
- Returns:
- A new Dataset
-
createGraph
Description copied from interface:RDF
Create a new graph. It is undefined if the graph will be persisted by any underlying storage mechanism.- Specified by:
createGraph
in interfaceRDF
- Returns:
- A new Graph
-
createIRI
Description copied from interface:RDF
Create an IRI from a (possibly escaped) String. The provided iri string MUST be valid according to the W3C RDF-1.1 IRI definition.- Specified by:
createIRI
in interfaceRDF
- Parameters:
iri
- Internationalized Resource Identifier- Returns:
- A new IRI
- Throws:
IllegalArgumentException
- If the provided string is not acceptable, e.g. does not conform to the RFC3987 syntax.
-
createLiteral
Description copied from interface:RDF
Create a simple literal. The provided lexical form should not be escaped in any sense, e.g. should not include "quotes" unless those are part of the literal value. The returned Literal MUST have aLiteral.getLexicalForm()
that is equal to the provided lexical form, MUST NOT have aLiteral.getLanguageTag()
present, and SHOULD return aLiteral.getDatatype()
that is equal to the IRIhttp://www.w3.org/2001/XMLSchema#string
.- Specified by:
createLiteral
in interfaceRDF
- Parameters:
lexicalForm
- The literal value in plain text- Returns:
- The created Literal
- Throws:
IllegalArgumentException
- If the provided lexicalForm is not acceptable, e.g. because it is too large for an underlying storage.
-
createLiteral
Description copied from interface:RDF
Create a literal with the specified data type. The provided lexical form should not be escaped in any sense, e.g. should not include "quotes" unless those are part of the literal value. It is RECOMMENDED that the provided dataType is one of the RDF-compatible XSD types. The provided lexical form SHOULD be in the lexical space of the provided dataType. The returned Literal SHOULD have aLiteral.getLexicalForm()
that is equal to the provided lexicalForm, MUST NOT have aLiteral.getLanguageTag()
present, and MUST return aLiteral.getDatatype()
that is equivalent to the provided dataType IRI.- Specified by:
createLiteral
in interfaceRDF
- Parameters:
lexicalForm
- The literal valuedataType
- The data type IRI for the literal value, e.g.http://www.w3.org/2001/XMLSchema#integer
- Returns:
- The created Literal
- Throws:
IllegalArgumentException
- If any of the provided arguments are not acceptable, e.g. because the provided dataType is not permitted.
-
createLiteral
public Literal createLiteral(String lexicalForm, String languageTag) throws IllegalArgumentException Description copied from interface:RDF
Create a language-tagged literal. The provided lexical form should not be escaped in any sense, e.g. should not include "quotes" unless those are part of the literal value. The provided language tag MUST be valid according to BCP47, e.g.en
. The provided language tag MAY be converted to lower case. The returned Literal SHOULD have aLiteral.getLexicalForm()
which is equal to the provided lexicalForm, MUST return aLiteral.getDatatype()
that is equal to the IRIhttp://www.w3.org/1999/02/22-rdf-syntax-ns#langString
, and MUST have aLiteral.getLanguageTag()
present which SHOULD be equal to the provided language tag (compared asString.toLowerCase(Locale)
usingLocale.ENGLISH
).- Specified by:
createLiteral
in interfaceRDF
- Parameters:
lexicalForm
- The literal valuelanguageTag
- The non-empty language tag as defined by BCP47- Returns:
- The created Literal
- Throws:
IllegalArgumentException
- If the provided values are not acceptable, e.g. because the languageTag was syntactically invalid.
-
createTriple
public RDF4JTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) throws IllegalArgumentException Description copied from interface:RDF
Create a triple. The returned Triple SHOULD have aTriple.getSubject()
that is equal to the provided subject, aTriple.getPredicate()
that is equal to the provided predicate, and aTriple.getObject()
that is equal to the provided object.- Specified by:
createTriple
in interfaceRDF
- Parameters:
subject
- The IRI or BlankNode that is the subject of the triplepredicate
- The IRI that is the predicate of the tripleobject
- The IRI, BlankNode or Literal that is the object of the triple- Returns:
- The created Triple
- Throws:
IllegalArgumentException
- If any of the provided arguments are not acceptable, e.g. because a Literal has a lexicalForm that is too large for an underlying storage.
-
createQuad
public Quad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) throws IllegalArgumentException Description copied from interface:RDF
Create a quad.The returned Quad SHOULD have a
Quad.getGraphName()
that is equal to the provided graphName, aQuad.getSubject()
that is equal to the provided subject, aQuad.getPredicate()
that is equal to the provided predicate, and aQuad.getObject()
that is equal to the provided object.- Specified by:
createQuad
in interfaceRDF
- Parameters:
graphName
- The IRI or BlankNode that this quad belongs to, ornull
for the public graphsubject
- The IRI or BlankNode that is the subject of the quadpredicate
- The IRI that is the predicate of the quadobject
- The IRI, BlankNode or Literal that is the object of the quad- Returns:
- The created Quad
- Throws:
IllegalArgumentException
- If any of the provided arguments are not acceptable, e.g. because a Literal has a lexicalForm that is too large for an underlying storage.
-
getValueFactory
public org.eclipse.rdf4j.model.ValueFactory getValueFactory() -
optionSet
-