1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Copyright 2017 Gerald Haesendonck
// Licensed under the Academic Free License version 3.0
//! ntriple, a library to parse N-Triples on a per string basis.
//!
//! # Examples
//!
//! Here's a typical example. It sends an input string (can be a line from a
//! file for example) to the `triple_line()` method of the `parser`,
//! which returns an `Option<Triple>` if the input is valid, or a `None` or `ParseError`
//! if the input is a comment or an invalid triple respectively.
//!
//! If you are sure that the input should be a triple and no comment, white space,
//! or other rubbish, you can just use the `triple` method, which omits the
//! `Option` and directly returns a `ParseResult<Triple>`.
//!
//! ```
//!use ntriple::parser::triple_line;
//!use ntriple::{Subject, Predicate, Object};
//!
//!fn main() {
//!
//! // Here's some input in n-triples format. Unicode escape sequences are resolved
//! // so \u30AA becomes オ.
//! let input = "_:subject <http://example.org/predicate> \"\\u30AAオブジェクト\".";
//!
//! // parse the input:
//! let parse_result = triple_line(&input);
//!
//! // The result contains an option, or an error when parsing the input failed.
//! match parse_result {
//!
//! // Ok if the input is a triple, a comment, an empty string or whitespace(s).
//! Ok(triple_option) => {
//! match triple_option {
//! Some(triple) => { // a valid triple is found.
//! match triple.subject {
//! // In this case we expect a blank node label
//! Subject::BNode(subject) => println!("Subject: blank node: {}", subject),
//! _ => println!("Weird, a blank node is expected here.")
//! };
//! match triple.predicate {
//! Predicate::IriRef(iri) => println!("Predicate: {}", iri)
//! };
//! match triple.object {
//! Object::Lit(literal) => println!("Object: literal: {} ", literal.data),
//! _ => println!("Weird, a literal is expected here.")
//! }
//! },
//! None => { println!("Skipped [{}]", input); }
//! };
//! },
//! // a parse error: the input is no valid triple, comment, empty string or whitespace(s)
//! Err(error) => println!("{}\n{}", input, error),
//! };
//!}
//! ```
/// Represents an RDF statement in the form of a triple.
/// Represents the subject part of a triple.
/// Represents the predicate part of a triple.
/// Represents the object part of a triple.
/// Represents either a type or a language.
/// Represents an RDF literal.