//! This meta-crate aims to provide a comprehensive toolkit
//! for working with [RDF] and [Linked Data] in Rust.
//!
//! RDF is a data model
//! designed to exchange knowledge on the Web
//! in an interoperable way.
//! Each piece of knowledge in RDF (a *statement*)
//! is represented by a [triple], made of three [term]s.
//! A set of [triple]s forms an RDF [graph].
//! Finally, several [graph]s can be grouped in a collection
//! called a [dataset], where each [graph] is identified by a unique name.
//!
//! [RDF]: https://www.w3.org/TR/rdf-primer/
//! [Linked Data]: http://linkeddata.org/
//!
//! # Generalized vs. Strict RDF model
//!
//! The data model supported by this crate is in fact
//! a superset of the RDF data model as defined by the W3C.
//! When the distinction matters,
//! they will be called, respectively,
//! the *generalized* RDF model, and the *strict* RDF model.
//!
//! # Getting Started
//!
//! Following a short example how to build a graph, mutate it and serialize it
//! back.
//!
//! ```
//! use sophia::graph::{*, inmem::FastGraph};
//! use sophia::ns::Namespace;
//! use sophia::parser::turtle;
//! use sophia::serializer::*;
//! use sophia::serializer::nt::NtSerializer;
//! use sophia::triple::stream::TripleSource;
//!
//! let example = r#"
//! @prefix : <http://example.org/>.
//! @prefix foaf: <http://xmlns.com/foaf/0.1/>.
//!
//! :alice foaf:name "Alice";
//! foaf:mbox <mailto:alice@work.example> .
//!
//! :bob foaf:name "Bob".
//! "#;
//! let mut graph: FastGraph = turtle::parse_str(example).collect_triples()?;
//!
//! let ex = Namespace::new("http://example.org/")?;
//! let foaf = Namespace::new("http://xmlns.com/foaf/0.1/")?;
//! graph.insert(
//! &ex.get("bob")?,
//! &foaf.get("knows")?,
//! &ex.get("alice")?,
//! )?;
//!
//! let mut nt_stringifier = NtSerializer::new_stringifier();
//! let example2 = nt_stringifier.serialize_graph(&mut graph)?.as_str();
//! println!("The resulting graph\n{}", example2);
//! # Ok::<(), Box<dyn std::error::Error>>(())
//! ```
/// This module re-exports symbols from
/// [`sophia_api::dataset`], [`sophia_indexed::dataset`] and [`sophia_inmem::dataset`].
/// This module re-exports symbols from
/// [`sophia_iri`].
/// This module re-exports symbols from
/// [`sophia_api::graph`], [`sophia_indexed::graph`] and [`sophia_inmem::graph`].
/// This module re-exports symbols from
/// [`sophia_api::ns`].
/// This module re-exports symbols from
/// [`sophia_api::parser`] and [`sophia_turtle::parser`].
/// If the `xml` feature is enabled, it also re-exports
/// [`sophia_xml::parser`] as [`xml`](crate::parser::xml).
/// This module re-exports symbols from
/// [`sophia_api::prefix`].
/// This module re-exports symbols from
/// [`sophia_api::quad`].
/// This module re-exports symbols from
/// [`sophia_api::serializer`] and [`sophia_turtle::serializer`].
/// If the `xml` feature is enabled, it also re-exports
/// [`sophia_xml::serializer`] as [`xml`](crate::serializer::xml).
/// This module re-exports symbols from
/// [`sophia_api::sparql`].
/// This module re-exports symbols from
/// This module re-exports symbols from
/// [`sophia_api::term`]
/// and
/// [`sophia_term`].
/// This module re-exports symbols from
/// [`sophia_api::triple`].