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
use crate::ns;
use rdftk_core::graph::{Graph, PrefixMappings};
use rdftk_core::{ObjectNode, Statement, SubjectNode};
use rdftk_iri::IRIRef;
use rdftk_memgraph::{Mappings, MemGraph};
use rdftk_names::{dc, owl, rdf, xsd};
use std::rc::Rc;
pub trait Named {
fn uri(&self) -> &IRIRef;
}
pub trait Propertied {
fn add_property(&mut self, property: LiteralProperty);
fn has_property(&self, predicate: &IRIRef) -> bool {
self.properties()
.iter()
.any(|property| property.predicate() == predicate)
}
fn has_properties(&self) -> bool {
!self.properties().is_empty()
}
fn properties(&self) -> &Vec<LiteralProperty>;
}
pub trait Labeled {
fn add_label(&mut self, label: Label);
fn add_preferred_label(&mut self, text: &str, language: &str) {
self.add_label(Label::preferred(text, language))
}
fn add_alternative_label(&mut self, text: &str, language: &str) {
self.add_label(Label::alternative(text, language))
}
fn add_hidden_label(&mut self, text: &str, language: &str) {
self.add_label(Label::hidden(text, language))
}
fn preferred_label(&self, language: &str) -> String;
fn has_labels(&self) -> bool;
fn labels(&self) -> &Vec<Label>;
}
pub trait ToStatements {
fn to_statements(&self, in_scheme: Option<&ObjectNode>) -> Vec<Statement>;
}
pub trait ToStatement {
fn to_statement(&self, subject: &SubjectNode) -> Statement;
}
pub trait ToURI {
fn to_uri(&self) -> IRIRef;
}
pub fn to_rdf_graph(scheme: &Scheme, default_namespace: Option<IRIRef>) -> MemGraph {
let mut graph = MemGraph::default();
let mut mappings = standard_mappings();
if let Some(default_namespace) = default_namespace {
mappings.insert_default(default_namespace.clone());
}
graph.mappings(Rc::new(mappings));
for statement in scheme.to_statements(None) {
graph.insert(statement);
}
graph
}
pub fn standard_mappings() -> Mappings {
let mut mappings = Mappings::default();
mappings.insert(ns::default_prefix(), ns::namespace_iri().clone());
mappings.insert(ns::xl::default_prefix(), ns::xl::namespace_iri().clone());
mappings.insert(ns::iso::default_prefix(), ns::iso::namespace_iri().clone());
mappings.insert(
dc::terms::default_prefix(),
dc::terms::namespace_iri().clone(),
);
mappings.insert(rdf::default_prefix(), rdf::namespace_iri().clone());
mappings.insert(owl::default_prefix(), owl::namespace_iri().clone());
mappings.insert(xsd::default_prefix(), xsd::namespace_iri().clone());
mappings
}
pub mod scheme;
pub use scheme::Scheme;
pub mod concept;
pub use concept::Concept;
pub mod collection;
pub use collection::Collection;
pub mod properties;
pub use properties::{Label, LiteralProperty};