Interface RDF4JGraph

All Superinterfaces:
AutoCloseable, Graph, GraphLike<Triple>, RDF4JGraphLike<Triple>
All Known Implementing Classes:
ModelGraphImpl, RepositoryGraphImpl

public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple>
Marker interface for RDF4J implementations of Graph.
See Also:
  • Method Details

    • getContextMask

      Set<RDF4JBlankNodeOrIRI> getContextMask()
      Return a copy of the context mask as a Set of RDF4JBlankNodeOrIRI graph names.

      If the set is not Set.isEmpty(), the mask determines which contexts in the corresponding RDF4J Model or Repository that this graph reflect. Modifications to the graph (e.g. Graph.add(Triple) will be performed for all the specified contexts, while retrieval (e.g. Graph.contains(Triple)) will succeed if the triple is in at least one of the specified contexts.

      The context mask array may contain null, indicating the default context (the default graph in RDF datasets).

      If the context mask is Set.isEmpty(), then this is a union graph which triples reflect statements in any contexts. Triples added to the graph will be added in the default context, e.g. equivalent to new Resource[1]{null}) in RDF4J.

      Note that the context mask itself cannot be null.

      The returned set is an immutable copy; to specify a different mask, use RDF4J.asGraph(Repository, Set, Option...)

      Returns:
      The context mask as a set of BlankNodeOrIRI graph names, which may contain the value null.
    • stream

      Stream<RDF4JTriple> stream()
      Gets all triples contained by the graph.

      The iteration does not contain any duplicate triples, as determined by the Triple.equals(Object) method for each Triple.

      The behaviour of the Stream is not specified if Graph.add(Triple), Graph.remove(Triple) or Graph.clear() are called on the Graph before it terminates.

      Implementations may throw ConcurrentModificationException from Stream methods if they detect a conflict while the Stream is active.

      Note that for graphs backed by a repository (RDF4JGraphLike.asRepository() is present), the stream must be closed with BaseStream.close().

      This can generally achieved using a try-with-resources block, e.g.:

       int subjects;
       try (Stream<RDF4JTriple> s : graph.stream()) {
         subjects = s.map(RDF4JTriple::getSubject).distinct().count()
       }
       
      Specified by:
      stream in interface Graph
      Specified by:
      stream in interface GraphLike<Triple>
      Returns:
      A Stream over all of the triples in the graph
    • stream

      Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, IRI predicate, RDFTerm object)
      Gets all triples contained by the graph matched with the pattern.

      The iteration does not contain any duplicate triples, as determined by the Triple.equals(Object) method for each Triple.

      The behaviour of the Stream is not specified if Graph.add(Triple), Graph.remove(Triple) or Graph.clear() are called on the Graph before it terminates.

      Implementations may throw ConcurrentModificationException from Stream methods if they detect a conflict while the Stream is active.

      Note that for graphs backed by a repository (RDF4JGraphLike.asRepository() is present), the stream must be closed with BaseStream.close().

      This can generally achieved using a try-with-resources block, e.g.:

       int subjects;
       try (Stream<RDF4JTriple> s : graph.stream(s,p,o)) {
         subjects = s.map(RDF4JTriple::getSubject).distinct().count()
       }
       
      Specified by:
      stream in interface Graph
      Parameters:
      subject - The triple subject (null is a wildcard)
      predicate - The triple predicate (null is a wildcard)
      object - The triple object (null is a wildcard)
      Returns:
      A Stream over the matched triples.
    • iterate

      Gets an Iterable for iterating over all triples in the graph.

      This method is meant to be used with a Java for-each loop, e.g.:

       for (Triple t : graph.iterate()) {
           System.out.println(t);
       }
       
      The behaviour of the iterator is not specified if Graph.add(Triple), Graph.remove(Triple) or Graph.clear(), are called on the Graph before it terminates. It is undefined if the returned Iterator supports the Iterator.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. A IllegalStateException may be thrown on attempt to reuse the Iterable.

      The default implementation of this method will call Graph.stream() to return its BaseStream.iterator().

      Note that for graphs backed by a repository (RDF4JGraphLike.asRepository() is present), the iterable must be closed with AutoCloseable.close().

      This can generally achieved using a try-with-resources block, e.g.:

       try (ClosableIterable<Triple> s : graph.iterate()) {
         for (Triple t : triples) {
             return t; // 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 interface Graph
      Specified by:
      iterate in interface GraphLike<Triple>
      Returns:
      A Iterable that returns Iterator over all of the triples in the graph
      Throws:
      ConcurrentModificationException - if a concurrency conflict occurs while the Iterator is active.
      IllegalStateException - if the Iterable has been reused
    • iterate

      ClosableIterable<Triple> iterate(BlankNodeOrIRI subject, IRI predicate, RDFTerm object)
      Gets an Iterable for iterating over the triples in the graph 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 (Triple t : graph.iterate(alice, knows, null)) {
           System.out.println(t.getObject());
       }
       

      The behaviour of the iterator is not specified if Graph.add(Triple), Graph.remove(Triple) or Graph.clear(), are called on the Graph before it terminates. It is undefined if the returned Iterator supports the Iterator.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. A IllegalStateException may be thrown on attempt to reuse the Iterable.

      The default implementation of this method will call Graph.stream(BlankNodeOrIRI, IRI, RDFTerm) to return its BaseStream.iterator().

      Note that for graphs backed by a repository (RDF4JGraphLike.asRepository() is present), the iterable must be closed with AutoCloseable.close().

      This can generally achieved using a try-with-resources block, e.g.:

       try (ClosableIterable<Triple> s : graph.iterate(s,p,o)) {
         for (Triple t : triples) {
             return t; // 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 interface Graph
      Parameters:
      subject - The triple subject (null is a wildcard)
      predicate - The triple predicate (null is a wildcard)
      object - The triple object (null is a wildcard)
      Returns:
      A Iterable that returns Iterator over the matching triples in the graph