19 个版本
新 0.2.0-alpha.6 | 2024 年 8 月 22 日 |
---|---|
0.2.0-alpha.5 | 2024 年 5 月 22 日 |
0.2.0-alpha.4 | 2024 年 3 月 23 日 |
0.1.8 | 2023 年 6 月 11 日 |
0.1.0 | 2022 年 3 月 19 日 |
#709 in 解析器实现
2,641 每月下载量
用于 27 个 crate (6 直接)
400KB
9K SLoC
Sparesults
Sparesults 是一组用于 SPARQL 查询结果格式的解析器和序列化器。
它支持 SPARQL 查询结果 XML 格式(第二版)、SPARQL 1.1 查询结果 JSON 格式 和 SPARQL 1.1 查询结果 CSV 和 TSV 格式。
也支持在 rdf-star
功能之后使用 SPARQL-star。
此 crate 旨在成为 Rust 中 SPARQL 客户端和服务器实现(如 Oxigraph)的构建块。
此库的入口点是两个 QueryResultsParser
和 QueryResultsSerializer
结构体。
使用示例:将 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