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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
/*
This Rust module contains the SDML model of the SDML library module `owl`.
*/

use crate::model::annotations::AnnotationBuilder;
use crate::model::modules::{ImportStatement, Module};
use crate::model::HasBody;
use url::Url;

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

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

pub const MODULE_NAME: &str = "owl";
pub const MODULE_URL: &str = "http://www.w3.org/2002/07/owl#";

pub const CLASS_ALL_DIFFERENT_NAME: &str = "AllDifferent";
pub const CLASS_ALL_DISJOINT_CLASSES_NAME: &str = "AllDisjointClasses";
pub const CLASS_ALL_DISJOINT_PROPERTIES_NAME: &str = "AllDisjointProperties";
pub const CLASS_ANNOTATION_NAME: &str = "Annotation";
pub const CLASS_ANNOTATION_PROPERTY_NAME: &str = "AnnotationProperty";
pub const CLASS_ASYMMETRIC_PROPERTY_NAME: &str = "AsymmetricProperty";
pub const CLASS_AXIOM_NAME: &str = "Axiom";
pub const CLASS_CLASS_NAME: &str = "Class";
pub const CLASS_DATA_RANGE_NAME: &str = "DataRange";
pub const CLASS_DATATYPE_PROPERTY_NAME: &str = "DatatypeProperty";
pub const CLASS_DEPRECATED_CLASS_NAME: &str = "DeprecatedClass";
pub const CLASS_DEPRECATED_PROPERTY_NAME: &str = "DeprecatedProperty";
pub const CLASS_FUNCTIONAL_PROPERTY_NAME: &str = "FunctionalProperty";
pub const CLASS_INVERSE_FUNCTIONAL_PROPERTY_NAME: &str = "InverseFunctionalProperty";
pub const CLASS_IRREFLEXIVE_PROPERTY_NAME: &str = "IrreflexiveProperty";
pub const CLASS_NAMED_INDIVIDUAL_NAME: &str = "NamedIndividual";
pub const CLASS_NEGATIVE_PROPERTY_ASSERTION_NAME: &str = "NegativePropertyAssertion";
pub const CLASS_NOTHING_NAME: &str = "Nothing";
pub const CLASS_OBJECT_PROPERTY_NAME: &str = "ObjectProperty";
pub const CLASS_ONTOLOGY_NAME: &str = "Ontology";
pub const CLASS_ONTOLOGY_PROPERTY_NAME: &str = "OntologyProperty";
pub const CLASS_REFLEXIVE_PROPERTY_NAME: &str = "ReflexiveProperty";
pub const CLASS_RESTRICTION_NAME: &str = "Restriction";
pub const CLASS_SYMMETRIC_PROPERTY_NAME: &str = "SymmetricProperty";
pub const CLASS_TRANSITIVE_PROPERTY_NAME: &str = "TransitiveProperty";
pub const CLASS_THING_NAME: &str = "Thing";

