open_ehr 0.6.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. data/Gemfile +10 -2
  2. data/Gemfile.lock +58 -18
  3. data/Guardfile +2 -1
  4. data/History.txt +10 -3
  5. data/Manifest.txt +3 -5
  6. data/README.rdoc +36 -32
  7. data/Rakefile +1 -1
  8. data/VERSION +1 -1
  9. data/bin/adl_validator.rb +84 -0
  10. data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +11 -7
  11. data/lib/open_ehr/am/archetype/constraint_model.rb +4 -16
  12. data/lib/open_ehr/am/archetype/ontology.rb +37 -6
  13. data/lib/open_ehr/am/archetype.rb +6 -7
  14. data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +5 -2
  15. data/lib/open_ehr/parser/adl.rb +19 -0
  16. data/lib/open_ehr/parser/adl_grammar.tt +155 -0
  17. data/lib/open_ehr/parser/adl_parser.rb +48 -0
  18. data/lib/open_ehr/parser/cadl_grammar.tt +803 -0
  19. data/lib/open_ehr/parser/dadl.rb +13 -0
  20. data/lib/open_ehr/parser/dadl_grammar.tt +358 -0
  21. data/lib/open_ehr/parser/exception.rb +68 -0
  22. data/lib/open_ehr/parser/scanner/adl_scanner.rb +819 -0
  23. data/lib/open_ehr/parser/shared_token_grammar.tt +1200 -0
  24. data/lib/open_ehr/parser/validator.rb +20 -0
  25. data/lib/open_ehr/parser.rb +16 -12
  26. data/lib/open_ehr.rb +1 -0
  27. data/open_ehr.gemspec +364 -0
  28. data/spec/lib/open_ehr/am/archetype/archetype_spec.rb +7 -2
  29. data/spec/lib/open_ehr/am/archetype/constraint_model/c_multiple_attribute_spec.rb +0 -6
  30. data/spec/lib/open_ehr/am/archetype/constraint_model/c_object_spec.rb +10 -10
  31. data/spec/lib/open_ehr/am/archetype/constraint_model/c_single_attribute_spec.rb +0 -6
  32. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_boolean_spec.rb +5 -0
  33. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +5 -0
  34. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +5 -0
  35. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_integer_spec.rb +5 -0
  36. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_primitive_spec.rb +8 -6
  37. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_real_spec.rb +7 -2
  38. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +5 -0
  39. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +5 -0
  40. data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +27 -7
  41. data/spec/lib/open_ehr/am/archetype/ontology/archetype_term_spec.rb +3 -3
  42. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.assumed_types.v1.adl +88 -0
  43. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.basic_types.v1.adl +143 -0
  44. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.basic_types_fail.v1.adl +50 -0
  45. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.most_minimal.v1.adl +27 -0
  46. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.structure_test1.v1.adl +46 -0
  47. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ACTION.imaging.v1.adl +275 -0
  48. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ACTION.referral.v1.adl +351 -0
  49. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.auscultation-chest.v1.adl +765 -0
  50. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.auscultation.v1.adl +217 -0
  51. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.dimensions-circumference.v1.adl +134 -0
  52. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.dimensions.v1.adl +241 -0
  53. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-abdomen.v1.adl +321 -0
  54. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-chest.v1.adl +379 -0
  55. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-fetus.v1.adl +577 -0
  56. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic-joint.v1.adl +146 -0
  57. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic-lymphnode.v1.adl +176 -0
  58. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic-mass.v1.adl +221 -0
  59. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic.v1.adl +139 -0
  60. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-nervous_system.v1.adl +116 -0
  61. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-uterine_cervix.v1.adl +420 -0
  62. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-uterus.v1.adl +293 -0
  63. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-COMPOSITION.discharge.v1draft.adl +53 -0
  64. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-COMPOSITION.encounter.v1draft.adl +45 -0
  65. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-EVALUATION.adverse.v1.adl +411 -0
  66. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-INSTRUCTION.medication.v1.adl +88 -0
  67. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-INSTRUCTION.referral.v1.adl +84 -0
  68. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.Laboratory_request.v1.adl +492 -0
  69. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.follow_up.v1draft.adl +94 -0
  70. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.imaging.v1.adl +127 -0
  71. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.medication-formulation.v1.adl +457 -0
  72. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.medication.v1.adl +869 -0
  73. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.referral.v1.adl +494 -0
  74. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-OBSERVATION.apgar.v1.adl +545 -0
  75. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-OBSERVATION.blood_pressure.v1.adl +673 -0
  76. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-OBSERVATION.body_mass_index.v1.adl +166 -0
  77. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.findings.v1.adl +47 -0
  78. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.reason_for_encounter.v1.adl +51 -0
  79. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.summary.v1.adl +52 -0
  80. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.vital_signs.v1.adl +54 -0
  81. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-cadl_sample.v1.adl +9 -0
  82. data/spec/lib/open_ehr/parser/adl_parser_spec.rb +210 -0
  83. data/spec/lib/open_ehr/parser/base_spec.rb +19 -0
  84. data/spec/spec.opts +2 -1
  85. data/spec/spec_helper.rb +3 -0
  86. metadata +166 -52
  87. data/doc/README_rdoc.html +0 -148
  88. data/doc/created.rid +0 -2
  89. data/doc/images/brick.png +0 -0
  90. data/doc/images/brick_link.png +0 -0
  91. data/doc/images/bug.png +0 -0
  92. data/doc/images/bullet_black.png +0 -0
  93. data/doc/images/bullet_toggle_minus.png +0 -0
  94. data/doc/images/bullet_toggle_plus.png +0 -0
  95. data/doc/images/date.png +0 -0
  96. data/doc/images/find.png +0 -0
  97. data/doc/images/loadingAnimation.gif +0 -0
  98. data/doc/images/macFFBgHack.png +0 -0
  99. data/doc/images/package.png +0 -0
  100. data/doc/images/page_green.png +0 -0
  101. data/doc/images/page_white_text.png +0 -0
  102. data/doc/images/page_white_width.png +0 -0
  103. data/doc/images/plugin.png +0 -0
  104. data/doc/images/ruby.png +0 -0
  105. data/doc/images/tag_green.png +0 -0
  106. data/doc/images/wrench.png +0 -0
  107. data/doc/images/wrench_orange.png +0 -0
  108. data/doc/images/zoom.png +0 -0
  109. data/doc/index.html +0 -54
  110. data/doc/js/darkfish.js +0 -116
  111. data/doc/js/jquery.js +0 -32
  112. data/doc/js/quicksearch.js +0 -114
  113. data/doc/js/thickbox-compressed.js +0 -10
  114. data/doc/rdoc.css +0 -706
  115. data/lib/#open_ehr.rb# +0 -11
