Fixes typos in the documentation

pull/190/head
Tpt 3 years ago
parent e34e56beef
commit ad4bfe35c2
  1. 2
      README.md
  2. 16
      bench/README.md
  3. 2
      js/README.md
  4. 2
      lib/README.md
  5. 2
      lib/oxrdf/README.md
  6. 16
      lib/oxrdf/src/blank_node.rs
  7. 8
      lib/oxrdf/src/dataset.rs
  8. 4
      lib/oxrdf/src/literal.rs
  9. 4
      lib/oxrdf/src/named_node.rs
  10. 16
      lib/oxrdf/src/triple.rs
  11. 2
      lib/sparesults/README.md
  12. 2
      lib/sparesults/src/lib.rs
  13. 2
      lib/spargebra/README.md
  14. 8
      lib/spargebra/src/term.rs
  15. 2
      lib/src/io/format.rs
  16. 4
      lib/src/store.rs
  17. 2
      python/README.md
  18. 4
      python/docs/index.rst
  19. 4
      python/src/io.rs
  20. 12
      python/src/model.rs
  21. 18
      python/src/store.rs
  22. 8
      server/README.md

@ -51,4 +51,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -3,15 +3,15 @@ BSBM
The [Berlin SPARQL Benchmark (BSBM)](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/) is a simple SPARQL benchmark. The [Berlin SPARQL Benchmark (BSBM)](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/) is a simple SPARQL benchmark.
It provides a dataset generator and multiple set of queries grouped by "use cases". It provides a dataset generator and multiple sets of queries grouped by "use cases".
## Results ## Results
We compare here Oxigraph with some existing SPARQL implementations (Blazegraph, GraphDB, Jena and Virtuoso). We compare here Oxigraph with some existing SPARQL implementations (Blazegraph, GraphDB, Jena, and Virtuoso).
The dataset used in the following charts is generated with 100k "products" (see [its spec](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/Dataset/index.html)). It leads to the creation of 35M triples. The dataset used in the following charts is generated with 100k "products" (see [its spec](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/Dataset/index.html)). It leads to the creation of 35M triples.
It has been executed on a PrevailPro P3000 with 32GB of RAM. It has been executed on a PrevailPro P3000 with 32GB of RAM.
The tests have been executed with a concurrency factor of 16 (i.e. at most 16 queries are send at the same time to the server). The tests have been executed with a concurrency factor of 16 (i.e. at most 16 queries are sent at the same time to the server).
Beware, the graph *y* axis is in log scale to properly display on the same graph systems with very different speed behaviors. Beware, the graph *y* axis is in log scale to properly display on the same graph systems with very different speed behaviors.
@ -23,9 +23,9 @@ Query 6 existed in previous versions of the benchmark but is now removed.
![explore use case results](bsbm.explore.svg) ![explore use case results](bsbm.explore.svg)
### Explore and update ### Explore and update
The [explore and update use case](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/index.html#usecase_explore_and_update) is composed of the 2 operations of the [update use case](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/UpdateUseCase/index.html) (`INSERT DATA` and `DELETE WHERE`) and the 11 queries of the [explore use case](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/ExploreUseCase/index.html) and the . The [explore and update use case](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/index.html#usecase_explore_and_update) is composed of the 2 operations of the [update use case](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/UpdateUseCase/index.html) (`INSERT DATA` and `DELETE WHERE`) and the 11 queries of the [explore use case](http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/ExploreUseCase/index.html).
The first two elements (1 and 2) are the 2 updates and the other (3 to 14) are the 11 queries. The first two elements (1 and 2) are the 2 updates and the others (3 to 14) are the 11 queries.
![explore use case results](bsbm.exploreAndUpdate.svg) ![explore use case results](bsbm.exploreAndUpdate.svg)
@ -36,7 +36,7 @@ The [business intelligence use case](http://wifo5-03.informatik.uni-mannheim.de/
Query 4 seems to be failing on Virtuoso and query 5 on Blazegraph and GraphDB. Query 4 seems to be failing on Virtuoso and query 5 on Blazegraph and GraphDB.
Oxigraph is still too slow to evaluate most of the queries. Oxigraph is still too slow to evaluate most of the queries.
It will be added in the graph after enough optimizations are done. It will be added to the graph after enough optimizations are done.
![explore use case results](bsbm.businessIntelligence.svg) ![explore use case results](bsbm.businessIntelligence.svg)
--> -->
@ -46,8 +46,8 @@ It will be added in the graph after enough optimizations are done.
The code of the benchmark is in the `bsbm-tools` submodule. You should pull it with a `git submodule update` before running the benchmark. The code of the benchmark is in the `bsbm-tools` submodule. You should pull it with a `git submodule update` before running the benchmark.
To run the benchmark for Oxigraph run `bash bsbm_oxigraph.sh`. It will compile the current Oxigraph code and run the benchmark against it. To run the benchmark for Oxigraph run `bash bsbm_oxigraph.sh`. It will compile the current Oxigraph code and run the benchmark against it.
You could tweak the number of products in the dataset using the environment variables at the beginning of `bsbm_oxigraph.sh`. You can tweak the number of products in the dataset and the number of concurrent requests using the environment variables at the beginning of `bsbm_oxigraph.sh`.
To generate the plots run `python3 bsbsm-plot.py`. To generate the plots run `python3 bsbsm-plot.py`.
Scripts are also provided for the other benchmarks (`bsbm_blazegraph.sh`, `bsbm_graphdb.sh`, `bsbm_jena.sh` and `bsbm_virtuoso.sh`). Scripts are also provided for the other systems (`bsbm_blazegraph.sh`, `bsbm_graphdb.sh`, `bsbm_jena.sh` and `bsbm_virtuoso.sh`).

@ -219,4 +219,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -68,4 +68,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -46,4 +46,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -9,9 +9,9 @@ use std::str;
/// The common way to create a new blank node is to use the [`BlankNode::default()`] function. /// The common way to create a new blank node is to use the [`BlankNode::default()`] function.
/// ///
/// It is also possible to create a blank node from a blank node identifier using the [`BlankNode::new()`] function. /// It is also possible to create a blank node from a blank node identifier using the [`BlankNode::new()`] function.
/// The blank node identifier must be valid according to N-Triples, Turtle and SPARQL grammars. /// The blank node identifier must be valid according to N-Triples, Turtle, and SPARQL grammars.
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::BlankNode; /// use oxrdf::BlankNode;
/// ///
@ -33,7 +33,7 @@ enum BlankNodeContent {
impl BlankNode { impl BlankNode {
/// Creates a blank node from a unique identifier. /// Creates a blank node from a unique identifier.
/// ///
/// The blank node identifier must be valid according to N-Triples, Turtle and SPARQL grammars. /// The blank node identifier must be valid according to N-Triples, Turtle, and SPARQL grammars.
/// ///
/// In most cases, it is much more convenient to create a blank node using [`BlankNode::default()`] /// In most cases, it is much more convenient to create a blank node using [`BlankNode::default()`]
///that creates a random ID that could be easily inlined by Oxigraph stores. ///that creates a random ID that could be easily inlined by Oxigraph stores.
@ -46,7 +46,7 @@ impl BlankNode {
/// Creates a blank node from a unique identifier without validation. /// Creates a blank node from a unique identifier without validation.
/// ///
/// It is the caller's responsibility to ensure that `id` is a valid blank node identifier /// It is the caller's responsibility to ensure that `id` is a valid blank node identifier
/// according to N-Triples, Turtle and SPARQL grammars. /// according to N-Triples, Turtle, and SPARQL grammars.
/// ///
/// [`BlankNode::new()`] is a safe version of this constructor and should be used for untrusted data. /// [`BlankNode::new()`] is a safe version of this constructor and should be used for untrusted data.
#[inline] #[inline]
@ -120,9 +120,9 @@ impl Default for BlankNode {
/// The common way to create a new blank node is to use the [`BlankNode::default`] trait method. /// The common way to create a new blank node is to use the [`BlankNode::default`] trait method.
/// ///
/// It is also possible to create a blank node from a blank node identifier using the [`BlankNodeRef::new()`] function. /// It is also possible to create a blank node from a blank node identifier using the [`BlankNodeRef::new()`] function.
/// The blank node identifier must be valid according to N-Triples, Turtle and SPARQL grammars. /// The blank node identifier must be valid according to N-Triples, Turtle, and SPARQL grammars.
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::BlankNodeRef; /// use oxrdf::BlankNodeRef;
/// ///
@ -144,7 +144,7 @@ enum BlankNodeRefContent<'a> {
impl<'a> BlankNodeRef<'a> { impl<'a> BlankNodeRef<'a> {
/// Creates a blank node from a unique identifier. /// Creates a blank node from a unique identifier.
/// ///
/// The blank node identifier must be valid according to N-Triples, Turtle and SPARQL grammars. /// The blank node identifier must be valid according to N-Triples, Turtle, and SPARQL grammars.
/// ///
/// In most cases, it is much more convenient to create a blank node using [`BlankNode::default()`]. /// In most cases, it is much more convenient to create a blank node using [`BlankNode::default()`].
/// that creates a random ID that could be easily inlined by Oxigraph stores. /// that creates a random ID that could be easily inlined by Oxigraph stores.
@ -156,7 +156,7 @@ impl<'a> BlankNodeRef<'a> {
/// Creates a blank node from a unique identifier without validation. /// Creates a blank node from a unique identifier without validation.
/// ///
/// It is the caller's responsibility to ensure that `id` is a valid blank node identifier /// It is the caller's responsibility to ensure that `id` is a valid blank node identifier
/// according to N-Triples, Turtle and SPARQL grammars. /// according to N-Triples, Turtle, and SPARQL grammars.
/// ///
/// [`BlankNodeRef::new()`) is a safe version of this constructor and should be used for untrusted data. /// [`BlankNodeRef::new()`) is a safe version of this constructor and should be used for untrusted data.
#[inline] #[inline]

@ -105,7 +105,7 @@ impl Dataset {
Self::default() Self::default()
} }
/// Provides a read-only view on a [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in this dataset. /// Provides a read-only view on an [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in this dataset.
/// ///
/// ``` /// ```
/// use oxrdf::*; /// use oxrdf::*;
@ -128,7 +128,7 @@ impl Dataset {
} }
} }
/// Provides a read/write view on a [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in this dataset. /// Provides a read/write view on an [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in this dataset.
/// ///
/// ``` /// ```
/// use oxrdf::*; /// use oxrdf::*;
@ -907,7 +907,7 @@ impl fmt::Display for Dataset {
} }
} }
/// A read-only view on a [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in a [`Dataset`]. /// A read-only view on an [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in a [`Dataset`].
/// ///
/// It is built using the [`Dataset::graph`] method. /// It is built using the [`Dataset::graph`] method.
/// ///
@ -1242,7 +1242,7 @@ impl<'a> fmt::Display for GraphView<'a> {
} }
} }
/// A read/write view on a [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in a [`Dataset`]. /// A read/write view on an [RDF graph](https://www.w3.org/TR/rdf11-concepts/#dfn-graph) contained in a [`Dataset`].
/// ///
/// It is built using the [`Dataset::graph_mut`] method. /// It is built using the [`Dataset::graph_mut`] method.
/// ///