pub const PROP_ALL_VALUES_FROM_NAME: &str = "allValuesFrom";
pub const PROP_ANNOTATED_PROPERTY_NAME: &str = "annotatedProperty";
pub const PROP_ANNOTATED_SOURCE_NAME: &str = "annotatedSource";
pub const PROP_ANNOTATED_TARGET_NAME: &str = "annotatedTarget";
pub const PROP_ASSERTION_PROPERTY_NAME: &str = "assertionProperty";
pub const PROP_BACKWARD_COMPATIBLE_WITH_NAME: &str = "backwardCompatibleWith";
pub const PROP_BOTTOM_DATA_PROPERTY_NAME: &str = "bottomDataProperty";
pub const PROP_BOTTOM_OBJECT_PROPERTY_NAME: &str = "bottomObjectProperty";
pub const PROP_CARDINALITY_NAME: &str = "cardinality";
pub const PROP_COMPLEMENT_OF_NAME: &str = "complementOf";
pub const PROP_DATATYPE_COMPLEMENT_OF_NAME: &str = "datatypeComplementOf";
pub const PROP_DEPRECATED_NAME: &str = "deprecated";
pub const PROP_DIFFERENT_FROM_NAME: &str = "differentFrom";
pub const PROP_DISJOINT_UNION_OF_NAME: &str = "disjointUnionOf";
pub const PROP_DISJOINT_WITH_NAME: &str = "disjointWith";
pub const PROP_DISTINCT_MEMBERS_NAME: &str = "distinctMembers";
pub const PROP_EQUIVALENT_CLASS_NAME: &str = "equivalentClass";
pub const PROP_EQUIVALENT_PROPERTY_NAME: &str = "equivalentProperty";
pub const PROP_HAS_KEY_NAME: &str = "hasKey";
pub const PROP_HAS_SELF_NAME: &str = "hasSelf";
pub const PROP_HAS_VALUE_NAME: &str = "hasValue";
pub const PROP_IMPORTS_NAME: &str = "imports";
pub const PROP_INCOMPATIBLE_WITH_NAME: &str = "incompatibleWith";
pub const PROP_INTERSECTION_OF_NAME: &str = "intersectionOf";
pub const PROP_INVERSE_OF_NAME: &str = "inverseOf";
pub const PROP_MAX_CARDINALITY_NAME: &str = "maxCardinality";
pub const PROP_MAX_QUALIFIED_CARDINALITY_NAME: &str = "maxQualifiedCardinality";
pub const PROP_MEMBERS_NAME: &str = "members";
pub const PROP_MIN_CARDINALITY_NAME: &str = "minCardinality";
pub const PROP_MIN_QUALIFIED_CARDINALITY_NAME: &str = "minQualifiedCardinality";
pub const PROP_ON_CLASS_NAME: &str = "onClass";
pub const PROP_ON_DATA_RANGE_NAME: &str = "onDataRange";
pub const PROP_ON_DATATYPE_NAME: &str = "onDatatype";
pub const PROP_ONE_OF_NAME: &str = "oneOf";
pub const PROP_ON_PROPERTIES_NAME: &str = "onProperties";
pub const PROP_ON_PROPERTY_NAME: &str = "onProperty";
pub const PROP_PRIOR_VERSION_NAME: &str = "priorVersion";
pub const PROP_PROPERTY_CHAIN_AXIOM_NAME: &str = "propertyChainAxiom";
pub const PROP_PROPERTY_DISJOINT_WITH_NAME: &str = "propertyDisjointWith";
pub const PROP_QUALIFIED_CARDINALITY_NAME: &str = "qualifiedCardinality";
pub const PROP_SAME_AS_NAME: &str = "sameAs";
pub const PROP_SOME_VALUES_FROM_NAME: &str = "someValuesFrom";
pub const PROP_SOURCE_INDIVIDUAL_NAME: &str = "sourceIndividual";
pub const PROP_TARGET_INDIVIDUAL_NAME: &str = "targetIndividual";
pub const PROP_TARGET_VALUE_NAME: &str = "targetValue";
pub const PROP_TOP_DATA_PROPERTY_NAME: &str = "topDataProperty";
pub const PROP_TOP_OBJECT_PROPERTY_NAME: &str = "topObjectProperty";
pub const PROP_UNION_OF_NAME: &str = "unionOf";
pub const PROP_VERSION_INFO_NAME: &str = "versionInfo";
pub const PROP_VERSION_IRI_NAME: &str = "versionIRI";
pub const PROP_WITH_RESTRICTIONS_NAME: &str = "withRestrictions";

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