@@ -0,0 +1,13 @@
1
+ module OpenEHR
2
+ module Parser
3
+ module DADLGrammar
4
+ class Base < Treetop::Runtime::SyntaxNode
5
+
6
+ end
7
+
8
+ class DADL < Base
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,358 @@
1
+ require 'shared_token_grammar'
2
+ require 'dadl'
3
+
4
+ module OpenEHR
5
+ module Parser
6
+ grammar DADLGrammar
7
+
8
+ include SharedToken
9
+
10
+ rule V_DADL_TEXT
11
+ attr_vals space {
12
+ def value
13
+ attr_vals.value
14
+ end
15
+ }
16
+ / complex_object_block space {
17
+ def value
18
+ complex_object_block.value
19
+ end
20
+ }
21
+ end
22
+
23
+ rule attr_vals
24
+ first:attr_val second:(';'? attr_val)* {
25
+ def value
26
+ val = {first.id.to_sym => first.value}
27
+ second.elements.each do |e|
28
+ val[e.attr_val.id.to_sym] = e.attr_val.value
29
+ end
30
+ val
31
+ end
32
+ }
33
+ end
34
+
35
+ rule attr_val
36
+ attr_id SYM_EQ object_block {
37
+ def id
38
+ attr_id.value
39
+ end
40
+
41
+ def value
42
+ object_block.value
43
+ end
44
+ }
45
+ end
46
+
47
+ rule attr_id
48
+ id:V_ATTRIBUTE_IDENTIFIER white_space {
49
+ def value
50
+ id.value
51
+ end
52
+ }
53
+ end
54
+
55
+ rule object_block
56
+ complex_object_block space {
57
+ def value
58
+ complex_object_block.value
59
+ end
60
+ }
61
+ / primitive_object_block space {
62
+ def value
63
+ primitive_object_block.value
64
+ end
65
+ }
66
+ end
67
+
68
+ rule complex_object_block
69
+ single_attr_object_block '' {
70
+ def value
71
+ single_attr_object_block.value
72
+ end
73
+ }
74
+ / multiple_attr_object_block '' {
75
+ def value
76
+ multiple_attr_object_block.value
77
+ end
78
+ }
79
+ end
80
+
81
+ rule multiple_attr_object_block
82
+ type_identifier? untyped_multiple_attr_object_block {
83
+ def value
84
+ untyped_multiple_attr_object_block.value
85
+ end
86
+ }
87
+ end
88
+
89
+ rule untyped_multiple_attr_object_block
90
+ multiple_attr_object_block_head keyed_objects SYM_END_DBLOCK {
91
+ def value
92
+ keyed_objects.value
93
+ end
94
+ }
95
+ end
96
+
97
+ rule multiple_attr_object_block_head
98
+ SYM_START_DBLOCK
99
+ end
100
+
101
+ rule keyed_objects
102
+ keyed_object+ {
103
+ def value
104
+ val = {}
105
+ elements.each do |e|
106
+ val[e.key.to_sym] = e.value
107
+ end
108
+ val
109
+ end
110
+ }
111
+ end
112
+
113
+ rule keyed_object
114
+ object_key SYM_EQ object_block {
115
+ def key
116
+ object_key.value
117
+ end
118
+
119
+ def value
120
+ object_block.value
121
+ end
122
+ }
123
+ end
124
+
125
+ rule object_key
126
+ '[' simple_value ']' white_space {
127
+ def value
128
+ simple_value.value
129
+ end
130
+ }
131
+ end
132
+
133
+ rule single_attr_object_block
134
+ type_identifier? untyped_single_attr_object_block {
135
+ def value
136
+ untyped_single_attr_object_block.value
137
+ end
138
+ }
139
+ end
140
+
141
+ rule untyped_single_attr_object_block
142
+ single_attr_object_complex_head attr_vals SYM_END_DBLOCK {
143
+ def value
144
+ elements[1].value
145
+ end
146
+ }
147
+ / single_attr_object_complex_head SYM_END_DBLOCK {
148
+ def value
149
+ nil
150
+ end
151
+ }
152
+ end
153
+
154
+ rule single_attr_object_complex_head
155
+ SYM_START_DBLOCK
156
+ end
157
+
158
+ rule primitive_object_block
159
+ type_identifier? untyped_primitive_object_block {
160
+ def value
161
+ untyped_primitive_object_block.value
162
+ end
163
+ }
164
+ end
165
+
166
+ rule untyped_primitive_object_block
167
+ SYM_START_DBLOCK primitive_object_value SYM_END_DBLOCK {
168
+ def value
169
+ primitive_object_value.value
170
+ end
171
+ }
172
+ end
173
+
174
+ rule primitive_object_value
175
+ term_code '' {
176
+ def value
177
+ term_code.value
178
+ end
179
+ }
180
+ / simple_list_value '' {
181
+ def value
182
+ simple_list_value.value
183
+ end
184
+ }
185
+ / simple_interval_value {
186
+ def value
187
+ simple_interval_value.value
188
+ end
189
+ }
190
+ / term_code_list_value {
191
+ def value
192
+ term_code_list_value.value
193
+ end
194
+ }
195
+ / simple_value '' {
196
+ def value
197
+ simple_value.value
198
+ end
199
+ }
200
+ end
201
+
202
+ rule simple_value
203
+ integer_value '' {
204
+ def value
205
+ integer_value.value
206
+ end
207
+ }
208
+ / real_value '' {
209
+ def value
210
+ real_value.value
211
+ end
212
+ }
213
+ / boolean_value '' {
214
+ def value
215
+ boolean_value.value
216
+ end
217
+ }
218
+ / character_value '' {
219
+ def value
220
+ character_value.value
221
+ end
222
+ }
223
+ / date_value '' {
224
+ def value
225
+ date_value.value
226
+ end
227
+ }
228
+ / time_value '' {
229
+ def value
230
+ time_value.value
231
+ end
232
+ }
233
+ / date_time_value '' {
234
+ def value
235
+ date_time_value.value
236
+ end
237
+ }
238
+ / duration_value '' {
239
+ def value
240
+ duration_value.value
241
+ end
242
+ }
243
+ / uri_value '' {
244
+ def value
245
+ uri_value.value
246
+ end
247
+ }
248
+ / string_value '' {
249
+ def value
250
+ string_value.value
251
+ end
252
+ }
253
+ end
254
+
255
+ rule simple_list_value
256
+ integer_list_value '' {
257
+ def value
258
+ integer_list_value.value
259
+ end
260
+ }
261
+ / real_list_value '' {
262
+ def value
263
+ real_list_value.value
264
+ end
265
+ }
266
+ / boolean_list_value '' {
267
+ def value
268
+ boolean_list_value.value
269
+ end
270
+ }
271
+ / character_list_value '' {
272
+ def value
273
+ character_list_value.value
274
+ end
275
+ }
276
+ / date_list_value '' {
277
+ def value
278
+ date_list_value.value
279
+ end
280
+ }
281
+ / time_list_value '' {
282
+ def value
283
+ time_list_value.value
284
+ end
285
+ }
286
+ / date_time_list_value '' {
287
+ def value
288
+ date_time_list_value.value
289
+ end
290
+ }
291
+ / duration_list_value '' {
292
+ def value
293
+ duration_list_value.value
294
+ end
295
+ }
296
+ / string_list_value '' {
297
+ def value
298
+ string_list_value.value
299
+ end
300
+ }
301
+ end
302
+
303
+ rule simple_interval_value
304
+ integer_interval_value '' {
305
+ def value
306
+ integer_interval_value.value
307
+ end
308
+ }
309
+ / real_interval_value '' {
310
+ def value
311
+ real_interval_value.value
312
+ end
313
+ }
314
+ / date_interval_value '' {
315
+ def value
316
+ date_interval_value.value
317
+ end
318
+ }
319
+ / time_interval_value '' {
320
+ def value
321
+ time_interval_value.value
322
+ end
323
+ }
324
+ / date_time_interval_value '' {
325
+ def value
326
+ date_time_interval_value.value
327
+ end
328
+ }
329
+ / duration_interval_value {
330
+ def value
331
+ duration_interval_value.value
332
+ end
333
+ }
334
+ end
335
+
336
+ rule term_code
337
+ vtref:V_QUALIFIED_TERM_CODE_REF '' {
338
+ def value
339
+ vtref.value
340
+ end
341
+ }
342
+ end
343
+
344
+ rule term_code_list_value
345
+ term_code (',' term_code)+
346
+ / term_code ',' SYM_LIST_CONTINUE
347
+ end
348
+
349
+ rule uri_value
350
+ V_URI '' {
351
+ def value
352
+ V_URI.value
353
+ end
354
+ }
355
+ end
356
+ end
357
+ end
358
+ end
@@ -0,0 +1,68 @@
1
+ module OpenEHR
2
+ module Parser
3
+ module Exception
4
+ class Base < RuntimeError
5
+ end
6
+
7
+ module Scanner
8
+ class Base < RuntimeError
9
+ end
10
+ end
11
+
12
+ module Parser
13
+ class Base < RuntimeError
14
+ end
15
+
16
+ class Error < Base
17
+ end
18
+ end
19
+
20
+
21
+ #
22
+ #
23
+ # c.f. beale07:_archet_defin_languag,p.100
24
+ module Validation
25
+ class Base < RuntimeError
26
+ end
27
+
28
+ class VARID < Base
29
+ MESSAGE = "The archetype must have an identifier value for the archetype_id section. The identifier must conform to the published openEHR specification for archetype identifiers."
30
+ end
31
+
32
+ class VARCN < Base
33
+ MESSAGE = "The archetype must have an archetype term value in concept section. The term must exist in the archetype ontology."
34
+ end
35
+
36
+ class VARDF < Base
37
+ MESSAGE = "The archetype must have a definition section, expressed as a cADL syntax."
38
+ end
39
+
40
+ class VARON < Base
41
+ MESSAGE = "The archetype must have a ontology section, expressed as a dADL syntax."
42
+ end
43
+
44
+ class VARDT < Base
45
+ MESSAGE = "The topmost typename mentioned in the archetype definition section must match the type mentioned in the type-name slot of the first segment of the archetype id."
46
+ end
47
+
48
+ class VATDF < Base
49
+ MESSAGE = "Each archetype term used as a node identifier the archetype definition must be defined in the term_definitions part of the ontology."
50
+ end
51
+
52
+ class VACDF < Base
53
+ MESSAGE = "Each constraint code used in the archetype definition must be defined in the constraint_definition part of the ontology."
54
+ end
55
+
56
+ class VDFAI < Base
57
+ MESSAGE = "Any archetype identifier mentioned in an archetype slot in the definition section must conform to the published openEHR specification for archetype identifiers."
58
+ end
59
+
60
+ class VDFPT < Base
61
+ MESSAGE = "Any path mentioned in the definition section must be valid syntactically, and a valid path with respect to the hierarchical structure of the definition section."
62
+ end
63
+ end
64
+
65
+ end
66
+ end
67
+ end
68
+