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
use iref::IriRefBuf;
use locspan::Loc;
pub use rdf_types::loc::Literal as RdfLiteral;
pub use rdf_types::{BlankIdBuf, StringLiteral};
#[derive(Clone, Debug)]
pub enum Iri<F> {
IriRef(IriRefBuf),
Compact(Option<Loc<String, F>>, Loc<String, F>),
}
pub struct Document<F> {
pub statements: Vec<Loc<Statement<F>, F>>,
}
impl<F> Document<F> {
pub fn base_prefix(&self) -> Option<iref::IriRef> {
for stm in &self.statements {
if let Statement::Directive(Directive::Base(iri)) = stm.as_ref() {
return Some(iri.as_iri_ref());
}
}
None
}
}
pub enum Statement<F> {
Directive(Directive<F>),
Triples(Loc<Subject<F>, F>, Vec<Loc<PredicateObjects<F>, F>>),
}
pub enum Directive<F> {
Prefix(Loc<String, F>, Loc<IriRefBuf, F>),
Base(Loc<IriRefBuf, F>),
SparqlPrefix(Loc<String, F>, Loc<IriRefBuf, F>),
SparqlBase(Loc<IriRefBuf, F>),
}
#[derive(Debug)]
pub enum Verb<F> {
A,
Predicate(Iri<F>),
}
#[derive(Debug)]
pub enum BlankNode<F> {
Label(BlankIdBuf),
Anonymous(Vec<Loc<PredicateObjects<F>, F>>),
}
pub enum Subject<F> {
Iri(Iri<F>),
BlankNode(BlankNode<F>),
Collection(Vec<Loc<Object<F>, F>>),
}
#[derive(Debug)]
pub enum Object<F> {
Iri(Iri<F>),
BlankNode(BlankNode<F>),
Collection(Vec<Loc<Self, F>>),
Literal(Literal<F>),
}
#[derive(Debug)]
pub struct PredicateObjects<F> {
pub verb: Loc<Verb<F>, F>,
pub objects: Loc<Vec<Loc<Object<F>, F>>, F>,
}
#[derive(Debug)]
pub enum Literal<F> {
Rdf(RdfLiteral<F>),
Numeric(Numeric),
Boolean(bool),
}
pub use crate::lexing::Numeric;