19 个版本

0.2.0-alpha.6 2024 年 8 月 22 日
0.2.0-alpha.52024 年 5 月 22 日
0.2.0-alpha.42024 年 3 月 23 日
0.1.8 2023 年 6 月 11 日
0.1.0 2022 年 3 月 19 日

#709 in 解析器实现

Download history 179/week @ 2024-05-03 78/week @ 2024-05-10 300/week @ 2024-05-17 306/week @ 2024-05-24 317/week @ 2024-05-31 238/week @ 2024-06-07 326/week @ 2024-06-14 182/week @ 2024-06-21 621/week @ 2024-06-28 196/week @ 2024-07-05 351/week @ 2024-07-12 214/week @ 2024-07-19 531/week @ 2024-07-26 252/week @ 2024-08-02 1419/week @ 2024-08-09 407/week @ 2024-08-16

2,641 每月下载量
用于 27 个 crate (6 直接)

MIT/Apache

400KB
9K SLoC

Sparesults

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

Sparesults 是一组用于 SPARQL 查询结果格式的解析器和序列化器。

它支持 SPARQL 查询结果 XML 格式(第二版)SPARQL 1.1 查询结果 JSON 格式SPARQL 1.1 查询结果 CSV 和 TSV 格式

也支持在 rdf-star 功能之后使用 SPARQL-star

此 crate 旨在成为 Rust 中 SPARQL 客户端和服务器实现(如 Oxigraph)的构建块。

此库的入口点是两个 QueryResultsParserQueryResultsSerializer 结构体。

使用示例:将 JSON 结果文件转换为 TSV 结果文件

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"
);

许可证

本项目受以下许可证之一许可

  • Apache 许可证 2.0 版,(LICENSE-APACHE<http://www.apache.org/licenses/LICENSE-2.0>)
  • MIT 许可证 (LICENSE-MIT<http://opensource.org/licenses/MIT>)

任选其一。

贡献

除非您明确说明,否则您根据 Apache-2.0 许可证定义的任何有意提交给 Oxigraph 的贡献,将根据上述方式双许可,无需任何额外条款或条件。

依赖项

~1.9–3.5MB
~66K SLoC