bel_parser 1.0.0.alpha.27-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gemspec-java +32 -0
  3. data/CHANGELOG.md +10 -0
  4. data/LICENSE +191 -0
  5. data/README.md +20 -0
  6. data/VERSION +1 -0
  7. data/bin/bel2_validator +62 -0
  8. data/bin/bel_script_reader +132 -0
  9. data/lib/bel/translator/plugins/bel_script.rb +38 -0
  10. data/lib/bel/translator/plugins/bel_script/bel_citation_serialization.rb +125 -0
  11. data/lib/bel/translator/plugins/bel_script/bel_discrete_serialization.rb +109 -0
  12. data/lib/bel/translator/plugins/bel_script/bel_top_down_serialization.rb +100 -0
  13. data/lib/bel/translator/plugins/bel_script/nanopub_serialization.rb +79 -0
  14. data/lib/bel/translator/plugins/bel_script/reader.rb +39 -0
  15. data/lib/bel/translator/plugins/bel_script/translator.rb +37 -0
  16. data/lib/bel/translator/plugins/bel_script/writer.rb +180 -0
  17. data/lib/bel_parser.rb +23 -0
  18. data/lib/bel_parser/ast_filter.rb +44 -0
  19. data/lib/bel_parser/ast_generator.rb +83 -0
  20. data/lib/bel_parser/expression.rb +3 -0
  21. data/lib/bel_parser/expression/filter.rb +31 -0
  22. data/lib/bel_parser/expression/parser.rb +72 -0
  23. data/lib/bel_parser/expression/validator.rb +79 -0
  24. data/lib/bel_parser/language.rb +114 -0
  25. data/lib/bel_parser/language/amino_acid.rb +68 -0
  26. data/lib/bel_parser/language/apply_namespace_encoding.rb +98 -0
  27. data/lib/bel_parser/language/base_specification.rb +82 -0
  28. data/lib/bel_parser/language/covalent_protein_modification.rb +56 -0
  29. data/lib/bel_parser/language/expression_validator.rb +68 -0
  30. data/lib/bel_parser/language/function.rb +67 -0
  31. data/lib/bel_parser/language/relationship.rb +102 -0
  32. data/lib/bel_parser/language/semantics.rb +40 -0
  33. data/lib/bel_parser/language/semantics/deeply_nested_statement.rb +65 -0
  34. data/lib/bel_parser/language/semantics/function_deprecation.rb +43 -0
  35. data/lib/bel_parser/language/semantics/list_function_subject.rb +45 -0
  36. data/lib/bel_parser/language/semantics/multiple_subject_object.rb +55 -0
  37. data/lib/bel_parser/language/semantics/non_causal_nested_statement.rb +50 -0
  38. data/lib/bel_parser/language/semantics/non_object_list.rb +56 -0
  39. data/lib/bel_parser/language/semantics/relationship_deprecation.rb +44 -0
  40. data/lib/bel_parser/language/semantics/relationship_not_listable.rb +60 -0
  41. data/lib/bel_parser/language/semantics/signature_mapping.rb +83 -0
  42. data/lib/bel_parser/language/semantics_ast.rb +784 -0
  43. data/lib/bel_parser/language/semantics_ast_warnings.rb +180 -0
  44. data/lib/bel_parser/language/semantics_function.rb +16 -0
  45. data/lib/bel_parser/language/semantics_match.rb +28 -0
  46. data/lib/bel_parser/language/semantics_result.rb +33 -0
  47. data/lib/bel_parser/language/semantics_type_warning.rb +22 -0
  48. data/lib/bel_parser/language/semantics_warning.rb +27 -0
  49. data/lib/bel_parser/language/signature.rb +39 -0
  50. data/lib/bel_parser/language/specification.rb +118 -0
  51. data/lib/bel_parser/language/syntax.rb +38 -0
  52. data/lib/bel_parser/language/syntax/invalid_function.rb +39 -0
  53. data/lib/bel_parser/language/syntax/invalid_relationship.rb +42 -0
  54. data/lib/bel_parser/language/syntax/undefined_namespace.rb +49 -0
  55. data/lib/bel_parser/language/syntax/undefined_namespace_value.rb +44 -0
  56. data/lib/bel_parser/language/syntax_error.rb +32 -0
  57. data/lib/bel_parser/language/syntax_function.rb +16 -0
  58. data/lib/bel_parser/language/syntax_result.rb +32 -0
  59. data/lib/bel_parser/language/syntax_warning.rb +27 -0
  60. data/lib/bel_parser/language/version1_0.rb +20 -0
  61. data/lib/bel_parser/language/version1_0/functions/abundance.rb +83 -0
  62. data/lib/bel_parser/language/version1_0/functions/biological_process.rb +83 -0
  63. data/lib/bel_parser/language/version1_0/functions/catalytic_activity.rb +114 -0
  64. data/lib/bel_parser/language/version1_0/functions/cell_secretion.rb +83 -0
  65. data/lib/bel_parser/language/version1_0/functions/cell_surface_expression.rb +83 -0
  66. data/lib/bel_parser/language/version1_0/functions/chaperone_activity.rb +114 -0
  67. data/lib/bel_parser/language/version1_0/functions/complex_abundance.rb +115 -0
  68. data/lib/bel_parser/language/version1_0/functions/composite_abundance.rb +81 -0
  69. data/lib/bel_parser/language/version1_0/functions/degradation.rb +83 -0
  70. data/lib/bel_parser/language/version1_0/functions/fusion.rb +287 -0
  71. data/lib/bel_parser/language/version1_0/functions/gene_abundance.rb +122 -0
  72. data/lib/bel_parser/language/version1_0/functions/gtp_bound_activity.rb +113 -0
  73. data/lib/bel_parser/language/version1_0/functions/kinase_activity.rb +114 -0
  74. data/lib/bel_parser/language/version1_0/functions/list.rb +114 -0
  75. data/lib/bel_parser/language/version1_0/functions/micro_rna_abundance.rb +85 -0
  76. data/lib/bel_parser/language/version1_0/functions/molecular_activity.rb +82 -0
  77. data/lib/bel_parser/language/version1_0/functions/pathology.rb +83 -0
  78. data/lib/bel_parser/language/version1_0/functions/peptidase_activity.rb +112 -0
  79. data/lib/bel_parser/language/version1_0/functions/phosphatase_activity.rb +112 -0
  80. data/lib/bel_parser/language/version1_0/functions/products.rb +79 -0
  81. data/lib/bel_parser/language/version1_0/functions/protein_abundance.rb +234 -0
  82. data/lib/bel_parser/language/version1_0/functions/protein_modification.rb +179 -0
  83. data/lib/bel_parser/language/version1_0/functions/reactants.rb +79 -0
  84. data/lib/bel_parser/language/version1_0/functions/reaction.rb +86 -0
  85. data/lib/bel_parser/language/version1_0/functions/ribosylation_activity.rb +114 -0
  86. data/lib/bel_parser/language/version1_0/functions/rna_abundance.rb +122 -0
  87. data/lib/bel_parser/language/version1_0/functions/substitution.rb +93 -0
  88. data/lib/bel_parser/language/version1_0/functions/transcriptional_activity.rb +114 -0
  89. data/lib/bel_parser/language/version1_0/functions/translocation.rb +98 -0
  90. data/lib/bel_parser/language/version1_0/functions/transport_activity.rb +115 -0
  91. data/lib/bel_parser/language/version1_0/functions/truncation.rb +81 -0
  92. data/lib/bel_parser/language/version1_0/relationships/acts_in.rb +61 -0
  93. data/lib/bel_parser/language/version1_0/relationships/analogous.rb +41 -0
  94. data/lib/bel_parser/language/version1_0/relationships/association.rb +42 -0
  95. data/lib/bel_parser/language/version1_0/relationships/biomarker_for.rb +42 -0
  96. data/lib/bel_parser/language/version1_0/relationships/causes_no_change.rb +50 -0
  97. data/lib/bel_parser/language/version1_0/relationships/decreases.rb +63 -0
  98. data/lib/bel_parser/language/version1_0/relationships/directly_decreases.rb +56 -0
  99. data/lib/bel_parser/language/version1_0/relationships/directly_increases.rb +56 -0
  100. data/lib/bel_parser/language/version1_0/relationships/has_component.rb +62 -0
  101. data/lib/bel_parser/language/version1_0/relationships/has_components.rb +61 -0
  102. data/lib/bel_parser/language/version1_0/relationships/has_member.rb +48 -0
  103. data/lib/bel_parser/language/version1_0/relationships/has_members.rb +57 -0
  104. data/lib/bel_parser/language/version1_0/relationships/has_modification.rb +54 -0
  105. data/lib/bel_parser/language/version1_0/relationships/has_product.rb +60 -0
  106. data/lib/bel_parser/language/version1_0/relationships/has_variant.rb +54 -0
  107. data/lib/bel_parser/language/version1_0/relationships/includes.rb +59 -0
  108. data/lib/bel_parser/language/version1_0/relationships/increases.rb +63 -0
  109. data/lib/bel_parser/language/version1_0/relationships/is_a.rb +48 -0
  110. data/lib/bel_parser/language/version1_0/relationships/negative_correlation.rb +50 -0
  111. data/lib/bel_parser/language/version1_0/relationships/orthologous.rb +48 -0
  112. data/lib/bel_parser/language/version1_0/relationships/positive_correlation.rb +46 -0
  113. data/lib/bel_parser/language/version1_0/relationships/prognostic_biomarker_for.rb +44 -0
  114. data/lib/bel_parser/language/version1_0/relationships/rate_limiting_step_of.rb +53 -0
  115. data/lib/bel_parser/language/version1_0/relationships/reactant_in.rb +60 -0
  116. data/lib/bel_parser/language/version1_0/relationships/sub_process_of.rb +55 -0
  117. data/lib/bel_parser/language/version1_0/relationships/transcribed_to.rb +53 -0
  118. data/lib/bel_parser/language/version1_0/relationships/translated_to.rb +54 -0
  119. data/lib/bel_parser/language/version1_0/relationships/translocates.rb +57 -0
  120. data/lib/bel_parser/language/version1_0/return_types/abundance.rb +20 -0
  121. data/lib/bel_parser/language/version1_0/return_types/any.rb +74 -0
  122. data/lib/bel_parser/language/version1_0/return_types/biological_process.rb +17 -0
  123. data/lib/bel_parser/language/version1_0/return_types/catalytic_activity.rb +20 -0
  124. data/lib/bel_parser/language/version1_0/return_types/chaperone_activity.rb +20 -0
  125. data/lib/bel_parser/language/version1_0/return_types/complex_abundance.rb +17 -0
  126. data/lib/bel_parser/language/version1_0/return_types/fusion.rb +17 -0
  127. data/lib/bel_parser/language/version1_0/return_types/gene_abundance.rb +17 -0
  128. data/lib/bel_parser/language/version1_0/return_types/gtp_bound_activity.rb +20 -0
  129. data/lib/bel_parser/language/version1_0/return_types/kinase_activity.rb +20 -0
  130. data/lib/bel_parser/language/version1_0/return_types/list.rb +17 -0
  131. data/lib/bel_parser/language/version1_0/return_types/micro_rna_abundance.rb +17 -0
  132. data/lib/bel_parser/language/version1_0/return_types/molecular_activity.rb +20 -0
  133. data/lib/bel_parser/language/version1_0/return_types/pathology.rb +17 -0
  134. data/lib/bel_parser/language/version1_0/return_types/peptidase_activity.rb +20 -0
  135. data/lib/bel_parser/language/version1_0/return_types/phosphatase_activity.rb +20 -0
  136. data/lib/bel_parser/language/version1_0/return_types/products.rb +17 -0
  137. data/lib/bel_parser/language/version1_0/return_types/protein_abundance.rb +17 -0
  138. data/lib/bel_parser/language/version1_0/return_types/protein_modification.rb +17 -0
  139. data/lib/bel_parser/language/version1_0/return_types/reactants.rb +17 -0
  140. data/lib/bel_parser/language/version1_0/return_types/ribosylation_activity.rb +20 -0
  141. data/lib/bel_parser/language/version1_0/return_types/rna_abundance.rb +17 -0
  142. data/lib/bel_parser/language/version1_0/return_types/substitution.rb +17 -0
  143. data/lib/bel_parser/language/version1_0/return_types/transcriptional_activity.rb +20 -0
  144. data/lib/bel_parser/language/version1_0/return_types/transport_activity.rb +20 -0
  145. data/lib/bel_parser/language/version1_0/return_types/truncation.rb +17 -0
  146. data/lib/bel_parser/language/version1_0/value_encodings/abundance.rb +21 -0
  147. data/lib/bel_parser/language/version1_0/value_encodings/any.rb +74 -0
  148. data/lib/bel_parser/language/version1_0/value_encodings/biological_process.rb +21 -0
  149. data/lib/bel_parser/language/version1_0/value_encodings/complex_abundance.rb +21 -0
  150. data/lib/bel_parser/language/version1_0/value_encodings/gene_abundance.rb +21 -0
  151. data/lib/bel_parser/language/version1_0/value_encodings/micro_rna_abundance.rb +21 -0
  152. data/lib/bel_parser/language/version1_0/value_encodings/pathology.rb +21 -0
  153. data/lib/bel_parser/language/version1_0/value_encodings/protein_abundance.rb +21 -0
  154. data/lib/bel_parser/language/version1_0/value_encodings/rna_abundance.rb +21 -0
  155. data/lib/bel_parser/language/version2_0.rb +20 -0
  156. data/lib/bel_parser/language/version2_0/functions/abundance.rb +161 -0
  157. data/lib/bel_parser/language/version2_0/functions/activity.rb +118 -0
  158. data/lib/bel_parser/language/version2_0/functions/biological_process.rb +84 -0
  159. data/lib/bel_parser/language/version2_0/functions/cell_secretion.rb +83 -0
  160. data/lib/bel_parser/language/version2_0/functions/cell_surface_expression.rb +83 -0
  161. data/lib/bel_parser/language/version2_0/functions/complex_abundance.rb +190 -0
  162. data/lib/bel_parser/language/version2_0/functions/composite_abundance.rb +81 -0
  163. data/lib/bel_parser/language/version2_0/functions/degradation.rb +83 -0
  164. data/lib/bel_parser/language/version2_0/functions/fragment.rb +116 -0
  165. data/lib/bel_parser/language/version2_0/functions/from_location.rb +85 -0
  166. data/lib/bel_parser/language/version2_0/functions/fusion.rb +203 -0
  167. data/lib/bel_parser/language/version2_0/functions/gene_abundance.rb +192 -0
  168. data/lib/bel_parser/language/version2_0/functions/list.rb +114 -0
  169. data/lib/bel_parser/language/version2_0/functions/location.rb +83 -0
  170. data/lib/bel_parser/language/version2_0/functions/micro_rna_abundance.rb +163 -0
  171. data/lib/bel_parser/language/version2_0/functions/molecular_activity.rb +86 -0
  172. data/lib/bel_parser/language/version2_0/functions/pathology.rb +83 -0
  173. data/lib/bel_parser/language/version2_0/functions/products.rb +79 -0
  174. data/lib/bel_parser/language/version2_0/functions/protein_abundance.rb +270 -0
  175. data/lib/bel_parser/language/version2_0/functions/protein_modification.rb +172 -0
  176. data/lib/bel_parser/language/version2_0/functions/reactants.rb +79 -0
  177. data/lib/bel_parser/language/version2_0/functions/reaction.rb +86 -0
  178. data/lib/bel_parser/language/version2_0/functions/rna_abundance.rb +192 -0
  179. data/lib/bel_parser/language/version2_0/functions/to_location.rb +84 -0
  180. data/lib/bel_parser/language/version2_0/functions/translocation.rb +91 -0
  181. data/lib/bel_parser/language/version2_0/functions/variant.rb +80 -0
  182. data/lib/bel_parser/language/version2_0/relationships/acts_in.rb +61 -0
  183. data/lib/bel_parser/language/version2_0/relationships/analogous.rb +45 -0
  184. data/lib/bel_parser/language/version2_0/relationships/association.rb +42 -0
  185. data/lib/bel_parser/language/version2_0/relationships/biomarker_for.rb +46 -0
  186. data/lib/bel_parser/language/version2_0/relationships/causes_no_change.rb +50 -0
  187. data/lib/bel_parser/language/version2_0/relationships/decreases.rb +63 -0
  188. data/lib/bel_parser/language/version2_0/relationships/directly_decreases.rb +56 -0
  189. data/lib/bel_parser/language/version2_0/relationships/directly_increases.rb +56 -0
  190. data/lib/bel_parser/language/version2_0/relationships/has_component.rb +62 -0
  191. data/lib/bel_parser/language/version2_0/relationships/has_components.rb +61 -0
  192. data/lib/bel_parser/language/version2_0/relationships/has_member.rb +48 -0
  193. data/lib/bel_parser/language/version2_0/relationships/has_members.rb +57 -0
  194. data/lib/bel_parser/language/version2_0/relationships/has_modification.rb +54 -0
  195. data/lib/bel_parser/language/version2_0/relationships/has_product.rb +60 -0
  196. data/lib/bel_parser/language/version2_0/relationships/has_variant.rb +54 -0
  197. data/lib/bel_parser/language/version2_0/relationships/includes.rb +59 -0
  198. data/lib/bel_parser/language/version2_0/relationships/increases.rb +63 -0
  199. data/lib/bel_parser/language/version2_0/relationships/is_a.rb +48 -0
  200. data/lib/bel_parser/language/version2_0/relationships/negative_correlation.rb +50 -0
  201. data/lib/bel_parser/language/version2_0/relationships/orthologous.rb +48 -0
  202. data/lib/bel_parser/language/version2_0/relationships/positive_correlation.rb +46 -0
  203. data/lib/bel_parser/language/version2_0/relationships/prognostic_biomarker_for.rb +48 -0
  204. data/lib/bel_parser/language/version2_0/relationships/rate_limiting_step_of.rb +53 -0
  205. data/lib/bel_parser/language/version2_0/relationships/reactant_in.rb +60 -0
  206. data/lib/bel_parser/language/version2_0/relationships/regulates.rb +51 -0
  207. data/lib/bel_parser/language/version2_0/relationships/sub_process_of.rb +55 -0
  208. data/lib/bel_parser/language/version2_0/relationships/transcribed_to.rb +53 -0
  209. data/lib/bel_parser/language/version2_0/relationships/translated_to.rb +54 -0
  210. data/lib/bel_parser/language/version2_0/relationships/translocates.rb +57 -0
  211. data/lib/bel_parser/language/version2_0/return_types/abundance.rb +20 -0
  212. data/lib/bel_parser/language/version2_0/return_types/activity.rb +20 -0
  213. data/lib/bel_parser/language/version2_0/return_types/any.rb +74 -0
  214. data/lib/bel_parser/language/version2_0/return_types/biological_process.rb +17 -0
  215. data/lib/bel_parser/language/version2_0/return_types/complex_abundance.rb +17 -0
  216. data/lib/bel_parser/language/version2_0/return_types/fragment.rb +20 -0
  217. data/lib/bel_parser/language/version2_0/return_types/from_location.rb +20 -0
  218. data/lib/bel_parser/language/version2_0/return_types/fusion.rb +17 -0
  219. data/lib/bel_parser/language/version2_0/return_types/gene_abundance.rb +17 -0
  220. data/lib/bel_parser/language/version2_0/return_types/list.rb +17 -0
  221. data/lib/bel_parser/language/version2_0/return_types/location.rb +20 -0
  222. data/lib/bel_parser/language/version2_0/return_types/micro_rna_abundance.rb +17 -0
  223. data/lib/bel_parser/language/version2_0/return_types/molecular_activity.rb +20 -0
  224. data/lib/bel_parser/language/version2_0/return_types/pathology.rb +17 -0
  225. data/lib/bel_parser/language/version2_0/return_types/products.rb +17 -0
  226. data/lib/bel_parser/language/version2_0/return_types/protein_abundance.rb +17 -0
  227. data/lib/bel_parser/language/version2_0/return_types/protein_modification.rb +17 -0
  228. data/lib/bel_parser/language/version2_0/return_types/reactants.rb +17 -0
  229. data/lib/bel_parser/language/version2_0/return_types/rna_abundance.rb +17 -0
  230. data/lib/bel_parser/language/version2_0/return_types/to_location.rb +20 -0
  231. data/lib/bel_parser/language/version2_0/return_types/variant.rb +20 -0
  232. data/lib/bel_parser/language/version2_0/value_encodings/abundance.rb +21 -0
  233. data/lib/bel_parser/language/version2_0/value_encodings/activity.rb +21 -0
  234. data/lib/bel_parser/language/version2_0/value_encodings/any.rb +74 -0
  235. data/lib/bel_parser/language/version2_0/value_encodings/biological_process.rb +21 -0
  236. data/lib/bel_parser/language/version2_0/value_encodings/complex_abundance.rb +21 -0
  237. data/lib/bel_parser/language/version2_0/value_encodings/gene_abundance.rb +21 -0
  238. data/lib/bel_parser/language/version2_0/value_encodings/location.rb +21 -0
  239. data/lib/bel_parser/language/version2_0/value_encodings/micro_rna_abundance.rb +21 -0
  240. data/lib/bel_parser/language/version2_0/value_encodings/pathology.rb +21 -0
  241. data/lib/bel_parser/language/version2_0/value_encodings/protein_abundance.rb +21 -0
  242. data/lib/bel_parser/language/version2_0/value_encodings/protein_modification.rb +21 -0
  243. data/lib/bel_parser/language/version2_0/value_encodings/rna_abundance.rb +21 -0
  244. data/lib/bel_parser/mixin/line_continuator.rb +15 -0
  245. data/lib/bel_parser/mixin/line_mapping.rb +14 -0
  246. data/lib/bel_parser/parsers/ast/node.rb +987 -0
  247. data/lib/bel_parser/parsers/ast/sexp.rb +8 -0
  248. data/lib/bel_parser/parsers/bel_script.rb +5 -0
  249. data/lib/bel_parser/parsers/bel_script/define_annotation.rb +5920 -0
  250. data/lib/bel_parser/parsers/bel_script/define_annotation.rl +141 -0
  251. data/lib/bel_parser/parsers/bel_script/define_namespace.rb +1780 -0
  252. data/lib/bel_parser/parsers/bel_script/define_namespace.rl +121 -0
  253. data/lib/bel_parser/parsers/bel_script/set.rb +5008 -0
  254. data/lib/bel_parser/parsers/bel_script/set.rl +116 -0
  255. data/lib/bel_parser/parsers/bel_script/set_document.rb +7722 -0
  256. data/lib/bel_parser/parsers/bel_script/set_document.rl +97 -0
  257. data/lib/bel_parser/parsers/bel_script/unset.rb +706 -0
  258. data/lib/bel_parser/parsers/bel_script/unset.rl +95 -0
  259. data/lib/bel_parser/parsers/common.rb +5 -0
  260. data/lib/bel_parser/parsers/common/blank_line.rb +211 -0
  261. data/lib/bel_parser/parsers/common/blank_line.rl +81 -0
  262. data/lib/bel_parser/parsers/common/comment_line.rb +245 -0
  263. data/lib/bel_parser/parsers/common/comment_line.rl +97 -0
  264. data/lib/bel_parser/parsers/common/common.rb +7 -0
  265. data/lib/bel_parser/parsers/common/common.rl +13 -0
  266. data/lib/bel_parser/parsers/common/identifier.rb +289 -0
  267. data/lib/bel_parser/parsers/common/identifier.rl +106 -0
  268. data/lib/bel_parser/parsers/common/list.rb +2388 -0
  269. data/lib/bel_parser/parsers/common/list.rl +146 -0
  270. data/lib/bel_parser/parsers/common/string.rb +271 -0
  271. data/lib/bel_parser/parsers/common/string.rl +107 -0
  272. data/lib/bel_parser/parsers/expression.rb +7 -0
  273. data/lib/bel_parser/parsers/expression/comment.rb +239 -0
  274. data/lib/bel_parser/parsers/expression/comment.rl +97 -0
  275. data/lib/bel_parser/parsers/expression/nested_statement.rb +17802 -0
  276. data/lib/bel_parser/parsers/expression/nested_statement.rl +141 -0
  277. data/lib/bel_parser/parsers/expression/observed_term.rb +7291 -0
  278. data/lib/bel_parser/parsers/expression/observed_term.rl +92 -0
  279. data/lib/bel_parser/parsers/expression/parameter.rb +1506 -0
  280. data/lib/bel_parser/parsers/expression/parameter.rl +97 -0
  281. data/lib/bel_parser/parsers/expression/relationship.rb +254 -0
  282. data/lib/bel_parser/parsers/expression/relationship.rl +98 -0
  283. data/lib/bel_parser/parsers/expression/simple_statement.rb +10475 -0
  284. data/lib/bel_parser/parsers/expression/simple_statement.rl +112 -0
  285. data/lib/bel_parser/parsers/expression/term.rb +3989 -0
  286. data/lib/bel_parser/parsers/expression/term.rl +157 -0
  287. data/lib/bel_parser/parsers/line_parser.rb +92 -0
  288. data/lib/bel_parser/parsers/mixin/buffer.rb +10 -0
  289. data/lib/bel_parser/parsers/nonblocking_io_wrapper.rb +50 -0
  290. data/lib/bel_parser/parsers/serializer.rb +205 -0
  291. data/lib/bel_parser/quoting.rb +177 -0
  292. data/lib/bel_parser/resource/concept.rb +56 -0
  293. data/lib/bel_parser/resource/concept_scheme.rb +35 -0
  294. data/lib/bel_parser/resource/dataset.rb +34 -0
  295. data/lib/bel_parser/resource/eager_reader.rb +89 -0
  296. data/lib/bel_parser/resource/eager_sparql_reader.rb +51 -0
  297. data/lib/bel_parser/resource/file_resource.rb +21 -0
  298. data/lib/bel_parser/resource/file_resource_value.rb +24 -0
  299. data/lib/bel_parser/resource/jena_tdb_reader.rb +246 -0
  300. data/lib/bel_parser/resource/lru_cache.rb +111 -0
  301. data/lib/bel_parser/resource/lru_reader.rb +34 -0
  302. data/lib/bel_parser/resource/reader.rb +18 -0
  303. data/lib/bel_parser/resource/resource_url_reader.rb +181 -0
  304. data/lib/bel_parser/resource/sparql_reader.rb +179 -0
  305. data/lib/bel_parser/resource/value.rb +31 -0
  306. data/lib/bel_parser/script.rb +8 -0
  307. data/lib/bel_parser/script/filter.rb +35 -0
  308. data/lib/bel_parser/script/first_node.rb +21 -0
  309. data/lib/bel_parser/script/keywords.rb +32 -0
  310. data/lib/bel_parser/script/nanopub_mapper.rb +182 -0
  311. data/lib/bel_parser/script/parser.rb +51 -0
  312. data/lib/bel_parser/script/state/annotation_definition.rb +62 -0
  313. data/lib/bel_parser/script/state/bel_version.rb +36 -0
  314. data/lib/bel_parser/script/state/document_property.rb +29 -0
  315. data/lib/bel_parser/script/state/namespace_definition.rb +32 -0
  316. data/lib/bel_parser/script/state/set.rb +82 -0
  317. data/lib/bel_parser/script/state/unset.rb +46 -0
  318. data/lib/bel_parser/script/state_aggregator.rb +49 -0
  319. data/lib/bel_parser/script/state_function.rb +10 -0
  320. data/lib/bel_parser/script/syntax/expression_validation.rb +46 -0
  321. data/lib/bel_parser/script/syntax/invalid_regex_pattern.rb +49 -0
  322. data/lib/bel_parser/script/syntax/undefined_annotation.rb +61 -0
  323. data/lib/bel_parser/script/syntax/undefined_annotation_value.rb +84 -0
  324. data/lib/bel_parser/script/syntax/unresolvable_namespace.rb +54 -0
  325. data/lib/bel_parser/script/syntax/unsupported_bel_version.rb +59 -0
  326. data/lib/bel_parser/script/validator.rb +65 -0
  327. data/lib/bel_parser/vendor/ast.rb +17 -0
  328. data/lib/bel_parser/vendor/ast/node.rb +254 -0
  329. data/lib/bel_parser/vendor/ast/processor.rb +12 -0
  330. data/lib/bel_parser/vendor/ast/processor/mixin.rb +282 -0
  331. data/lib/bel_parser/vendor/ast/sexp.rb +30 -0
  332. metadata +390 -0
