Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem https://nextgraph.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextgraph-rs/ng-oxigraph/src/sparesults
Niko PLP 7d6c5190c1 remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
..
README.md remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
csv.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
error.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
format.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
json.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
mod.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
parser.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
serializer.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
solution.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago
xml.rs remove all dependecies to oxigraph crates, and add dep to ng-rocksdb 6 months ago

README.md

Sparesults

Latest Version Released API docs Crates.io downloads actions status Gitter

Sparesults is a set of parsers and serializers for SPARQL query results formats.

It supports SPARQL Query Results XML Format (Second Edition), SPARQL 1.1 Query Results JSON Format and SPARQL 1.1 Query Results CSV and TSV Formats.

Support for SPARQL-star is also available behind the rdf-star feature.

This crate is intended to be a building piece for SPARQL client and server implementations in Rust like Oxigraph.

The entry points of this library are the two [QueryResultsParser] and [QueryResultsSerializer] structs.

Usage example converting a JSON result file into a TSV result file:

use sparesults::{QueryResultsFormat, QueryResultsParser, FromReadQueryResultsReader, QueryResultsSerializer};
use std::io::Result;

fn convert_json_to_tsv(json_file: &[u8]) -> Result<Vec<u8>> {
    let json_parser = QueryResultsParser::from_format(QueryResultsFormat::Json);
    let tsv_serializer = QueryResultsSerializer::from_format(QueryResultsFormat::Tsv);
    // We start to read the JSON file and see which kind of results it is
    match json_parser.parse_read(json_file)? {
        FromReadQueryResultsReader::Boolean(value) => {
            // it's a boolean result, we copy it in TSV to the output buffer
            tsv_serializer.serialize_boolean_to_write(Vec::new(), value)
        },
        FromReadQueryResultsReader::Solutions(solutions_reader) => {
            // it's a set of solutions, we create a writer and we write to it while reading in streaming from the JSON file
            let mut serialize_solutions_to_write = tsv_serializer.serialize_solutions_to_write(Vec::new(), solutions_reader.variables().to_vec())?;
            for solution in solutions_reader {
                serialize_solutions_to_write.write(&solution?)?;
            }
            serialize_solutions_to_write.finish()
        }
    }
}

// Let's test with a boolean
assert_eq!(
    convert_json_to_tsv(b"{\"boolean\":true}".as_slice()).unwrap(),
    b"true"
);

// And with a set of solutions
assert_eq!(
    convert_json_to_tsv(b"{\"head\":{\"vars\":[\"foo\",\"bar\"]},\"results\":{\"bindings\":[{\"foo\":{\"type\":\"literal\",\"value\":\"test\"}}]}}".as_slice()).unwrap(),
    b"?foo\t?bar\n\"test\"\t\n"
);

License

This project is licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
  • MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)

at your option.

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.