sdml_core/stdlib/
mod.rs

1/*!
2This module provides modules corresponding to the SDML standard library.
3*/
4
5use crate::model::{identifiers::Identifier, modules::Module};
6
7// ------------------------------------------------------------------------------------------------
8// Public Macros
9// ------------------------------------------------------------------------------------------------
10
11// ------------------------------------------------------------------------------------------------
12// Public Types
13// ------------------------------------------------------------------------------------------------
14
15// ------------------------------------------------------------------------------------------------
16// Public Functions
17// ------------------------------------------------------------------------------------------------
18
19pub 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
66// ------------------------------------------------------------------------------------------------
67// Private Macros
68// ------------------------------------------------------------------------------------------------
69
70macro_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    }; //($name:expr; $value:expr) => {
153       //    $crate::model::annotations::AnnotationProperty::new(
154       //        id!($name).into(),
155       //        $crate::model::values::Value::from($value)
156       //    )
157       //};
158}
159
160macro_rules! datatype {
161    ($name:expr => $module:expr, $base:expr) => {
162        $crate::model::definitions::DatatypeDef::new(id!($name), qualid!($module, $base).into())
163    }; //($name:expr => $base:expr) => {
164       //    $crate::model::definitions::DatatypeDef::new(
165       //        id!($name),
166       //        id!($base).into()
167       //    )
168       //};
169}
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    // --------------------------------------------------------------------------------------------
187    ($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    // --------------------------------------------------------------------------------------------
193    (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    // --------------------------------------------------------------------------------------------
206    (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    // --------------------------------------------------------------------------------------------
222    (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    // --------------------------------------------------------------------------------------------
232    (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
289// ------------------------------------------------------------------------------------------------
290// Private Types
291// ------------------------------------------------------------------------------------------------
292
293// ------------------------------------------------------------------------------------------------
294// Implementations
295// ------------------------------------------------------------------------------------------------
296
297// ------------------------------------------------------------------------------------------------
298// Private Functions
299// ------------------------------------------------------------------------------------------------
300
301// ------------------------------------------------------------------------------------------------
302// Modules
303// ------------------------------------------------------------------------------------------------
304
305pub 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;