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
120
121
122
123
124
125
126
127
128
129
130
131
/*!
One-line description.

More detailed description, with

# Example

YYYYY

*/

use crate::model::{identifiers::Identifier, modules::Module};
use url::Url;

// ------------------------------------------------------------------------------------------------
// Public Macros
// ------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------
// Public Types
// ------------------------------------------------------------------------------------------------

pub const MODULE_NAME_DC: &str = "dc";
pub const MODULE_NAME_DC_TERMS: &str = "dc_terms";
pub const MODULE_NAME_OWL: &str = "owl";
pub const MODULE_NAME_RDF: &str = "rdf";
pub const MODULE_NAME_RDFS: &str = "rdfs";
pub const MODULE_NAME_SDML: &str = "sdml";
pub const MODULE_NAME_SKOS: &str = "skos";
pub const MODULE_NAME_XSD: &str = "xsd";

pub const MODULE_URL_DC: &str = "http://purl.org/dc/elements/1.1/";
pub const MODULE_URL_DC_TERMS: &str = "http://purl.org/dc/terms/";
pub const MODULE_URL_OWL: &str = "http://www.w3.org/2002/07/owl#";
pub const MODULE_URL_RDF: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
pub const MODULE_URL_RDFS: &str = "http://www.w3.org/2000/01/rdf-schema#";
pub const MODULE_URL_SDML: &str = "http://sdml.io/sdml-owl.ttl#";
pub const MODULE_URL_SKOS: &str = "http://www.w3.org/2004/02/skos/core#";
pub const MODULE_URL_XSD: &str = "http://www.w3.org/2001/XMLSchema#";

// ------------------------------------------------------------------------------------------------
// Public Functions
// ------------------------------------------------------------------------------------------------

pub fn is_library_module(name: &Identifier) -> bool {
    [
        MODULE_NAME_DC,
        MODULE_NAME_DC_TERMS,
        MODULE_NAME_OWL,
        MODULE_NAME_RDF,
        MODULE_NAME_RDFS,
        MODULE_NAME_SDML,
        MODULE_NAME_SKOS,
        MODULE_NAME_XSD,
    ]
    .contains(&name.as_ref())
}

pub fn library_module(name: &Identifier) -> Option<Module> {
    match name.as_ref() {
        MODULE_NAME_DC => Some(dc()),
        MODULE_NAME_DC_TERMS => Some(dc_terms()),
        MODULE_NAME_OWL => Some(rdf()),
        MODULE_NAME_RDF => Some(rdf()),
        MODULE_NAME_RDFS => Some(rdfs()),
        MODULE_NAME_SDML => Some(sdml()),
        MODULE_NAME_SKOS => Some(skos()),
        MODULE_NAME_XSD => Some(xsd()),
        _ => None,
    }
}

pub fn dc() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_DC))
        .with_base_uri(Url::parse(MODULE_URL_DC).unwrap())
}

pub fn dc_terms() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_DC_TERMS))
        .with_base_uri(Url::parse(MODULE_URL_DC_TERMS).unwrap())
}

pub fn owl() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_OWL))
        .with_base_uri(Url::parse(MODULE_URL_OWL).unwrap())
}

pub fn rdf() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_RDF))
        .with_base_uri(Url::parse(MODULE_URL_RDF).unwrap())
}

pub fn rdfs() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_RDFS))
        .with_base_uri(Url::parse(MODULE_URL_RDFS).unwrap())
}

pub fn sdml() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_SDML))
        .with_base_uri(Url::parse(MODULE_URL_SDML).unwrap())
}

pub fn skos() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_SKOS))
        .with_base_uri(Url::parse(MODULE_URL_SKOS).unwrap())
}

pub fn xsd() -> Module {
    Module::empty(Identifier::new_unchecked(MODULE_NAME_XSD))
        .with_base_uri(Url::parse(MODULE_URL_XSD).unwrap())
}

// ------------------------------------------------------------------------------------------------
// Private Macros
// ------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------
// Private Types
// ------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------
// Implementations
// ------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------
// Private Functions
// ------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------
// Modules
// ------------------------------------------------------------------------------------------------