open_ehr 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/README.rdoc +3 -3
- data/VERSION +1 -1
- data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +61 -34
- data/lib/open_ehr/am/openehr_profile/data_types/basic.rb +27 -0
- data/lib/open_ehr/am/openehr_profile/data_types/quantity.rb +18 -0
- data/lib/open_ehr/am/openehr_profile/data_types/text.rb +22 -0
- data/lib/open_ehr/am/openehr_profile/data_types.rb +12 -0
- data/lib/open_ehr/am/openehr_profile.rb +10 -0
- data/lib/open_ehr/am.rb +2 -0
- data/lib/open_ehr/assumed_library_types.rb +30 -25
- data/lib/open_ehr/parser/cadl_grammar.tt +479 -163
- data/lib/open_ehr/parser/shared_token_grammar.tt +63 -43
- data/lib/open_ehr/rm/data_types/quantity/date_time.rb +27 -14
- data/lib/open_ehr.rb +1 -1
- data/open_ehr.gemspec +17 -6
- data/spec/lib/open_ehr/am/archetype/assertion/operator_kind_spec.rb +4 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_spec.rb +20 -48
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +33 -8
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +19 -52
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +2 -3
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +27 -7
- data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +0 -1
- data/spec/lib/open_ehr/am/openehr_profile/data_types/text/c_code_phrase_spec.rb +35 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-SOME_TYPE.generic_type_basic.draft.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test2.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.basic_types.test.adl +3 -3
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_code_phrase.test.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.datetime.test.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.durations.test.adl +2 -4
- data/spec/lib/open_ehr/parser/adl_archetype_internal_ref_with_generics_spec.rb +6 -6
- data/spec/lib/open_ehr/parser/adl_archetype_slot_cluster_spec.rb +101 -0
- data/spec/lib/open_ehr/parser/adl_archetype_slot_spec.rb +193 -0
- data/spec/lib/open_ehr/parser/adl_archetype_uncommon_term_keys_spec.rb +25 -0
- data/spec/lib/open_ehr/parser/adl_parser_spec.rb +6 -6
- data/spec/lib/open_ehr/parser/basic_generic_type_spec.rb +18 -0
- data/spec/lib/open_ehr/parser/basic_type_spec.rb +2922 -0
- data/spec/lib/open_ehr/parser/code_phrase_spec.rb +91 -0
- data/spec/lib/open_ehr/parser/date_time_spec.rb +1953 -0
- data/spec/lib/open_ehr/parser/duration_spec.rb +475 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_duration_spec.rb +44 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb +6 -2
- data/spec/spec_helper.rb +3 -2
- metadata +52 -41
- data/lib/open_ehr/am/archetype/archetype_description/archetype_description.rb +0 -21
- data/lib/open_ehr/am/open_ehr_profile/data_types/basic.rb +0 -29
- data/lib/open_ehr/am/open_ehr_profile/data_types/quantity.rb +0 -19
- data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +0 -15
@@ -1,6 +1,7 @@
|
|
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 'open_ehr/am/openehr_profile/data_types/text'
|
4
5
|
require 'cadl_node'
|
5
6
|
|
6
7
|
module OpenEHR
|
@@ -22,7 +23,7 @@ module OpenEHR
|
|
22
23
|
end
|
23
24
|
|
24
25
|
rule c_complex_object
|
25
|
-
head:c_complex_object_head SYM_MATCHES SYM_START_CBLOCK body:c_complex_object_body SYM_END_CBLOCK {
|
26
|
+
head:c_complex_object_head SYM_MATCHES SYM_START_CBLOCK body:c_complex_object_body SYM_END_CBLOCK space {
|
26
27
|
def value(node = ArchetypeNode.new)
|
27
28
|
args = head.value
|
28
29
|
args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new(
|
@@ -101,6 +102,11 @@ module OpenEHR
|
|
101
102
|
c_complex_object.value(node)
|
102
103
|
end
|
103
104
|
}
|
105
|
+
/ vtc:V_TERM_CODE_CONSTRAINT '' {
|
106
|
+
def value(node)
|
107
|
+
vtc.value(node)
|
108
|
+
end
|
109
|
+
}
|
104
110
|
/ constraint_ref '' {
|
105
111
|
def value(node = nil)
|
106
112
|
constraint_ref.value
|
@@ -147,28 +153,25 @@ module OpenEHR
|
|
147
153
|
end
|
148
154
|
|
149
155
|
rule archetype_slot
|
150
|
-
c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK {
|
151
|
-
def value(node
|
152
|
-
args = c_archetype_slot_head.value
|
156
|
+
c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK space {
|
157
|
+
def value(node)
|
158
|
+
args = c_archetype_slot_head.value(node)
|
153
159
|
args[:includes] = c_includes.value
|
154
160
|
args[:excludes] = c_excludes.value
|
155
|
-
args[:path] = node.path
|
156
161
|
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
|
157
162
|
end
|
158
163
|
}
|
159
|
-
/ c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes SYM_END_CBLOCK {
|
160
|
-
def value(node
|
161
|
-
args = c_archetype_slot_head.value
|
164
|
+
/ c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes SYM_END_CBLOCK space {
|
165
|
+
def value(node)
|
166
|
+
args = c_archetype_slot_head.value(node)
|
162
167
|
args[:includes] = c_includes.value
|
163
|
-
args[:path] = node.path
|
164
168
|
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
|
165
169
|
end
|
166
170
|
}
|
167
|
-
/ c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_excludes SYM_END_CBLOCK {
|
168
|
-
def value(node
|
169
|
-
args = c_archetype_slot_head.value
|
171
|
+
/ c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_excludes SYM_END_CBLOCK space {
|
172
|
+
def value(node)
|
173
|
+
args = c_archetype_slot_head.value(node)
|
170
174
|
args[:excludes] = c_excludes.value
|
171
|
-
args[:path] = node.path
|
172
175
|
OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
|
173
176
|
end
|
174
177
|
}
|
@@ -176,29 +179,31 @@ module OpenEHR
|
|
176
179
|
|
177
180
|
rule c_archetype_slot_head
|
178
181
|
c_archetype_slot_id white_space c_occurrences {
|
179
|
-
def value
|
180
|
-
args = c_archetype_slot_id.value
|
182
|
+
def value(node)
|
183
|
+
args = c_archetype_slot_id.value(node)
|
181
184
|
args[:occurrences] = c_occurrences.value
|
182
185
|
args
|
183
186
|
end
|
184
187
|
}
|
185
188
|
/ c_archetype_slot_id white_space {
|
186
|
-
def value
|
189
|
+
def value(node)
|
187
190
|
c_archetype_slot_id.value
|
188
191
|
end
|
189
192
|
}
|
190
193
|
end
|
191
194
|
|
192
195
|
rule c_archetype_slot_id
|
193
|
-
SYM_ALLOW_ARCHETYPE type_identifier V_LOCAL_TERM_CODE_REF {
|
194
|
-
def value
|
196
|
+
SYM_ALLOW_ARCHETYPE type_identifier lt:V_LOCAL_TERM_CODE_REF {
|
197
|
+
def value(node)
|
195
198
|
{:rm_type_name => type_identifier.value,
|
196
|
-
:node_id =>
|
199
|
+
:node_id => lt.value,
|
200
|
+
:path => node.path + "[#{lt.value}]"}
|
197
201
|
end
|
198
202
|
}
|
199
203
|
/ SYM_ALLOW_ARCHETYPE type_identifier {
|
200
|
-
def value
|
201
|
-
{:rm_type_name => type_identifier.value
|
204
|
+
def value(node)
|
205
|
+
{:rm_type_name => type_identifier.value,
|
206
|
+
:path => node.path}
|
202
207
|
end
|
203
208
|
}
|
204
209
|
end
|
@@ -212,19 +217,14 @@ module OpenEHR
|
|
212
217
|
end
|
213
218
|
|
214
219
|
rule c_primitive
|
215
|
-
|
216
|
-
def value
|
217
|
-
c_integer.value
|
218
|
-
end
|
219
|
-
}
|
220
|
-
/ c_real '' {
|
220
|
+
c_duration '' {
|
221
221
|
def value
|
222
|
-
|
222
|
+
c_duration.value
|
223
223
|
end
|
224
224
|
}
|
225
|
-
/
|
225
|
+
/ c_date_time '' {
|
226
226
|
def value
|
227
|
-
|
227
|
+
c_date_time.value
|
228
228
|
end
|
229
229
|
}
|
230
230
|
/ c_time '' {
|
@@ -232,26 +232,31 @@ module OpenEHR
|
|
232
232
|
c_time.value
|
233
233
|
end
|
234
234
|
}
|
235
|
-
/
|
235
|
+
/ c_date '' {
|
236
236
|
def value
|
237
|
-
|
237
|
+
c_date.value
|
238
238
|
end
|
239
239
|
}
|
240
|
-
/
|
240
|
+
/ c_real '' {
|
241
241
|
def value
|
242
|
-
|
242
|
+
c_real.value
|
243
243
|
end
|
244
244
|
}
|
245
|
-
/
|
245
|
+
/ c_integer '' {
|
246
246
|
def value
|
247
|
-
|
247
|
+
c_integer.value
|
248
248
|
end
|
249
|
-
}
|
249
|
+
}
|
250
250
|
/ c_boolean '' {
|
251
251
|
def value
|
252
252
|
c_boolean.value
|
253
253
|
end
|
254
254
|
}
|
255
|
+
/ c_string '' {
|
256
|
+
def value
|
257
|
+
c_string.value
|
258
|
+
end
|
259
|
+
}
|
255
260
|
end
|
256
261
|
|
257
262
|
rule c_any
|
@@ -352,7 +357,7 @@ module OpenEHR
|
|
352
357
|
end
|
353
358
|
|
354
359
|
rule c_attr_body
|
355
|
-
SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK {
|
360
|
+
SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK space {
|
356
361
|
def value(node)
|
357
362
|
c_attr_values.value(node)
|
358
363
|
end
|
@@ -393,7 +398,7 @@ module OpenEHR
|
|
393
398
|
end
|
394
399
|
|
395
400
|
rule c_existence
|
396
|
-
SYM_EXISTENCE SYM_MATCHES SYM_START_CBLOCK existence_spec SYM_END_CBLOCK {
|
401
|
+
SYM_EXISTENCE SYM_MATCHES SYM_START_CBLOCK existence_spec SYM_END_CBLOCK space {
|
397
402
|
def value
|
398
403
|
existence_spec.value
|
399
404
|
end
|
@@ -414,7 +419,7 @@ module OpenEHR
|
|
414
419
|
end
|
415
420
|
|
416
421
|
rule c_cardinality
|
417
|
-
SYM_CARDINALITY SYM_MATCHES SYM_START_CBLOCK cardinality_spec SYM_END_CBLOCK {
|
422
|
+
SYM_CARDINALITY SYM_MATCHES SYM_START_CBLOCK cardinality_spec SYM_END_CBLOCK space {
|
418
423
|
def value
|
419
424
|
cardinality_spec.value
|
420
425
|
end
|
@@ -475,10 +480,16 @@ module OpenEHR
|
|
475
480
|
:is_unique => true)
|
476
481
|
end
|
477
482
|
}
|
483
|
+
/ occurrence_spec space {
|
484
|
+
def value
|
485
|
+
OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
|
486
|
+
:interval => occurrence_spec.value)
|
487
|
+
end
|
488
|
+
}
|
478
489
|
end
|
479
490
|
|
480
491
|
rule c_occurrences
|
481
|
-
SYM_OCCURRENCES SYM_MATCHES SYM_START_CBLOCK occurrence_spec SYM_END_CBLOCK {
|
492
|
+
SYM_OCCURRENCES SYM_MATCHES SYM_START_CBLOCK occurrence_spec SYM_END_CBLOCK space {
|
482
493
|
def value
|
483
494
|
occurrence_spec.value
|
484
495
|
end
|
@@ -486,7 +497,7 @@ module OpenEHR
|
|
486
497
|
end
|
487
498
|
|
488
499
|
rule occurrence_spec
|
489
|
-
st:
|
500
|
+
st:integer_value SYM_ELLIPSIS ed:cardinality_limit_value {
|
490
501
|
def value
|
491
502
|
if ed.value == '*'
|
492
503
|
interval = OpenEHR::AssumedLibraryTypes::Interval.new(
|
@@ -509,7 +520,7 @@ module OpenEHR
|
|
509
520
|
end
|
510
521
|
|
511
522
|
rule cardinality_limit_value
|
512
|
-
integer_value {
|
523
|
+
integer_value '' {
|
513
524
|
def value
|
514
525
|
text_value.to_i
|
515
526
|
end
|
@@ -521,274 +532,312 @@ module OpenEHR
|
|
521
532
|
}
|
522
533
|
end
|
523
534
|
|
524
|
-
rule
|
525
|
-
|
535
|
+
rule c_integer
|
536
|
+
c_integer_spec ';' white_space integer_value {
|
526
537
|
def value
|
527
|
-
|
538
|
+
args = c_integer_spec.value
|
539
|
+
args[:assumed_value] = integer_value.value
|
540
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CInteger.new(args)
|
528
541
|
end
|
529
542
|
}
|
530
|
-
/
|
543
|
+
/ c_integer_spec '' {
|
531
544
|
def value
|
532
|
-
|
545
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CInteger.new(
|
546
|
+
c_integer_spec.value)
|
533
547
|
end
|
534
548
|
}
|
535
|
-
|
549
|
+
end
|
550
|
+
|
551
|
+
rule c_integer_spec
|
552
|
+
integer_list_value '' {
|
536
553
|
def value
|
537
|
-
|
554
|
+
{:list => integer_list_value.value}
|
538
555
|
end
|
539
556
|
}
|
540
|
-
/
|
557
|
+
/ integer_interval_value '' {
|
541
558
|
def value
|
542
|
-
|
559
|
+
{:range => integer_interval_value.value}
|
543
560
|
end
|
544
561
|
}
|
545
|
-
|
546
|
-
|
547
|
-
rule c_integer
|
548
|
-
c_integer_spec '' {
|
562
|
+
/ integer_value !'..' '' {
|
549
563
|
def value
|
550
|
-
|
564
|
+
{:list => [integer_value.value]}
|
551
565
|
end
|
552
566
|
}
|
553
|
-
/
|
567
|
+
/ occurrence_spec '' {
|
554
568
|
def value
|
555
|
-
|
569
|
+
{:range => occurrence_spec.value}
|
556
570
|
end
|
557
571
|
}
|
558
572
|
end
|
559
573
|
|
560
574
|
rule c_real_spec
|
561
|
-
|
575
|
+
real_list_value '' {
|
562
576
|
def value
|
563
|
-
|
577
|
+
{:list => real_list_value.value}
|
564
578
|
end
|
565
579
|
}
|
566
|
-
/
|
580
|
+
/ real_interval_value '' {
|
567
581
|
def value
|
568
|
-
|
582
|
+
{:range => real_interval_value.value}
|
569
583
|
end
|
570
584
|
}
|
571
|
-
/
|
585
|
+
/ real_value '' {
|
572
586
|
def value
|
573
|
-
|
587
|
+
{:list => [real_value.value]}
|
574
588
|
end
|
575
589
|
}
|
576
590
|
end
|
577
591
|
|
578
592
|
rule c_real
|
579
|
-
c_real_spec '' {
|
593
|
+
c_real_spec ';' white_space real_value {
|
580
594
|
def value
|
581
|
-
c_real_spec.value
|
595
|
+
args = c_real_spec.value
|
596
|
+
args[:assumed_value] = real_value.value
|
597
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CReal.new(args)
|
582
598
|
end
|
583
599
|
}
|
584
|
-
/ c_real_spec '
|
600
|
+
/ c_real_spec '' {
|
585
601
|
def value
|
586
|
-
|
602
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CReal.new(
|
603
|
+
c_real_spec.value)
|
587
604
|
end
|
588
605
|
}
|
589
606
|
end
|
590
607
|
|
591
608
|
rule c_date_constraint
|
592
|
-
|
609
|
+
date_interval_value '' {
|
610
|
+
def value
|
611
|
+
{:range => date_interval_value.value}
|
612
|
+
end
|
613
|
+
}
|
614
|
+
/ date_list_value '' {
|
593
615
|
def value
|
594
|
-
|
616
|
+
{:list => date_list_value.value}
|
595
617
|
end
|
596
618
|
}
|
597
619
|
/ date_value '' {
|
598
620
|
def value
|
599
|
-
date_value.value
|
621
|
+
{:list => [date_value.value]}
|
600
622
|
end
|
601
623
|
}
|
602
|
-
/
|
624
|
+
/ con:V_ISO8601_DATE_CONSTRAINT_PATTERN '' {
|
603
625
|
def value
|
604
|
-
|
626
|
+
{:pattern => con.text_value}
|
605
627
|
end
|
606
628
|
}
|
607
629
|
end
|
608
630
|
|
609
631
|
rule c_date
|
610
|
-
c_date_constraint '' {
|
632
|
+
c_date_constraint ';' white_space date_value {
|
611
633
|
def value
|
612
|
-
c_date_constraint.value
|
634
|
+
args = c_date_constraint.value
|
635
|
+
args[:assumed_value] = date_value.value
|
636
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDate.new(
|
637
|
+
args)
|
613
638
|
end
|
614
639
|
}
|
615
|
-
/ c_date_constraint '
|
640
|
+
/ c_date_constraint '' {
|
616
641
|
def value
|
617
|
-
|
642
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDate.new(
|
643
|
+
c_date_constraint.value)
|
618
644
|
end
|
619
645
|
}
|
620
646
|
end
|
621
647
|
|
622
648
|
rule c_time_constraint
|
623
|
-
|
649
|
+
time_interval_value '' {
|
624
650
|
def value
|
625
|
-
|
651
|
+
{:range => time_interval_value.value}
|
652
|
+
end
|
653
|
+
}
|
654
|
+
/ time_list_value '' {
|
655
|
+
def value
|
656
|
+
{:list => time_list_value.value}
|
626
657
|
end
|
627
658
|
}
|
628
659
|
/ time_value '' {
|
629
660
|
def value
|
630
|
-
time_value.value
|
661
|
+
{:list => [time_value.value]}
|
631
662
|
end
|
632
663
|
}
|
633
|
-
/
|
664
|
+
/ tc:V_ISO8601_TIME_CONSTRAINT_PATTERN '' {
|
634
665
|
def value
|
635
|
-
|
666
|
+
{:pattern => tc.text_value}
|
636
667
|
end
|
637
668
|
}
|
638
669
|
end
|
639
670
|
|
640
671
|
rule c_time
|
641
|
-
c_time_constraint '' {
|
672
|
+
c_time_constraint ';' white_space time_value {
|
642
673
|
def value
|
643
|
-
c_time_constraint.value
|
674
|
+
args = c_time_constraint.value
|
675
|
+
args[:assumed_value] = time_value.value
|
676
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CTime.new(
|
677
|
+
args)
|
644
678
|
end
|
645
|
-
}
|
646
|
-
/ c_time_constraint '
|
679
|
+
}
|
680
|
+
/ c_time_constraint '' {
|
647
681
|
def value
|
648
|
-
|
682
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CTime.new(
|
683
|
+
c_time_constraint.value)
|
649
684
|
end
|
650
|
-
}
|
685
|
+
}
|
651
686
|
end
|
652
687
|
|
653
688
|
rule c_date_time_constraint
|
654
|
-
|
689
|
+
date_time_interval_value '' {
|
655
690
|
def value
|
656
|
-
|
691
|
+
{:range => date_time_interval_value.value}
|
657
692
|
end
|
658
693
|
}
|
659
694
|
/ date_time_value '' {
|
660
695
|
def value
|
661
|
-
date_time_value.value
|
696
|
+
{:list => [date_time_value.value]}
|
662
697
|
end
|
663
698
|
}
|
664
|
-
/
|
699
|
+
/ dtc:V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN '' {
|
665
700
|
def value
|
666
|
-
|
701
|
+
{:pattern => dtc.text_value}
|
667
702
|
end
|
668
703
|
}
|
669
704
|
end
|
670
705
|
|
671
706
|
rule c_date_time
|
672
|
-
c_date_time_constraint '' {
|
707
|
+
c_date_time_constraint ';' white_space date_time_value {
|
673
708
|
def value
|
674
|
-
c_date_time_constraint.value
|
709
|
+
args = c_date_time_constraint.value
|
710
|
+
args[:assumed_value] = date_time_value.value
|
711
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDateTime.new(
|
712
|
+
args)
|
675
713
|
end
|
676
714
|
}
|
677
|
-
/ c_date_time_constraint '
|
715
|
+
/ c_date_time_constraint '' {
|
678
716
|
def value
|
679
|
-
|
717
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDateTime.new(
|
718
|
+
c_date_time_constraint.value)
|
680
719
|
end
|
681
720
|
}
|
682
721
|
end
|
683
722
|
|
684
723
|
rule c_duration_constraint
|
685
|
-
duration_pattern '' {
|
724
|
+
duration_pattern '/' duration_interval_value '' {
|
686
725
|
def value
|
687
|
-
duration_pattern.value
|
726
|
+
{:pattern => duration_pattern.value}
|
688
727
|
end
|
689
728
|
}
|
690
|
-
/ duration_pattern '
|
729
|
+
/ duration_pattern '' {
|
691
730
|
def value
|
692
|
-
|
731
|
+
{:pattern => duration_pattern.value}
|
693
732
|
end
|
694
733
|
}
|
695
|
-
/
|
734
|
+
/ duration_interval_value '' {
|
696
735
|
def value
|
697
|
-
|
736
|
+
{:range => duration_interval_value.value}
|
698
737
|
end
|
699
738
|
}
|
700
|
-
/
|
739
|
+
/ duration_value '' {
|
701
740
|
def value
|
702
|
-
|
741
|
+
{:list => [duration_value.value]}
|
703
742
|
end
|
704
743
|
}
|
705
744
|
end
|
706
745
|
|
707
746
|
rule duration_pattern
|
708
|
-
|
747
|
+
dp:V_ISO8601_DURATION_CONSTRAINT_PATTERN '' {
|
709
748
|
def value
|
710
|
-
|
749
|
+
dp.text_value
|
711
750
|
end
|
712
751
|
}
|
713
752
|
end
|
714
753
|
|
715
754
|
rule c_duration
|
716
|
-
c_duration_constraint '' {
|
755
|
+
c_duration_constraint ';' white_space duration_value '' {
|
717
756
|
def value
|
718
|
-
c_duration_constraint.value
|
757
|
+
args = c_duration_constraint.value
|
758
|
+
args[:assumed_value] = duration_value.value
|
759
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDuration.new(
|
760
|
+
args)
|
719
761
|
end
|
720
762
|
}
|
721
|
-
/ c_duration_constraint ';'
|
763
|
+
/ c_duration_constraint !';' '' {
|
722
764
|
def value
|
723
|
-
|
765
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDuration.new(
|
766
|
+
c_duration_constraint.value)
|
724
767
|
end
|
725
768
|
}
|
726
769
|
end
|
727
770
|
|
728
771
|
rule c_string_spec
|
729
|
-
string_list_value ',' SYM_LIST_CONTINUE {
|
772
|
+
string_list_value ',' white_space SYM_LIST_CONTINUE {
|
730
773
|
def value
|
731
|
-
|
732
|
-
:list => string_list_value.value)
|
774
|
+
{:list => string_list_value.value}
|
733
775
|
end
|
734
776
|
}
|
735
777
|
/ string_list_value '' {
|
736
778
|
def value
|
737
|
-
|
738
|
-
:list => string_list_value.value, :type => 'Boolean')
|
779
|
+
{:list => string_list_value.value}
|
739
780
|
end
|
740
781
|
}
|
741
782
|
/ pat:V_REGEXP '' {
|
742
783
|
def value
|
743
|
-
|
744
|
-
:pattern => pat.value, :type => 'Boolean')
|
784
|
+
{:pattern => pat.value}
|
745
785
|
end
|
746
786
|
}
|
747
787
|
/ str:V_STRING '' {
|
748
788
|
def value
|
749
|
-
|
750
|
-
:list => [str.value])
|
789
|
+
{:list => [str.value]}
|
751
790
|
end
|
752
791
|
}
|
753
792
|
end
|
754
793
|
|
755
794
|
rule c_string
|
756
|
-
c_string_spec
|
795
|
+
c_string_spec white_space ';' white_space string_value {
|
796
|
+
def value
|
797
|
+
args = c_string_spec.value
|
798
|
+
args[:assumed_value] = string_value.value
|
799
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CString.new(
|
800
|
+
args)
|
801
|
+
end
|
802
|
+
}
|
803
|
+
/ c_string_spec '' {
|
757
804
|
def value
|
758
|
-
|
805
|
+
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CString.new(
|
806
|
+
c_string_spec.value)
|
759
807
|
end
|
760
808
|
}
|
761
809
|
end
|
762
810
|
|
763
811
|
rule c_boolean_spec
|
764
|
-
SYM_TRUE '' {
|
812
|
+
SYM_TRUE ',' white_space SYM_FALSE {
|
765
813
|
def value
|
766
|
-
{:true_valid => true, :false_valid =>
|
814
|
+
{:true_valid => true, :false_valid => true}
|
767
815
|
end
|
768
816
|
}
|
769
|
-
/ SYM_TRUE '
|
817
|
+
/ SYM_TRUE white_space '' {
|
770
818
|
def value
|
771
|
-
{:true_valid => true, :false_valid =>
|
819
|
+
{:true_valid => true, :false_valid => false}
|
772
820
|
end
|
773
821
|
}
|
774
|
-
/ SYM_FALSE '' {
|
822
|
+
/ SYM_FALSE white_space ',' white_space SYM_TRUE {
|
775
823
|
def value
|
776
|
-
{:true_valid =>
|
824
|
+
{:true_valid => true, :false_valid => true}
|
777
825
|
end
|
778
826
|
}
|
779
|
-
/ SYM_FALSE '
|
827
|
+
/ SYM_FALSE white_space '' {
|
780
828
|
def value
|
781
|
-
{:
|
829
|
+
{:false_valid => true, :true_valid => false}
|
782
830
|
end
|
783
831
|
}
|
784
832
|
end
|
785
833
|
|
786
834
|
rule c_boolean
|
787
|
-
c_boolean_spec ';' boolean_value {
|
835
|
+
c_boolean_spec ';' white_space boolean_value {
|
788
836
|
def value
|
789
|
-
|
837
|
+
args = c_boolean_spec.value
|
838
|
+
args[:assumed_value] = boolean_value.value
|
790
839
|
OpenEHR::AM::Archetype::ConstraintModel::Primitive::CBoolean.new(
|
791
|
-
|
840
|
+
args)
|
792
841
|
end
|
793
842
|
}
|
794
843
|
/ c_boolean_spec '' {
|
@@ -815,6 +864,72 @@ module OpenEHR
|
|
815
864
|
}
|
816
865
|
end
|
817
866
|
|
867
|
+
rule code_string
|
868
|
+
NAMECHAR+ '' {
|
869
|
+
def value
|
870
|
+
text_value
|
871
|
+
end
|
872
|
+
}
|
873
|
+
end
|
874
|
+
|
875
|
+
rule code_string_list
|
876
|
+
first:code_string more:(',' space code_string)+ space {
|
877
|
+
def value
|
878
|
+
codes.map {|c| c.value}
|
879
|
+
end
|
880
|
+
|
881
|
+
def codes
|
882
|
+
[first] + more.elements.map {|e| e.code_string}
|
883
|
+
end
|
884
|
+
}
|
885
|
+
end
|
886
|
+
|
887
|
+
rule code_string_spec
|
888
|
+
code_string_list '' {
|
889
|
+
def value
|
890
|
+
code_string_list.value
|
891
|
+
end
|
892
|
+
}
|
893
|
+
/ code_string '' {
|
894
|
+
def value
|
895
|
+
[code_string.value]
|
896
|
+
end
|
897
|
+
}
|
898
|
+
end
|
899
|
+
|
900
|
+
rule V_TERM_CODE_CONSTRAINT
|
901
|
+
ti:V_TERM_CODE code_string_spec ';' space code_string ']' space {
|
902
|
+
def value(node)
|
903
|
+
::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new(
|
904
|
+
:rm_type_name => 'CodePhrase',
|
905
|
+
:occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
|
906
|
+
:upper => 1, :lower => 1),
|
907
|
+
:terminology_id => ti.value, :code_list => code_string_spec.value,
|
908
|
+
:assumed_value => code_string.value,
|
909
|
+
:path => node.path)
|
910
|
+
end
|
911
|
+
}
|
912
|
+
/ ti:V_TERM_CODE code_string_spec ']' space {
|
913
|
+
def value(node)
|
914
|
+
::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new(
|
915
|
+
:rm_type_name => 'CodePhrase',
|
916
|
+
:occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
|
917
|
+
:upper => 1, :lower => 1),
|
918
|
+
:terminology_id => ti.value, :code_list => code_string_spec.value,
|
919
|
+
:path => node.path)
|
920
|
+
end
|
921
|
+
}
|
922
|
+
/ ti:V_TERM_CODE ']' space {
|
923
|
+
def value(node)
|
924
|
+
::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new(
|
925
|
+
:rm_type_name => 'CodePhrase',
|
926
|
+
:occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
|
927
|
+
:upper => 1, :lower => 1),
|
928
|
+
:terminology_id => ti.value, :code_list => [], :path => node.path)
|
929
|
+
end
|
930
|
+
}
|
931
|
+
end
|
932
|
+
|
818
933
|
rule V_C_DOMAIN_TYPE
|
819
934
|
'('? [A-Z] IDCHAR* ')'? [ \n]* '<' [^>]* '>'
|
820
935
|
end
|
@@ -846,10 +961,12 @@ module OpenEHR
|
|
846
961
|
def value
|
847
962
|
if (id && !id.empty?)
|
848
963
|
OpenEHR::AM::Archetype::Assertion::Assertion.new(
|
849
|
-
:tag => id.value, :expression => boolean_expression.value
|
964
|
+
:tag => id.value, :expression => boolean_expression.value,
|
965
|
+
:string_expression => id.text_value + boolean_expression.text_value)
|
850
966
|
else
|
851
967
|
OpenEHR::AM::Archetype::Assertion::Assertion.new(
|
852
|
-
:expression => boolean_expression.value
|
968
|
+
:expression => boolean_expression.value,
|
969
|
+
:string_expression => boolean_expression.text_value)
|
853
970
|
end
|
854
971
|
end
|
855
972
|
}
|
@@ -861,36 +978,153 @@ module OpenEHR
|
|
861
978
|
boolean_node.value
|
862
979
|
end
|
863
980
|
}
|
981
|
+
/ boolean_leaf '' {
|
982
|
+
def value
|
983
|
+
boolean_leaf.value
|
984
|
+
end
|
985
|
+
}
|
864
986
|
end
|
865
987
|
|
866
988
|
rule boolean_node
|
867
989
|
SYM_EXISTS absolute_path {
|
868
990
|
def value
|
869
|
-
|
870
|
-
|
991
|
+
item = OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
|
992
|
+
:type => 'String',
|
993
|
+
:item => absolute_path.value,
|
994
|
+
:reference_type => 'CONSTANT')
|
995
|
+
OpenEHR::AM::Archetype::Assertion::ExprUnaryOperator.new(
|
996
|
+
:type => 'Boolean',
|
997
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_EXISTS,
|
998
|
+
:operand => item,
|
999
|
+
:precedence_overridden => false)
|
871
1000
|
end
|
872
1001
|
}
|
873
1002
|
/ relative_path white_space SYM_MATCHES SYM_START_CBLOCK c_primitive SYM_END_CBLOCK {
|
874
1003
|
def value
|
875
|
-
OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
1004
|
+
left_op = OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
|
1005
|
+
:type => 'String',
|
1006
|
+
:item => relative_path.value,
|
1007
|
+
:reference_type => 'Constant')
|
1008
|
+
right_op = OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
|
1009
|
+
:item => c_primitive.value,
|
1010
|
+
:type => c_primitive.value.type,
|
1011
|
+
:reference_type => 'Constant')
|
1012
|
+
op = OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_MATCHES
|
1013
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1014
|
+
:type => 'Boolean',
|
1015
|
+
:operator => op,
|
1016
|
+
:right_operand => right_op,
|
1017
|
+
:left_operand => left_op,
|
1018
|
+
:reference_type => 'Constraint')
|
880
1019
|
end
|
881
1020
|
}
|
882
1021
|
/ SYM_NOT boolean_leaf {
|
883
1022
|
def value
|
884
|
-
|
1023
|
+
OpenEHR::AM::Archetype::Assertion::ExprUnaryOperator.new(
|
1024
|
+
:type => 'Boolean',
|
1025
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_NOT,
|
1026
|
+
:operand => boolean_leaf.value,
|
1027
|
+
:precedence_overridden => false)
|
1028
|
+
end
|
1029
|
+
}
|
1030
|
+
/ arithmetic_leaf SYM_EQ arithmetic_expression {
|
1031
|
+
def value
|
1032
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1033
|
+
:type => 'Boolean',
|
1034
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_EQ,
|
1035
|
+
:left_operand => arithmetic_leaf.value,
|
1036
|
+
:right_operand => arithmetic_expression.value,
|
1037
|
+
:reference_type => 'Constraint')
|
1038
|
+
end
|
1039
|
+
}
|
1040
|
+
/ arithmetic_leaf SYM_NE arithmetic_expression {
|
1041
|
+
def value
|
1042
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1043
|
+
:type => 'Boolean',
|
1044
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_NE,
|
1045
|
+
:left_operand => arithmetic_leaf.value,
|
1046
|
+
:right_operand => arithmetic_expression.value,
|
1047
|
+
:reference_type => 'Constraint')
|
1048
|
+
end
|
1049
|
+
}
|
1050
|
+
/ arithmetic_leaf SYM_LT arithmetic_expression {
|
1051
|
+
def value
|
1052
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1053
|
+
:type => 'Boolean',
|
1054
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_LT,
|
1055
|
+
:left_operand => arithmetic_leaf.value,
|
1056
|
+
:right_operand => arithmetic_expression.value,
|
1057
|
+
:reference_type => 'Constraint')
|
885
1058
|
end
|
886
1059
|
}
|
887
|
-
/
|
888
|
-
|
1060
|
+
/ arithmetic_leaf SYM_GT arithmetic_expression {
|
1061
|
+
def value
|
1062
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1063
|
+
:type => 'Boolean',
|
1064
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_GT,
|
1065
|
+
:left_operand => arithmetic_leaf.value,
|
1066
|
+
:right_operand => arithmetic_expression.value,
|
1067
|
+
:reference_type => 'Constraint')
|
1068
|
+
end
|
1069
|
+
}
|
1070
|
+
/ arithmetic_leaf SYM_LE arithmetic_expression {
|
1071
|
+
def value
|
1072
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1073
|
+
:type => 'Boolean',
|
1074
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_LE,
|
1075
|
+
:left_operand => arithmetic_leaf.value,
|
1076
|
+
:right_operand => arithmetic_expression.value,
|
1077
|
+
:reference_type => 'Constraint')
|
1078
|
+
end
|
1079
|
+
}
|
1080
|
+
/ arithmetic_leaf SYM_GE arithmetic_expression {
|
1081
|
+
def value
|
1082
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1083
|
+
:type => 'Boolean',
|
1084
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_GE,
|
1085
|
+
:left_operand => arithmetic_leaf.value,
|
1086
|
+
:right_operand => arithmetic_expression.value,
|
1087
|
+
:reference_type => 'Constraint')
|
1088
|
+
end
|
1089
|
+
}
|
1090
|
+
/ boolean_leaf SYM_AND boolean_expression {
|
1091
|
+
def value
|
1092
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1093
|
+
:type => 'Boolean',
|
1094
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_AND,
|
1095
|
+
:left_operand => boolean_leaf.value,
|
1096
|
+
:right_operand => boolean_expression.value,
|
1097
|
+
:reference_type => 'Constraint')
|
1098
|
+
end
|
1099
|
+
}
|
1100
|
+
/ boolean_leaf SYM_OR boolean_expression {
|
1101
|
+
def value
|
1102
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1103
|
+
:type => 'Boolean',
|
1104
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_OR,
|
1105
|
+
:left_operand => boolean_leaf.value,
|
1106
|
+
:right_operand => boolean_expression.value,
|
1107
|
+
:reference_type => 'Constraint')
|
1108
|
+
end
|
1109
|
+
}
|
1110
|
+
/ boolean_leaf SYM_XOR boolean_expression {
|
1111
|
+
def value
|
1112
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1113
|
+
:type => 'Boolean',
|
1114
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_XOR,
|
1115
|
+
:left_operand => boolean_leaf.value,
|
1116
|
+
:right_operand => boolean_expression.value,
|
1117
|
+
:reference_type => 'Constraint')
|
889
1118
|
end
|
890
1119
|
}
|
891
|
-
/ boolean_leaf
|
1120
|
+
/ boolean_leaf SYM_IMPLIES boolean_expression {
|
892
1121
|
def value
|
893
|
-
|
1122
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1123
|
+
:type => 'Boolean',
|
1124
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_IMPLIES,
|
1125
|
+
:left_operand => boolean_leaf.value,
|
1126
|
+
:right_operand => boolean_expression.value,
|
1127
|
+
:reference_type => 'Constraint')
|
894
1128
|
end
|
895
1129
|
}
|
896
1130
|
end
|
@@ -903,12 +1137,18 @@ module OpenEHR
|
|
903
1137
|
}
|
904
1138
|
/ SYM_TRUE {
|
905
1139
|
def value
|
906
|
-
|
1140
|
+
OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
|
1141
|
+
:type => 'Boolean',
|
1142
|
+
:item => true,
|
1143
|
+
:reference_type => 'CONSTANT')
|
907
1144
|
end
|
908
1145
|
}
|
909
1146
|
/ SYM_FALSE {
|
910
1147
|
def value
|
911
|
-
|
1148
|
+
OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
|
1149
|
+
:type => 'Boolean',
|
1150
|
+
:item => false,
|
1151
|
+
:reference_type => 'CONSTANT')
|
912
1152
|
end
|
913
1153
|
}
|
914
1154
|
end
|
@@ -919,44 +1159,120 @@ module OpenEHR
|
|
919
1159
|
arithmetic_node.value
|
920
1160
|
end
|
921
1161
|
}
|
1162
|
+
/ arithmetic_leaf '' {
|
1163
|
+
def value
|
1164
|
+
arithmetic_leaf.value
|
1165
|
+
end
|
1166
|
+
}
|
922
1167
|
end
|
923
1168
|
|
924
1169
|
rule arithmetic_node
|
925
|
-
arithmetic_leaf
|
1170
|
+
arithmetic_leaf '+' arithmetic_expression {
|
1171
|
+
def value
|
1172
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1173
|
+
:type => 'Boolean',
|
1174
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_PLUS,
|
1175
|
+
:left_operand => arithmetic_leaf.value,
|
1176
|
+
:right_operand => arithmetic_expression.value,
|
1177
|
+
:reference_type => 'Constraint')
|
1178
|
+
end
|
1179
|
+
}
|
1180
|
+
/ arithmetic_leaf '-' arithmetic_expression {
|
1181
|
+
def value
|
1182
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1183
|
+
:type => 'Boolean',
|
1184
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_MINUS,
|
1185
|
+
:left_operand => arithmetic_leaf.value,
|
1186
|
+
:right_operand => arithmetic_expression.value,
|
1187
|
+
:reference_type => 'Constraint')
|
1188
|
+
end
|
1189
|
+
}
|
1190
|
+
/ arithmetic_leaf '*' arithmetic_expression {
|
1191
|
+
def value
|
1192
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1193
|
+
:type => 'Boolean',
|
1194
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_MULTIPLY,
|
1195
|
+
:left_operand => arithmetic_leaf.value,
|
1196
|
+
:right_operand => arithmetic_expression.value,
|
1197
|
+
:reference_type => 'Constraint')
|
1198
|
+
end
|
1199
|
+
}
|
1200
|
+
/ arithmetic_leaf '/' arithmetic_expression {
|
1201
|
+
def value
|
1202
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1203
|
+
:type => 'Boolean',
|
1204
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_DIVIDE,
|
1205
|
+
:left_operand => arithmetic_leaf.value,
|
1206
|
+
:right_operand => arithmetic_expression.value,
|
1207
|
+
:reference_type => 'Constraint')
|
1208
|
+
end
|
1209
|
+
}
|
1210
|
+
/ arithmetic_leaf '^' arithmetic_expression {
|
1211
|
+
def value
|
1212
|
+
OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
|
1213
|
+
:type => 'Boolean',
|
1214
|
+
:operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_EXP,
|
1215
|
+
:left_operand => arithmetic_leaf.value,
|
1216
|
+
:right_operand => arithmetic_expression.value,
|
1217
|
+
:reference_type => 'Constraint')
|
1218
|
+
end
|
1219
|
+
}
|
926
1220
|
end
|
927
1221
|
|
928
1222
|
rule arithmetic_leaf
|
929
|
-
'(' arithmetic_expression ')' {
|
1223
|
+
'(' arithmetic_expression ')' space {
|
930
1224
|
def value
|
931
1225
|
arithmetic_expression.value
|
932
1226
|
end
|
933
1227
|
}
|
934
1228
|
/ integer_value '' {
|
935
1229
|
def value
|
936
|
-
|
1230
|
+
OpenEHR::AM::Archetype::ConstraintModel::ExprLeaf.new(
|
1231
|
+
:type => 'Integer',
|
1232
|
+
:item => integer_value.value,
|
1233
|
+
:reference_type => 'CONSTANT')
|
937
1234
|
end
|
938
1235
|
}
|
939
1236
|
/ real_value '' {
|
940
1237
|
def value
|
941
|
-
|
1238
|
+
OpenEHR::AM::Archetype::ConstraintModel::ExprLeaf.new(
|
1239
|
+
:type => 'Real',
|
1240
|
+
:item => real_value.value,
|
1241
|
+
:reference_type => 'CONSTANT')
|
942
1242
|
end
|
943
1243
|
}
|
944
|
-
/ absolute_path
|
1244
|
+
/ absolute_path space {
|
945
1245
|
def value
|
946
|
-
|
1246
|
+
OpenEHR::AM::Archetype::ConstraintModel::ExprLeaf.new(
|
1247
|
+
:type => 'String',
|
1248
|
+
:item => absolute_path.value,
|
1249
|
+
:reference_type => 'CONSTANT')
|
1250
|
+
|
947
1251
|
end
|
948
1252
|
}
|
949
1253
|
end
|
950
1254
|
|
951
1255
|
# path block
|
952
1256
|
rule object_path
|
953
|
-
movable_path
|
954
|
-
|
955
|
-
|
1257
|
+
movable_path '' {
|
1258
|
+
def value
|
1259
|
+
movable_path.value
|
1260
|
+
end
|
1261
|
+
}
|
1262
|
+
/ absolute_path '' {
|
1263
|
+
def value
|
1264
|
+
absolute_path.value
|
1265
|
+
end
|
1266
|
+
}
|
1267
|
+
/ relative_path '' {
|
1268
|
+
def value
|
1269
|
+
relative_path.value
|
1270
|
+
end
|
1271
|
+
}
|
956
1272
|
end
|
957
1273
|
|
958
1274
|
rule movable_path
|
959
|
-
SYM_MOVABLE_LEADER relative_path {
|
1275
|
+
SYM_MOVABLE_LEADER relative_path '' {
|
960
1276
|
def value
|
961
1277
|
text_value
|
962
1278
|
end
|
@@ -964,7 +1280,7 @@ module OpenEHR
|
|
964
1280
|
end
|
965
1281
|
|
966
1282
|
rule absolute_path
|
967
|
-
'/' relative_path? {
|
1283
|
+
'/' relative_path? '' {
|
968
1284
|
def value
|
969
1285
|
text_value
|
970
1286
|
end
|
@@ -972,7 +1288,7 @@ module OpenEHR
|
|
972
1288
|
end
|
973
1289
|
|
974
1290
|
rule relative_path
|
975
|
-
path_segment ('/' path_segment)* {
|
1291
|
+
path_segment ('/' path_segment)* '' {
|
976
1292
|
def value
|
977
1293
|
text_value
|
978
1294
|
end
|
@@ -980,7 +1296,7 @@ module OpenEHR
|
|
980
1296
|
end
|
981
1297
|
|
982
1298
|
rule path_segment
|
983
|
-
V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF? {
|
1299
|
+
V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF? '' {
|
984
1300
|
def value
|
985
1301
|
text_value
|
986
1302
|
end
|