pub fn module() -> Module {
    #[allow(non_snake_case)]
    let MODULE_IRI: url::Url = url::Url::parse(MODULE_URL).unwrap();
    let mut module = Module::empty(id!(MODULE_NAME)).with_base_uri(Url::parse(MODULE_URL).unwrap());

    module
        .body_mut()
        .add_to_imports(ImportStatement::new_module(id!(super::rdf::MODULE_NAME)));
    module
        .body_mut()
        .add_to_imports(ImportStatement::new_module(id!(super::rdfs::MODULE_NAME)));
    module
        .body_mut()
        .add_to_imports(ImportStatement::new_module(id!(super::xsd::MODULE_NAME)));

    module.body_mut().extend_definitions(vec![
        // Classes
        rdf!(class CLASS_ALL_DIFFERENT_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The class of collections of pairwise different individuals.")
            .into(),
        rdf!(class CLASS_ALL_DISJOINT_CLASSES_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The class of collections of pairwise disjoint classes.")
            .into(),
        rdf!(class CLASS_ALL_DISJOINT_PROPERTIES_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The class of collections of pairwise disjoint properties.")
            .into(),
        rdf!(class CLASS_ANNOTATION_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The class of annotated annotations for which the RDF serialization consists of an annotated subject, predicate and object.")
            .into(),
        rdf!(class CLASS_ANNOTATION_PROPERTY_NAME, MODULE_IRI; (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The class of annotation properties.")
            .into(),
        rdf!(class CLASS_ASYMMETRIC_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of asymmetric properties.")
            .into(),
        rdf!(class CLASS_AXIOM_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The class of annotated axioms for which the RDF serialization consists of an annotated subject, predicate and object.")
           .into(),
        rdf!(class CLASS_CLASS_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_CLASS_NAME))
            .with_comment("The class of OWL classes.")
            .into(),
        rdf!(class CLASS_DATA_RANGE_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME))
            .with_comment("The class of OWL data ranges, which are special kinds of datatypes. Note: The use of the IRI owl:DataRange has been deprecated as of OWL 2. The IRI rdfs:Datatype SHOULD be used instead.")
            .into(),
        rdf!(class CLASS_DATATYPE_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of data properties.")
            .into(),
        rdf!(class CLASS_DEPRECATED_CLASS_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_CLASS_NAME))
            .with_comment("The class of deprecated classes.")
            .into(),
        rdf!(class CLASS_DEPRECATED_PROPERTY_NAME, MODULE_IRI; (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The class of deprecated properties.")
            .into(),
        rdf!(class CLASS_FUNCTIONAL_PROPERTY_NAME, MODULE_IRI; (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The class of functional properties.")
            .into(),
        rdf!(class CLASS_INVERSE_FUNCTIONAL_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of inverse-functional properties.")
            .into(),
        rdf!(class CLASS_IRREFLEXIVE_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of irreflexive properties.")
            .into(),
        rdf!(class CLASS_NAMED_INDIVIDUAL_NAME, MODULE_IRI; CLASS_THING_NAME)
            .with_comment("The class of named individuals.")
           .into(),
        rdf!(class CLASS_NEGATIVE_PROPERTY_ASSERTION_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The class of negative property assertions.")
            .into(),
        rdf!(class CLASS_NOTHING_NAME, MODULE_IRI; CLASS_THING_NAME)
            .with_comment("This is the empty class.")
            .into(),
        rdf!(class CLASS_OBJECT_PROPERTY_NAME, MODULE_IRI; (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The class of object properties.")
            .into(),
        rdf!(class CLASS_ONTOLOGY_NAME, MODULE_IRI; (super::rdfs::MODULE_NAME, super::rdfs::CLASS_CLASS_NAME))
            .with_comment("The class of ontologies.")
            .into(),
        rdf!(class CLASS_ONTOLOGY_PROPERTY_NAME, MODULE_IRI; (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The class of ontology properties.")
            .into(),
        rdf!(class CLASS_REFLEXIVE_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of reflexive properties.")
            .into(),
        rdf!(class CLASS_SYMMETRIC_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of symmetric properties.")
            .into(),
        rdf!(class CLASS_TRANSITIVE_PROPERTY_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The class of transitive properties.")
            .into(),
        rdf!(class CLASS_THING_NAME, MODULE_IRI; CLASS_CLASS_NAME)
            .with_comment("The class of OWL individuals.")
             .into(),

        // Properties
        rdf!(property PROP_ALL_VALUES_FROM_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The property that determines the class that a universal property restriction refers to.")
            .into(),
        rdf!(property PROP_ANNOTATED_PROPERTY_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The property that determines the predicate of an annotated axiom or annotated annotation.")
            .into(),
        rdf!(property PROP_ANNOTATED_SOURCE_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The property that determines the subject of an annotated axiom or annotated annotation.")
            .into(),
        rdf!(property PROP_ANNOTATED_TARGET_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The property that determines the object of an annotated axiom or annotated annotation.")
            .into(),
        rdf!(property PROP_ASSERTION_PROPERTY_NAME, MODULE_IRI;
             CLASS_NEGATIVE_PROPERTY_ASSERTION_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The property that determines the predicate of a negative property assertion.")
            .into(),
        rdf!(property PROP_BACKWARD_COMPATIBLE_WITH_NAME, MODULE_IRI;
             CLASS_ONTOLOGY_NAME => CLASS_ONTOLOGY_NAME)
            .with_comment("The annotation property that indicates that a given ontology is backward compatible with another ontology.")
            .into(),
        rdf!(property PROP_BOTTOM_DATA_PROPERTY_NAME, MODULE_IRI;
             CLASS_THING_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_LITERAL_NAME))
            .with_comment("The data property that does not relate any individual to any data value.")
            .into(),
        rdf!(property PROP_CARDINALITY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::xsd::MODULE_NAME, super::xsd::DT_NONNEGATIVE_INTEGER_NAME))
            .with_comment("The property that determines the cardinality of an exact cardinality restriction.")
            .into(),
        rdf!(property PROP_COMPLEMENT_OF_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => CLASS_CLASS_NAME)
            .with_comment("The property that determines that a given class is the complement of another class.")
            .into(),
        rdf!(property PROP_DATATYPE_COMPLEMENT_OF_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME))
            .with_comment("The property that determines that a given data range is the complement of another data range with respect to the data domain.")
            .into(),
        rdf!(property PROP_DEPRECATED_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The annotation property that indicates that a given entity has been deprecated.")
            .into(),
        rdf!(property PROP_DIFFERENT_FROM_NAME, MODULE_IRI; CLASS_THING_NAME => CLASS_THING_NAME)
            .with_comment("The property that determines that two given individuals are different.")
            .into(),
        rdf!(property PROP_DISJOINT_UNION_OF_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => (super::rdfs::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines that a given class is equivalent to the disjoint union of a collection of other classes.")
            .into(),
        rdf!(property PROP_DISJOINT_WITH_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => CLASS_CLASS_NAME)
            .with_comment("The property that determines that two given classes are disjoint.")
            .into(),
        rdf!(property PROP_DISTINCT_MEMBERS_NAME, MODULE_IRI;
        CLASS_ALL_DIFFERENT_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of pairwise different individuals in a owl:AllDifferent axiom.")
            .into(),
        rdf!(property PROP_EQUIVALENT_CLASS_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => CLASS_CLASS_NAME)
            .with_comment("The property that determines that two given classes are equivalent, and that is used to specify datatype definitions.")
            .into(),
        rdf!(property PROP_EQUIVALENT_PROPERTY_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => CLASS_CLASS_NAME)
            .with_comment("The property that determines that two given properties are equivalent.")
            .into(),
        rdf!(property PROP_HAS_KEY_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of properties that jointly build a key.")
            .into(),
        rdf!(property PROP_HAS_SELF_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The property that determines the property that a self restriction refers to.")
            .into(),
        rdf!(property PROP_HAS_VALUE_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The property that determines the property that a has-value restriction refers to.")
            .into(),
        rdf!(property PROP_IMPORTS_NAME, MODULE_IRI;
             CLASS_ONTOLOGY_NAME => CLASS_ONTOLOGY_NAME)
            .with_comment("The property that is used for importing other ontologies into a given ontology.")
            .into(),
        rdf!(property PROP_INCOMPATIBLE_WITH_NAME, MODULE_IRI; CLASS_ONTOLOGY_NAME => CLASS_ONTOLOGY_NAME)
            .with_comment("The annotation property that indicates that a given ontology is incompatible with another ontology.")
            .into(),
        rdf!(property PROP_INTERSECTION_OF_NAME, MODULE_IRI;
             CLASS_CLASS_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of classes or data ranges that build an intersection.")
            .into(),
        rdf!(property PROP_INVERSE_OF_NAME, MODULE_IRI; CLASS_OBJECT_PROPERTY_NAME => CLASS_OBJECT_PROPERTY_NAME)
            .with_comment("The property that determines that two given properties are inverse.")
            .into(),
        rdf!(property PROP_MAX_CARDINALITY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::xsd::MODULE_NAME, super::xsd::DT_NONNEGATIVE_INTEGER_NAME))
            .with_comment("The property that determines the cardinality of a maximum cardinality restriction.")
            .into(),
        rdf!(property PROP_MAX_QUALIFIED_CARDINALITY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::xsd::MODULE_NAME, super::xsd::DT_NONNEGATIVE_INTEGER_NAME))
            .with_comment("The property that determines the cardinality of a maximum qualified cardinality restriction.")
            .into(),
        rdf!(property PROP_MEMBERS_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME) =>
             (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of members in either a owl:AllDifferent, owl:AllDisjointClasses or owl:AllDisjointProperties axiom.")
            .into(),
        rdf!(property PROP_MIN_CARDINALITY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::xsd::MODULE_NAME, super::xsd::DT_NONNEGATIVE_INTEGER_NAME))
            .with_comment("The property that determines the cardinality of a minimum cardinality restriction.")
            .into(),
        rdf!(property PROP_MIN_QUALIFIED_CARDINALITY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::xsd::MODULE_NAME, super::xsd::DT_NONNEGATIVE_INTEGER_NAME))
            .with_comment("The property that determines the cardinality of a minimum qualified cardinality restriction.")
            .into(),
        rdf!(property PROP_ON_CLASS_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => CLASS_CLASS_NAME)
            .with_comment("The property that determines the class that a qualified object cardinality restriction refers to.")
            .into(),
        rdf!(property PROP_ON_DATA_RANGE_NAME, MODULE_IRI;
        CLASS_RESTRICTION_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME))
            .with_comment("The property that determines the data range that a qualified data cardinality restriction refers to.")
            .into(),
        rdf!(property PROP_ON_DATATYPE_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME))
            .with_comment("The property that determines the datatype that a datatype restriction refers to.")
            .into(),
        rdf!(property PROP_ONE_OF_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_CLASS_NAME) =>
             (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of individuals or data values that build an enumeration.")
            .into(),
        rdf!(property PROP_ON_PROPERTIES_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the n-tuple of properties that a property restriction on an n-ary data range refers to.")
            .into(),
        rdf!(property PROP_ON_PROPERTY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The property that determines the property that a property restriction refers to.")
            .into(),
        rdf!(property PROP_PRIOR_VERSION_NAME, MODULE_IRI;
             CLASS_ONTOLOGY_NAME => CLASS_ONTOLOGY_NAME)
            .with_comment("The annotation property that indicates the predecessor ontology of a given ontology.")
            .into(),
        rdf!(property PROP_PROPERTY_CHAIN_AXIOM_NAME, MODULE_IRI;
             CLASS_OBJECT_PROPERTY_NAME => (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the n-tuple of properties that build a sub property chain of a given property.")
            .into(),
        rdf!(property PROP_PROPERTY_DISJOINT_WITH_NAME, MODULE_IRI;
             (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME) =>
             (super::rdf::MODULE_NAME, super::rdf::CLASS_PROPERTY_NAME))
            .with_comment("The property that determines that two given properties are disjoint.")
            .into(),
        rdf!(property PROP_QUALIFIED_CARDINALITY_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::xsd::MODULE_NAME, super::xsd::DT_NONNEGATIVE_INTEGER_NAME))
            .with_comment("The property that determines the cardinality of an exact qualified cardinality restriction.")
            .into(),
        rdf!(property PROP_SAME_AS_NAME, MODULE_IRI;
             CLASS_THING_NAME => CLASS_THING_NAME)
            .with_comment("The property that determines that two given individuals are equal.")
            .into(),
        rdf!(property PROP_SOME_VALUES_FROM_NAME, MODULE_IRI;
             CLASS_RESTRICTION_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_CLASS_NAME))
            .with_comment("The property that determines the class that an existential property restriction refers to.")
            .into(),
        rdf!(property PROP_SOURCE_INDIVIDUAL_NAME, MODULE_IRI;
             CLASS_NEGATIVE_PROPERTY_ASSERTION_NAME => CLASS_THING_NAME)
            .with_comment("The property that determines the subject of a negative property assertion.")
            .into(),
        rdf!(property PROP_TARGET_INDIVIDUAL_NAME, MODULE_IRI;
             CLASS_NEGATIVE_PROPERTY_ASSERTION_NAME => CLASS_THING_NAME)
            .with_comment("The property that determines the object of a negative property assertion.")
            .into(),
        rdf!(property PROP_TARGET_VALUE_NAME, MODULE_IRI;
             CLASS_NEGATIVE_PROPERTY_ASSERTION_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_LITERAL_NAME))
            .with_comment("The property that determines the value of a negative data property assertion.")
            .into(),
        rdf!(property PROP_TOP_DATA_PROPERTY_NAME, MODULE_IRI;
             CLASS_THING_NAME => (super::rdfs::MODULE_NAME, super::rdfs::CLASS_LITERAL_NAME))
            .with_comment("The data property that relates every individual to every data value.")
            .into(),
        rdf!(property PROP_TOP_OBJECT_PROPERTY_NAME, MODULE_IRI;
             CLASS_THING_NAME => CLASS_THING_NAME)
            .with_comment("The object property that relates every two individuals.")
            .into(),
        rdf!(property PROP_UNION_OF_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_CLASS_NAME) =>
             (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of classes or data ranges that build a union.")
            .into(),
        rdf!(property PROP_VERSION_INFO_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME) =>
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_RESOURCE_NAME))
            .with_comment("The annotation property that provides version information for an ontology or another OWL construct.")
            .into(),
        rdf!(property PROP_VERSION_IRI_NAME, MODULE_IRI;
             CLASS_ONTOLOGY_NAME => CLASS_ONTOLOGY_NAME)
            .with_comment("The object property that identifies the version IRI of an ontology.")
            .into(),
        rdf!(property PROP_WITH_RESTRICTIONS_NAME, MODULE_IRI;
             (super::rdfs::MODULE_NAME, super::rdfs::CLASS_DATATYPE_NAME) =>
             (super::rdf::MODULE_NAME, super::rdf::CLASS_LIST_NAME))
            .with_comment("The property that determines the collection of facet-value pairs that define a datatype restriction.")
             .into(),
    ]);

    module
}