pub struct Graph { /* private fields */ }Expand description
An in-memory RDF Graph
A graph is a set of RDF triples representing a collection of statements. This implementation uses a HashSet for efficient insertion, removal, and lookup operations with O(1) average-case performance.
§Examples
use oxirs_core::model::{Graph, Triple, NamedNode, Literal};
// Create a new empty graph
let mut graph = Graph::new();
// Create some triples
let triple1 = Triple::new(
NamedNode::new("http://example.org/alice").expect("valid IRI"),
NamedNode::new("http://example.org/name").expect("valid IRI"),
Literal::new("Alice"),
);
let triple2 = Triple::new(
NamedNode::new("http://example.org/alice").expect("valid IRI"),
NamedNode::new("http://example.org/age").expect("valid IRI"),
Literal::new("30"),
);
// Insert triples into the graph
graph.insert(triple1.clone());
graph.insert(triple2);
// Check if graph contains a triple
assert_eq!(graph.len(), 2);
assert!(graph.contains(&triple1));§Performance Characteristics
- Insertion: O(1) average case
- Removal: O(1) average case
- Lookup: O(1) average case
- Memory: Each triple stored once (set semantics)
Implementations§
Source§impl Graph
impl Graph
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new empty graph
§Examples
use oxirs_core::model::Graph;
let graph = Graph::new();
assert_eq!(graph.len(), 0);
assert!(graph.is_empty());Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Creates a new graph with the specified initial capacity
This can improve performance when you know approximately how many triples the graph will contain, as it avoids unnecessary reallocations.
§Arguments
capacity- The initial capacity for the underlying hash set
§Examples
use oxirs_core::model::Graph;
// Create a graph optimized for ~1000 triples
let graph = Graph::with_capacity(1000);
assert_eq!(graph.len(), 0);Sourcepub fn from_triples(triples: Vec<Triple>) -> Self
pub fn from_triples(triples: Vec<Triple>) -> Self
Creates a graph from a vector of triples
Duplicates are automatically removed as graphs maintain set semantics.
§Arguments
triples- A vector of triples to insert into the graph
§Examples
use oxirs_core::model::{Graph, Triple, NamedNode, Literal};
let triples = vec![
Triple::new(
NamedNode::new("http://example.org/alice").expect("valid IRI"),
NamedNode::new("http://example.org/name").expect("valid IRI"),
Literal::new("Alice"),
),
Triple::new(
NamedNode::new("http://example.org/bob").expect("valid IRI"),
NamedNode::new("http://example.org/name").expect("valid IRI"),
Literal::new("Bob"),
),
];
let graph = Graph::from_triples(triples);
assert_eq!(graph.len(), 2);Sourcepub fn insert(&mut self, triple: Triple) -> bool
pub fn insert(&mut self, triple: Triple) -> bool
Inserts a triple into the graph
Returns true if the triple was not already present, false otherwise.
Sourcepub fn remove(&mut self, triple: &Triple) -> bool
pub fn remove(&mut self, triple: &Triple) -> bool
Removes a triple from the graph
Returns true if the triple was present, false otherwise.
Sourcepub fn contains(&self, triple: &Triple) -> bool
pub fn contains(&self, triple: &Triple) -> bool
Returns true if the graph contains the specified triple
Sourcepub fn iter(&self) -> impl Iterator<Item = &Triple>
pub fn iter(&self) -> impl Iterator<Item = &Triple>
Returns an iterator over all triples in the graph
Sourcepub fn iter_ref(&self) -> impl Iterator<Item = TripleRef<'_>>
pub fn iter_ref(&self) -> impl Iterator<Item = TripleRef<'_>>
Returns an iterator over all triples in the graph as references
Sourcepub fn triples_for_pattern<'a>(
&'a self,
subject: Option<&'a Subject>,
predicate: Option<&'a Predicate>,
object: Option<&'a Object>,
) -> impl Iterator<Item = &'a Triple>
pub fn triples_for_pattern<'a>( &'a self, subject: Option<&'a Subject>, predicate: Option<&'a Predicate>, object: Option<&'a Object>, ) -> impl Iterator<Item = &'a Triple>
Finds all triples matching the given pattern
None values in the pattern act as wildcards.
Sourcepub fn triples_for_subject<'a>(
&'a self,
subject: &'a Subject,
) -> impl Iterator<Item = &'a Triple>
pub fn triples_for_subject<'a>( &'a self, subject: &'a Subject, ) -> impl Iterator<Item = &'a Triple>
Finds all triples with the given subject
Sourcepub fn triples_for_predicate<'a>(
&'a self,
predicate: &'a Predicate,
) -> impl Iterator<Item = &'a Triple>
pub fn triples_for_predicate<'a>( &'a self, predicate: &'a Predicate, ) -> impl Iterator<Item = &'a Triple>
Finds all triples with the given predicate
Sourcepub fn triples_for_object<'a>(
&'a self,
object: &'a Object,
) -> impl Iterator<Item = &'a Triple>
pub fn triples_for_object<'a>( &'a self, object: &'a Object, ) -> impl Iterator<Item = &'a Triple>
Finds all triples with the given object
Sourcepub fn triples_for_subject_predicate<'a>(
&'a self,
subject: &'a Subject,
predicate: &'a Predicate,
) -> impl Iterator<Item = &'a Triple>
pub fn triples_for_subject_predicate<'a>( &'a self, subject: &'a Subject, predicate: &'a Predicate, ) -> impl Iterator<Item = &'a Triple>
Finds all triples with the given subject and predicate
Sourcepub fn extend<I>(&mut self, triples: I)where
I: IntoIterator<Item = Triple>,
pub fn extend<I>(&mut self, triples: I)where
I: IntoIterator<Item = Triple>,
Extends the graph with triples from an iterator
Sourcepub fn intersection(&self, other: &Graph) -> Graph
pub fn intersection(&self, other: &Graph) -> Graph
Creates the intersection of this graph with another graph
Sourcepub fn difference(&self, other: &Graph) -> Graph
pub fn difference(&self, other: &Graph) -> Graph
Creates the difference of this graph with another graph
Sourcepub fn is_subset(&self, other: &Graph) -> bool
pub fn is_subset(&self, other: &Graph) -> bool
Returns true if this graph is a subset of another graph
Sourcepub fn is_superset(&self, other: &Graph) -> bool
pub fn is_superset(&self, other: &Graph) -> bool
Returns true if this graph is a superset of another graph
Sourcepub fn is_disjoint(&self, other: &Graph) -> bool
pub fn is_disjoint(&self, other: &Graph) -> bool
Returns true if this graph is disjoint from another graph
Trait Implementations§
Source§impl Extend<Triple> for Graph
impl Extend<Triple> for Graph
Source§fn extend<T: IntoIterator<Item = Triple>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = Triple>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl FromIterator<Triple> for Graph
impl FromIterator<Triple> for Graph
Source§impl<'a> IntoIterator for &'a Graph
impl<'a> IntoIterator for &'a Graph
Source§impl IntoIterator for Graph
impl IntoIterator for Graph
impl Eq for Graph
impl StructuralPartialEq for Graph
Auto Trait Implementations§
impl Freeze for Graph
impl RefUnwindSafe for Graph
impl Send for Graph
impl Sync for Graph
impl Unpin for Graph
impl UnsafeUnpin for Graph
impl UnwindSafe for Graph
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more