-
Notifications
You must be signed in to change notification settings - Fork 2
/
metamodel.yaml
277 lines (275 loc) · 6.07 KB
/
metamodel.yaml
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
Nodes:
node:
Props:
- handle
- model
relationship:
Props:
- handle
- model
- multiplicity
- is_required
property:
Props:
- handle
- model
- is_required
- value_domain
- units
- pattern
value_set:
Props:
- handle
- url
- origin_name
concept:
Props:
- nanoid
predicate:
Props:
- handle
Desc: |
The predicate node allows some semantic info to be captured in the MDB.
A predicate links concepts by means of has_subject and has_object
links. Thus two concepts and a predicate can form a semantic triple.
term:
Props:
- handle
- value
- origin_name
- origin_id
- origin_definition
origin:
Props:
- name
- url
- is_external
model:
Props:
- handle
- name
- repository
tag:
Props:
- key
- value
Relationships:
has_concept:
Mul: many_to_one
Props: null
Ends:
- Src: node
Dst: concept
Req: true
- Src: property
Dst: concept
Req: true
- Src: relationship
Dst: concept
Req: true
- Src: value_set
Dst: concept
Req: false
- Src: predicate
Dst: concept
Req: false
has_origin:
Mul: many_to_one
Props: null
Ends:
- Src: term
Dst: origin
Req: true
- Src: value_set
Dst: origin
Mul: one_to_one
Req: false
has_model:
Mul: one_to_one
Props: null
Ends:
- Src: node
Dst: model
- Src: relationship
Dst: model
- Src: property
Dst: model
has_src:
Mul: one_to_one
Props: null
Ends:
- Src: relationship
Dst: node
Req: true
has_dst:
Mul: one_to_one
Props: null
Ends:
- Src: relationship
Dst: node
Req: true
has_property:
Mul: one_to_many
Props: null
Ends:
- Src: node
Dst: property
- Src: relationship
Dst: property
has_value_set:
Mul: one_to_one
Props: null
Ends:
- Src: property
Dst: value_set
has_term:
Mul: one_to_many
Props: null
Ends:
- Src: value_set
Dst: term
has_tag:
Mul: many_to_many
Props: null
Ends:
- Src: node
Dst: tag
- Src: relationship
Dst: tag
- Src: property
Dst: tag
- Src: concept
Dst: tag
- Src: term
Dst: tag
- Src: value_set
Dst: tag
- Src: origin
Dst: tag
- Src: model
Dst: tag
represents:
Mul: one_to_many
Props: null
Ends:
- Src: term
Dst: concept
Desc: |
this is an interesting point in this representation- two terms could have the same value but be linked to (\"represent\")
different concepts. Then the terms are \"homonyms\", but not \"synonyms\". The difference is in the graph context:
a term\'s value is not its meaning, but the concept is, and the terms context is the value_set in which it is
grouped (or the entity, including the entity\'s home model, which is linked to the concept)
has_subject:
Props: null
Mul: one_to_many
Ends:
- Src: predicate
Dst: concept
Desc: The subject concept of this predicate
has_object:
Props: null
Mul: one_to_many
Ends:
- Src: predicate
Dst: concept
Desc: The object concept of this predicate
UniversalNodeProperties:
mustHave:
- nanoid
mayHave:
- desc
PropDefinitions:
handle:
Req: true
Type: string
Desc: |
the name of the entity in local vocabulary; not necessarily the term
per se. For a Relationship, the handle is the "relationship
type" in a Neo4j representation
desc:
Type: string
Desc:
A human-readable description of the entity.
value:
Req: true
Type: string
Desc:
A code or other data representation of the Term.
key:
Req: True
Type: string
Desc:
A string key.
nanoid:
Req: true
Type: string
Desc: 6char content-free uid for model entities
model:
Req: true
Type: string
Desc: model (handle) in which this entity participates
is_external:
Type: boolean
Desc: if this Origin represents an external (to BIDS/CTOS) standard (property missing => false)
repository:
Type: url
Desc: |
A url pointing to a (GitHub, e.g.) repository where the model is
described or defined.
url:
Type: url
pattern:
Desc: A regular expression, set when value_domain = regexp
Type: string
origin_id:
Type: string
Req: true
Desc: |
the Origin authority\'s identifier for the Term - concept code,
term ID, or similar
origin_name:
Type: string
Desc: |
the name for the Term's Origin, which should match the
name property of an Origin node existing in the MDB.
origin_definition:
Type: string
Desc: |
The text definition of the Term as provided by the Origin authority
multiplicity:
Desc: |
Descriptor of the number of these relationships that may exist between
source and destination node instances.
Type:
- one_to_one
- many_to_many
- one_to_many
- many_to_one
is_required:
Type: boolean
Desc: |
Indicates whether the property or relationship must be present in
instances of the model.
name:
Type: string
Desc: |
Human readable identifier for the entity.
units:
Desc: |
For a value_domain of 'number', this property gives the units of the
number as a string; e.g., 'mg', 'cm','degrees'. Multiple allowable
units are separated by semicolons: 'um;angstrom'. Unit string tokens
could (should?) have their own Terms and Concepts for completeness.
For other value_domain values, units should be unset
Type: string
value_domain:
Req: true
Type:
- number
- integer
- string
- datetime
- boolean
- regexp
- url
- value_set