Interface RDF4JDataset
- All Superinterfaces:
AutoCloseable
,Dataset
,GraphLike<Quad>
,RDF4JGraphLike<Quad>
- All Known Implementing Classes:
RepositoryDatasetImpl
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionGet the graph names in this Dataset.iterate()
Get an Iterable for iterating over all quads in the dataset.iterate
(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) Get an Iterable for iterating over the quads in the dataset that match the pattern.stream()
Get all quads contained by the dataset.stream
(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) Get all quads contained by the dataset matched with the pattern.Methods inherited from interface org.apache.commons.rdf.api.Dataset
add, add, clear, close, contains, contains, getGraph, getGraph, remove, remove, size
Methods inherited from interface org.apache.commons.rdf.rdf4j.RDF4JGraphLike
asModel, asRepository
-
Method Details
-
stream
Get all quads contained by the dataset.
The iteration does not contain any duplicate quads, as determined by the
Quad.equals(Object)
method for eachQuad
.The behaviour of the
Stream
is not specified ifDataset.add(Quad)
,Dataset.remove(Quad)
orDataset.clear()
are called on theDataset
before it terminates.Implementations may throw
ConcurrentModificationException
from Stream methods if they detect a conflict while the Stream is active.Note that for datasets backed by a repository (
RDF4JGraphLike.asRepository()
is present), the stream must be closed withBaseStream.close()
.This can generally achieved using a try-with-resources block, e.g.:
int subjects; try (Stream<RDF4JQuad> s : graph.stream()) { subjects = s.map(RDF4JQuad::getSubject).distinct().count() }
-
stream
Stream<RDF4JQuad> stream(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) Get all quads contained by the dataset matched with the pattern.The iteration does not contain any duplicate quads, as determined by the
Quad.equals(Object)
method for eachQuad
.The behaviour of the
Stream
is not specified ifDataset.add(Quad)
,Dataset.remove(Quad)
orDataset.clear()
are called on theDataset
before it terminates.Implementations may throw
ConcurrentModificationException
from Stream methods if they detect a conflict while the Stream is active.Note that for datasets backed by a repository (
RDF4JGraphLike.asRepository()
is present), the stream must be closed withBaseStream.close()
.This can generally achieved using a try-with-resources block, e.g.:
int subjects; try (Stream<RDF4JQuad> s : graph.stream()) { subjects = s.map(RDF4JQuad::getSubject).distinct().count() }
- Specified by:
stream
in interfaceDataset
- Parameters:
graphName
- The graph the quad belongs to, wrapped as anOptional
(null
is a wildcard,Optional.empty()
is the default graph)subject
- The quad subject (null
is a wildcard)predicate
- The quad predicate (null
is a wildcard)object
- The quad object (null
is a wildcard)- Returns:
- A
Stream
over the matched quads.
-
getGraphNames
Stream<BlankNodeOrIRI> getGraphNames()Get the graph names in this Dataset.The set of returned graph names is equivalent to the set of unique
Quad.getGraphName()
of all theDataset.stream()
of this dataset (excluding the default graph).The returned
Stream
SHOULD NOT contain duplicate graph names.The graph names can be used with
Dataset.getGraph(BlankNodeOrIRI)
to retrieve the correspondingGraph
, however callers should be aware of any concurrent modifications to the Dataset may cause such calls to returnOptional.empty()
.Note that a Dataset always contains a default graph which is not named, and thus is not represented in the returned Stream. The default graph is accessible via
Dataset.getGraph()
or by usingOptional.empty()
in the Quad access methods).Note that for datasets backed by a repository (
RDF4JGraphLike.asRepository()
is present), the stream must be closed withBaseStream.close()
.This can generally achieved using a try-with-resources block, e.g.:
int graphs; try (Stream<BlankNodeOrIRI> s : graph.stream()) { graphs = s.count() }
- Specified by:
getGraphNames
in interfaceDataset
- Returns:
- A
Stream
of the graph names of this Dataset.
-
iterate
ClosableIterable<Quad> iterate()Get an Iterable for iterating over all quads in the dataset.This method is meant to be used with a Java for-each loop, e.g.:
for (Quad t : dataset.iterate()) { System.out.println(t); }
The behaviour of the iterator is not specified ifDataset.add(Quad)
,Dataset.remove(Quad)
orDataset.clear()
, are called on theDataset
before it terminates. It is undefined if the returnedIterator
supports theIterator.remove()
method.Implementations may throw
ConcurrentModificationException
from Iterator methods if they detect a concurrency conflict while the Iterator is active.The
Iterable.iterator()
must only be called once, that is the Iterable must only be iterated over once. AIllegalStateException
may be thrown on attempt to reuse the Iterable.The default implementation of this method will call
Dataset.stream()
to return itsBaseStream.iterator()
.Note that for datasets backed by a repository (
RDF4JGraphLike.asRepository()
is present), the iterable must be closed withAutoCloseable.close()
.This can generally achieved using a try-with-resources block, e.g.:
try (ClosableIterable<Quad> s : graph.iterate()) { for (Quad q : quads) { return q; // OK to terminate for-loop early } }
If you don't use a try-with-resources block, the iterator will attempt to close the ClosableIterable when reaching the end of the iteration. -
iterate
ClosableIterable<Quad> iterate(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) Get an Iterable for iterating over the quads in the dataset that match the pattern.This method is meant to be used with a Java for-each loop, e.g.:
IRI alice = factory.createIRI("http://example.com/alice"); IRI knows = factory.createIRI("http://xmlns.com/foaf/0.1/"); for (Quad t : dataset.iterate(null, alice, knows, null)) { System.out.println(t.getGraphName()); System.out.println(t.getObject()); }
The behaviour of the iterator is not specified if
Dataset.add(Quad)
,Dataset.remove(Quad)
orDataset.clear()
, are called on theDataset
before it terminates. It is undefined if the returnedIterator
supports theIterator.remove()
method.Implementations may throw
ConcurrentModificationException
from Iterator methods if they detect a concurrency conflict while the Iterator is active.The
Iterable.iterator()
must only be called once, that is the Iterable must only be iterated over once. AIllegalStateException
may be thrown on attempt to reuse the Iterable.The default implementation of this method will call
Dataset.stream(Optional, BlankNodeOrIRI, IRI, RDFTerm)
to return itsBaseStream.iterator()
.Note that for datasets backed by a repository (
RDF4JGraphLike.asRepository()
is present), the iterable must be closed withAutoCloseable.close()
.This can generally achieved using a try-with-resources block, e.g.:
try (ClosableIterable<Quad> s : graph.iterate(g,s,p,o)) { for (Quad q : quads) { return q; // OK to terminate for-loop early } }
If you don't use a try-with-resources block, the iterator will attempt to close the ClosableIterable when reaching the end of the iteration.- Specified by:
iterate
in interfaceDataset
- Parameters:
graphName
- The graph the quad belongs to, wrapped as anOptional
(null
is a wildcard,Optional.empty()
is the default graph)subject
- The quad subject (null
is a wildcard)predicate
- The quad predicate (null
is a wildcard)object
- The quad object (null
is a wildcard)- Returns:
- A
Iterable
that returnsIterator
over the matching quads in the dataset
-