Module: BEL::Translator::Plugins::BelScript::BelCitationSerialization
- Includes:
- NanopubSerialization
- Defined in:
- lib/bel/translator/plugins/bel_script/bel_citation_serialization.rb
Overview
BEL Script nanopub serialization that groups nanopub by citation scoped to individual statement groups (i.e. BEL Script’s SET STATEMENT_GROUP and UNSET STATEMENT_GROUP).
Instance Method Summary collapse
-
#to_bel(nanopub) ⇒ String
Serialize the nanopub to a BEL Script string.
Instance Method Details
#to_bel(nanopub) ⇒ String
Serialize the nanopub to a BEL Script string.
Includes SET AnnotationName and UNSET AnnotationName where needed in order to remove duplicating annotations.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/bel/translator/plugins/bel_script/bel_citation_serialization.rb', line 34 def to_bel(nanopub) bel = '' citation = citation_value(nanopub) support = support_value(nanopub) annotations = annotation_values(nanopub) current_annotations = {}.merge(annotations) current_annotations[:Citation] = citation if citation current_annotations[:Support] = support if support if !nanopub.citation.id || nanopub.citation.id.empty? citation_id = quote('') else citation_id = quote_if_needed(nanopub.citation.id) end # Reset cumulative annotations if new citation. if cumulative_citation == nil bel << %Q{SET STATEMENT_GROUP = #{citation_id}\n} cumulative_annotations.clear elsif nanopub.citation != cumulative_citation bel << %Q{UNSET STATEMENT_GROUP\n} bel << "\n\n" bel << %Q{SET STATEMENT_GROUP = #{citation_id}\n} cumulative_annotations.clear end # Hang on to the last citation. self.cumulative_citation = nanopub.citation # UNSET unused annotations from previous nanopub. (cumulative_annotations.keys - current_annotations.keys).each do |unset_key| bel << "UNSET #{unset_key}\n" cumulative_annotations.delete(unset_key) end # Remove annotation if key/value was SET by a previous nanopub. Hash[ cumulative_annotations.to_a & current_annotations.to_a ].each do |same_k, _| current_annotations.delete(same_k) end # Retain the current nanopub's annotation in cumulative set. cumulative_annotations.merge!(current_annotations) # SET Citation citation = current_annotations.delete(:Citation) if citation bel << "SET Citation = {#{citation}}\n" end # SET Support support = current_annotations.delete(:Support) if support bel << %Q{SET Support = "#{support}"\n} end # SET new or modified annotations current_annotations.sort.each do |(name, value)| bel << "SET #{name} = #{value}\n" end # Assert BEL statement bel << "#{nanopub.bel_statement}\n" # Separate nanopub by new line. bel << "\n" bel end |