source: ruby/trunk/lib/open_ehr/serializer.rb@ 407

Last change on this file since 407 was 407, checked in by KOBAYASHI, Shinji, 14 years ago

serializer implementation
Sample ADL was generated by LiU Archetype Editor.
There are some differences in XML forms amongs LiU, Ocean, CKM.

File size: 1.9 KB
Line 
1require 'rexml/document'
2require 'builder'
3
4module OpenEHR
5 module Serializer
6 NL = "\r\n"
7 INDENT = ' '
8
9 class BaseSerializer
10 def initialize(archetype)
11 @archetype = archetype
12 end
13
14 def serialize
15 return self.merge
16 end
17 end
18
19 class ADLSerializer < BaseSerializer
20 def header
21 hd = 'archetype'
22 unless @archetype.adl_version.nil?
23 hd << " (adl_version = #{@archetype.adl_version})"
24 end
25 hd << NL+INDENT + "#{@archetype.archetype_id.value}"+NL+NL
26 hd << 'concept'+NL+ INDENT+"[#{@archetype.concept}]"+NL
27 hd << NL+'language'+NL+INDENT+'original_language = <['+
28 @archetype.original_language.terminology_id.value+'::'+
29 @archetype.original_language.code_string+']>'+NL
30 return hd
31 end
32
33 def description
34
35 end
36
37 def definition
38 end
39
40 def ontology
41 end
42
43 def envelope
44 end
45
46 def merge
47 return header + description + definition + ontology
48 end
49 end
50
51 class XMLSerializer < BaseSerializer
52
53 def header
54 header = ''
55 xml = Builder::XmlMarkup.new(:indent => 2, :target => header)
56 xml.archetype_id do
57 xml.value @archetype.archetype_id.value
58 end
59 xml.concept @archetype.concept
60 xml.original_language do
61 xml.code_string @archetype.original_language.code_string
62 xml.terminology_id do
63 xml.value @archetype.original_language.terminology_id.value
64 end
65 end
66 return header
67 end
68
69 def description
70
71 end
72
73 def merge
74
75 end
76 end
77 end
78end
79
80class Publisher
81 def initialize(serializer)
82 @serializer = serializer
83 end
84
85 def publish(writer)
86 writer.out(@serializer.serialize)
87 end
88end
89
90class Writer
91 def initialize(target)
92 @target = target
93 end
94 def out
95 end
96end
Note: See TracBrowser for help on using the repository browser.