rdf_context 0.4.2

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 (551) hide show
  1. data/.autotest +2 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +3 -0
  4. data/History.txt +73 -0
  5. data/README.rdoc +145 -0
  6. data/Rakefile +77 -0
  7. data/VERSION +1 -0
  8. data/bin/reddy +59 -0
  9. data/lib/rdf_context.rb +60 -0
  10. data/lib/rdf_context/bnode.rb +99 -0
  11. data/lib/rdf_context/conjunctive_graph.rb +47 -0
  12. data/lib/rdf_context/exceptions.rb +11 -0
  13. data/lib/rdf_context/graph.rb +333 -0
  14. data/lib/rdf_context/literal.rb +340 -0
  15. data/lib/rdf_context/n3_grammar.rb +2171 -0
  16. data/lib/rdf_context/n3_grammar.treetop +143 -0
  17. data/lib/rdf_context/n3parser.rb +152 -0
  18. data/lib/rdf_context/namespace.rb +82 -0
  19. data/lib/rdf_context/nokogiri_hacks.rb +8 -0
  20. data/lib/rdf_context/parser.rb +119 -0
  21. data/lib/rdf_context/rdfaparser.rb +398 -0
  22. data/lib/rdf_context/rdfxmlparser.rb +525 -0
  23. data/lib/rdf_context/store/abstract_sql_store.rb +843 -0
  24. data/lib/rdf_context/store/abstract_store.rb +64 -0
  25. data/lib/rdf_context/store/list_store.rb +63 -0
  26. data/lib/rdf_context/store/memory_store.rb +323 -0
  27. data/lib/rdf_context/store/sqlite3_store.rb +223 -0
  28. data/lib/rdf_context/string_hacks.rb +108 -0
  29. data/lib/rdf_context/term_utils.rb +196 -0
  30. data/lib/rdf_context/triple.rb +144 -0
  31. data/lib/rdf_context/uriref.rb +95 -0
  32. data/script/console +10 -0
  33. data/spec/bnode_spec.rb +58 -0
  34. data/spec/conjunctive_graph_spec.rb +60 -0
  35. data/spec/graph_spec.rb +390 -0
  36. data/spec/list_store_spec.rb +12 -0
  37. data/spec/literal_spec.rb +314 -0
  38. data/spec/matchers.rb +150 -0
  39. data/spec/memory_store_spec.rb +23 -0
  40. data/spec/n3parser_spec.rb +229 -0
  41. data/spec/namespaces_spec.rb +66 -0
  42. data/spec/ntriples/test.nt +78 -0
  43. data/spec/parser_spec.rb +29 -0
  44. data/spec/rdfa-triples/0001.nt +1 -0
  45. data/spec/rdfa-triples/0006.nt +2 -0
  46. data/spec/rdfa-triples/0007.nt +3 -0
  47. data/spec/rdfa-triples/0008.nt +1 -0
  48. data/spec/rdfa-triples/0009.nt +1 -0
  49. data/spec/rdfa-triples/0010.nt +2 -0
  50. data/spec/rdfa-triples/0011.nt +3 -0
  51. data/spec/rdfa-triples/0012.nt +1 -0
  52. data/spec/rdfa-triples/0013.nt +1 -0
  53. data/spec/rdfa-triples/0014.nt +1 -0
  54. data/spec/rdfa-triples/0015.nt +2 -0
  55. data/spec/rdfa-triples/0017.nt +3 -0
  56. data/spec/rdfa-triples/0018.nt +1 -0
  57. data/spec/rdfa-triples/0019.nt +1 -0
  58. data/spec/rdfa-triples/0020.nt +1 -0
  59. data/spec/rdfa-triples/0021.nt +1 -0
  60. data/spec/rdfa-triples/0023.nt +1 -0
  61. data/spec/rdfa-triples/0025.nt +2 -0
  62. data/spec/rdfa-triples/0026.nt +1 -0
  63. data/spec/rdfa-triples/0027.nt +1 -0
  64. data/spec/rdfa-triples/0029.nt +1 -0
  65. data/spec/rdfa-triples/0030.nt +1 -0
  66. data/spec/rdfa-triples/0031.nt +1 -0
  67. data/spec/rdfa-triples/0032.nt +1 -0
  68. data/spec/rdfa-triples/0033.nt +2 -0
  69. data/spec/rdfa-triples/0034.nt +1 -0
  70. data/spec/rdfa-triples/0035.nt +1 -0
  71. data/spec/rdfa-triples/0036.nt +1 -0
  72. data/spec/rdfa-triples/0037.nt +1 -0
  73. data/spec/rdfa-triples/0038.nt +1 -0
  74. data/spec/rdfa-triples/0039.nt +1 -0
  75. data/spec/rdfa-triples/0040.nt +1 -0
  76. data/spec/rdfa-triples/0041.nt +1 -0
  77. data/spec/rdfa-triples/0042.nt +0 -0
  78. data/spec/rdfa-triples/0046.nt +3 -0
  79. data/spec/rdfa-triples/0047.nt +3 -0
  80. data/spec/rdfa-triples/0048.nt +3 -0
  81. data/spec/rdfa-triples/0049.nt +2 -0
  82. data/spec/rdfa-triples/0050.nt +2 -0
  83. data/spec/rdfa-triples/0051.nt +2 -0
  84. data/spec/rdfa-triples/0052.nt +1 -0
  85. data/spec/rdfa-triples/0053.nt +2 -0
  86. data/spec/rdfa-triples/0054.nt +2 -0
  87. data/spec/rdfa-triples/0055.nt +2 -0
  88. data/spec/rdfa-triples/0056.nt +3 -0
  89. data/spec/rdfa-triples/0057.nt +4 -0
  90. data/spec/rdfa-triples/0058.nt +6 -0
  91. data/spec/rdfa-triples/0059.nt +6 -0
  92. data/spec/rdfa-triples/0060.nt +2 -0
  93. data/spec/rdfa-triples/0061.nt +1 -0
  94. data/spec/rdfa-triples/0062.nt +1 -0
  95. data/spec/rdfa-triples/0063.nt +1 -0
  96. data/spec/rdfa-triples/0064.nt +1 -0
  97. data/spec/rdfa-triples/0065.nt +3 -0
  98. data/spec/rdfa-triples/0066.nt +1 -0
  99. data/spec/rdfa-triples/0067.nt +1 -0
  100. data/spec/rdfa-triples/0068.nt +1 -0
  101. data/spec/rdfa-triples/0069.nt +1 -0
  102. data/spec/rdfa-triples/0070.nt +1 -0
  103. data/spec/rdfa-triples/0071.nt +1 -0
  104. data/spec/rdfa-triples/0072.nt +1 -0
  105. data/spec/rdfa-triples/0073.nt +1 -0
  106. data/spec/rdfa-triples/0074.nt +1 -0
  107. data/spec/rdfa-triples/0075.nt +1 -0
  108. data/spec/rdfa-triples/0076.nt +23 -0
  109. data/spec/rdfa-triples/0077.nt +23 -0
  110. data/spec/rdfa-triples/0078.nt +6 -0
  111. data/spec/rdfa-triples/0079.nt +3 -0
  112. data/spec/rdfa-triples/0080.nt +1 -0
  113. data/spec/rdfa-triples/0081.nt +6 -0
  114. data/spec/rdfa-triples/0082.nt +8 -0
  115. data/spec/rdfa-triples/0083.nt +6 -0
  116. data/spec/rdfa-triples/0084.nt +8 -0
  117. data/spec/rdfa-triples/0085.nt +4 -0
  118. data/spec/rdfa-triples/0086.nt +0 -0
  119. data/spec/rdfa-triples/0087.nt +23 -0
  120. data/spec/rdfa-triples/0088.nt +3 -0
  121. data/spec/rdfa-triples/0089.nt +1 -0
  122. data/spec/rdfa-triples/0090.nt +1 -0
  123. data/spec/rdfa-triples/0091.nt +3 -0
  124. data/spec/rdfa-triples/0092.nt +3 -0
  125. data/spec/rdfa-triples/0093.nt +2 -0
  126. data/spec/rdfa-triples/0094.nt +3 -0
  127. data/spec/rdfa-triples/0099.nt +1 -0
  128. data/spec/rdfa-triples/0100.nt +3 -0
  129. data/spec/rdfa-triples/0101.nt +3 -0
  130. data/spec/rdfa-triples/0102.nt +1 -0
  131. data/spec/rdfa-triples/0103.nt +1 -0
  132. data/spec/rdfa-triples/0104.nt +3 -0
  133. data/spec/rdfa-triples/0105.nt +1 -0
  134. data/spec/rdfa-triples/0106.nt +1 -0
  135. data/spec/rdfa-triples/0107.nt +0 -0
  136. data/spec/rdfa-triples/0108.nt +1 -0
  137. data/spec/rdfa-triples/0109.nt +1 -0
  138. data/spec/rdfa-triples/0110.nt +1 -0
  139. data/spec/rdfa-triples/0111.nt +2 -0
  140. data/spec/rdfa-triples/0112.nt +1 -0
  141. data/spec/rdfa-triples/0113.nt +2 -0
  142. data/spec/rdfa-triples/0114.nt +3 -0
  143. data/spec/rdfa-triples/0115.nt +4 -0
  144. data/spec/rdfa-triples/0116.nt +2 -0
  145. data/spec/rdfa-triples/0117.nt +2 -0
  146. data/spec/rdfa-triples/0118.nt +1 -0
  147. data/spec/rdfa-triples/0119.nt +1 -0
  148. data/spec/rdfa-triples/0120.nt +1 -0
  149. data/spec/rdfa-triples/0121.nt +2 -0
  150. data/spec/rdfa-triples/0122.nt +1 -0
  151. data/spec/rdfa-triples/0123.nt +3 -0
  152. data/spec/rdfa-triples/0124.nt +4 -0
  153. data/spec/rdfa-triples/0125.nt +1 -0
  154. data/spec/rdfa-triples/0126.nt +3 -0
  155. data/spec/rdfa-triples/1001.nt +6 -0
  156. data/spec/rdfa_helper.rb +189 -0
  157. data/spec/rdfa_parser_spec.rb +148 -0
  158. data/spec/rdfcore/Manifest.rdf +5395 -0
  159. data/spec/rdfcore/amp-in-url/test001.nt +16 -0
  160. data/spec/rdfcore/amp-in-url/test001.rdf +40 -0
  161. data/spec/rdfcore/datatypes-intensional/test001.nt +18 -0
  162. data/spec/rdfcore/datatypes-intensional/test002.nt +18 -0
  163. data/spec/rdfcore/datatypes/test001.nt +15 -0
  164. data/spec/rdfcore/datatypes/test001.rdf +29 -0
  165. data/spec/rdfcore/datatypes/test002.nt +14 -0
  166. data/spec/rdfcore/datatypes/test002.rdf +27 -0
  167. data/spec/rdfcore/datatypes/test002b.nt +17 -0
  168. data/spec/rdfcore/datatypes/test003a.nt +16 -0
  169. data/spec/rdfcore/datatypes/test003b.nt +16 -0
  170. data/spec/rdfcore/datatypes/test005a.nt +16 -0
  171. data/spec/rdfcore/datatypes/test005b.nt +16 -0
  172. data/spec/rdfcore/datatypes/test006.nt +17 -0
  173. data/spec/rdfcore/datatypes/test008a.nt +15 -0
  174. data/spec/rdfcore/datatypes/test008b.nt +15 -0
  175. data/spec/rdfcore/datatypes/test009a.nt +15 -0
  176. data/spec/rdfcore/datatypes/test009b.nt +15 -0
  177. data/spec/rdfcore/datatypes/test010.nt +17 -0
  178. data/spec/rdfcore/datatypes/test011a.nt +17 -0
  179. data/spec/rdfcore/datatypes/test011b.nt +17 -0
  180. data/spec/rdfcore/horst-01/test001.rdf +38 -0
  181. data/spec/rdfcore/horst-01/test002.rdf +39 -0
  182. data/spec/rdfcore/horst-01/test003.rdf +40 -0
  183. data/spec/rdfcore/horst-01/test004.rdf +42 -0
  184. data/spec/rdfcore/pfps-10/test001a.nt +14 -0
  185. data/spec/rdfcore/pfps-10/test001b.nt +15 -0
  186. data/spec/rdfcore/rdf-charmod-literals/test001.nt +15 -0
  187. data/spec/rdfcore/rdf-charmod-literals/test001.rdf +34 -0
  188. data/spec/rdfcore/rdf-charmod-uris/test001.nt +14 -0
  189. data/spec/rdfcore/rdf-charmod-uris/test001.rdf +34 -0
  190. data/spec/rdfcore/rdf-charmod-uris/test002.nt +15 -0
  191. data/spec/rdfcore/rdf-charmod-uris/test002.rdf +33 -0
  192. data/spec/rdfcore/rdf-containers-syntax-vs-schema/error001.rdf +27 -0
  193. data/spec/rdfcore/rdf-containers-syntax-vs-schema/error002.rdf +34 -0
  194. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test001.nt +17 -0
  195. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test001.rdf +27 -0
  196. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test002.nt +19 -0
  197. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test002.rdf +37 -0
  198. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test003.nt +18 -0
  199. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test003.rdf +29 -0
  200. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test004.nt +29 -0
  201. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test004.rdf +33 -0
  202. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test006.nt +40 -0
  203. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test006.rdf +28 -0
  204. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test007.nt +20 -0
  205. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test007.rdf +32 -0
  206. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test008.nt +15 -0
  207. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test008.rdf +28 -0
  208. data/spec/rdfcore/rdf-element-not-mandatory/test001.nt +10 -0
  209. data/spec/rdfcore/rdf-element-not-mandatory/test001.rdf +14 -0
  210. data/spec/rdfcore/rdf-ns-prefix-confusion/test0001.nt +14 -0
  211. data/spec/rdfcore/rdf-ns-prefix-confusion/test0001.rdf +35 -0
  212. data/spec/rdfcore/rdf-ns-prefix-confusion/test0003.nt +14 -0
  213. data/spec/rdfcore/rdf-ns-prefix-confusion/test0003.rdf +35 -0
  214. data/spec/rdfcore/rdf-ns-prefix-confusion/test0004.nt +14 -0
  215. data/spec/rdfcore/rdf-ns-prefix-confusion/test0004.rdf +34 -0
  216. data/spec/rdfcore/rdf-ns-prefix-confusion/test0005.nt +15 -0
  217. data/spec/rdfcore/rdf-ns-prefix-confusion/test0005.rdf +40 -0
  218. data/spec/rdfcore/rdf-ns-prefix-confusion/test0006.nt +14 -0
  219. data/spec/rdfcore/rdf-ns-prefix-confusion/test0006.rdf +32 -0
  220. data/spec/rdfcore/rdf-ns-prefix-confusion/test0009.nt +14 -0
  221. data/spec/rdfcore/rdf-ns-prefix-confusion/test0009.rdf +32 -0
  222. data/spec/rdfcore/rdf-ns-prefix-confusion/test0010.nt +14 -0
  223. data/spec/rdfcore/rdf-ns-prefix-confusion/test0010.rdf +38 -0
  224. data/spec/rdfcore/rdf-ns-prefix-confusion/test0011.nt +15 -0
  225. data/spec/rdfcore/rdf-ns-prefix-confusion/test0011.rdf +40 -0
  226. data/spec/rdfcore/rdf-ns-prefix-confusion/test0012.nt +15 -0
  227. data/spec/rdfcore/rdf-ns-prefix-confusion/test0012.rdf +40 -0
  228. data/spec/rdfcore/rdf-ns-prefix-confusion/test0013.nt +15 -0
  229. data/spec/rdfcore/rdf-ns-prefix-confusion/test0013.rdf +40 -0
  230. data/spec/rdfcore/rdf-ns-prefix-confusion/test0014.nt +15 -0
  231. data/spec/rdfcore/rdf-ns-prefix-confusion/test0014.rdf +42 -0
  232. data/spec/rdfcore/rdfms-abouteach/error001.rdf +35 -0
  233. data/spec/rdfcore/rdfms-abouteach/error002.rdf +35 -0
  234. data/spec/rdfcore/rdfms-difference-between-ID-and-about/error1.rdf +25 -0
  235. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test1.nt +14 -0
  236. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test1.rdf +22 -0
  237. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test2.nt +14 -0
  238. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test2.rdf +22 -0
  239. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test3.nt +14 -0
  240. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test3.rdf +22 -0
  241. data/spec/rdfcore/rdfms-duplicate-member-props/test001.nt +17 -0
  242. data/spec/rdfcore/rdfms-duplicate-member-props/test001.rdf +30 -0
  243. data/spec/rdfcore/rdfms-empty-property-elements/error001.rdf +33 -0
  244. data/spec/rdfcore/rdfms-empty-property-elements/error002.rdf +33 -0
  245. data/spec/rdfcore/rdfms-empty-property-elements/error003.rdf +39 -0
  246. data/spec/rdfcore/rdfms-empty-property-elements/test001.nt +14 -0
  247. data/spec/rdfcore/rdfms-empty-property-elements/test001.rdf +33 -0
  248. data/spec/rdfcore/rdfms-empty-property-elements/test002.nt +14 -0
  249. data/spec/rdfcore/rdfms-empty-property-elements/test002.rdf +31 -0
  250. data/spec/rdfcore/rdfms-empty-property-elements/test003.nt +14 -0
  251. data/spec/rdfcore/rdfms-empty-property-elements/test003.rdf +32 -0
  252. data/spec/rdfcore/rdfms-empty-property-elements/test004.nt +14 -0
  253. data/spec/rdfcore/rdfms-empty-property-elements/test004.rdf +32 -0
  254. data/spec/rdfcore/rdfms-empty-property-elements/test005.nt +18 -0
  255. data/spec/rdfcore/rdfms-empty-property-elements/test005.rdf +32 -0
  256. data/spec/rdfcore/rdfms-empty-property-elements/test006.nt +18 -0
  257. data/spec/rdfcore/rdfms-empty-property-elements/test006.rdf +32 -0
  258. data/spec/rdfcore/rdfms-empty-property-elements/test007.nt +14 -0
  259. data/spec/rdfcore/rdfms-empty-property-elements/test007.rdf +32 -0
  260. data/spec/rdfcore/rdfms-empty-property-elements/test008.nt +14 -0
  261. data/spec/rdfcore/rdfms-empty-property-elements/test008.rdf +31 -0
  262. data/spec/rdfcore/rdfms-empty-property-elements/test009.nt +14 -0
  263. data/spec/rdfcore/rdfms-empty-property-elements/test009.rdf +32 -0
  264. data/spec/rdfcore/rdfms-empty-property-elements/test010.nt +14 -0
  265. data/spec/rdfcore/rdfms-empty-property-elements/test010.rdf +31 -0
  266. data/spec/rdfcore/rdfms-empty-property-elements/test011.nt +18 -0
  267. data/spec/rdfcore/rdfms-empty-property-elements/test011.rdf +30 -0
  268. data/spec/rdfcore/rdfms-empty-property-elements/test012.nt +18 -0
  269. data/spec/rdfcore/rdfms-empty-property-elements/test012.rdf +30 -0
  270. data/spec/rdfcore/rdfms-empty-property-elements/test013.nt +15 -0
  271. data/spec/rdfcore/rdfms-empty-property-elements/test013.rdf +35 -0
  272. data/spec/rdfcore/rdfms-empty-property-elements/test014.nt +15 -0
  273. data/spec/rdfcore/rdfms-empty-property-elements/test014.rdf +34 -0
  274. data/spec/rdfcore/rdfms-empty-property-elements/test015.nt +15 -0
  275. data/spec/rdfcore/rdfms-empty-property-elements/test015.rdf +38 -0
  276. data/spec/rdfcore/rdfms-empty-property-elements/test016.nt +14 -0
  277. data/spec/rdfcore/rdfms-empty-property-elements/test016.rdf +31 -0
  278. data/spec/rdfcore/rdfms-empty-property-elements/test017.nt +14 -0
  279. data/spec/rdfcore/rdfms-empty-property-elements/test017.rdf +38 -0
  280. data/spec/rdfcore/rdfms-identity-anon-resources/test001.nt +14 -0
  281. data/spec/rdfcore/rdfms-identity-anon-resources/test001.rdf +33 -0
  282. data/spec/rdfcore/rdfms-identity-anon-resources/test002.nt +15 -0
  283. data/spec/rdfcore/rdfms-identity-anon-resources/test002.rdf +33 -0
  284. data/spec/rdfcore/rdfms-identity-anon-resources/test003.nt +14 -0
  285. data/spec/rdfcore/rdfms-identity-anon-resources/test003.rdf +31 -0
  286. data/spec/rdfcore/rdfms-identity-anon-resources/test004.nt +15 -0
  287. data/spec/rdfcore/rdfms-identity-anon-resources/test004.rdf +33 -0
  288. data/spec/rdfcore/rdfms-identity-anon-resources/test005.nt +14 -0
  289. data/spec/rdfcore/rdfms-identity-anon-resources/test005.rdf +31 -0
  290. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test001.nt +19 -0
  291. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test001.rdf +29 -0
  292. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test002.nt +15 -0
  293. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test002.rdf +29 -0
  294. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test004.nt +18 -0
  295. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test004.rdf +29 -0
  296. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test005.nt +19 -0
  297. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test005.rdf +29 -0
  298. data/spec/rdfcore/rdfms-para196/test001.nt +17 -0
  299. data/spec/rdfcore/rdfms-para196/test001.rdf +35 -0
  300. data/spec/rdfcore/rdfms-rdf-id/error001.rdf +26 -0
  301. data/spec/rdfcore/rdfms-rdf-id/error002.rdf +26 -0
  302. data/spec/rdfcore/rdfms-rdf-id/error003.rdf +29 -0
  303. data/spec/rdfcore/rdfms-rdf-id/error004.rdf +27 -0
  304. data/spec/rdfcore/rdfms-rdf-id/error005.rdf +31 -0
  305. data/spec/rdfcore/rdfms-rdf-id/error006.rdf +26 -0
  306. data/spec/rdfcore/rdfms-rdf-id/error007.rdf +29 -0
  307. data/spec/rdfcore/rdfms-rdf-names-use/error-001.rdf +23 -0
  308. data/spec/rdfcore/rdfms-rdf-names-use/error-002.rdf +23 -0
  309. data/spec/rdfcore/rdfms-rdf-names-use/error-003.rdf +23 -0
  310. data/spec/rdfcore/rdfms-rdf-names-use/error-004.rdf +23 -0
  311. data/spec/rdfcore/rdfms-rdf-names-use/error-005.rdf +23 -0
  312. data/spec/rdfcore/rdfms-rdf-names-use/error-006.rdf +23 -0
  313. data/spec/rdfcore/rdfms-rdf-names-use/error-007.rdf +23 -0
  314. data/spec/rdfcore/rdfms-rdf-names-use/error-008.rdf +23 -0
  315. data/spec/rdfcore/rdfms-rdf-names-use/error-009.rdf +23 -0
  316. data/spec/rdfcore/rdfms-rdf-names-use/error-010.rdf +23 -0
  317. data/spec/rdfcore/rdfms-rdf-names-use/error-011.rdf +25 -0
  318. data/spec/rdfcore/rdfms-rdf-names-use/error-012.rdf +25 -0
  319. data/spec/rdfcore/rdfms-rdf-names-use/error-013.rdf +25 -0
  320. data/spec/rdfcore/rdfms-rdf-names-use/error-014.rdf +25 -0
  321. data/spec/rdfcore/rdfms-rdf-names-use/error-015.rdf +25 -0
  322. data/spec/rdfcore/rdfms-rdf-names-use/error-016.rdf +25 -0
  323. data/spec/rdfcore/rdfms-rdf-names-use/error-017.rdf +25 -0
  324. data/spec/rdfcore/rdfms-rdf-names-use/error-018.rdf +25 -0
  325. data/spec/rdfcore/rdfms-rdf-names-use/error-019.rdf +25 -0
  326. data/spec/rdfcore/rdfms-rdf-names-use/error-020.rdf +25 -0
  327. data/spec/rdfcore/rdfms-rdf-names-use/test-001.nt +1 -0
  328. data/spec/rdfcore/rdfms-rdf-names-use/test-001.rdf +23 -0
  329. data/spec/rdfcore/rdfms-rdf-names-use/test-002.nt +1 -0
  330. data/spec/rdfcore/rdfms-rdf-names-use/test-002.rdf +23 -0
  331. data/spec/rdfcore/rdfms-rdf-names-use/test-003.nt +1 -0
  332. data/spec/rdfcore/rdfms-rdf-names-use/test-003.rdf +23 -0
  333. data/spec/rdfcore/rdfms-rdf-names-use/test-004.nt +1 -0
  334. data/spec/rdfcore/rdfms-rdf-names-use/test-004.rdf +23 -0
  335. data/spec/rdfcore/rdfms-rdf-names-use/test-005.nt +1 -0
  336. data/spec/rdfcore/rdfms-rdf-names-use/test-005.rdf +23 -0
  337. data/spec/rdfcore/rdfms-rdf-names-use/test-006.nt +1 -0
  338. data/spec/rdfcore/rdfms-rdf-names-use/test-006.rdf +23 -0
  339. data/spec/rdfcore/rdfms-rdf-names-use/test-007.nt +1 -0
  340. data/spec/rdfcore/rdfms-rdf-names-use/test-007.rdf +23 -0
  341. data/spec/rdfcore/rdfms-rdf-names-use/test-008.nt +1 -0
  342. data/spec/rdfcore/rdfms-rdf-names-use/test-008.rdf +23 -0
  343. data/spec/rdfcore/rdfms-rdf-names-use/test-009.nt +1 -0
  344. data/spec/rdfcore/rdfms-rdf-names-use/test-009.rdf +23 -0
  345. data/spec/rdfcore/rdfms-rdf-names-use/test-010.nt +1 -0
  346. data/spec/rdfcore/rdfms-rdf-names-use/test-010.rdf +23 -0
  347. data/spec/rdfcore/rdfms-rdf-names-use/test-011.nt +1 -0
  348. data/spec/rdfcore/rdfms-rdf-names-use/test-011.rdf +23 -0
  349. data/spec/rdfcore/rdfms-rdf-names-use/test-012.nt +1 -0
  350. data/spec/rdfcore/rdfms-rdf-names-use/test-012.rdf +23 -0
  351. data/spec/rdfcore/rdfms-rdf-names-use/test-013.nt +1 -0
  352. data/spec/rdfcore/rdfms-rdf-names-use/test-013.rdf +23 -0
  353. data/spec/rdfcore/rdfms-rdf-names-use/test-014.nt +1 -0
  354. data/spec/rdfcore/rdfms-rdf-names-use/test-014.rdf +23 -0
  355. data/spec/rdfcore/rdfms-rdf-names-use/test-015.nt +1 -0
  356. data/spec/rdfcore/rdfms-rdf-names-use/test-015.rdf +23 -0
  357. data/spec/rdfcore/rdfms-rdf-names-use/test-016.nt +1 -0
  358. data/spec/rdfcore/rdfms-rdf-names-use/test-016.rdf +23 -0
  359. data/spec/rdfcore/rdfms-rdf-names-use/test-017.nt +1 -0
  360. data/spec/rdfcore/rdfms-rdf-names-use/test-017.rdf +25 -0
  361. data/spec/rdfcore/rdfms-rdf-names-use/test-018.nt +1 -0
  362. data/spec/rdfcore/rdfms-rdf-names-use/test-018.rdf +25 -0
  363. data/spec/rdfcore/rdfms-rdf-names-use/test-019.nt +1 -0
  364. data/spec/rdfcore/rdfms-rdf-names-use/test-019.rdf +25 -0
  365. data/spec/rdfcore/rdfms-rdf-names-use/test-020.nt +1 -0
  366. data/spec/rdfcore/rdfms-rdf-names-use/test-020.rdf +25 -0
  367. data/spec/rdfcore/rdfms-rdf-names-use/test-021.nt +1 -0
  368. data/spec/rdfcore/rdfms-rdf-names-use/test-021.rdf +25 -0
  369. data/spec/rdfcore/rdfms-rdf-names-use/test-022.nt +1 -0
  370. data/spec/rdfcore/rdfms-rdf-names-use/test-022.rdf +25 -0
  371. data/spec/rdfcore/rdfms-rdf-names-use/test-023.nt +1 -0
  372. data/spec/rdfcore/rdfms-rdf-names-use/test-023.rdf +25 -0
  373. data/spec/rdfcore/rdfms-rdf-names-use/test-024.nt +1 -0
  374. data/spec/rdfcore/rdfms-rdf-names-use/test-024.rdf +25 -0
  375. data/spec/rdfcore/rdfms-rdf-names-use/test-025.nt +1 -0
  376. data/spec/rdfcore/rdfms-rdf-names-use/test-025.rdf +25 -0
  377. data/spec/rdfcore/rdfms-rdf-names-use/test-026.nt +1 -0
  378. data/spec/rdfcore/rdfms-rdf-names-use/test-026.rdf +25 -0
  379. data/spec/rdfcore/rdfms-rdf-names-use/test-027.nt +1 -0
  380. data/spec/rdfcore/rdfms-rdf-names-use/test-027.rdf +25 -0
  381. data/spec/rdfcore/rdfms-rdf-names-use/test-028.nt +1 -0
  382. data/spec/rdfcore/rdfms-rdf-names-use/test-028.rdf +25 -0
  383. data/spec/rdfcore/rdfms-rdf-names-use/test-029.nt +1 -0
  384. data/spec/rdfcore/rdfms-rdf-names-use/test-029.rdf +25 -0
  385. data/spec/rdfcore/rdfms-rdf-names-use/test-030.nt +1 -0
  386. data/spec/rdfcore/rdfms-rdf-names-use/test-030.rdf +25 -0
  387. data/spec/rdfcore/rdfms-rdf-names-use/test-031.nt +1 -0
  388. data/spec/rdfcore/rdfms-rdf-names-use/test-031.rdf +25 -0
  389. data/spec/rdfcore/rdfms-rdf-names-use/test-032.nt +1 -0
  390. data/spec/rdfcore/rdfms-rdf-names-use/test-032.rdf +24 -0
  391. data/spec/rdfcore/rdfms-rdf-names-use/test-033.nt +1 -0
  392. data/spec/rdfcore/rdfms-rdf-names-use/test-033.rdf +24 -0
  393. data/spec/rdfcore/rdfms-rdf-names-use/test-034.nt +1 -0
  394. data/spec/rdfcore/rdfms-rdf-names-use/test-034.rdf +24 -0
  395. data/spec/rdfcore/rdfms-rdf-names-use/test-035.nt +1 -0
  396. data/spec/rdfcore/rdfms-rdf-names-use/test-035.rdf +24 -0
  397. data/spec/rdfcore/rdfms-rdf-names-use/test-036.nt +1 -0
  398. data/spec/rdfcore/rdfms-rdf-names-use/test-036.rdf +24 -0
  399. data/spec/rdfcore/rdfms-rdf-names-use/test-037.nt +1 -0
  400. data/spec/rdfcore/rdfms-rdf-names-use/test-037.rdf +24 -0
  401. data/spec/rdfcore/rdfms-rdf-names-use/warn-001.nt +1 -0
  402. data/spec/rdfcore/rdfms-rdf-names-use/warn-001.rdf +23 -0
  403. data/spec/rdfcore/rdfms-rdf-names-use/warn-002.nt +1 -0
  404. data/spec/rdfcore/rdfms-rdf-names-use/warn-002.rdf +25 -0
  405. data/spec/rdfcore/rdfms-rdf-names-use/warn-003.nt +1 -0
  406. data/spec/rdfcore/rdfms-rdf-names-use/warn-003.rdf +24 -0
  407. data/spec/rdfcore/rdfms-reification-required/test001.nt +15 -0
  408. data/spec/rdfcore/rdfms-reification-required/test001.rdf +29 -0
  409. data/spec/rdfcore/rdfms-seq-representation/empty.nt +13 -0
  410. data/spec/rdfcore/rdfms-seq-representation/test001.nt +19 -0
  411. data/spec/rdfcore/rdfms-seq-representation/test001.rdf +33 -0
  412. data/spec/rdfcore/rdfms-seq-representation/test002.nt +14 -0
  413. data/spec/rdfcore/rdfms-seq-representation/test003a.nt +14 -0
  414. data/spec/rdfcore/rdfms-seq-representation/test003b.nt +14 -0
  415. data/spec/rdfcore/rdfms-seq-representation/test004.nt +14 -0
  416. data/spec/rdfcore/rdfms-syntax-incomplete/error001.rdf +26 -0
  417. data/spec/rdfcore/rdfms-syntax-incomplete/error002.rdf +26 -0
  418. data/spec/rdfcore/rdfms-syntax-incomplete/error003.rdf +29 -0
  419. data/spec/rdfcore/rdfms-syntax-incomplete/error004.rdf +25 -0
  420. data/spec/rdfcore/rdfms-syntax-incomplete/error005.rdf +25 -0
  421. data/spec/rdfcore/rdfms-syntax-incomplete/error006.rdf +28 -0
  422. data/spec/rdfcore/rdfms-syntax-incomplete/test001.nt +14 -0
  423. data/spec/rdfcore/rdfms-syntax-incomplete/test001.rdf +28 -0
  424. data/spec/rdfcore/rdfms-syntax-incomplete/test002.nt +19 -0
  425. data/spec/rdfcore/rdfms-syntax-incomplete/test002.rdf +38 -0
  426. data/spec/rdfcore/rdfms-syntax-incomplete/test003.nt +17 -0
  427. data/spec/rdfcore/rdfms-syntax-incomplete/test003.rdf +28 -0
  428. data/spec/rdfcore/rdfms-syntax-incomplete/test004.nt +21 -0
  429. data/spec/rdfcore/rdfms-syntax-incomplete/test004.rdf +36 -0
  430. data/spec/rdfcore/rdfms-uri-substructure/error001.nt +18 -0
  431. data/spec/rdfcore/rdfms-uri-substructure/test001.nt +17 -0
  432. data/spec/rdfcore/rdfms-uri-substructure/test001.rdf +29 -0
  433. data/spec/rdfcore/rdfms-xml-literal-namespaces/test001.nt +13 -0
  434. data/spec/rdfcore/rdfms-xml-literal-namespaces/test001.rdf +33 -0
  435. data/spec/rdfcore/rdfms-xml-literal-namespaces/test002.nt +14 -0
  436. data/spec/rdfcore/rdfms-xml-literal-namespaces/test002.rdf +47 -0
  437. data/spec/rdfcore/rdfms-xmllang/test001.nt +14 -0
  438. data/spec/rdfcore/rdfms-xmllang/test001.rdf +30 -0
  439. data/spec/rdfcore/rdfms-xmllang/test002.nt +14 -0
  440. data/spec/rdfcore/rdfms-xmllang/test002.rdf +29 -0
  441. data/spec/rdfcore/rdfms-xmllang/test003.nt +14 -0
  442. data/spec/rdfcore/rdfms-xmllang/test003.rdf +28 -0
  443. data/spec/rdfcore/rdfms-xmllang/test004.nt +14 -0
  444. data/spec/rdfcore/rdfms-xmllang/test004.rdf +28 -0
  445. data/spec/rdfcore/rdfms-xmllang/test005.nt +14 -0
  446. data/spec/rdfcore/rdfms-xmllang/test005.rdf +28 -0
  447. data/spec/rdfcore/rdfms-xmllang/test006.nt +14 -0
  448. data/spec/rdfcore/rdfms-xmllang/test006.rdf +29 -0
  449. data/spec/rdfcore/rdfms-xmllang/test007a.nt +14 -0
  450. data/spec/rdfcore/rdfms-xmllang/test007b.nt +14 -0
  451. data/spec/rdfcore/rdfms-xmllang/test007c.nt +14 -0
  452. data/spec/rdfcore/rdfs-container-membership-superProperty/not1C.rdf +13 -0
  453. data/spec/rdfcore/rdfs-container-membership-superProperty/not1P.rdf +14 -0
  454. data/spec/rdfcore/rdfs-domain-and-range/nonconclusions005.rdf +28 -0
  455. data/spec/rdfcore/rdfs-domain-and-range/nonconclusions006.rdf +28 -0
  456. data/spec/rdfcore/rdfs-domain-and-range/premises005.rdf +32 -0
  457. data/spec/rdfcore/rdfs-domain-and-range/premises006.rdf +32 -0
  458. data/spec/rdfcore/rdfs-domain-and-range/test001.nt +16 -0
  459. data/spec/rdfcore/rdfs-domain-and-range/test001.rdf +29 -0
  460. data/spec/rdfcore/rdfs-domain-and-range/test002.nt +16 -0
  461. data/spec/rdfcore/rdfs-domain-and-range/test002.rdf +29 -0
  462. data/spec/rdfcore/rdfs-entailment/test001.nt +16 -0
  463. data/spec/rdfcore/rdfs-entailment/test002.nt +15 -0
  464. data/spec/rdfcore/rdfs-no-cycles-in-subClassOf/test001.nt +18 -0
  465. data/spec/rdfcore/rdfs-no-cycles-in-subClassOf/test001.rdf +37 -0
  466. data/spec/rdfcore/rdfs-no-cycles-in-subPropertyOf/test001.nt +18 -0
  467. data/spec/rdfcore/rdfs-no-cycles-in-subPropertyOf/test001.rdf +40 -0
  468. data/spec/rdfcore/rdfs-subClassOf-a-Property/test001.nt +15 -0
  469. data/spec/rdfcore/rdfs-subPropertyOf-semantics/test001.nt +24 -0
  470. data/spec/rdfcore/rdfs-subPropertyOf-semantics/test002.nt +21 -0
  471. data/spec/rdfcore/statement-entailment/test001a.nt +12 -0
  472. data/spec/rdfcore/statement-entailment/test001b.nt +2 -0
  473. data/spec/rdfcore/statement-entailment/test002a.nt +2 -0
  474. data/spec/rdfcore/statement-entailment/test002b.nt +5 -0
  475. data/spec/rdfcore/tex-01/test001.rdf +34 -0
  476. data/spec/rdfcore/tex-01/test002.rdf +33 -0
  477. data/spec/rdfcore/unrecognised-xml-attributes/test001.nt +15 -0
  478. data/spec/rdfcore/unrecognised-xml-attributes/test001.rdf +31 -0
  479. data/spec/rdfcore/unrecognised-xml-attributes/test002.nt +14 -0
  480. data/spec/rdfcore/unrecognised-xml-attributes/test002.rdf +32 -0
  481. data/spec/rdfcore/xml-canon/test001.nt +16 -0
  482. data/spec/rdfcore/xml-canon/test001.rdf +28 -0
  483. data/spec/rdfcore/xmlbase/test001.nt +14 -0
  484. data/spec/rdfcore/xmlbase/test001.rdf +27 -0
  485. data/spec/rdfcore/xmlbase/test002.nt +14 -0
  486. data/spec/rdfcore/xmlbase/test002.rdf +28 -0
  487. data/spec/rdfcore/xmlbase/test003.nt +14 -0
  488. data/spec/rdfcore/xmlbase/test003.rdf +25 -0
  489. data/spec/rdfcore/xmlbase/test004.nt +18 -0
  490. data/spec/rdfcore/xmlbase/test004.rdf +27 -0
  491. data/spec/rdfcore/xmlbase/test006.nt +15 -0
  492. data/spec/rdfcore/xmlbase/test006.rdf +26 -0
  493. data/spec/rdfcore/xmlbase/test007.nt +14 -0
  494. data/spec/rdfcore/xmlbase/test007.rdf +25 -0
  495. data/spec/rdfcore/xmlbase/test008.nt +14 -0
  496. data/spec/rdfcore/xmlbase/test008.rdf +25 -0
  497. data/spec/rdfcore/xmlbase/test009.nt +14 -0
  498. data/spec/rdfcore/xmlbase/test009.rdf +26 -0
  499. data/spec/rdfcore/xmlbase/test010.nt +14 -0
  500. data/spec/rdfcore/xmlbase/test010.rdf +26 -0
  501. data/spec/rdfcore/xmlbase/test011.nt +14 -0
  502. data/spec/rdfcore/xmlbase/test011.rdf +27 -0
  503. data/spec/rdfcore/xmlbase/test013.nt +15 -0
  504. data/spec/rdfcore/xmlbase/test013.rdf +28 -0
  505. data/spec/rdfcore/xmlbase/test014.nt +15 -0
  506. data/spec/rdfcore/xmlbase/test014.rdf +28 -0
  507. data/spec/rdfcore/xmlsch-02/test001.rdf +34 -0
  508. data/spec/rdfcore/xmlsch-02/test002.rdf +34 -0
  509. data/spec/rdfcore/xmlsch-02/test003.rdf +37 -0
  510. data/spec/rdfxml_helper.rb +137 -0
  511. data/spec/rdfxml_spec.rb +362 -0
  512. data/spec/spec.opts +1 -0
  513. data/spec/spec_helper.rb +23 -0
  514. data/spec/sqlite3_store_spec.rb +41 -0
  515. data/spec/store_helper.rb +231 -0
  516. data/spec/string_hacks_spec.rb +21 -0
  517. data/spec/triple_spec.rb +172 -0
  518. data/spec/uriref_spec.rb +117 -0
  519. data/test/longtests_spec.rb +25 -0
  520. data/test/n3_tests/lcsh/sh85062913.n3 +41 -0
  521. data/test/n3_tests/lcsh/sh85062913.nt +21 -0
  522. data/test/n3_tests/lcsh/sh85082139.n3 +157 -0
  523. data/test/n3_tests/lcsh/sh85082139.nt +79 -0
  524. data/test/n3_tests/lcsh/sh85118553.n3 +123 -0
  525. data/test/n3_tests/lcsh/sh85118553.nt +63 -0
  526. data/test/n3_tests/misc/on_now-01.n3 +30 -0
  527. data/test/n3_tests/misc/on_now-01.nt +15 -0
  528. data/test/n3_tests/n3p/simple-01.n3 +1 -0
  529. data/test/n3_tests/n3p/simple-01.nt +0 -0
  530. data/test/n3_tests/n3p/simple-02.n3 +4 -0
  531. data/test/n3_tests/n3p/simple-02.nt +0 -0
  532. data/test/n3_tests/n3p/simple-03.n3 +5 -0
  533. data/test/n3_tests/n3p/simple-03.nt +1 -0
  534. data/test/n3_tests/n3p/simple-04.n3 +6 -0
  535. data/test/n3_tests/n3p/simple-04.nt +3 -0
  536. data/test/n3_tests/n3p/simple-05.n3 +7 -0
  537. data/test/n3_tests/n3p/simple-05.nt +2 -0
  538. data/test/n3_tests/n3p/simple-06.n3 +6 -0
  539. data/test/n3_tests/n3p/simple-06.nt +4 -0
  540. data/test/n3_tests/n3p/simple-07.n3 +7 -0
  541. data/test/n3_tests/n3p/simple-07.nt +6 -0
  542. data/test/perf_test/test.rb +11 -0
  543. data/test/perf_test/tommorris.rdf +2267 -0
  544. data/test/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.nt +24 -0
  545. data/test/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.rdf +46 -0
  546. data/test/rdf_tests/tm_001.nt +1 -0
  547. data/test/rdf_tests/tm_001.rdf +7 -0
  548. data/test/rdf_tests/xml-literal-mixed.nt +7 -0
  549. data/test/rdf_tests/xml-literal-mixed.rdf +15 -0
  550. data/test/xml.rdf +6 -0
  551. metadata +696 -0
