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
RevLine 
[405]1require 'rexml/document'
[406]2require 'builder'
[405]3
[404]4module OpenEHR
[405]5 module Serializer
[407]6 NL = "\r\n"
7 INDENT = ' '
8
[405]9 class BaseSerializer
10 def initialize(archetype)
11 @archetype = archetype
12 end
[404]13
[405]14 def serialize
15 return self.merge
16 end
17 end
[404]18
[405]19 class ADLSerializer < BaseSerializer
[406]20 def header
[407]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
[405]31 end
32
[406]33 def description
34
35 end
36
[405]37 def definition
38 end
39
40 def ontology
41 end
42
43 def envelope
44 end
45
46 def merge
[406]47 return header + description + definition + ontology
[405]48 end
49 end
50
51 class XMLSerializer < BaseSerializer
[406]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
[407]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
[406]66 return header
67 end
68
[405]69 def description
[406]70
[405]71 end
[406]72
73 def merge
74
75 end
[405]76 end
[404]77 end
[405]78end
[404]79
[405]80class Publisher
81 def initialize(serializer)
82 @serializer = serializer
83 end
[404]84
[405]85 def publish(writer)
86 writer.out(@serializer.serialize)
[404]87 end
88end
[405]89
90class Writer
[406]91 def initialize(target)
92 @target = target
93 end
94 def out
95 end
[405]96end
Note: See TracBrowser for help on using the repository browser.