1use crate::model::{identifiers::Identifier, modules::Module};
6
7pub fn is_library_module(name: &Identifier) -> bool {
20 [
21 dc::MODULE_NAME,
22 dc::terms::MODULE_NAME,
23 iso_3166::MODULE_NAME,
24 iso_4217::MODULE_NAME,
25 owl::MODULE_NAME,
26 rdf::MODULE_NAME,
27 rdfs::MODULE_NAME,
28 sdml::MODULE_NAME,
29 skos::MODULE_NAME,
30 xsd::MODULE_NAME,
31 ]
32 .contains(&name.as_ref())
33}
34
35pub fn is_builtin_type_name(name: &Identifier) -> bool {
36 [
37 sdml::BINARY,
38 sdml::BOOLEAN,
39 sdml::DECIMAL,
40 sdml::DOUBLE,
41 sdml::INTEGER,
42 sdml::IRI,
43 sdml::LANGUAGE,
44 sdml::STRING,
45 sdml::UNSIGNED,
46 ]
47 .contains(&name.as_ref())
48}
49
50pub fn library_module(name: &Identifier) -> Option<Module> {
51 match name.as_ref() {
52 dc::MODULE_NAME => Some(dc::module()),
53 dc::terms::MODULE_NAME => Some(dc::terms::module()),
54 iso_3166::MODULE_NAME => Some(iso_3166::module()),
55 iso_4217::MODULE_NAME => Some(iso_4217::module()),
56 owl::MODULE_NAME => Some(owl::module()),
57 rdf::MODULE_NAME => Some(rdf::module()),
58 rdfs::MODULE_NAME => Some(rdfs::module()),
59 sdml::MODULE_NAME => Some(sdml::module()),
60 skos::MODULE_NAME => Some(skos::module()),
61 xsd::MODULE_NAME => Some(xsd::module()),
62 _ => None,
63 }
64}
65
66macro_rules! lstr {
71 ($value:literal) => {
72 $crate::model::values::LanguageString::new(
73 $value, None,
74 )
75 };
76 ($value:literal @en) => {
77 lstr!($value @ "en")
78 };
79 ($value:literal @ $lang:expr) => {
80 $crate::model::values::LanguageString::new(
81 $value,
82 Some(crate::model::values::LanguageTag::new_unchecked($lang)),
83 )
84 };
85}
86
87macro_rules! id {
88 ($id:expr) => {
89 $crate::model::identifiers::Identifier::new_unchecked($id)
90 };
91}
92
93macro_rules! qualid {
94 ($module:expr, $member:expr) => {
95 $crate::model::identifiers::QualifiedIdentifier::new(id!($module), id!($member))
96 };
97}
98
99macro_rules! idref {
100 ($module:expr, $member:expr) => {
101 $crate::model::identifiers::IdentifierReference::from(qualid!($module, $member))
102 };
103 ($id:expr) => {
104 $crate::model::identifiers::IdentifierReference::from(id!($id))
105 };
106}
107
108macro_rules! seq {
109 ($( $member:expr ),*) => {
110 $crate::model::values::SequenceOfValues::from(
111 vec![
112 $(
113 $crate::model::values::SequenceMember::from($member),
114 )*
115 ]
116 )
117 };
118}
119
120macro_rules! import {
121 ( $( $module:expr ),* ) => {
122 $crate::model::modules::ImportStatement::new(
123 vec![
124 $(
125 $crate::model::modules::Import::from(
126 $module
127 ),
128 )*
129 ]
130 )
131 };
132}
133
134macro_rules! simple {
135 ($value:expr) => {
136 $crate::model::values::SimpleValue::from($value)
137 };
138}
139
140macro_rules! tc {
141 ($module:expr, $name:expr => $value:expr) => {
142 $crate::model::values::ValueConstructor::new(idref!($module, $name), simple!($value))
143 };
144}
145
146macro_rules! prop {
147 ($module:expr, $name:expr; $value:expr) => {
148 $crate::model::annotations::AnnotationProperty::new(
149 qualid!($module, $name).into(),
150 $crate::model::values::Value::from($value),
151 )
152 }; }
159
160macro_rules! datatype {
161 ($name:expr => $module:expr, $base:expr) => {
162 $crate::model::definitions::DatatypeDef::new(id!($name), qualid!($module, $base).into())
163 }; }
170
171macro_rules! union {
172 ($name:expr => $( $idref:expr ),+) => {
173 $crate::model::definitions::UnionDef::new(id!($name))
174 .with_body(
175 $crate::model::definitions::UnionBody::default()
176 .with_variants(vec![
177 $(
178 $crate::model::definitions::TypeVariant::new(idref!($idref)),
179 )+
180 ])
181 )
182 };
183}
184
185macro_rules! rdf {
186 ($kind:ident, $id:expr, $in:expr) => {
188 $crate::model::definitions::RdfDef::$kind(id!($id))
189 .with_label($crate::model::values::LanguageString::from($id))
190 .with_is_defined_by($in.clone())
191 };
192 (thing $id:expr, $in:expr; $( ( $super_mod:expr, $super:expr ) ),*) => {
194 rdf!(individual, $id, $in)
195 $(
196 .with_super_class(qualid!($super_mod, $super))
197 )*
198 };
199 (thing $id:expr, $in:expr, $( $type:expr ),+) => {
200 rdf!(individual, $id, $in)
201 $(
202 .with_type(id!($type))
203 )*
204 };
205 (class $id:expr, $in:expr; $( ($super_mod:expr, $super:expr) ),+) => {
207 rdf!(class, $id, $in)
208 $(
209 .with_super_class(qualid!($super_mod, $super))
210 )*
211 };
212 (class $id:expr, $in:expr; $( $super:expr ),+) => {
213 rdf!(class, $id, $in)
214 $(
215 .with_super_class(id!($super))
216 )*
217 };
218 (class $id:expr, $in:expr) => {
219 rdf!(class, $id, $in)
220 };
221 (datatype $id:expr, $in:expr; $( $super:expr ),*) => {
223 rdf!(datatype, $id, $in)
224 $(
225 .with_super_class(id!($super))
226 )*
227 };
228 (datatype $id:expr, $in:expr) => {
229 rdf!(datatype, $id, $in)
230 };
231 (property $id:expr, $in:expr; ( $dom_mod:expr, $dom:expr ) => ( $rge_mod:expr, $rge:expr )) => {
233 rdf!(property, $id, $in)
234 .with_domain(qualid!($dom_mod, $dom))
235 .with_range(qualid!($rge_mod, $rge))
236 };
237 (property $id:expr, $in:expr; ( $dom_mod:expr, $dom:expr ) => $rge:expr) => {
238 rdf!(property, $id, $in)
239 .with_domain(qualid!($dom_mod, $dom))
240 .with_range(id!($rge))
241 };
242 (property $id:expr, $in:expr; $dom:expr => ( $rge_mod:expr, $rge:expr ) ) => {
243 rdf!(property, $id, $in)
244 .with_domain(id!($dom))
245 .with_range(qualid!($rge_mod, $rge))
246 };
247 (property $id:expr, $in:expr; $dom:expr => $rge:expr) => {
248 rdf!(property, $id, $in)
249 .with_domain(id!($dom))
250 .with_range(id!($rge))
251 };
252 (property $id:expr, $in:expr; ( $dom_mod:expr, $dom:expr )) => {
253 rdf!(property, $id, $in)
254 .with_domain(qualid!($dom_mod, $dom))
255 };
256 (property $id:expr, $in:expr; $dom:expr) => {
257 rdf!(property, $id, $in)
258 .with_domain(id!($dom))
259 };
260 (property $id:expr, $in:expr => $rge:expr) => {
261 rdf!(property, $id, $in)
262 .with_range(id!($rge))
263 };
264 (property $id:expr, $in:expr, $( ($super_mod:expr, $super:expr) ),+ ) => {
265 rdf!(property, $id, $in)
266 $(
267 .with_super_property(qualid!($super_mod, $super))
268 )+
269 };
270 (property $id:expr, $in:expr, $( $super:expr ),+ ) => {
271 rdf!(property, $id, $in)
272 $(
273 .with_super_property(id!($super))
274 )+
275 };
276 (property $id:expr, $in:expr, $( $super:expr ),+; $dom:expr => $rge:expr ) => {
277 rdf!(property, $id, $in)
278 $(
279 .with_super_property(id!($super))
280 )+
281 .with_domain(id!($dom))
282 .with_range(id!($rge))
283 };
284 (property $id:expr, $in:expr) => {
285 rdf!(property, $id, $in)
286 };
287}
288
289pub mod dc;
306
307pub mod owl;
308
309pub mod rdf;
310
311pub mod rdfs;
312
313pub mod sdml;
314
315pub mod skos;
316
317pub mod xsd;
318
319pub mod iso_3166;
320
321pub mod iso_4217;