oxiland 0.12.0

Embedded RDF datasets, SPARQL, persistence, and streaming I/O for Rust
Documentation
use oxiland::terms::{GraphName, Literal, NamedNode, Triple};
use oxiland::{Model, StatementPattern};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let model = Model::new()?;
    let subject = NamedNode::new("https://example.com/alice")?;
    let graph = NamedNode::new("https://example.com/people")?;
    let graph_name = GraphName::NamedNode(graph);

    let statement = Triple::new(
        subject.clone(),
        NamedNode::new("https://example.com/name")?,
        Literal::new_simple_literal("Alice"),
    );

    model.add_to_graph(statement.clone(), graph_name.clone())?;
    assert!(model.contains_in_graph(statement.as_ref(), graph_name.as_ref())?);
    assert!(!model.contains(statement.as_ref())?);

    let matches = model
        .find(StatementPattern {
            subject: Some(subject.as_ref().into()),
            ..StatementPattern::default()
        })
        .collect::<Result<Vec<_>, _>>()?;

    assert_eq!(matches.len(), 1);
    assert!(model.remove_from_graph(statement, graph_name)?);
    Ok(())
}