Crates.io | turtle-syntax |
lib.rs | turtle-syntax |
version | 6.0.0 |
source | src |
created_at | 2020-06-14 14:33:23.848685 |
updated_at | 2023-06-06 12:35:55.07537 |
description | RDF Turtle parser |
homepage | |
repository | https://github.com/timothee-haudebourg/turtle-syntax |
max_upload_size | |
id | 253867 |
size | 124,278 |
Turtle is a textual syntax for RDF that allows an RDF graph to be completely
written in a compact and natural text form, with abbreviations for common
usage patterns and datatypes. This library provides a Turtle parser for Rust that keeps tracks of code mapping metadata for each syntax node using the locspan
library.
Elements of the Turtle abstract syntax tree (implementing Parsable
)
are parsed using a Token
iterator (a.k.a a lexer).
A Lexer
can be created from a char
iterator.
We can then use the Document::parse
function to parse a Turtle document
from the lexer.
In the following example, we use the excellent codespan_reporting
crate
to report errors.
use codespan_reporting::diagnostic::{Diagnostic, Label};
use codespan_reporting::files::SimpleFiles;
use codespan_reporting::term::termcolor::{ColorChoice, StandardStream};
use locspan::Meta;
use std::fs::File;
use std::io::Read;
use turtle_syntax::{
parsing::Parse,
Document,
};
fn main() -> std::io::Result<()> {
let mut args = std::env::args();
args.next();
let mut files = SimpleFiles::new();
for filename in args {
let mut file = File::open(&filename)?;
let mut buffer = String::new();
file.read_to_string(&mut buffer)?;
let file_id = files.add(filename.clone(), buffer);
let buffer = files.get(file_id).unwrap();
match Document::parse_str(buffer.source().as_str(), |span| span) {
Ok(_doc) => {
// do something
}
Err(Meta(e, span)) => {
let diagnostic = Diagnostic::error()
.with_message(format!("parse error: {}", e))
.with_labels(vec![Label::primary(file_id, span)]);
let writer = StandardStream::stderr(ColorChoice::Auto);
let config = codespan_reporting::term::Config::default();
codespan_reporting::term::emit(&mut writer.lock(), &config, &files, &diagnostic)
.unwrap();
}
}
}
Ok(())
}
The above code will have the following kind of output when a syntax error is detected:
error: parse error: unexpected character ` `
┌─ examples/syntax_error.ttl:5:34
│
5 │ <http://www.w3.org/TR/rdf-syntax- grammar>
│ ^
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.