rdf_context 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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