@@ -0,0 +1,223 @@
1
+ require 'sqlite3'
2
+ require File.join(File.dirname(__FILE__), 'abstract_sql_store')
3
+
4
+ module RdfContext
5
+ # SQLite3 store context-ware and formula-aware implementation.
6
+ # It stores it's triples in the following partitions:
7
+ # - Asserted non rdf:type statements
8
+ # - Asserted rdf:type statements (in a table which models Class membership). The motivation for this partition is primarily query speed and scalability as most graphs will always have more rdf:type statements than others
9
+ # - All Quoted statements
10
+ #
11
+ # In addition it persists namespace mappings in a seperate table
12
+ #
13
+ # Based on Python RdfLib SQLite
14
+ class SQLite3Store < AbstractSQLStore
15
+ def initialize(identifier = nil, configuration = {})
16
+ super(identifier, configuration)
17
+
18
+ @autocommit_default = false
19
+ @path = configuration[:path] || File.join(Dir.getwd, "#{@internedId}.db")
20
+ @db = open(:path => @path) unless @db
21
+ end
22
+
23
+ # Opens the store specified by the configuration hash. If
24
+ # create is True a store will be created if it does not already
25
+ # exist. If create is False and a store does not already exist
26
+ # an exception is raised. An exception is also raised if a store
27
+ # exists, but there is insufficient permissions to open the
28
+ # store.
29
+ #
30
+ # @param(Hash) options: Configuration hash
31
+ # <em>_path_:: Path to database file defaults to a file in the current directory based on a hash of the store identifier
32
+ def open(options)
33
+ unless File.exist?(options[:path])
34
+ @db = SQLite3::Database.new(options[:path])
35
+ executeSQL(CREATE_ASSERTED_STATEMENTS_TABLE % @internedId)
36
+ executeSQL(CREATE_ASSERTED_TYPE_STATEMENTS_TABLE % @internedId)
37
+ executeSQL(CREATE_QUOTED_STATEMENTS_TABLE % @internedId)
38
+ executeSQL(CREATE_NS_BINDS_TABLE % @internedId)
39
+ executeSQL(CREATE_LITERAL_STATEMENTS_TABLE % @internedId)
40
+
41
+ # Create indicies
42
+ {
43
+ asserted_table => {
44
+ "#{@internedId}_A_termComb_index" => %w(termComb),
45
+ "#{@internedId}_A_s_index" => %w(subject),
46
+ "#{@internedId}_A_p_index" => %w(predicate),
47
+ "#{@internedId}_A_o_index" => %w(object),
48
+ "#{@internedId}_A_c_index" => %w(context),
49
+ },
50
+ asserted_type_table => {
51
+ "#{@internedId}_T_termComb_index" => %w(termComb),
52
+ "#{@internedId}_T_member_index" => %w(member),
53
+ "#{@internedId}_T_klass_index" => %w(klass),
54
+ "#{@internedId}_T_c_index" => %w(context),
55
+ },
56
+ literal_table => {
57
+ "#{@internedId}_L_termComb_index" => %w(termComb),
58
+ "#{@internedId}_L_s_index" => %w(subject),
59
+ "#{@internedId}_L_p_index" => %w(predicate),
60
+ "#{@internedId}_L_c_index" => %w(context),
61
+ },
62
+ quoted_table => {
63
+ "#{@internedId}_Q_termComb_index" => %w(termComb),
64
+ "#{@internedId}_Q_s_index" => %w(subject),
65
+ "#{@internedId}_Q_p_index" => %w(predicate),
66
+ "#{@internedId}_Q_o_index" => %w(object),
67
+ "#{@internedId}_Q_c_index" => %w(context),
68
+ },
69
+ namespace_binds => {
70
+ "#{@internedId}_uri_index" => %w(uri),
71
+ }
72
+ }.each_pair do |tablename, indicies|
73
+ indicies.each_pair do |index, columns|
74
+ executeSQL("CREATE INDEX #{index} on #{tablename} ('#{columns.join(', ')}')")
75
+ end
76
+ end
77
+ end
78
+
79
+ raise StoreException.new("Attempt to open missing database file #{options[:path]}") unless File.exist?(options[:path])
80
+ @db = SQLite3::Database.new(options[:path])
81
+ end
82
+
83
+ # Destroy databse
84
+ #
85
+ # @param(Hash) options: Configuration hash
86
+ # <em>_path_:: Path to database file
87
+ def destroy(options = {})
88
+ File.delete(@path)
89
+ end
90
+
91
+ protected
92
+
93
+ # Escape backslashes and single quotes
94
+ def escapeQuotes(qstr)
95
+ qstr.nil? ? "" : qstr.gsub("\\","\\\\").gsub("'", "\\'").gsub('"', '""')
96
+ end
97
+
98
+ # Where clase utility functions
99
+ def buildSubjClause(subject, tableName)
100
+ # case subject
101
+ # when REGEXTerm
102
+ # when Array
103
+ # when QuotedGraph
104
+ # else
105
+ ["#{tableName}.subject=?", subject] if subject
106
+ # end
107
+ end
108
+
109
+ def buildPredClause(predicate, tableName)
110
+ # case predicate
111
+ # when REGEXTerm
112
+ # when Array
113
+ # else
114
+ ["#{tableName}.predicate=?", predicate] if predicate
115
+ # end
116
+ end
117
+
118
+ # Where clase utility functions
119
+ def buildObjClause(object, tableName)
120
+ # case object
121
+ # when REGEXTerm
122
+ # when Array
123
+ # when QuotedGraph
124
+ # else
125
+ ["#{tableName}.object=?", object] if object
126
+ # end
127
+ end
128
+
129
+ # Where clase utility functions
130
+ def buildContextClause(context, tableName)
131
+ context = normalizeTerm(context) if context
132
+
133
+ # case context
134
+ # when REGEXTerm
135
+ # when Array
136
+ # else
137
+ ["#{tableName}.context=?", context] if context
138
+ # end
139
+ end
140
+
141
+ # Where clase utility functions
142
+ def buildTypeMemberClause(subject, tableName)
143
+ # case context
144
+ # when REGEXTerm
145
+ # when Array
146
+ # else
147
+ ["#{tableName}.member=?", subject] if subject
148
+ # end
149
+ end
150
+
151
+ # Where clase utility functions
152
+ def buildTypeClassClause(object, tableName)
153
+ # case context
154
+ # when REGEXTerm
155
+ # else
156
+ ["#{tableName}.klass=?", object] if object
157
+ # end
158
+ end
159
+
160
+ # This takes the query string and parameters and (depending on the SQL implementation) either fill in
161
+ # the parameter in-place or pass it on to the DB impl (if it supports this).
162
+ # The default (here) is to fill the parameters in-place surrounding each param with quote characters
163
+ #
164
+ # Yields each row
165
+ def executeSQL(qStr, *params, &block)
166
+ @statement_cache ||= {}
167
+ #@statement_cache[qStr] ||= @db.prepare(qStr)
168
+ @statement_cache[qStr] ||= qStr
169
+
170
+ puts "executeSQL: '#{qStr}', #{params.join(", ")}" if $DEBUG
171
+ if block_given?
172
+ @db.execute(@statement_cache[qStr], *params) do |row|
173
+ puts "executeSQL res: #{row.inspect}" if $DEBUG
174
+ yield(row)
175
+ end
176
+ else
177
+ @db.execute(@statement_cache[qStr], *params)
178
+ end
179
+ end
180
+
181
+ CREATE_ASSERTED_STATEMENTS_TABLE = %(
182
+ CREATE TABLE %s_asserted_statements (
183
+ subject text not NULL,
184
+ predicate text not NULL,
185
+ object text not NULL,
186
+ context text not NULL,
187
+ termComb tinyint unsigned not NULL))
188
+
189
+ CREATE_ASSERTED_TYPE_STATEMENTS_TABLE = %(
190
+ CREATE TABLE %s_type_statements (
191
+ member text not NULL,
192
+ klass text not NULL,
193
+ context text not NULL,
194
+ termComb tinyint unsigned not NULL))
195
+
196
+ CREATE_LITERAL_STATEMENTS_TABLE = %(
197
+ CREATE TABLE %s_literal_statements (
198
+ subject text not NULL,
199
+ predicate text not NULL,
200
+ object text,
201
+ context text not NULL,
202
+ termComb tinyint unsigned not NULL,
203
+ objLanguage varchar(3),
204
+ objDatatype text))
205
+
206
+ CREATE_QUOTED_STATEMENTS_TABLE = %(
207
+ CREATE TABLE %s_quoted_statements (
208
+ subject text not NULL,
209
+ predicate text not NULL,
210
+ object text,
211
+ context text not NULL,
212
+ termComb tinyint unsigned not NULL,
213
+ objLanguage varchar(3),
214
+ objDatatype text))
215
+
216
+ CREATE_NS_BINDS_TABLE = %(
217
+ CREATE TABLE %s_namespace_binds (
218
+ prefix varchar(20) UNIQUE not NULL,
219
+ uri text,
220
+ PRIMARY KEY (prefix)))
221
+
222
+ end
223
+ end
@@ -0,0 +1,108 @@
1
+ require 'iconv'
2
+
3
+ class String
4
+ #private
5
+ # "Borrowed" from JSON utf8_to_json
6
+ RDF_MAP = {
7
+ "\x0" => '\u0000',
8
+ "\x1" => '\u0001',
9
+ "\x2" => '\u0002',
10
+ "\x3" => '\u0003',
11
+ "\x4" => '\u0004',
12
+ "\x5" => '\u0005',
13
+ "\x6" => '\u0006',
14
+ "\x7" => '\u0007',
15
+ "\b" => '\b',
16
+ "\t" => '\t',
17
+ "\n" => '\n',
18
+ "\xb" => '\u000B',
19
+ "\f" => '\f',
20
+ "\r" => '\r',
21
+ "\xe" => '\u000E',
22
+ "\xf" => '\u000F',
23
+ "\x10" => '\u0010',
24
+ "\x11" => '\u0011',
25
+ "\x12" => '\u0012',
26
+ "\x13" => '\u0013',
27
+ "\x14" => '\u0014',
28
+ "\x15" => '\u0015',
29
+ "\x16" => '\u0016',
30
+ "\x17" => '\u0017',
31
+ "\x18" => '\u0018',
32
+ "\x19" => '\u0019',
33
+ "\x1a" => '\u001A',
34
+ "\x1b" => '\u001B',
35
+ "\x1c" => '\u001C',
36
+ "\x1d" => '\u001D',
37
+ "\x1e" => '\u001E',
38
+ "\x1f" => '\u001F',
39
+ '"' => '\"',
40
+ '\\' => '\\\\',
41
+ '/' => '/',
42
+ } # :nodoc:
43
+
44
+ # Convert a UTF8 encoded Ruby string _string_ to an escaped string, encoded with
45
+ # UTF16 big endian characters as \U????, and return it.
46
+ #
47
+ # \\:: Backslash
48
+ # \':: Single quote
49
+ # \":: Double quot
50
+ # \n:: ASCII Linefeed
51
+ # \r:: ASCII Carriage Return
52
+ # \t:: ASCCII Horizontal Tab
53
+ # \uhhhh:: character in BMP with Unicode value U+hhhh
54
+ # \U00hhhhhh:: character in plane 1-16 with Unicode value U+hhhhhh
55
+ def rdf_escape
56
+ string = self + '' # XXX workaround: avoid buffer sharing
57
+ string.force_encoding(Encoding::ASCII_8BIT) if String.method_defined?(:force_encoding)
58
+ string.gsub!(/["\\\/\x0-\x1f]/) { RDF_MAP[$&] }
59
+ string.gsub!(/(
60
+ (?:
61
+ [\xc2-\xdf][\x80-\xbf] |
62
+ [\xe0-\xef][\x80-\xbf]{2} |
63
+ [\xf0-\xf4][\x80-\xbf]{3}
64
+ )+ |
65
+ [\x80-\xc1\xf5-\xff] # invalid
66
+ )/nx) { |c|
67
+ c.size == 1 and raise TypeError, "invalid utf8 byte: '#{c}'"
68
+ s = Iconv.new('utf-16be', 'utf-8').iconv(c).unpack('H*')[0].upcase
69
+ s.gsub!(/.{4}/n, '\\\\u\&')
70
+ }
71
+ string.force_encoding(Encoding::UTF_8) if String.method_defined?(:force_encoding)
72
+ string
73
+ end
74
+
75
+ # Unescape characters in strings.
76
+ RDF_UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
77
+ RDF_UNESCAPE_MAP.update({
78
+ ?" => '"',
79
+ ?\\ => '\\',
80
+ ?/ => '/',
81
+ ?b => "\b",
82
+ ?f => "\f",
83
+ ?n => "\n",
84
+ ?r => "\r",
85
+ ?t => "\t",
86
+ ?u => nil,
87
+ })
88
+
89
+ # Reverse operation of escape
90
+ # From JSON parser
91
+ def rdf_unescape
92
+ return '' if self.empty?
93
+ string = self.gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
94
+ if u = RDF_UNESCAPE_MAP[$&[1]]
95
+ u
96
+ else # \uXXXX
97
+ bytes = [c[2, 2].to_i(16), c[4, 2].to_i(16)]
98
+ Iconv.new('utf-8', 'utf-16').iconv(bytes.pack("C*"))
99
+ end
100
+ end
101
+ if string.respond_to?(:force_encoding)
102
+ string.force_encoding(Encoding::UTF_8)
103
+ end
104
+ string
105
+ rescue Iconv::Failure => e
106
+ raise RdfException, "Caught #{e.class}: #{e}"
107
+ end
108
+ end
@@ -0,0 +1,196 @@
1
+ require File.join(File.dirname(__FILE__), 'uriref')
2
+
3
+ module RdfContext
4
+ module TermUtils
5
+ TERM_INSTANTIATION_DICT = {
6
+ 'U' => URIRef,
7
+ 'B' => BNode,
8
+ #'V' => Variable,
9
+ 'L' => Literal
10
+ }
11
+
12
+ GRAPH_TERM_DICT = {
13
+ #'F' => [QuotedGraph, URIRef],
14
+ 'U' => [Graph, URIRef],
15
+ 'B' => [Graph, BNode]
16
+ }
17
+
18
+ SUBJECT = 0
19
+ PREDICATE = 1
20
+ OBJECT = 2
21
+ CONTEXT = 3
22
+
23
+ TERM_COMBINATIONS = {
24
+ 'UUUU' => 0,
25
+ 'UUUB' => 1,
26
+ 'UUUF' => 2,
27
+ 'UUVU' => 3,
28
+ 'UUVB' => 4,
29
+ 'UUVF' => 5,
30
+ 'UUBU' => 6,
31
+ 'UUBB' => 7,
32
+ 'UUBF' => 8,
33
+ 'UULU' => 9,
34
+ 'UULB' => 10,
35
+ 'UULF' => 11,
36
+ 'UUFU' => 12,
37
+ 'UUFB' => 13,
38
+ 'UUFF' => 14,
39
+
40
+ 'UVUU' => 15,
41
+ 'UVUB' => 16,
42
+ 'UVUF' => 17,
43
+ 'UVVU' => 18,
44
+ 'UVVB' => 19,
45
+ 'UVVF' => 20,
46
+ 'UVBU' => 21,
47
+ 'UVBB' => 22,
48
+ 'UVBF' => 23,
49
+ 'UVLU' => 24,
50
+ 'UVLB' => 25,
51
+ 'UVLF' => 26,
52
+ 'UVFU' => 27,
53
+ 'UVFB' => 28,
54
+ 'UVFF' => 29,
55
+
56
+ 'VUUU' => 30,
57
+ 'VUUB' => 31,
58
+ 'VUUF' => 33,
59
+ 'VUVU' => 34,
60
+ 'VUVB' => 35,
61
+ 'VUVF' => 36,
62
+ 'VUBU' => 37,
63
+ 'VUBB' => 38,
64
+ 'VUBF' => 39,
65
+ 'VULU' => 40,
66
+ 'VULB' => 41,
67
+ 'VULF' => 42,
68
+ 'VUFU' => 43,
69
+ 'VUFB' => 44,
70
+ 'VUFF' => 45,
71
+
72
+ 'VVUU' => 46,
73
+ 'VVUB' => 47,
74
+ 'VVUF' => 48,
75
+ 'VVVU' => 49,
76
+ 'VVVB' => 50,
77
+ 'VVVF' => 51,
78
+ 'VVBU' => 52,
79
+ 'VVBB' => 53,
80
+ 'VVBF' => 54,
81
+ 'VVLU' => 55,
82
+ 'VVLB' => 56,
83
+ 'VVLF' => 57,
84
+ 'VVFU' => 58,
85
+ 'VVFB' => 59,
86
+ 'VVFF' => 60,
87
+
88
+ 'BUUU' => 61,
89
+ 'BUUB' => 62,
90
+ 'BUUF' => 63,
91
+ 'BUVU' => 64,
92
+ 'BUVB' => 65,
93
+ 'BUVF' => 66,
94
+ 'BUBU' => 67,
95
+ 'BUBB' => 68,
96
+ 'BUBF' => 69,
97
+ 'BULU' => 70,
98
+ 'BULB' => 71,
99
+ 'BULF' => 72,
100
+ 'BUFU' => 73,
101
+ 'BUFB' => 74,
102
+ 'BUFF' => 75,
103
+
104
+ 'BVUU' => 76,
105
+ 'BVUB' => 77,
106
+ 'BVUF' => 78,
107
+ 'BVVU' => 79,
108
+ 'BVVB' => 80,
109
+ 'BVVF' => 81,
110
+ 'BVBU' => 82,
111
+ 'BVBB' => 83,
112
+ 'BVBF' => 84,
113
+ 'BVLU' => 85,
114
+ 'BVLB' => 86,
115
+ 'BVLF' => 87,
116
+ 'BVFU' => 88,
117
+ 'BVFB' => 89,
118
+ 'BVFF' => 90,
119
+
120
+ 'FUUU' => 91,
121
+ 'FUUB' => 92,
122
+ 'FUUF' => 93,
123
+ 'FUVU' => 94,
124
+ 'FUVB' => 95,
125
+ 'FUVF' => 96,
126
+ 'FUBU' => 97,
127
+ 'FUBB' => 98,
128
+ 'FUBF' => 99,
129
+ 'FULU' => 100,
130
+ 'FULB' => 101,
131
+ 'FULF' => 102,
132
+ 'FUFU' => 103,
133
+ 'FUFB' => 104,
134
+ 'FUFF' => 105,
135
+
136
+ 'FVUU' => 106,
137
+ 'FVUB' => 107,
138
+ 'FVUF' => 108,
139
+ 'FVVU' => 109,
140
+ 'FVVB' => 110,
141
+ 'FVVF' => 111,
142
+ 'FVBU' => 112,
143
+ 'FVBB' => 113,
144
+ 'FVBF' => 114,
145
+ 'FVLU' => 115,
146
+ 'FVLB' => 116,
147
+ 'FVLF' => 117,
148
+ 'FVFU' => 118,
149
+ 'FVFB' => 119,
150
+ 'FVFF' => 120,
151
+ }
152
+
153
+ REVERSE_TERM_COMBINATIONS = TERM_COMBINATIONS.invert
154
+
155
+ # Takes an instance of a Graph (Graph, QuotedGraph, ConjunctiveGraph)
156
+ # and returns the Graphs identifier and 'type' ('U' for Graphs, 'F' for QuotedGraphs ).
157
+ def normalizeGraph(graph)
158
+ t = #graph.is_a?(QuotedGraph) ? "F" : term2Letter(graph.identifier)
159
+ identifier = graph.respond_to?(:identifier) ? graph.identifier : graph
160
+ t = term2Letter(identifier)
161
+ [identifier, t]
162
+ end
163
+
164
+ def term2Letter(term)
165
+ case term
166
+ when URIRef then "U"
167
+ when BNode then "B"
168
+ when Literal then "L"
169
+ #when QuotedGraph then "F"
170
+ #when Variable then "V"
171
+ when Graph then term2Letter(term.identifier)
172
+ when nil then "L"
173
+ else
174
+ raise RdfException.new("The given term (#{term}) is not an instance of any of the known types (URIRef, BNode, Literal, QuotedGraph, or Graph). It is a #{term.class}")
175
+ end
176
+ end
177
+
178
+ def constructGraph(term)
179
+ GRAPH_TERM_DICT[term]
180
+ end
181
+
182
+ def type2TermCombination(member,klass,context)
183
+ key = "#{term2Letter(member)}U#{term2Letter(klass)}#{normalizeGraph(context)[1]}"
184
+ TERM_COMBINATIONS.fetch(key)
185
+ rescue IndexError
186
+ raise RdfException.new("Unable to persist classification triple: #{member.inspect}, rdf:type, #{klass.inspect}, context: #{context.inspect}, key: #{key}")
187
+ end
188
+
189
+ def statement2TermCombination(triple,context)
190
+ key = "#{term2Letter(triple.subject)}#{term2Letter(triple.predicate)}#{term2Letter(triple.object)}#{normalizeGraph(context)[1]}"
191
+ TERM_COMBINATIONS.fetch(key)
192
+ rescue IndexError
193
+ raise RdfException.new("Unable to persist triple: #{triple.inspect}, context: #{context.inspect}, key: #{key}")
194
+ end
195
+ end
196
+ end