@ -10,7 +10,7 @@ use std::option::Option;
/// An owned RDF [literal](https://www.w3.org/TR/rdf11-concepts/#dfn-literal). /// An owned RDF [literal](https://www.w3.org/TR/rdf11-concepts/#dfn-literal).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// # use oxilangtag::LanguageTagParseError; /// # use oxilangtag::LanguageTagParseError;
/// use oxrdf::Literal; /// use oxrdf::Literal;
@ -295,7 +295,7 @@ impl From<f64> for Literal {
/// A borrowed RDF [literal](https://www.w3.org/TR/rdf11-concepts/#dfn-literal). /// A borrowed RDF [literal](https://www.w3.org/TR/rdf11-concepts/#dfn-literal).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::LiteralRef; /// use oxrdf::LiteralRef;
/// use oxrdf::vocab::xsd; /// use oxrdf::vocab::xsd;

@ -4,7 +4,7 @@ use std::fmt;
/// An owned RDF [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri). /// An owned RDF [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::NamedNode; /// use oxrdf::NamedNode;
/// ///
@ -93,7 +93,7 @@ impl PartialEq<NamedNode> for &str {
/// A borrowed RDF [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri). /// A borrowed RDF [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::NamedNodeRef; /// use oxrdf::NamedNodeRef;
/// ///

@ -696,7 +696,7 @@ impl<'a> From<TermRef<'a>> for Term {
/// An owned [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple). /// An owned [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::{Triple, NamedNode}; /// use oxrdf::{Triple, NamedNode};
/// ///
@ -737,7 +737,7 @@ impl Triple {
} }
} }
/// Encodes that this triple is in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// Encodes that this triple is in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
#[inline] #[inline]
pub fn in_graph(self, graph_name: impl Into<GraphName>) -> Quad { pub fn in_graph(self, graph_name: impl Into<GraphName>) -> Quad {
Quad { Quad {
@ -767,7 +767,7 @@ impl fmt::Display for Triple {
/// A borrowed [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple). /// A borrowed [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation: /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation:
/// ``` /// ```
/// use oxrdf::{TripleRef, NamedNodeRef}; /// use oxrdf::{TripleRef, NamedNodeRef};
/// ///
@ -809,7 +809,7 @@ impl<'a> TripleRef<'a> {
} }
} }
/// Encodes that this triple is in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// Encodes that this triple is in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
#[inline] #[inline]
pub fn in_graph(self, graph_name: impl Into<GraphNameRef<'a>>) -> QuadRef<'a> { pub fn in_graph(self, graph_name: impl Into<GraphNameRef<'a>>) -> QuadRef<'a> {
QuadRef { QuadRef {
@ -1009,7 +1009,7 @@ impl<'a> From<GraphNameRef<'a>> for GraphName {
} }
} }
/// An owned [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// An owned [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
/// ///
/// The default string formatter is returning an N-Quads compatible representation: /// The default string formatter is returning an N-Quads compatible representation:
/// ``` /// ```
@ -1042,7 +1042,7 @@ pub struct Quad {
} }
impl Quad { impl Quad {
/// Builds an RDF [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// Builds an RDF [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
#[inline] #[inline]
pub fn new( pub fn new(
subject: impl Into<Subject>, subject: impl Into<Subject>,
@ -1087,7 +1087,7 @@ impl From<Quad> for Triple {
} }
} }
/// A borrowed [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// A borrowed [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
/// ///
/// The default string formatter is returning an N-Quads compatible representation: /// The default string formatter is returning an N-Quads compatible representation:
/// ``` /// ```
@ -1120,7 +1120,7 @@ pub struct QuadRef<'a> {
} }
impl<'a> QuadRef<'a> { impl<'a> QuadRef<'a> {
/// Builds an RDF [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// Builds an RDF [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
#[inline] #[inline]
pub fn new( pub fn new(
subject: impl Into<SubjectRef<'a>>, subject: impl Into<SubjectRef<'a>>,

@ -68,4 +68,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -96,7 +96,7 @@ impl QueryResultsFormat {
/// Looks for a known format from a media type. /// Looks for a known format from a media type.
/// ///
/// It supports some media type aliases. /// It supports some media type aliases.
/// For example "application/xml" is going to return `Xml` even if it is not its canonical media type. /// For example, "application/xml" is going to return `Xml` even if it is not its canonical media type.
/// ///
/// Example: /// Example:
/// ``` /// ```

@ -43,4 +43,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -6,7 +6,7 @@ use std::fmt::Write;
/// The union of [IRIs](https://www.w3.org/TR/rdf11-concepts/#dfn-iri) and [triples](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple). /// The union of [IRIs](https://www.w3.org/TR/rdf11-concepts/#dfn-iri) and [triples](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation.
#[derive(Eq, PartialEq, Debug, Clone, Hash)] #[derive(Eq, PartialEq, Debug, Clone, Hash)]
pub enum GroundSubject { pub enum GroundSubject {
NamedNode(NamedNode), NamedNode(NamedNode),
@ -74,7 +74,7 @@ impl TryFrom<GroundTerm> for GroundSubject {
/// The union of [IRIs](https://www.w3.org/TR/rdf11-concepts/#dfn-iri), [literals](https://www.w3.org/TR/rdf11-concepts/#dfn-literal) and [triples](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple). /// The union of [IRIs](https://www.w3.org/TR/rdf11-concepts/#dfn-iri), [literals](https://www.w3.org/TR/rdf11-concepts/#dfn-literal) and [triples](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple).
/// ///
/// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. /// The default string formatter is returning an N-Triples, Turtle, and SPARQL compatible representation.
#[derive(Eq, PartialEq, Debug, Clone, Hash)] #[derive(Eq, PartialEq, Debug, Clone, Hash)]
pub enum GroundTerm { pub enum GroundTerm {
NamedNode(NamedNode), NamedNode(NamedNode),
@ -229,7 +229,7 @@ impl TryFrom<GraphNamePattern> for GraphName {
} }
} }
/// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset).
/// ///
/// The default string formatter is returning a N-Quads representation. /// The default string formatter is returning a N-Quads representation.
/// ///
@ -304,7 +304,7 @@ impl TryFrom<QuadPattern> for Quad {
} }
} }
/// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset) without blank nodes. /// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in an [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset) without blank nodes.
/// ///
/// The default string formatter is returning a N-Quads representation. /// The default string formatter is returning a N-Quads representation.
/// ///

@ -63,7 +63,7 @@ impl GraphFormat {
/// Looks for a known format from a media type. /// Looks for a known format from a media type.
/// ///
/// It supports some media type aliases. /// It supports some media type aliases.
/// For example "application/xml" is going to return `GraphFormat::RdfXml` even if it is not its canonical media type. /// For example, "application/xml" is going to return `GraphFormat::RdfXml` even if it is not its canonical media type.
/// ///
/// Example: /// Example:
/// ``` /// ```

@ -49,7 +49,7 @@ use std::{fmt, str};
/// Allows to query and update it using SPARQL. /// Allows to query and update it using SPARQL.
/// It is based on the [RocksDB](https://rocksdb.org/) key-value store. /// It is based on the [RocksDB](https://rocksdb.org/) key-value store.
/// ///
/// This store ensure the "repeatable read" isolation level: the store only exposes changes that have /// This store ensures the "repeatable read" isolation level: the store only exposes changes that have
/// been "committed" (i.e. no partial writes) and the exposed state does not change for the complete duration /// been "committed" (i.e. no partial writes) and the exposed state does not change for the complete duration
/// of a read operation (e.g. a SPARQL query) or a read/write operation (e.g. a SPARQL update). /// of a read operation (e.g. a SPARQL query) or a read/write operation (e.g. a SPARQL update).
/// ///
@ -281,7 +281,7 @@ impl Store {
/// Executes a transaction. /// Executes a transaction.
/// ///
/// Transaction ensures the "repeatable read" isolation level: the store only exposes changes that have /// Transactions ensure the "repeatable read" isolation level: the store only exposes changes that have
/// been "committed" (i.e. no partial writes) and the exposed state does not change for the complete duration /// been "committed" (i.e. no partial writes) and the exposed state does not change for the complete duration
/// of a read operation (e.g. a SPARQL query) or a read/write operation (e.g. a SPARQL update). /// of a read operation (e.g. a SPARQL query) or a read/write operation (e.g. a SPARQL update).
/// ///

@ -57,4 +57,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

@ -16,7 +16,7 @@ Pyoxigraph is a Python graph database library implementing the `SPARQL <https://
It is built on top of `Oxigraph <https://crates.io/crates/oxigraph>`_ using `PyO3 <https://pyo3.rs/>`_. It is built on top of `Oxigraph <https://crates.io/crates/oxigraph>`_ using `PyO3 <https://pyo3.rs/>`_.
It also provides a set of utility functions for reading, writing and processing RDF files in It also provides a set of utility functions for reading, writing, and processing RDF files in
`Turtle <https://www.w3.org/TR/turtle/>`_, `Turtle <https://www.w3.org/TR/turtle/>`_,
`TriG <https://www.w3.org/TR/trig/>`_, `TriG <https://www.w3.org/TR/trig/>`_,
`N-Triples <https://www.w3.org/TR/n-triples/>`_, `N-Triples <https://www.w3.org/TR/n-triples/>`_,
@ -25,7 +25,7 @@ It also provides a set of utility functions for reading, writing and processing
Pyoxigraph is `distributed on Pypi <https://pypi.org/project/pyoxigraph/>`_. Pyoxigraph is `distributed on Pypi <https://pypi.org/project/pyoxigraph/>`_.
There is also a small library providing an `rdflib <https://rdflib.readthedocs.io>`_ store using pyoxigraph: `oxrdflib <https://github.com/oxigraph/oxrdflib>`_. There is also a small library providing a `rdflib <https://rdflib.readthedocs.io>`_ store using pyoxigraph: `oxrdflib <https://github.com/oxigraph/oxrdflib>`_.
Oxigraph and pyoxigraph source code are on `GitHub <https://github.com/oxigraph/oxigraph/tree/master/python>`_. Oxigraph and pyoxigraph source code are on `GitHub <https://github.com/oxigraph/oxigraph/tree/master/python>`_.

@ -27,7 +27,7 @@ pub fn add_to_module(module: &PyModule) -> PyResult<()> {
/// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``) /// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``)
/// ///
/// It supports also some MIME type aliases. /// It supports also some MIME type aliases.
/// For example ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_ /// For example, ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_
/// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_. /// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_.
/// ///
/// :param input: The binary I/O object to read from. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'rb')``. /// :param input: The binary I/O object to read from. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'rb')``.
@ -94,7 +94,7 @@ pub fn parse(
/// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``) /// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``)
/// ///
/// It supports also some MIME type aliases. /// It supports also some MIME type aliases.
/// For example ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_ /// For example, ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_
/// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_. /// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_.
/// ///
/// :param input: the RDF triples and quads to serialize. /// :param input: the RDF triples and quads to serialize.

@ -15,7 +15,7 @@ use std::vec::IntoIter;
/// :type value: str /// :type value: str
/// :raises ValueError: if the IRI is not valid according to `RFC 3987 <https://tools.ietf.org/rfc/rfc3987>`_. /// :raises ValueError: if the IRI is not valid according to `RFC 3987 <https://tools.ietf.org/rfc/rfc3987>`_.
/// ///
/// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle and SPARQL: /// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle, and SPARQL:
/// ///
/// >>> str(NamedNode('http://example.com')) /// >>> str(NamedNode('http://example.com'))
/// '<http://example.com>' /// '<http://example.com>'
@ -115,9 +115,9 @@ impl PyNamedNode {
/// ///
/// :param value: the `blank node ID <https://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier>`_ (if not present, a random blank node ID is automatically generated). /// :param value: the `blank node ID <https://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier>`_ (if not present, a random blank node ID is automatically generated).
/// :type value: str, optional /// :type value: str, optional
/// :raises ValueError: if the blank node ID is invalid according to NTriples, Turtle and SPARQL grammars. /// :raises ValueError: if the blank node ID is invalid according to NTriples, Turtle, and SPARQL grammars.
/// ///
/// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle and SPARQL: /// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle, and SPARQL:
/// ///
/// >>> str(BlankNode('ex')) /// >>> str(BlankNode('ex'))
/// '_:ex' /// '_:ex'
@ -226,7 +226,7 @@ impl PyBlankNode {
/// :type language: str, optional /// :type language: str, optional
/// :raises ValueError: if the language tag is not valid according to `RFC 5646 <https://tools.ietf.org/rfc/rfc5646>`_ (`BCP 47 <https://tools.ietf.org/rfc/bcp/bcp47>`_). /// :raises ValueError: if the language tag is not valid according to `RFC 5646 <https://tools.ietf.org/rfc/rfc5646>`_ (`BCP 47 <https://tools.ietf.org/rfc/bcp/bcp47>`_).
/// ///
/// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle and SPARQL: /// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle, and SPARQL:
/// ///
/// >>> str(Literal('example')) /// >>> str(Literal('example'))
/// '"example"' /// '"example"'
@ -523,7 +523,7 @@ impl IntoPy<PyObject> for PyTerm {
/// :param object: the triple object. /// :param object: the triple object.
/// :type object: NamedNode or BlankNode or Literal or Triple /// :type object: NamedNode or BlankNode or Literal or Triple
/// ///
/// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle and SPARQL: /// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle, and SPARQL:
/// ///
/// >>> str(Triple(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1'))) /// >>> str(Triple(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1')))
/// '<http://example.com> <http://example.com/p> "1"' /// '<http://example.com> <http://example.com/p> "1"'
@ -697,7 +697,7 @@ impl IntoPy<PyObject> for PyGraphName {
/// :param graph: the quad graph name. If not present, the default graph is assumed. /// :param graph: the quad graph name. If not present, the default graph is assumed.
/// :type graph: NamedNode or BlankNode or DefaultGraph or None, optional /// :type graph: NamedNode or BlankNode or DefaultGraph or None, optional
/// ///
/// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle and SPARQL: /// The :py:func:`str` function provides a serialization compatible with NTriples, Turtle, and SPARQL:
/// ///
/// >>> str(Quad(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1'), NamedNode('http://example.com/g'))) /// >>> str(Quad(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1'), NamedNode('http://example.com/g')))
/// '<http://example.com> <http://example.com/p> "1" <http://example.com/g>' /// '<http://example.com> <http://example.com/p> "1" <http://example.com/g>'

@ -17,13 +17,13 @@ use std::io::BufReader;
/// It encodes a `RDF dataset <https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset>`_ and allows to query it using SPARQL. /// It encodes a `RDF dataset <https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset>`_ and allows to query it using SPARQL.
/// It is based on the `RocksDB <https://rocksdb.org/>`_ key-value database. /// It is based on the `RocksDB <https://rocksdb.org/>`_ key-value database.
/// ///
/// This store ensure the "repeatable read" isolation level: the store only exposes changes that have /// This store ensures the "repeatable read" isolation level: the store only exposes changes that have
/// been "committed" (i.e. no partial writes) and the exposed state does not change for the complete duration /// been "committed" (i.e. no partial writes) and the exposed state does not change for the complete duration
/// of a read operation (e.g. a SPARQL query) or a read/write operation (e.g. a SPARQL update). /// of a read operation (e.g. a SPARQL query) or a read/write operation (e.g. a SPARQL update).
/// ///
/// :param path: the path of the directory in which the store should read and write its data. If the directory does not exist, it is created. /// :param path: the path of the directory in which the store should read and write its data. If the directory does not exist, it is created.
/// If no directory is provided a temporary one is created and removed when the Python garbage collector removes the store. /// If no directory is provided a temporary one is created and removed when the Python garbage collector removes the store.
/// In this case the store data are kept in memory and never written on disk. /// In this case, the store data are kept in memory and never written on disk.
/// :type path: str or None, optional. /// :type path: str or None, optional.
/// :raises IOError: if the target directory contains invalid data or could not be accessed. /// :raises IOError: if the target directory contains invalid data or could not be accessed.
/// ///
@ -250,7 +250,7 @@ impl PyStore {
/// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``) /// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``)
/// ///
/// It supports also some MIME type aliases. /// It supports also some MIME type aliases.
/// For example ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_ /// For example, ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_
/// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_. /// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_.
/// ///
/// :param input: The binary I/O object to read from. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'rb')``. /// :param input: The binary I/O object to read from. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'rb')``.
@ -259,7 +259,7 @@ impl PyStore {
/// :type mime_type: str /// :type mime_type: str
/// :param base_iri: the base IRI used to resolve the relative IRIs in the file or :py:const:`None` if relative IRI resolution should not be done. /// :param base_iri: the base IRI used to resolve the relative IRIs in the file or :py:const:`None` if relative IRI resolution should not be done.
/// :type base_iri: str or None, optional /// :type base_iri: str or None, optional
/// :param to_graph: if it is a file composed of triples, the graph in which store the triples. By default, the default graph is used. /// :param to_graph: if it is a file composed of triples, the graph in which the triples should be stored. By default, the default graph is used.
/// :type to_graph: NamedNode or BlankNode or DefaultGraph or None, optional /// :type to_graph: NamedNode or BlankNode or DefaultGraph or None, optional
/// :raises ValueError: if the MIME type is not supported or the `to_graph` parameter is given with a quad file. /// :raises ValueError: if the MIME type is not supported or the `to_graph` parameter is given with a quad file.
/// :raises SyntaxError: if the provided data is invalid. /// :raises SyntaxError: if the provided data is invalid.
@ -326,7 +326,7 @@ impl PyStore {
/// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``) /// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``)
/// ///
/// It supports also some MIME type aliases. /// It supports also some MIME type aliases.
/// For example ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_ /// For example, ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_
/// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_. /// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_.
/// ///
/// :param input: The binary I/O object to read from. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'rb')``. /// :param input: The binary I/O object to read from. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'rb')``.
@ -335,7 +335,7 @@ impl PyStore {
/// :type mime_type: str /// :type mime_type: str
/// :param base_iri: the base IRI used to resolve the relative IRIs in the file or :py:const:`None` if relative IRI resolution should not be done. /// :param base_iri: the base IRI used to resolve the relative IRIs in the file or :py:const:`None` if relative IRI resolution should not be done.
/// :type base_iri: str or None, optional /// :type base_iri: str or None, optional
/// :param to_graph: if it is a file composed of triples, the graph in which store the triples. By default, the default graph is used. /// :param to_graph: if it is a file composed of triples, the graph in which the triples should be stored. By default, the default graph is used.
/// :type to_graph: NamedNode or BlankNode or DefaultGraph or None, optional /// :type to_graph: NamedNode or BlankNode or DefaultGraph or None, optional
/// :raises ValueError: if the MIME type is not supported or the `to_graph` parameter is given with a quad file. /// :raises ValueError: if the MIME type is not supported or the `to_graph` parameter is given with a quad file.
/// :raises SyntaxError: if the provided data is invalid. /// :raises SyntaxError: if the provided data is invalid.
@ -397,7 +397,7 @@ impl PyStore {
/// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``) /// * `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_ (``application/rdf+xml``)
/// ///
/// It supports also some MIME type aliases. /// It supports also some MIME type aliases.
/// For example ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_ /// For example, ``application/turtle`` could also be used for `Turtle <https://www.w3.org/TR/turtle/>`_
/// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_. /// and ``application/xml`` for `RDF/XML <https://www.w3.org/TR/rdf-syntax-grammar/>`_.
/// ///
/// :param output: The binary I/O object to write to. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'wb')``. /// :param output: The binary I/O object to write to. For example, it could be a file opened in binary mode with ``open('my_file.ttl', 'wb')``.
@ -494,7 +494,7 @@ impl PyStore {
/// Removes a graph from the store. /// Removes a graph from the store.
/// ///
/// The default graph will not be remove but just cleared. /// The default graph will not be removed but just cleared.
/// ///
/// :param graph_name: the name of the name graph to remove. /// :param graph_name: the name of the name graph to remove.
/// :type graph_name: NamedNode or BlankNode or DefaultGraph /// :type graph_name: NamedNode or BlankNode or DefaultGraph
@ -539,7 +539,7 @@ impl PyStore {
/// ///
/// If you want to move your data to another RDF storage system, you should have a look at the :py:func:`dump_dataset` function instead. /// If you want to move your data to another RDF storage system, you should have a look at the :py:func:`dump_dataset` function instead.
/// ///
/// :param target_directory: the name of directory to save the database to. /// :param target_directory: the directory name to save the database to.
/// :type target_directory: str /// :type target_directory: str
/// :raises IOError: if an I/O error happens during the backup. /// :raises IOError: if an I/O error happens during the backup.
#[pyo3(text_signature = "($self, target_directory)")] #[pyo3(text_signature = "($self, target_directory)")]

@ -44,12 +44,12 @@ It will create a fat binary in `target/release/oxigraph_server`.
## Usage ## Usage
Run `oxigraph_server --location my_data_storage_directory serve` to start the server where `my_data_storage_directory` is the directory where you want Oxigraph data to be stored in. It listens by default on `localhost:7878`. Run `oxigraph_server --location my_data_storage_directory serve` to start the server where `my_data_storage_directory` is the directory where you want Oxigraph data to be stored. It listens by default on `localhost:7878`.
The server provides an HTML UI, based on [YASGUI](https://yasgui.triply.cc), with a form to execute SPARQL requests. The server provides an HTML UI, based on [YASGUI](https://yasgui.triply.cc), with a form to execute SPARQL requests.
It provides the following REST actions: It provides the following REST actions:
* `/query` allows to evaluate SPARQL queries against the server repository following the [SPARQL 1.1 Protocol](https://www.w3.org/TR/sparql11-protocol/#query-operation). * `/query` allows evaluating SPARQL queries against the server repository following the [SPARQL 1.1 Protocol](https://www.w3.org/TR/sparql11-protocol/#query-operation).
For example: For example:
```bash ```bash
curl -X POST -H 'Content-Type:application/sparql-query' \ curl -X POST -H 'Content-Type:application/sparql-query' \
@ -223,7 +223,7 @@ It installs the `oxigraph_server` binary. [See the usage documentation to know h
## Migration guide ## Migration guide
### From 0.2 to 0.3 ### From 0.2 to 0.3
* The cli API have been completely rewritten. To start the server run `oxigraph_server serve --location MY_STORAGE` instead of `oxigraph_server --file MY_STORAGE`. * The cli API has been completely rewritten. To start the server run `oxigraph_server serve --location MY_STORAGE` instead of `oxigraph_server --file MY_STORAGE`.
* Fast data bulk loading is not supported using `oxigraph_server load --location MY_STORAGE --file MY_FILE`. The file format is guessed from the extension (`.nt`, `.ttl`, `.nq`...). * Fast data bulk loading is not supported using `oxigraph_server load --location MY_STORAGE --file MY_FILE`. The file format is guessed from the extension (`.nt`, `.ttl`, `.nq`...).
* [RDF-star](https://w3c.github.io/rdf-star/cg-spec) is now implemented. * [RDF-star](https://w3c.github.io/rdf-star/cg-spec) is now implemented.
* All operations are now transactional using the "repeatable read" isolation level: * All operations are now transactional using the "repeatable read" isolation level:
@ -245,4 +245,4 @@ at your option.
### Contribution ### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Loading…
Cancel
Save