open_ehr 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|