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
|
Rev | Line | |
---|
[405] | 1 | require 'rexml/document'
|
---|
[406] | 2 | require 'builder'
|
---|
[405] | 3 |
|
---|
[404] | 4 | module 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] | 78 | end
|
---|
[404] | 79 |
|
---|
[405] | 80 | class 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
|
---|
| 88 | end
|
---|
[405] | 89 |
|
---|
| 90 | class Writer
|
---|
[406] | 91 | def initialize(target)
|
---|
| 92 | @target = target
|
---|
| 93 | end
|
---|
| 94 | def out
|
---|
| 95 | end
|
---|
[405] | 96 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.