open_ehr 0.9.1 → 0.9.2
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.
- data/Gemfile.lock +22 -20
- data/README.rdoc +4 -3
- data/Rakefile +0 -5
- data/VERSION +1 -1
- data/lib/open_ehr/parser/adl_grammar.tt +30 -23
- data/lib/open_ehr/parser/cadl_grammar.tt +85 -59
- data/lib/open_ehr/parser/cadl_node.rb +18 -0
- data/lib/open_ehr/parser/dadl_grammar.tt +1 -1
- data/lib/open_ehr/parser/shared_token_grammar.tt +4 -4
- data/open_ehr.gemspec +104 -55
- data/spec/lib/open_ehr/parser/{adl → adl14}/adl-test-ENTRY.assumed_types.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/adl-test-ENTRY.basic_types.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/adl-test-ENTRY.basic_types_fail.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/adl-test-ENTRY.most_minimal.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/adl-test-ENTRY.structure_test1.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-SOME_TYPE.generic_type_basic.draft.adl +56 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-SOME_TYPE.generic_type_use_node.draft.adl +63 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-car.paths.test.adl +80 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-car.use_node.test.adl +87 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-composition.dv_coded_text.test.adl +29 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_bindings.test.adl +47 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_desc_missing_purpose.test.adl +45 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_description.test.adl +61 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_description2.test.adl +45 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_identification.test.adl +26 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_internal_ref.test.adl +36 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_internal_ref2.test.adl +36 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_language.test.adl +47 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_language_no_accreditation.test.adl +38 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_language_order_of_translation_details.test.adl +40 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_ontology.test.adl +25 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test.adl +40 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test2.adl +37 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_uncommonkeys.test.adl +29 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.basic_types.test.adl +272 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_code_phrase.test.adl +77 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_ordinal.test.adl +66 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_empty.test.adl +46 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_full.test.adl +64 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_full2.test.adl +64 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_full3.test.adl +64 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_item_units_only.test.adl +55 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_list.test.adl +58 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_property.test.adl +47 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_dv_quantity_reversed.test.adl +59 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.constraint_binding.test.adl +37 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.constraint_ref.test.adl +43 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.datetime.test.adl +183 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.domain_types.test.adl +97 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.durations.test.adl +111 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.empty_other_contributors.test.adl +42 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.missing_language.test.adl +23 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.mixed_node_types.draft.adl +61 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.most_minimal.test.adl +23 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.multi_language.test.adl +52 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.special_string.test.adl +88 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.structure_test1.test.adl +45 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.structure_test2.test.adl +45 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.term_binding.test.adl +37 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.term_binding2.test.adl +32 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.testtranslations.test.adl +83 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.translations_author_language.test.adl +34 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.translations_language_author.test.adl +34 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.unicode_BOM_support.test.adl +41 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.unicode_support.test.adl +41 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ACTION.imaging.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ACTION.referral.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.auscultation-chest.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/adl14/openEHR-EHR-CLUSTER.auscultation.v1.adl +48 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.dimensions-circumference.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.dimensions.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-abdomen.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-chest.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-fetus.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-generic-joint.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-generic-lymphnode.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-generic-mass.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-generic.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-nervous_system.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-uterine_cervix.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-CLUSTER.exam-uterus.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-COMPOSITION.discharge.v1draft.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-COMPOSITION.encounter.v1draft.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-EVALUATION.adverse.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/adl14/openEHR-EHR-EVALUATION.columna_vertebral.v1.adl +85 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-INSTRUCTION.medication.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-INSTRUCTION.referral.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ITEM_TREE.Laboratory_request.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ITEM_TREE.follow_up.v1draft.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ITEM_TREE.imaging.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ITEM_TREE.medication-formulation.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ITEM_TREE.medication.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-ITEM_TREE.referral.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-OBSERVATION.apgar.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-OBSERVATION.blood_pressure.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-OBSERVATION.body_mass_index.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/adl14/openEHR-EHR-OBSERVATION.testassumedvalue.v1.adl +99 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-SECTION.findings.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-SECTION.reason_for_encounter.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-SECTION.summary.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/{adl → adl14}/openEHR-EHR-SECTION.vital_signs.v1.adl +0 -0
- data/spec/lib/open_ehr/parser/adl_parser_spec.rb +2 -2
- data/spec/lib/open_ehr/parser/adl_path_spec.rb +180 -0
- metadata +132 -83
- data/bin/adl_validator.rb +0 -84
- data/lib/open_ehr/parser/scanner/adl_scanner.rb +0 -819
- data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.auscultation.v1.adl +0 -217
- data/spec/lib/open_ehr/parser/adl/openEHR-EHR-cadl_sample.v1.adl +0 -9
- data/spec/rcov.opts +0 -1
data/Gemfile.lock
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
activesupport (3.1.
|
|
4
|
+
activesupport (3.1.1)
|
|
5
5
|
multi_json (~> 1.0)
|
|
6
6
|
archive-tar-minitar (0.5.2)
|
|
7
7
|
builder (3.0.0)
|
|
8
8
|
columnize (0.3.4)
|
|
9
9
|
diff-lcs (1.1.3)
|
|
10
|
-
ffi (1.0.
|
|
10
|
+
ffi (1.0.10)
|
|
11
11
|
git (1.2.5)
|
|
12
|
-
guard (0.8.
|
|
12
|
+
guard (0.8.8)
|
|
13
13
|
thor (~> 0.14.6)
|
|
14
|
-
guard-rspec (0.
|
|
15
|
-
guard (>= 0.4
|
|
16
|
-
guard-spork (0.3.
|
|
17
|
-
guard (>= 0.8.
|
|
14
|
+
guard-rspec (0.5.2)
|
|
15
|
+
guard (>= 0.8.4)
|
|
16
|
+
guard-spork (0.3.1)
|
|
17
|
+
guard (>= 0.8.4)
|
|
18
18
|
spork (>= 0.8.4)
|
|
19
19
|
i18n (0.6.0)
|
|
20
20
|
jeweler (1.6.4)
|
|
21
21
|
bundler (~> 1.0)
|
|
22
22
|
git (>= 1.2.5)
|
|
23
23
|
rake
|
|
24
|
-
|
|
24
|
+
json (1.6.1)
|
|
25
|
+
libnotify (0.5.9)
|
|
25
26
|
linecache19 (0.5.12)
|
|
26
27
|
ruby_core_source (>= 0.1.4)
|
|
27
28
|
locale (2.0.5)
|
|
28
29
|
multi_json (1.0.3)
|
|
29
|
-
polyglot (0.3.
|
|
30
|
-
rake (0.9.2)
|
|
30
|
+
polyglot (0.3.3)
|
|
31
|
+
rake (0.9.2.2)
|
|
31
32
|
rb-inotify (0.8.8)
|
|
32
33
|
ffi (>= 0.5.0)
|
|
33
|
-
rdoc (3.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
rspec-
|
|
37
|
-
rspec-
|
|
38
|
-
|
|
39
|
-
rspec-
|
|
34
|
+
rdoc (3.11)
|
|
35
|
+
json (~> 1.4)
|
|
36
|
+
rspec (2.7.0)
|
|
37
|
+
rspec-core (~> 2.7.0)
|
|
38
|
+
rspec-expectations (~> 2.7.0)
|
|
39
|
+
rspec-mocks (~> 2.7.0)
|
|
40
|
+
rspec-core (2.7.1)
|
|
41
|
+
rspec-expectations (2.7.0)
|
|
40
42
|
diff-lcs (~> 1.1.2)
|
|
41
|
-
rspec-mocks (2.
|
|
43
|
+
rspec-mocks (2.7.0)
|
|
42
44
|
ruby-debug-base19 (0.11.25)
|
|
43
45
|
columnize (>= 0.3.1)
|
|
44
46
|
linecache19 (>= 0.5.11)
|
|
@@ -49,7 +51,7 @@ GEM
|
|
|
49
51
|
ruby-debug-base19 (>= 0.11.19)
|
|
50
52
|
ruby_core_source (0.1.5)
|
|
51
53
|
archive-tar-minitar (>= 0.5.2)
|
|
52
|
-
simplecov (0.5.
|
|
54
|
+
simplecov (0.5.4)
|
|
53
55
|
multi_json (~> 1.0.3)
|
|
54
56
|
simplecov-html (~> 0.5.3)
|
|
55
57
|
simplecov-html (0.5.3)
|
|
@@ -58,7 +60,7 @@ GEM
|
|
|
58
60
|
treetop (1.4.10)
|
|
59
61
|
polyglot
|
|
60
62
|
polyglot (>= 0.3.1)
|
|
61
|
-
xml-simple (1.1.
|
|
63
|
+
xml-simple (1.1.1)
|
|
62
64
|
|
|
63
65
|
PLATFORMS
|
|
64
66
|
ruby
|
data/README.rdoc
CHANGED
|
@@ -40,10 +40,12 @@ Terminology and Demographic server will be implemented in other
|
|
|
40
40
|
project.
|
|
41
41
|
|
|
42
42
|
= Authors
|
|
43
|
+
* Main codes
|
|
43
44
|
Akimichi Tatsukawa, Shinji Kobayashi
|
|
44
|
-
|
|
45
45
|
openEHR.jp, <http://openehr.jp>
|
|
46
46
|
|
|
47
|
+
* ADL parser test cases are derived from Java and Eiffel.
|
|
48
|
+
|
|
47
49
|
= Copyright
|
|
48
50
|
The software, including all files in this directory and
|
|
49
51
|
subdirectories is copyrighted to the original authors and
|
|
@@ -66,5 +68,4 @@ Public licence (MPL), and the Free Software Foundation GNU General
|
|
|
66
68
|
Public Licence (GPL) and Lesser GNU General Public Licence (LGPL). See
|
|
67
69
|
the Mozilla relicensing FAQ for details of this license. This in no
|
|
68
70
|
way constrains the way in which software created by other
|
|
69
|
-
organisations is licenced.
|
|
70
|
-
|
|
71
|
+
organisations is licenced.
|
data/Rakefile
CHANGED
|
@@ -31,11 +31,6 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
|
31
31
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
35
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
|
36
|
-
spec.rcov = true
|
|
37
|
-
end
|
|
38
|
-
|
|
39
34
|
task :default => :spec
|
|
40
35
|
|
|
41
36
|
require 'rdoc/task'
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.
|
|
1
|
+
0.9.2
|
|
@@ -13,10 +13,10 @@ module OpenEHR
|
|
|
13
13
|
|
|
14
14
|
rule archetype
|
|
15
15
|
arch_identification
|
|
16
|
-
arch_specialisation?
|
|
16
|
+
spec:(arch_specialisation)?
|
|
17
17
|
arch_concept
|
|
18
|
-
arch_language?
|
|
19
|
-
arch_description?
|
|
18
|
+
lang:(arch_language)?
|
|
19
|
+
desc:(arch_description)?
|
|
20
20
|
arch_definition
|
|
21
21
|
arch_invariant?
|
|
22
22
|
arch_ontology {
|
|
@@ -33,15 +33,15 @@ module OpenEHR
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def original_language
|
|
36
|
-
|
|
36
|
+
lang.original_language
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def translations
|
|
40
|
-
|
|
40
|
+
lang.translations
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def description
|
|
44
|
-
|
|
44
|
+
desc.values unless desc.empty?
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def definition
|
|
@@ -61,48 +61,55 @@ module OpenEHR
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def adl_version
|
|
64
|
-
head.adl_version
|
|
64
|
+
head.value[:adl_version]
|
|
65
65
|
end
|
|
66
|
+
|
|
67
|
+
def is_controlled?
|
|
68
|
+
head.value[:is_controlled?]
|
|
69
|
+
end
|
|
66
70
|
}
|
|
67
71
|
end
|
|
68
72
|
|
|
69
73
|
rule arch_head
|
|
70
|
-
SYM_ARCHETYPE m:arch_meta_data
|
|
71
|
-
def
|
|
72
|
-
m.
|
|
74
|
+
SYM_ARCHETYPE m:arch_meta_data {
|
|
75
|
+
def value
|
|
76
|
+
m.value
|
|
73
77
|
end
|
|
74
78
|
}
|
|
79
|
+
/ SYM_ARCHETYPE {
|
|
80
|
+
def value
|
|
81
|
+
Hash.new
|
|
82
|
+
end
|
|
83
|
+
}
|
|
75
84
|
end
|
|
76
85
|
|
|
77
86
|
rule arch_meta_data
|
|
78
87
|
'(' arch_meta_data_items ')' space {
|
|
79
|
-
def
|
|
80
|
-
arch_meta_data_items.
|
|
88
|
+
def value
|
|
89
|
+
arch_meta_data_items.value
|
|
81
90
|
end
|
|
82
91
|
}
|
|
83
92
|
end
|
|
84
93
|
|
|
85
94
|
rule arch_meta_data_items
|
|
86
|
-
item:arch_meta_data_item (';'
|
|
87
|
-
def
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def is_controled?
|
|
92
|
-
item.is_controled? or other_item.map {|i| i.is_controled}
|
|
95
|
+
item:arch_meta_data_item other_item:(';' arch_meta_data_item)* {
|
|
96
|
+
def value
|
|
97
|
+
v = item.value
|
|
98
|
+
other_item.elements.map {|i| i.arch_meta_data_item.value}
|
|
99
|
+
v
|
|
93
100
|
end
|
|
94
101
|
}
|
|
95
102
|
end
|
|
96
103
|
|
|
97
104
|
rule arch_meta_data_item
|
|
98
105
|
SYM_ADL_VERSION SYM_EQ V_VERSION_STRING space {
|
|
99
|
-
def
|
|
100
|
-
|
|
106
|
+
def value
|
|
107
|
+
{:adl_version => elements[2].text_value}
|
|
101
108
|
end
|
|
102
109
|
}
|
|
103
110
|
/ SYM_IS_CONTROLED space {
|
|
104
|
-
def
|
|
105
|
-
true if elements[0]
|
|
111
|
+
def value
|
|
112
|
+
{:is_controled? => true} # if elements[0]
|
|
106
113
|
end
|
|
107
114
|
}
|
|
108
115
|
end
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
require 'shared_token_grammar'
|
|
2
2
|
require 'open_ehr/assumed_library_types'
|
|
3
3
|
require 'open_ehr/am/archetype/constraint_model'
|
|
4
|
+
require 'cadl_node'
|
|
4
5
|
|
|
5
6
|
module OpenEHR
|
|
6
7
|
module Parser
|
|
7
8
|
grammar CADL
|
|
8
|
-
# include
|
|
9
|
-
# include OpenEHR::AssumedLibraryTypes
|
|
10
|
-
# include OpenEHR::AM::Archetype::ConstraintModel
|
|
9
|
+
# include OpenEHR::Parser::CADL
|
|
11
10
|
|
|
12
11
|
rule V_CADL_TEXT
|
|
13
12
|
c_complex_object '' {
|
|
14
|
-
def value
|
|
13
|
+
def value
|
|
15
14
|
c_complex_object.value
|
|
16
15
|
end
|
|
17
16
|
}
|
|
@@ -24,23 +23,33 @@ module OpenEHR
|
|
|
24
23
|
|
|
25
24
|
rule c_complex_object
|
|
26
25
|
head:c_complex_object_head SYM_MATCHES SYM_START_CBLOCK body:c_complex_object_body SYM_END_CBLOCK {
|
|
27
|
-
def value
|
|
26
|
+
def value(node = ArchetypeNode.new)
|
|
28
27
|
args = head.value
|
|
29
|
-
args[:path] ||= '/'
|
|
30
28
|
args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
31
29
|
:lower => 1, :upper => 1)
|
|
32
|
-
|
|
30
|
+
node.id = args[:node_id]
|
|
31
|
+
if node.root?
|
|
32
|
+
args[:path] = '/'
|
|
33
|
+
else
|
|
34
|
+
args[:path] = node.path + '[' + args[:node_id] + ']'
|
|
35
|
+
end
|
|
36
|
+
args.update body.value(node)
|
|
33
37
|
OpenEHR::AM::Archetype::ConstraintModel::CComplexObject.new(args)
|
|
34
38
|
end
|
|
35
39
|
}
|
|
36
40
|
/ c_complex_object_head '' {
|
|
37
|
-
def value
|
|
41
|
+
def value(node = ArchetypeNode.new)
|
|
38
42
|
args = c_complex_object_head.value
|
|
39
|
-
args[:path] ||= '/'
|
|
40
43
|
args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
41
44
|
:lower => 1, :upper => 1)
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
if node.root?
|
|
46
|
+
node.path = '/'
|
|
47
|
+
else
|
|
48
|
+
node.id = args[:node_id]
|
|
49
|
+
p args[:rm_type_name]
|
|
50
|
+
node.path += '[' + args[:node_id] + ']'
|
|
51
|
+
end
|
|
52
|
+
OpenEHR::AM::Archetype::ConstraintModel::CComplexObject.new(args)
|
|
44
53
|
end
|
|
45
54
|
}
|
|
46
55
|
end
|
|
@@ -75,13 +84,13 @@ module OpenEHR
|
|
|
75
84
|
|
|
76
85
|
rule c_complex_object_body
|
|
77
86
|
c_any '' {
|
|
78
|
-
def value
|
|
87
|
+
def value(node)
|
|
79
88
|
{:any_allowed? => true}
|
|
80
89
|
end
|
|
81
90
|
}
|
|
82
91
|
/ c_attributes '' {
|
|
83
|
-
def value
|
|
84
|
-
{:attributes => c_attributes.value,
|
|
92
|
+
def value(node = nil)
|
|
93
|
+
{:attributes => c_attributes.value(node),
|
|
85
94
|
:any_allowed? => false}
|
|
86
95
|
end
|
|
87
96
|
}
|
|
@@ -89,32 +98,32 @@ module OpenEHR
|
|
|
89
98
|
|
|
90
99
|
rule c_object
|
|
91
100
|
c_complex_object '' {
|
|
92
|
-
def value
|
|
93
|
-
c_complex_object.value
|
|
101
|
+
def value(node)
|
|
102
|
+
c_complex_object.value(node)
|
|
94
103
|
end
|
|
95
104
|
}
|
|
96
105
|
/ archetype_slot '' {
|
|
97
|
-
def value
|
|
98
|
-
archetype_slot.value
|
|
106
|
+
def value(node)
|
|
107
|
+
archetype_slot.value(node)
|
|
99
108
|
end
|
|
100
109
|
}
|
|
101
110
|
/ archetype_internal_ref '' {
|
|
102
|
-
def value
|
|
103
|
-
archetype_internal_ref.value
|
|
111
|
+
def value(node = nil)
|
|
112
|
+
archetype_internal_ref.value(node)
|
|
104
113
|
end
|
|
105
114
|
}
|
|
106
115
|
/ constraint_ref '' {
|
|
107
|
-
def value
|
|
116
|
+
def value(node = nil)
|
|
108
117
|
constraint_ref.value
|
|
109
118
|
end
|
|
110
119
|
}
|
|
111
120
|
/ c_primitive_object '' {
|
|
112
|
-
def value
|
|
121
|
+
def value(node = nil)
|
|
113
122
|
c_primitive_object.value
|
|
114
123
|
end
|
|
115
124
|
}
|
|
116
125
|
/ V_C_DOMAIN_TYPE '' {
|
|
117
|
-
def value
|
|
126
|
+
def value(node = nil)
|
|
118
127
|
p elemetns
|
|
119
128
|
end
|
|
120
129
|
}
|
|
@@ -122,45 +131,50 @@ module OpenEHR
|
|
|
122
131
|
end
|
|
123
132
|
|
|
124
133
|
rule archetype_internal_ref
|
|
125
|
-
SYM_USE_NODE type_identifier c_occurrences object_path {
|
|
126
|
-
def value
|
|
127
|
-
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef(
|
|
134
|
+
SYM_USE_NODE type_identifier c_occurrences object_path space {
|
|
135
|
+
def value(node)
|
|
136
|
+
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef.new(
|
|
128
137
|
:rm_type_name => type_identifier.value,
|
|
129
138
|
:occurrences => c_occurrences.value,
|
|
130
|
-
:path =>
|
|
139
|
+
:path => node.path,
|
|
140
|
+
:target_path => object_path.value)
|
|
131
141
|
end
|
|
132
142
|
}
|
|
133
|
-
/ SYM_USE_NODE type_identifier object_path {
|
|
134
|
-
def value
|
|
135
|
-
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef(
|
|
136
|
-
:rm_type_name => type_identifier.value,
|
|
143
|
+
/ SYM_USE_NODE type_identifier object_path space {
|
|
144
|
+
def value(node = nil)
|
|
145
|
+
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef.new(
|
|
146
|
+
:rm_type_name => type_identifier.value,
|
|
147
|
+
:occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
148
|
+
:lower => 1, :upper => 1),
|
|
149
|
+
:path => node.path,
|
|
150
|
+
:target_path => object_path.value)
|
|
137
151
|
end
|
|
138
152
|
}
|
|
139
153
|
end
|
|
140
154
|
|
|
141
155
|
rule archetype_slot
|
|
142
156
|
c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK {
|
|
143
|
-
def value
|
|
157
|
+
def value(node = nil)
|
|
144
158
|
args = c_archetype_slot_head.value
|
|
145
159
|
args[:includes] = c_includes.value
|
|
146
160
|
args[:excludes] = c_excludes.value
|
|
147
|
-
args[:path]
|
|
161
|
+
args[:path] = node.path
|
|
148
162
|
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
|
|
149
163
|
end
|
|
150
164
|
}
|
|
151
165
|
/ c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes SYM_END_CBLOCK {
|
|
152
|
-
def value
|
|
166
|
+
def value(node = nil)
|
|
153
167
|
args = c_archetype_slot_head.value
|
|
154
168
|
args[:includes] = c_includes.value
|
|
155
|
-
args[:path]
|
|
169
|
+
args[:path] = node.path
|
|
156
170
|
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
|
|
157
171
|
end
|
|
158
172
|
}
|
|
159
173
|
/ c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_excludes SYM_END_CBLOCK {
|
|
160
|
-
def value
|
|
174
|
+
def value(node = nil)
|
|
161
175
|
args = c_archetype_slot_head.value
|
|
162
176
|
args[:excludes] = c_excludes.value
|
|
163
|
-
args[:path]
|
|
177
|
+
args[:path] = node.path
|
|
164
178
|
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
|
|
165
179
|
end
|
|
166
180
|
}
|
|
@@ -251,22 +265,24 @@ module OpenEHR
|
|
|
251
265
|
end
|
|
252
266
|
|
|
253
267
|
rule c_attributes
|
|
254
|
-
c_attribute more_attr:(c_attribute)* {
|
|
255
|
-
def value
|
|
256
|
-
attributes.map {|c| c.value}
|
|
268
|
+
c_attribute more_attr:(c_attribute white_space)* {
|
|
269
|
+
def value(node)
|
|
270
|
+
attributes.map {|c| c.value(node)}
|
|
257
271
|
end
|
|
258
272
|
|
|
259
273
|
def attributes
|
|
260
|
-
[c_attribute] + more_attr.elements.map {|e| e.
|
|
274
|
+
[c_attribute] + more_attr.elements.map {|e| e.c_attribute}
|
|
261
275
|
end
|
|
262
276
|
}
|
|
263
277
|
end
|
|
264
278
|
|
|
265
279
|
rule c_attribute
|
|
266
280
|
c_attr_head c_attr_body {
|
|
267
|
-
def value
|
|
268
|
-
val = c_attr_head.value
|
|
269
|
-
|
|
281
|
+
def value(node)
|
|
282
|
+
val = c_attr_head.value(node)
|
|
283
|
+
child_node = ArchetypeNode.new(node)
|
|
284
|
+
child_node.path = val.path
|
|
285
|
+
val.children = c_attr_body.value(child_node)
|
|
270
286
|
val
|
|
271
287
|
end
|
|
272
288
|
}
|
|
@@ -274,55 +290,59 @@ module OpenEHR
|
|
|
274
290
|
|
|
275
291
|
rule c_attr_head
|
|
276
292
|
id:(V_ATTRIBUTE_IDENTIFIER) white_space c_existence c_cardinality {
|
|
277
|
-
def value
|
|
293
|
+
def value(node)
|
|
294
|
+
path = (node.root? ? '/' : (node.path + "[#{node.id}]" + '/')) + id.value
|
|
278
295
|
OpenEHR::AM::Archetype::ConstraintModel::CMultipleAttribute.new(
|
|
279
296
|
:rm_attribute_name => id.value,
|
|
280
|
-
:path =>
|
|
297
|
+
:path => path,
|
|
281
298
|
:existence => c_existence.value,
|
|
282
299
|
:cardinality => c_cardinality.value)
|
|
283
300
|
end
|
|
284
301
|
}
|
|
285
302
|
/ id:V_ATTRIBUTE_IDENTIFIER white_space c_existence {
|
|
286
|
-
def value
|
|
303
|
+
def value(node)
|
|
304
|
+
path = (node.root? ? '/' : (node.path + "[#{node.id}]" + '/')) + id.value
|
|
287
305
|
OpenEHR::AM::Archetype::ConstraintModel::CSingleAttribute.new(
|
|
288
306
|
:rm_attribute_name => id.value,
|
|
289
|
-
:path =>
|
|
307
|
+
:path => path,
|
|
290
308
|
:existence => c_existence.value)
|
|
291
309
|
end
|
|
292
310
|
}
|
|
293
311
|
/ id:(V_ATTRIBUTE_IDENTIFIER) white_space c_cardinality {
|
|
294
|
-
def value
|
|
312
|
+
def value(node)
|
|
313
|
+
path = (node.root? ? '/' : (node.path + "[#{node.id}]" + '/')) + id.value
|
|
295
314
|
OpenEHR::AM::Archetype::ConstraintModel::CMultipleAttribute.new(
|
|
296
315
|
:rm_attribute_name => id.value,
|
|
297
|
-
:path =>
|
|
316
|
+
:path => path,
|
|
298
317
|
:cardinality => c_cardinality.value)
|
|
299
318
|
end
|
|
300
319
|
}
|
|
301
320
|
/ id:(V_ATTRIBUTE_IDENTIFIER) white_space {
|
|
302
|
-
def value
|
|
321
|
+
def value(node)
|
|
322
|
+
path = (node.root? ? '/' : (node.path + "[#{node.id}]" + '/')) + id.value
|
|
303
323
|
OpenEHR::AM::Archetype::ConstraintModel::CSingleAttribute.new(
|
|
304
|
-
:rm_attribute_name => id.value, :path =>
|
|
324
|
+
:rm_attribute_name => id.value, :path => path)
|
|
305
325
|
end
|
|
306
326
|
}
|
|
307
327
|
end
|
|
308
328
|
|
|
309
329
|
rule c_attr_body
|
|
310
330
|
SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK {
|
|
311
|
-
def value
|
|
312
|
-
c_attr_values.value
|
|
331
|
+
def value(node)
|
|
332
|
+
c_attr_values.value(node)
|
|
313
333
|
end
|
|
314
334
|
}
|
|
315
335
|
end
|
|
316
336
|
|
|
317
337
|
rule c_attr_values
|
|
318
338
|
c_any '' {
|
|
319
|
-
def value
|
|
339
|
+
def value(node)
|
|
320
340
|
c_any.value
|
|
321
341
|
end
|
|
322
342
|
}
|
|
323
343
|
/ c_object more_co:(c_object '')* {
|
|
324
|
-
def value
|
|
325
|
-
c_objects.map {|c| c.value}
|
|
344
|
+
def value(node)
|
|
345
|
+
c_objects.map {|c| c.value(node)}
|
|
326
346
|
end
|
|
327
347
|
|
|
328
348
|
def c_objects
|
|
@@ -577,10 +597,10 @@ module OpenEHR
|
|
|
577
597
|
:pattern => pat.value, :type => 'Boolean')
|
|
578
598
|
end
|
|
579
599
|
}
|
|
580
|
-
/ V_STRING '' {
|
|
600
|
+
/ str:V_STRING '' {
|
|
581
601
|
def value
|
|
582
602
|
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CString.new(
|
|
583
|
-
:list => [
|
|
603
|
+
:list => [str.value])
|
|
584
604
|
end
|
|
585
605
|
}
|
|
586
606
|
end
|
|
@@ -763,6 +783,12 @@ module OpenEHR
|
|
|
763
783
|
end
|
|
764
784
|
|
|
765
785
|
# path block
|
|
786
|
+
rule object_path
|
|
787
|
+
movable_path
|
|
788
|
+
/ absolute_path
|
|
789
|
+
/ relative_path
|
|
790
|
+
end
|
|
791
|
+
|
|
766
792
|
rule movable_path
|
|
767
793
|
SYM_MOVABLE_LEADER relative_path {
|
|
768
794
|
def value
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module OpenEHR
|
|
2
|
+
module Parser
|
|
3
|
+
module CADL
|
|
4
|
+
class ArchetypeNode
|
|
5
|
+
attr_reader :parent
|
|
6
|
+
attr_accessor :path, :id
|
|
7
|
+
|
|
8
|
+
def initialize(parent = nil)
|
|
9
|
+
@parent = parent
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def root?
|
|
13
|
+
return parent.nil?
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -18,22 +18,22 @@ module OpenEHR
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
rule type_identifier
|
|
21
|
-
'(' id:V_TYPE_IDENTIFIER ')' {
|
|
21
|
+
'(' id:V_TYPE_IDENTIFIER ')' white_space {
|
|
22
22
|
def value
|
|
23
23
|
id.value
|
|
24
24
|
end
|
|
25
25
|
}
|
|
26
|
-
/ '(' id:V_GENERIC_TYPE_IDENTIFIER ')' {
|
|
26
|
+
/ '(' id:V_GENERIC_TYPE_IDENTIFIER ')' white_space {
|
|
27
27
|
def value
|
|
28
28
|
id.value
|
|
29
29
|
end
|
|
30
30
|
}
|
|
31
|
-
/ id:V_TYPE_IDENTIFIER
|
|
31
|
+
/ id:V_TYPE_IDENTIFIER white_space {
|
|
32
32
|
def value
|
|
33
33
|
id.value
|
|
34
34
|
end
|
|
35
35
|
}
|
|
36
|
-
/ id:V_GENERIC_TYPE_IDENTIFIER
|
|
36
|
+
/ id:V_GENERIC_TYPE_IDENTIFIER space {
|
|
37
37
|
def value
|
|
38
38
|
id.value
|
|
39
39
|
end
|