sdml_core/stdlib/
rdfs.rs

1/*!
2This Rust module contains the SDML model of the SDML library module `rdfs` for RDF Schema.
3*/
4
5use crate::model::annotations::AnnotationBuilder;
6use crate::model::modules::Module;
7use crate::model::HasBody;
8use crate::stdlib::rdf;
9
10// ------------------------------------------------------------------------------------------------
11// Public Types
12// ------------------------------------------------------------------------------------------------
13
14pub const MODULE_NAME: &str = "rdfs";
15pub const MODULE_URL: &str = "http://www.w3.org/2000/01/rdf-schema#";
16
17pub const CLASS: &str = "Class";
18pub const CONTAINER: &str = "Container";
19pub const CONTAINER_MEMBERSHIP_PROPERTY: &str = "ContainerMembershipProperty";
20pub const DATATYPE: &str = "Datatype";
21pub const LITERAL: &str = "Literal";
22pub const RESOURCE: &str = "Resource";
23
24pub const COMMENT: &str = "comment";
25pub const DOMAIN: &str = "domain";
26pub const IS_DEFINED_BY: &str = "isDefinedBy";
27pub const LABEL: &str = "label";
28pub const MEMBER: &str = "member";
29pub const RANGE: &str = "range";
30pub const SEE_ALSO: &str = "seeAlso";
31pub const SUB_CLASS_OF: &str = "subClassOf";
32pub const SUB_PROPERTY_OF: &str = "subPropertyOf";
33
34// ------------------------------------------------------------------------------------------------
35// Public Functions
36// ------------------------------------------------------------------------------------------------
37
38pub fn module() -> Module {
39    #[allow(non_snake_case)]
40    let MODULE_IRI: url::Url = url::Url::parse(MODULE_URL).unwrap();
41    let mut module = Module::empty(id!(MODULE_NAME)).with_base_uri(MODULE_IRI.clone());
42
43    module
44        .body_mut()
45        .add_to_imports(import!(id!(rdf::MODULE_NAME)));
46
47    module
48        .body_mut()
49        .extend_definitions(vec![
50            // Classes
51            rdf!(class CLASS, MODULE_IRI).into(),
52            rdf!(class CONTAINER, MODULE_IRI).into(),
53            rdf!(class DATATYPE, MODULE_IRI; CLASS).into(),
54            rdf!(class LITERAL, MODULE_IRI; RESOURCE).into(),
55            rdf!(class RESOURCE, MODULE_IRI).into(),
56            // Individuals
57            rdf!(thing CONTAINER_MEMBERSHIP_PROPERTY, MODULE_IRI;
58             (rdf::MODULE_NAME, rdf::PROPERTY))
59            .into(),
60            // Properties
61            rdf!(property COMMENT, MODULE_IRI; RESOURCE => LITERAL).into(),
62            rdf!(property DOMAIN, MODULE_IRI;
63             (rdf::MODULE_NAME, rdf::PROPERTY) => CLASS)
64            .into(),
65            rdf!(property IS_DEFINED_BY, MODULE_IRI; RESOURCE => RESOURCE).into(),
66            rdf!(property LABEL, MODULE_IRI; RESOURCE => LITERAL).into(),
67            rdf!(property MEMBER, MODULE_IRI; RESOURCE => RESOURCE).into(),
68            rdf!(property RANGE, MODULE_IRI;
69             (rdf::MODULE_NAME, rdf::PROPERTY) => CLASS)
70            .into(),
71            rdf!(property SEE_ALSO, MODULE_IRI; RESOURCE => RESOURCE).into(),
72            rdf!(property SUB_CLASS_OF, MODULE_IRI; CLASS => CLASS).into(),
73            rdf!(property SUB_PROPERTY_OF, MODULE_IRI;
74             (rdf::MODULE_NAME, rdf::PROPERTY) =>
75             (rdf::MODULE_NAME, rdf::PROPERTY))
76            .into(),
77        ])
78        .unwrap();
79
80    module
81}