@@ -0,0 +1,181 @@
1
+ require 'base64'
2
+ require 'digest'
3
+ require 'dbm'
4
+ require 'net/http'
5
+ require 'tempfile'
6
+ require 'uri'
7
+ require_relative 'reader'
8
+ require_relative 'file_resource'
9
+ require_relative 'file_resource_value'
10
+
11
+ module BELParser
12
+ module Resource
13
+ # ResourceURLReader retrieves {Dataset datasets} and {Value values} from
14
+ # Annotation (i.e. belanno extension) and Namespace (i.e. belns extension)
15
+ # files. Value and encoding are stored in DBM database files to reduce the
16
+ # runtime memory usage (22 resources loaded, totaling 100MB memory usage).
17
+ #
18
+ # Only supports resource identifiers with an HTTP or HTTPS scheme.
19
+ class ResourceURLReader
20
+ include Reader
21
+
22
+ # Class ivars for tracking open {DBM} databases.
23
+ @dataset_file = nil
24
+ @resource_files = {}
25
+
26
+ DEFAULT_RESOURCE_VALUE_DELIMITER = '|'
27
+ private_constant :DEFAULT_RESOURCE_VALUE_DELIMITER
28
+
29
+ # Initializes a {ResourceURLReader}.
30
+ #
31
+ # @param [Boolean] reuse_database_files specify +true+ to reuse database
32
+ # files; +false+ to create new database files (default)
33
+ def initialize(reuse_database_files = false)
34
+ @resources = {}
35
+ @datasets = ResourceURLReader.open_datasets_file
36
+ @reuse = reuse_database_files
37
+ end
38
+
39
+ # Retrieve the resource identified by +resource_identifier+.
40
+ #
41
+ # @param [String] resource_identifier the resource identifier
42
+ # @return [FileResource] the file resource
43
+ def retrieve_resource(resource_identifier)
44
+ read_resource(resource_identifier)[:dataset]
45
+ end
46
+
47
+ def retrieve_value_from_resource(resource_identifier, value)
48
+ resource = read_resource(resource_identifier)
49
+ encoding = resource[:values][value]
50
+ return nil unless encoding
51
+ FileResourceValue.new(resource[:dataset], value, encoding)
52
+ end
53
+
54
+ def retrieve_values_from_resource(resource_identifier)
55
+ resource = read_resource(resource_identifier)
56
+ dataset = resource[:dataset]
57
+ resource[:values].lazy.map do |value, encoding|
58
+ FileResourceValue.new(dataset, value, encoding)
59
+ end
60
+ end
61
+
62
+ protected
63
+
64
+ def read_resource(url)
65
+ # return cached resource if present
66
+ resource = @resources[url]
67
+ return resource if resource
68
+
69
+ # read url
70
+ content = http_get(url)
71
+ unless content
72
+ # cache and return empty resource if not resolvable
73
+ return @resources[url] = empty_resource
74
+ end
75
+
76
+ @resources[url] = create_resource(url, content.each_line)
77
+ end
78
+
79
+ def create_resource(url, line_enum)
80
+ delimiter = DEFAULT_RESOURCE_VALUE_DELIMITER
81
+ dataset = @datasets[url]
82
+ values = ResourceURLReader.open_resource_file(url)
83
+
84
+ if @reuse && dataset && values.size > 0
85
+ warn(
86
+ <<-MSG.gsub(/^ {14}/, '')
87
+ Warning - Reusing value database.
88
+ URL: #{url}
89
+ File: #{ResourceURLReader._temporary_resource_file(url)}
90
+ MSG
91
+ )
92
+ return {
93
+ dataset: FileResource.new(url, *dataset.split('//')),
94
+ values: values
95
+ }
96
+ end
97
+
98
+ value_section = false
99
+ type, name, keyword, domain = nil
100
+ line_enum.each do |line|
101
+ line.strip!
102
+ case
103
+ when line =~ /^#{Regexp.escape('[AnnotationDefinition]')}/
104
+ type = Dataset::ANNOTATION
105
+ when line =~ /^#{Regexp.escape('[Namespace]')}/
106
+ type = Dataset::NAMESPACE
107
+ when line =~ /^NameString *= *(.*)$/
108
+ name = Regexp.last_match[1]
109
+ when line =~ /^Keyword *= *(.*)$/
110
+ keyword = Regexp.last_match[1]
111
+ when line =~ /^DomainString *= *(.*)$/
112
+ domain = Regexp.last_match[1]
113
+ when line =~ /^DelimiterString *=(.*)$/
114
+ delimiter = Regexp.last_match[1]
115
+ when line =~ /^#{Regexp.escape('[Values]')}/
116
+ dataset = FileResource.new(url, domain, keyword, name, type)
117
+ value_section = true
118
+ when value_section
119
+ value, encoding = line.strip.split(delimiter)
120
+ values[value.to_s] = encoding.to_s
121
+ end
122
+ end
123
+
124
+ resource = {
125
+ dataset: FileResource.new(url, domain, keyword, name, type),
126
+ values: values
127
+ }
128
+ @datasets[url] = [domain, keyword, name, type].join('//')
129
+ resource
130
+ end
131
+
132
+ def empty_resource
133
+ { dataset: nil, values: {} }
134
+ end
135
+
136
+ def http_get(url)
137
+ begin
138
+ _get(URI.parse(url))
139
+ rescue URI::InvalidURIError, SocketError
140
+ return nil
141
+ end
142
+ end
143
+
144
+ def self.open_datasets_file
145
+ @dataset_file ||= ::DBM.open(_temporary_datasets_file)
146
+ end
147
+
148
+ def self.open_resource_file(url)
149
+ @resource_files[url] ||= ::DBM.open(_temporary_resource_file(url))
150
+ end
151
+
152
+ def self._temporary_datasets_file
153
+ resource_directory = File.join(Dir.tmpdir, 'belresources')
154
+ FileUtils.mkdir_p(resource_directory)
155
+ File.join(resource_directory, 'datasets.gdbm')
156
+ end
157
+
158
+ def self._temporary_resource_file(url)
159
+ resource_directory = File.join(Dir.tmpdir, 'belresources')
160
+ FileUtils.mkdir_p(resource_directory)
161
+ File.join(resource_directory, "#{_hash_url(url)}.gdbm")
162
+ end
163
+
164
+ def self._hash_url(url)
165
+ Base64.encode64(Digest::SHA1.digest(url)).delete("/=\n")
166
+ end
167
+ private_class_method :_hash_url
168
+
169
+ private
170
+
171
+ def _get(url, &block)
172
+ Net::HTTP.start(url.host, url.port) do |http|
173
+ http.request(Net::HTTP::Get.new(url)) do |response|
174
+ return response.read_body
175
+ end
176
+ end
177
+ end
178
+
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,179 @@
1
+ require 'erb'
2
+ require 'net/http'
3
+ require 'sparql/client'
4
+ require 'uri'
5
+
6
+ require_relative 'reader'
7
+ require_relative 'lru_reader'
8
+ require_relative 'concept'
9
+ require_relative 'concept_scheme'
10
+
11
+ module BELParser
12
+ module Resource
13
+ # SPARQLReader
14
+ class SPARQLReader
15
+ include Reader
16
+ prepend LRUReader
17
+
18
+ SCHEMES = [URI::HTTP, URI::HTTPS].freeze
19
+ ALLOW_HEADER = 'Allow'.freeze
20
+
21
+ def initialize(sparql_endpoint_url, validate_url = true)
22
+ validate_sparql_endpoint_url(sparql_endpoint_url) if validate_url
23
+ @sparql_repository = SPARQL::Client.new(sparql_endpoint_url)
24
+ end
25
+
26
+ def retrieve_resource(resource_identifier)
27
+ uri = URI(resource_identifier.to_s)
28
+ template_binding = binding
29
+ sparql_query = RESOLVE_CONCEPT_SCHEME.result(template_binding)
30
+ hash_to_concept_scheme(resource_identifier,
31
+ execute_select(sparql_query).first)
32
+ end
33
+
34
+ def retrieve_value_from_resource(resource_identifier, value)
35
+ uri = URI(resource_identifier.to_s)
36
+ template_binding = binding
37
+ sparql_query = RESOLVE_CONCEPT.result(template_binding)
38
+ concept_scheme = retrieve_resource(resource_identifier)
39
+ to_concept = method(:hash_to_concept).to_proc.curry[concept_scheme]
40
+
41
+ execute_select(sparql_query).map(&to_concept)
42
+ end
43
+
44
+ def retrieve_values_from_resource(resource_identifier)
45
+ uri = URI(resource_identifier.to_s)
46
+ template_binding = binding
47
+ sparql_query = RESOLVE_CONCEPTS.result(template_binding)
48
+ concept_scheme = retrieve_resource(resource_identifier)
49
+ to_concept = method(:hash_to_concept).to_proc.curry[concept_scheme]
50
+
51
+ execute_select(sparql_query).map(&to_concept)
52
+ end
53
+
54
+ protected
55
+
56
+ def execute_select(sparql_query)
57
+ @sparql_repository.query(sparql_query).map do |solution|
58
+ solution.to_hash
59
+ end
60
+ end
61
+
62
+ def hash_to_concept_scheme(resource_identifier, hash)
63
+ return nil if hash[:types].value.empty?
64
+ ConceptScheme.new(resource_identifier,
65
+ *hash.values_at(:domain, :prefix, :prefLabel, :types))
66
+ end
67
+
68
+ def hash_to_concept(concept_scheme, hash)
69
+ Concept.new(concept_scheme,
70
+ *hash.values_at(:concept, :prefLabel, :identifier, :title,
71
+ :altLabels, :types))
72
+ end
73
+
74
+ def validate_sparql_endpoint_url(url)
75
+ url_s = url.to_s
76
+ scheme, host, port = URI(url_s).select(:scheme, :host, :port)
77
+ validate_uri_scheme(scheme, url_s)
78
+
79
+ options_request = Net::HTTP::Options.new(url_s)
80
+ options_response = Net::HTTP.start(host, port) do |http|
81
+ http.request(Net::HTTP::Options.new(url_s))
82
+ end
83
+ validate_200(options_response, url_s)
84
+ validate_allowed_methods(options_response, url_s)
85
+ end
86
+
87
+ def validate_uri_scheme(scheme, url_s)
88
+ unless SCHEMES.include?(URI.scheme_list[scheme.upcase])
89
+ raise ArgumentError,
90
+ "expected HTTP or HTTPS scheme for url: #{url_s}"
91
+ end
92
+ end
93
+
94
+ def validate_200(response, url_s)
95
+ unless response.code_type == Net::HTTPOK
96
+ raise ArgumentError,
97
+ <<-MSG.gsub(/ {14}/, '').delete("\n")
98
+ expected URL to respond 200 (received #{response.code}) for
99
+ OPTIONS request to: #{url_s}"
100
+ MSG
101
+ end
102
+ end
103
+
104
+ def validate_allowed_methods(response, url_s)
105
+ unless response[ALLOW_HEADER].to_s =~ /GET|POST/
106
+ raise ArgumentError,
107
+ "expected URL to allow GET or POST: #{url_s}"
108
+ end
109
+ end
110
+
111
+ RESOLVE_CONCEPT_SCHEME = ERB.new(<<-SPARQL)
112
+ prefix belv: <http://www.openbel.org/vocabulary/>
113
+ prefix dct: <http://purl.org/dc/terms/>
114
+ prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
115
+ prefix skos: <http://www.w3.org/2004/02/skos/core#>
116
+ select ?domain ?prefix ?prefLabel (group_concat(?type;separator='|') as ?types)
117
+ where {
118
+ <<%= uri %>> rdf:type skos:ConceptScheme .
119
+ <<%= uri %>> rdf:type ?type .
120
+ <<%= uri %>> belv:domain ?domain .
121
+ <<%= uri %>> belv:prefix ?prefix .
122
+ <<%= uri %>> skos:prefLabel ?prefLabel .
123
+ }
124
+ group by ?domain ?prefix ?prefLabel
125
+ SPARQL
126
+
127
+ RESOLVE_CONCEPT = ERB.new(<<-SPARQL)
128
+ prefix belv: <http://www.openbel.org/vocabulary/>
129
+ prefix dct: <http://purl.org/dc/terms/>
130
+ prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
131
+ prefix skos: <http://www.w3.org/2004/02/skos/core#>
132
+ select ?concept ?prefLabel ?identifier ?title
133
+ (group_concat(distinct(?type);separator='|') as ?types)
134
+ (group_concat(distinct(?altLabel);separator='|') as ?altLabels)
135
+ where {
136
+ {?concept skos:prefLabel "<%= value %>"}
137
+ UNION
138
+ {?concept dct:identifier "<%= value %>"}
139
+ UNION
140
+ {?concept dct:title "<%= value %>"}
141
+ UNION
142
+ {?concept skos:altLabel "<%= value %>"}
143
+
144
+ ?concept skos:inScheme <<%= uri %>> .
145
+ ?concept rdf:type ?type .
146
+
147
+ ?concept skos:prefLabel ?prefLabel .
148
+ ?concept dct:identifier ?identifier .
149
+ optional {
150
+ ?concept dct:title ?title .
151
+ ?concept skos:altLabel ?altLabel .
152
+ }
153
+ }
154
+ group by ?concept ?prefLabel ?identifier ?title
155
+ SPARQL
156
+
157
+ RESOLVE_CONCEPTS = ERB.new(<<-SPARQL)
158
+ prefix belv: <http://www.openbel.org/vocabulary/>
159
+ prefix dct: <http://purl.org/dc/terms/>
160
+ prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
161
+ prefix skos: <http://www.w3.org/2004/02/skos/core#>
162
+ select ?concept ?prefLabel ?identifier ?title
163
+ (group_concat(distinct(?type);separator='|') as ?types)
164
+ (group_concat(distinct(?altLabel);separator='|') as ?altLabels)
165
+ where {
166
+ ?concept skos:inScheme <<%= uri %>> .
167
+ ?concept rdf:type ?type .
168
+ ?concept skos:prefLabel ?prefLabel .
169
+ optional {
170
+ ?concept dct:identifier ?identifier .
171
+ ?concept dct:title ?title .
172
+ ?concept skos:altLabel ?altLabel
173
+ }
174
+ }
175
+ group by ?concept ?prefLabel ?identifier ?title
176
+ SPARQL
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,31 @@
1
+ module BELParser
2
+ module Resource
3
+ # Value
4
+ module Value
5
+
6
+ def dataset
7
+ raise NotImplementedError, "#{__method__} is not implemented."
8
+ end
9
+
10
+ def name
11
+ raise NotImplementedError, "#{__method__} is not implemented."
12
+ end
13
+
14
+ def identifier
15
+ nil
16
+ end
17
+
18
+ def title
19
+ nil
20
+ end
21
+
22
+ def synonyms
23
+ []
24
+ end
25
+
26
+ def encodings
27
+ raise NotImplementedError, "#{__method__} is not implemented."
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'script/keywords'
2
+ require_relative 'script/state_function'
3
+
4
+ require_relative 'script/filter'
5
+ require_relative 'script/first_node'
6
+ require_relative 'script/state_aggregator'
7
+ require_relative 'script/validator'
8
+ require_relative 'script/nanopub_mapper'
@@ -0,0 +1,35 @@
1
+ module BELParser
2
+ module Script
3
+ # Filter will enumerate {BELParser::Parsers::AST::Node AST nodes} that are
4
+ # relevant to lines in a BEL Script document. It selects the relevant nodes
5
+ # from an {BELParser::Parsers::AST::Node AST node} enumerator.
6
+ class Filter
7
+ # Represents the BEL Script AST Node type.
8
+ # TODO These could be AST::Node subclasses instead.
9
+ TYPES = [
10
+ :simple_statement,
11
+ :observed_term,
12
+ :nested_statement,
13
+ :annotation_definition,
14
+ :namespace_definition,
15
+ :set,
16
+ :document_property,
17
+ :unset,
18
+ :blank_line,
19
+ :comment_line
20
+ ]
21
+
22
+ def initialize(ast_enum)
23
+ @ast_filter = BELParser::ASTFilter.new(ast_enum, *TYPES)
24
+ end
25
+
26
+ def each(&block)
27
+ if block_given?
28
+ @ast_filter.each(&block)
29
+ else
30
+ enum_for(:each)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+ module BELParser
2
+ module Script
3
+ # FirstNode will return the first node from the set of
4
+ # {BELParser::Parsers::AST::Node AST nodes} provided.
5
+ class FirstNode
6
+ def initialize(ast_enum)
7
+ @ast_enum = ast_enum
8
+ end
9
+
10
+ def each
11
+ if block_given?
12
+ @ast_enum.each do |(line_number, line, ast_nodes)|
13
+ yield [line_number, line, ast_nodes.first]
14
+ end
15
+ else
16
+ enum_for(:each)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end