gkellogg-reddy 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (545) hide show
  1. data/.autotest +2 -0
  2. data/.gitignore +9 -0
  3. data/.gitmodules +3 -0
  4. data/History.txt +66 -0
  5. data/README.rdoc +107 -0
  6. data/Rakefile +96 -0
  7. data/VERSION +1 -0
  8. data/bin/reddy +59 -0
  9. data/lib/reddy.rb +62 -0
  10. data/lib/reddy/bnode.rb +101 -0
  11. data/lib/reddy/conjunctive_graph.rb +47 -0
  12. data/lib/reddy/exceptions.rb +11 -0
  13. data/lib/reddy/graph.rb +327 -0
  14. data/lib/reddy/literal.rb +340 -0
  15. data/lib/reddy/n3_grammar.rb +2171 -0
  16. data/lib/reddy/n3_grammar.treetop +143 -0
  17. data/lib/reddy/n3parser.rb +151 -0
  18. data/lib/reddy/namespace.rb +82 -0
  19. data/lib/reddy/nokogiri_hacks.rb +8 -0
  20. data/lib/reddy/parser.rb +127 -0
  21. data/lib/reddy/rdfaparser.rb +398 -0
  22. data/lib/reddy/rdfxmlparser.rb +529 -0
  23. data/lib/reddy/store/abstract_store.rb +64 -0
  24. data/lib/reddy/store/list_store.rb +61 -0
  25. data/lib/reddy/store/memory_store.rb +349 -0
  26. data/lib/reddy/string_hacks.rb +108 -0
  27. data/lib/reddy/triple.rb +144 -0
  28. data/lib/reddy/uriref.rb +95 -0
  29. data/script/console +10 -0
  30. data/spec/bnode_spec.rb +58 -0
  31. data/spec/conjunctive_graph_spec.rb +59 -0
  32. data/spec/graph_spec.rb +390 -0
  33. data/spec/literal_spec.rb +314 -0
  34. data/spec/matchers.rb +148 -0
  35. data/spec/n3parser_spec.rb +229 -0
  36. data/spec/namespaces_spec.rb +66 -0
  37. data/spec/ntriples/test.nt +78 -0
  38. data/spec/parser_spec.rb +29 -0
  39. data/spec/rdfa-triples/0001.nt +1 -0
  40. data/spec/rdfa-triples/0006.nt +2 -0
  41. data/spec/rdfa-triples/0007.nt +3 -0
  42. data/spec/rdfa-triples/0008.nt +1 -0
  43. data/spec/rdfa-triples/0009.nt +1 -0
  44. data/spec/rdfa-triples/0010.nt +2 -0
  45. data/spec/rdfa-triples/0011.nt +3 -0
  46. data/spec/rdfa-triples/0012.nt +1 -0
  47. data/spec/rdfa-triples/0013.nt +1 -0
  48. data/spec/rdfa-triples/0014.nt +1 -0
  49. data/spec/rdfa-triples/0015.nt +2 -0
  50. data/spec/rdfa-triples/0017.nt +3 -0
  51. data/spec/rdfa-triples/0018.nt +1 -0
  52. data/spec/rdfa-triples/0019.nt +1 -0
  53. data/spec/rdfa-triples/0020.nt +1 -0
  54. data/spec/rdfa-triples/0021.nt +1 -0
  55. data/spec/rdfa-triples/0023.nt +1 -0
  56. data/spec/rdfa-triples/0025.nt +2 -0
  57. data/spec/rdfa-triples/0026.nt +1 -0
  58. data/spec/rdfa-triples/0027.nt +1 -0
  59. data/spec/rdfa-triples/0029.nt +1 -0
  60. data/spec/rdfa-triples/0030.nt +1 -0
  61. data/spec/rdfa-triples/0031.nt +1 -0
  62. data/spec/rdfa-triples/0032.nt +1 -0
  63. data/spec/rdfa-triples/0033.nt +2 -0
  64. data/spec/rdfa-triples/0034.nt +1 -0
  65. data/spec/rdfa-triples/0035.nt +1 -0
  66. data/spec/rdfa-triples/0036.nt +1 -0
  67. data/spec/rdfa-triples/0037.nt +1 -0
  68. data/spec/rdfa-triples/0038.nt +1 -0
  69. data/spec/rdfa-triples/0039.nt +1 -0
  70. data/spec/rdfa-triples/0040.nt +1 -0
  71. data/spec/rdfa-triples/0041.nt +1 -0
  72. data/spec/rdfa-triples/0042.nt +0 -0
  73. data/spec/rdfa-triples/0046.nt +3 -0
  74. data/spec/rdfa-triples/0047.nt +3 -0
  75. data/spec/rdfa-triples/0048.nt +3 -0
  76. data/spec/rdfa-triples/0049.nt +2 -0
  77. data/spec/rdfa-triples/0050.nt +2 -0
  78. data/spec/rdfa-triples/0051.nt +2 -0
  79. data/spec/rdfa-triples/0052.nt +1 -0
  80. data/spec/rdfa-triples/0053.nt +2 -0
  81. data/spec/rdfa-triples/0054.nt +2 -0
  82. data/spec/rdfa-triples/0055.nt +2 -0
  83. data/spec/rdfa-triples/0056.nt +3 -0
  84. data/spec/rdfa-triples/0057.nt +4 -0
  85. data/spec/rdfa-triples/0058.nt +6 -0
  86. data/spec/rdfa-triples/0059.nt +6 -0
  87. data/spec/rdfa-triples/0060.nt +2 -0
  88. data/spec/rdfa-triples/0061.nt +1 -0
  89. data/spec/rdfa-triples/0062.nt +1 -0
  90. data/spec/rdfa-triples/0063.nt +1 -0
  91. data/spec/rdfa-triples/0064.nt +1 -0
  92. data/spec/rdfa-triples/0065.nt +3 -0
  93. data/spec/rdfa-triples/0066.nt +1 -0
  94. data/spec/rdfa-triples/0067.nt +1 -0
  95. data/spec/rdfa-triples/0068.nt +1 -0
  96. data/spec/rdfa-triples/0069.nt +1 -0
  97. data/spec/rdfa-triples/0070.nt +1 -0
  98. data/spec/rdfa-triples/0071.nt +1 -0
  99. data/spec/rdfa-triples/0072.nt +1 -0
  100. data/spec/rdfa-triples/0073.nt +1 -0
  101. data/spec/rdfa-triples/0074.nt +1 -0
  102. data/spec/rdfa-triples/0075.nt +1 -0
  103. data/spec/rdfa-triples/0076.nt +23 -0
  104. data/spec/rdfa-triples/0077.nt +23 -0
  105. data/spec/rdfa-triples/0078.nt +6 -0
  106. data/spec/rdfa-triples/0079.nt +3 -0
  107. data/spec/rdfa-triples/0080.nt +1 -0
  108. data/spec/rdfa-triples/0081.nt +6 -0
  109. data/spec/rdfa-triples/0082.nt +8 -0
  110. data/spec/rdfa-triples/0083.nt +6 -0
  111. data/spec/rdfa-triples/0084.nt +8 -0
  112. data/spec/rdfa-triples/0085.nt +4 -0
  113. data/spec/rdfa-triples/0086.nt +0 -0
  114. data/spec/rdfa-triples/0087.nt +23 -0
  115. data/spec/rdfa-triples/0088.nt +3 -0
  116. data/spec/rdfa-triples/0089.nt +1 -0
  117. data/spec/rdfa-triples/0090.nt +1 -0
  118. data/spec/rdfa-triples/0091.nt +3 -0
  119. data/spec/rdfa-triples/0092.nt +3 -0
  120. data/spec/rdfa-triples/0093.nt +2 -0
  121. data/spec/rdfa-triples/0094.nt +3 -0
  122. data/spec/rdfa-triples/0099.nt +1 -0
  123. data/spec/rdfa-triples/0100.nt +3 -0
  124. data/spec/rdfa-triples/0101.nt +3 -0
  125. data/spec/rdfa-triples/0102.nt +1 -0
  126. data/spec/rdfa-triples/0103.nt +1 -0
  127. data/spec/rdfa-triples/0104.nt +3 -0
  128. data/spec/rdfa-triples/0105.nt +1 -0
  129. data/spec/rdfa-triples/0106.nt +1 -0
  130. data/spec/rdfa-triples/0107.nt +0 -0
  131. data/spec/rdfa-triples/0108.nt +1 -0
  132. data/spec/rdfa-triples/0109.nt +1 -0
  133. data/spec/rdfa-triples/0110.nt +1 -0
  134. data/spec/rdfa-triples/0111.nt +2 -0
  135. data/spec/rdfa-triples/0112.nt +1 -0
  136. data/spec/rdfa-triples/0113.nt +2 -0
  137. data/spec/rdfa-triples/0114.nt +3 -0
  138. data/spec/rdfa-triples/0115.nt +4 -0
  139. data/spec/rdfa-triples/0116.nt +2 -0
  140. data/spec/rdfa-triples/0117.nt +2 -0
  141. data/spec/rdfa-triples/0118.nt +1 -0
  142. data/spec/rdfa-triples/0119.nt +1 -0
  143. data/spec/rdfa-triples/0120.nt +1 -0
  144. data/spec/rdfa-triples/0121.nt +2 -0
  145. data/spec/rdfa-triples/0122.nt +1 -0
  146. data/spec/rdfa-triples/0123.nt +3 -0
  147. data/spec/rdfa-triples/0124.nt +4 -0
  148. data/spec/rdfa-triples/0125.nt +1 -0
  149. data/spec/rdfa-triples/0126.nt +3 -0
  150. data/spec/rdfa-triples/1001.nt +6 -0
  151. data/spec/rdfa_helper.rb +189 -0
  152. data/spec/rdfa_parser_spec.rb +130 -0
  153. data/spec/rdfcore/Manifest.rdf +5395 -0
  154. data/spec/rdfcore/amp-in-url/test001.nt +16 -0
  155. data/spec/rdfcore/amp-in-url/test001.rdf +40 -0
  156. data/spec/rdfcore/datatypes-intensional/test001.nt +18 -0
  157. data/spec/rdfcore/datatypes-intensional/test002.nt +18 -0
  158. data/spec/rdfcore/datatypes/test001.nt +15 -0
  159. data/spec/rdfcore/datatypes/test001.rdf +29 -0
  160. data/spec/rdfcore/datatypes/test002.nt +14 -0
  161. data/spec/rdfcore/datatypes/test002.rdf +27 -0
  162. data/spec/rdfcore/datatypes/test002b.nt +17 -0
  163. data/spec/rdfcore/datatypes/test003a.nt +16 -0
  164. data/spec/rdfcore/datatypes/test003b.nt +16 -0
  165. data/spec/rdfcore/datatypes/test005a.nt +16 -0
  166. data/spec/rdfcore/datatypes/test005b.nt +16 -0
  167. data/spec/rdfcore/datatypes/test006.nt +17 -0
  168. data/spec/rdfcore/datatypes/test008a.nt +15 -0
  169. data/spec/rdfcore/datatypes/test008b.nt +15 -0
  170. data/spec/rdfcore/datatypes/test009a.nt +15 -0
  171. data/spec/rdfcore/datatypes/test009b.nt +15 -0
  172. data/spec/rdfcore/datatypes/test010.nt +17 -0
  173. data/spec/rdfcore/datatypes/test011a.nt +17 -0
  174. data/spec/rdfcore/datatypes/test011b.nt +17 -0
  175. data/spec/rdfcore/horst-01/test001.rdf +38 -0
  176. data/spec/rdfcore/horst-01/test002.rdf +39 -0
  177. data/spec/rdfcore/horst-01/test003.rdf +40 -0
  178. data/spec/rdfcore/horst-01/test004.rdf +42 -0
  179. data/spec/rdfcore/pfps-10/test001a.nt +14 -0
  180. data/spec/rdfcore/pfps-10/test001b.nt +15 -0
  181. data/spec/rdfcore/rdf-charmod-literals/test001.nt +15 -0
  182. data/spec/rdfcore/rdf-charmod-literals/test001.rdf +34 -0
  183. data/spec/rdfcore/rdf-charmod-uris/test001.nt +14 -0
  184. data/spec/rdfcore/rdf-charmod-uris/test001.rdf +34 -0
  185. data/spec/rdfcore/rdf-charmod-uris/test002.nt +15 -0
  186. data/spec/rdfcore/rdf-charmod-uris/test002.rdf +33 -0
  187. data/spec/rdfcore/rdf-containers-syntax-vs-schema/error001.rdf +27 -0
  188. data/spec/rdfcore/rdf-containers-syntax-vs-schema/error002.rdf +34 -0
  189. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test001.nt +17 -0
  190. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test001.rdf +27 -0
  191. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test002.nt +19 -0
  192. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test002.rdf +37 -0
  193. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test003.nt +18 -0
  194. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test003.rdf +29 -0
  195. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test004.nt +29 -0
  196. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test004.rdf +33 -0
  197. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test006.nt +40 -0
  198. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test006.rdf +28 -0
  199. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test007.nt +20 -0
  200. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test007.rdf +32 -0
  201. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test008.nt +15 -0
  202. data/spec/rdfcore/rdf-containers-syntax-vs-schema/test008.rdf +28 -0
  203. data/spec/rdfcore/rdf-element-not-mandatory/test001.nt +10 -0
  204. data/spec/rdfcore/rdf-element-not-mandatory/test001.rdf +14 -0
  205. data/spec/rdfcore/rdf-ns-prefix-confusion/test0001.nt +14 -0
  206. data/spec/rdfcore/rdf-ns-prefix-confusion/test0001.rdf +35 -0
  207. data/spec/rdfcore/rdf-ns-prefix-confusion/test0003.nt +14 -0
  208. data/spec/rdfcore/rdf-ns-prefix-confusion/test0003.rdf +35 -0
  209. data/spec/rdfcore/rdf-ns-prefix-confusion/test0004.nt +14 -0
  210. data/spec/rdfcore/rdf-ns-prefix-confusion/test0004.rdf +34 -0
  211. data/spec/rdfcore/rdf-ns-prefix-confusion/test0005.nt +15 -0
  212. data/spec/rdfcore/rdf-ns-prefix-confusion/test0005.rdf +40 -0
  213. data/spec/rdfcore/rdf-ns-prefix-confusion/test0006.nt +14 -0
  214. data/spec/rdfcore/rdf-ns-prefix-confusion/test0006.rdf +32 -0
  215. data/spec/rdfcore/rdf-ns-prefix-confusion/test0009.nt +14 -0
  216. data/spec/rdfcore/rdf-ns-prefix-confusion/test0009.rdf +32 -0
  217. data/spec/rdfcore/rdf-ns-prefix-confusion/test0010.nt +14 -0
  218. data/spec/rdfcore/rdf-ns-prefix-confusion/test0010.rdf +38 -0
  219. data/spec/rdfcore/rdf-ns-prefix-confusion/test0011.nt +15 -0
  220. data/spec/rdfcore/rdf-ns-prefix-confusion/test0011.rdf +40 -0
  221. data/spec/rdfcore/rdf-ns-prefix-confusion/test0012.nt +15 -0
  222. data/spec/rdfcore/rdf-ns-prefix-confusion/test0012.rdf +40 -0
  223. data/spec/rdfcore/rdf-ns-prefix-confusion/test0013.nt +15 -0
  224. data/spec/rdfcore/rdf-ns-prefix-confusion/test0013.rdf +40 -0
  225. data/spec/rdfcore/rdf-ns-prefix-confusion/test0014.nt +15 -0
  226. data/spec/rdfcore/rdf-ns-prefix-confusion/test0014.rdf +42 -0
  227. data/spec/rdfcore/rdfms-abouteach/error001.rdf +35 -0
  228. data/spec/rdfcore/rdfms-abouteach/error002.rdf +35 -0
  229. data/spec/rdfcore/rdfms-difference-between-ID-and-about/error1.rdf +25 -0
  230. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test1.nt +14 -0
  231. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test1.rdf +22 -0
  232. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test2.nt +14 -0
  233. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test2.rdf +22 -0
  234. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test3.nt +14 -0
  235. data/spec/rdfcore/rdfms-difference-between-ID-and-about/test3.rdf +22 -0
  236. data/spec/rdfcore/rdfms-duplicate-member-props/test001.nt +17 -0
  237. data/spec/rdfcore/rdfms-duplicate-member-props/test001.rdf +30 -0
  238. data/spec/rdfcore/rdfms-empty-property-elements/error001.rdf +33 -0
  239. data/spec/rdfcore/rdfms-empty-property-elements/error002.rdf +33 -0
  240. data/spec/rdfcore/rdfms-empty-property-elements/error003.rdf +39 -0
  241. data/spec/rdfcore/rdfms-empty-property-elements/test001.nt +14 -0
  242. data/spec/rdfcore/rdfms-empty-property-elements/test001.rdf +33 -0
  243. data/spec/rdfcore/rdfms-empty-property-elements/test002.nt +14 -0
  244. data/spec/rdfcore/rdfms-empty-property-elements/test002.rdf +31 -0
  245. data/spec/rdfcore/rdfms-empty-property-elements/test003.nt +14 -0
  246. data/spec/rdfcore/rdfms-empty-property-elements/test003.rdf +32 -0
  247. data/spec/rdfcore/rdfms-empty-property-elements/test004.nt +14 -0
  248. data/spec/rdfcore/rdfms-empty-property-elements/test004.rdf +32 -0
  249. data/spec/rdfcore/rdfms-empty-property-elements/test005.nt +18 -0
  250. data/spec/rdfcore/rdfms-empty-property-elements/test005.rdf +32 -0
  251. data/spec/rdfcore/rdfms-empty-property-elements/test006.nt +18 -0
  252. data/spec/rdfcore/rdfms-empty-property-elements/test006.rdf +32 -0
  253. data/spec/rdfcore/rdfms-empty-property-elements/test007.nt +14 -0
  254. data/spec/rdfcore/rdfms-empty-property-elements/test007.rdf +32 -0
  255. data/spec/rdfcore/rdfms-empty-property-elements/test008.nt +14 -0
  256. data/spec/rdfcore/rdfms-empty-property-elements/test008.rdf +31 -0
  257. data/spec/rdfcore/rdfms-empty-property-elements/test009.nt +14 -0
  258. data/spec/rdfcore/rdfms-empty-property-elements/test009.rdf +32 -0
  259. data/spec/rdfcore/rdfms-empty-property-elements/test010.nt +14 -0
  260. data/spec/rdfcore/rdfms-empty-property-elements/test010.rdf +31 -0
  261. data/spec/rdfcore/rdfms-empty-property-elements/test011.nt +18 -0
  262. data/spec/rdfcore/rdfms-empty-property-elements/test011.rdf +30 -0
  263. data/spec/rdfcore/rdfms-empty-property-elements/test012.nt +18 -0
  264. data/spec/rdfcore/rdfms-empty-property-elements/test012.rdf +30 -0
  265. data/spec/rdfcore/rdfms-empty-property-elements/test013.nt +15 -0
  266. data/spec/rdfcore/rdfms-empty-property-elements/test013.rdf +35 -0
  267. data/spec/rdfcore/rdfms-empty-property-elements/test014.nt +15 -0
  268. data/spec/rdfcore/rdfms-empty-property-elements/test014.rdf +34 -0
  269. data/spec/rdfcore/rdfms-empty-property-elements/test015.nt +15 -0
  270. data/spec/rdfcore/rdfms-empty-property-elements/test015.rdf +38 -0
  271. data/spec/rdfcore/rdfms-empty-property-elements/test016.nt +14 -0
  272. data/spec/rdfcore/rdfms-empty-property-elements/test016.rdf +31 -0
  273. data/spec/rdfcore/rdfms-empty-property-elements/test017.nt +14 -0
  274. data/spec/rdfcore/rdfms-empty-property-elements/test017.rdf +38 -0
  275. data/spec/rdfcore/rdfms-identity-anon-resources/test001.nt +14 -0
  276. data/spec/rdfcore/rdfms-identity-anon-resources/test001.rdf +33 -0
  277. data/spec/rdfcore/rdfms-identity-anon-resources/test002.nt +15 -0
  278. data/spec/rdfcore/rdfms-identity-anon-resources/test002.rdf +33 -0
  279. data/spec/rdfcore/rdfms-identity-anon-resources/test003.nt +14 -0
  280. data/spec/rdfcore/rdfms-identity-anon-resources/test003.rdf +31 -0
  281. data/spec/rdfcore/rdfms-identity-anon-resources/test004.nt +15 -0
  282. data/spec/rdfcore/rdfms-identity-anon-resources/test004.rdf +33 -0
  283. data/spec/rdfcore/rdfms-identity-anon-resources/test005.nt +14 -0
  284. data/spec/rdfcore/rdfms-identity-anon-resources/test005.rdf +31 -0
  285. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test001.nt +19 -0
  286. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test001.rdf +29 -0
  287. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test002.nt +15 -0
  288. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test002.rdf +29 -0
  289. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test004.nt +18 -0
  290. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test004.rdf +29 -0
  291. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test005.nt +19 -0
  292. data/spec/rdfcore/rdfms-not-id-and-resource-attr/test005.rdf +29 -0
  293. data/spec/rdfcore/rdfms-para196/test001.nt +17 -0
  294. data/spec/rdfcore/rdfms-para196/test001.rdf +35 -0
  295. data/spec/rdfcore/rdfms-rdf-id/error001.rdf +26 -0
  296. data/spec/rdfcore/rdfms-rdf-id/error002.rdf +26 -0
  297. data/spec/rdfcore/rdfms-rdf-id/error003.rdf +29 -0
  298. data/spec/rdfcore/rdfms-rdf-id/error004.rdf +27 -0
  299. data/spec/rdfcore/rdfms-rdf-id/error005.rdf +31 -0
  300. data/spec/rdfcore/rdfms-rdf-id/error006.rdf +26 -0
  301. data/spec/rdfcore/rdfms-rdf-id/error007.rdf +29 -0
  302. data/spec/rdfcore/rdfms-rdf-names-use/error-001.rdf +23 -0
  303. data/spec/rdfcore/rdfms-rdf-names-use/error-002.rdf +23 -0
  304. data/spec/rdfcore/rdfms-rdf-names-use/error-003.rdf +23 -0
  305. data/spec/rdfcore/rdfms-rdf-names-use/error-004.rdf +23 -0
  306. data/spec/rdfcore/rdfms-rdf-names-use/error-005.rdf +23 -0
  307. data/spec/rdfcore/rdfms-rdf-names-use/error-006.rdf +23 -0
  308. data/spec/rdfcore/rdfms-rdf-names-use/error-007.rdf +23 -0
  309. data/spec/rdfcore/rdfms-rdf-names-use/error-008.rdf +23 -0
  310. data/spec/rdfcore/rdfms-rdf-names-use/error-009.rdf +23 -0
  311. data/spec/rdfcore/rdfms-rdf-names-use/error-010.rdf +23 -0
  312. data/spec/rdfcore/rdfms-rdf-names-use/error-011.rdf +25 -0
  313. data/spec/rdfcore/rdfms-rdf-names-use/error-012.rdf +25 -0
  314. data/spec/rdfcore/rdfms-rdf-names-use/error-013.rdf +25 -0
  315. data/spec/rdfcore/rdfms-rdf-names-use/error-014.rdf +25 -0
  316. data/spec/rdfcore/rdfms-rdf-names-use/error-015.rdf +25 -0
  317. data/spec/rdfcore/rdfms-rdf-names-use/error-016.rdf +25 -0
  318. data/spec/rdfcore/rdfms-rdf-names-use/error-017.rdf +25 -0
  319. data/spec/rdfcore/rdfms-rdf-names-use/error-018.rdf +25 -0
  320. data/spec/rdfcore/rdfms-rdf-names-use/error-019.rdf +25 -0
  321. data/spec/rdfcore/rdfms-rdf-names-use/error-020.rdf +25 -0
  322. data/spec/rdfcore/rdfms-rdf-names-use/test-001.nt +1 -0
  323. data/spec/rdfcore/rdfms-rdf-names-use/test-001.rdf +23 -0
  324. data/spec/rdfcore/rdfms-rdf-names-use/test-002.nt +1 -0
  325. data/spec/rdfcore/rdfms-rdf-names-use/test-002.rdf +23 -0
  326. data/spec/rdfcore/rdfms-rdf-names-use/test-003.nt +1 -0
  327. data/spec/rdfcore/rdfms-rdf-names-use/test-003.rdf +23 -0
  328. data/spec/rdfcore/rdfms-rdf-names-use/test-004.nt +1 -0
  329. data/spec/rdfcore/rdfms-rdf-names-use/test-004.rdf +23 -0
  330. data/spec/rdfcore/rdfms-rdf-names-use/test-005.nt +1 -0
  331. data/spec/rdfcore/rdfms-rdf-names-use/test-005.rdf +23 -0
  332. data/spec/rdfcore/rdfms-rdf-names-use/test-006.nt +1 -0
  333. data/spec/rdfcore/rdfms-rdf-names-use/test-006.rdf +23 -0
  334. data/spec/rdfcore/rdfms-rdf-names-use/test-007.nt +1 -0
  335. data/spec/rdfcore/rdfms-rdf-names-use/test-007.rdf +23 -0
  336. data/spec/rdfcore/rdfms-rdf-names-use/test-008.nt +1 -0
  337. data/spec/rdfcore/rdfms-rdf-names-use/test-008.rdf +23 -0
  338. data/spec/rdfcore/rdfms-rdf-names-use/test-009.nt +1 -0
  339. data/spec/rdfcore/rdfms-rdf-names-use/test-009.rdf +23 -0
  340. data/spec/rdfcore/rdfms-rdf-names-use/test-010.nt +1 -0
  341. data/spec/rdfcore/rdfms-rdf-names-use/test-010.rdf +23 -0
  342. data/spec/rdfcore/rdfms-rdf-names-use/test-011.nt +1 -0
  343. data/spec/rdfcore/rdfms-rdf-names-use/test-011.rdf +23 -0
  344. data/spec/rdfcore/rdfms-rdf-names-use/test-012.nt +1 -0
  345. data/spec/rdfcore/rdfms-rdf-names-use/test-012.rdf +23 -0
  346. data/spec/rdfcore/rdfms-rdf-names-use/test-013.nt +1 -0
  347. data/spec/rdfcore/rdfms-rdf-names-use/test-013.rdf +23 -0
  348. data/spec/rdfcore/rdfms-rdf-names-use/test-014.nt +1 -0
  349. data/spec/rdfcore/rdfms-rdf-names-use/test-014.rdf +23 -0
  350. data/spec/rdfcore/rdfms-rdf-names-use/test-015.nt +1 -0
  351. data/spec/rdfcore/rdfms-rdf-names-use/test-015.rdf +23 -0
  352. data/spec/rdfcore/rdfms-rdf-names-use/test-016.nt +1 -0
  353. data/spec/rdfcore/rdfms-rdf-names-use/test-016.rdf +23 -0
  354. data/spec/rdfcore/rdfms-rdf-names-use/test-017.nt +1 -0
  355. data/spec/rdfcore/rdfms-rdf-names-use/test-017.rdf +25 -0
  356. data/spec/rdfcore/rdfms-rdf-names-use/test-018.nt +1 -0
  357. data/spec/rdfcore/rdfms-rdf-names-use/test-018.rdf +25 -0
  358. data/spec/rdfcore/rdfms-rdf-names-use/test-019.nt +1 -0
  359. data/spec/rdfcore/rdfms-rdf-names-use/test-019.rdf +25 -0
  360. data/spec/rdfcore/rdfms-rdf-names-use/test-020.nt +1 -0
  361. data/spec/rdfcore/rdfms-rdf-names-use/test-020.rdf +25 -0
  362. data/spec/rdfcore/rdfms-rdf-names-use/test-021.nt +1 -0
  363. data/spec/rdfcore/rdfms-rdf-names-use/test-021.rdf +25 -0
  364. data/spec/rdfcore/rdfms-rdf-names-use/test-022.nt +1 -0
  365. data/spec/rdfcore/rdfms-rdf-names-use/test-022.rdf +25 -0
  366. data/spec/rdfcore/rdfms-rdf-names-use/test-023.nt +1 -0
  367. data/spec/rdfcore/rdfms-rdf-names-use/test-023.rdf +25 -0
  368. data/spec/rdfcore/rdfms-rdf-names-use/test-024.nt +1 -0
  369. data/spec/rdfcore/rdfms-rdf-names-use/test-024.rdf +25 -0
  370. data/spec/rdfcore/rdfms-rdf-names-use/test-025.nt +1 -0
  371. data/spec/rdfcore/rdfms-rdf-names-use/test-025.rdf +25 -0
  372. data/spec/rdfcore/rdfms-rdf-names-use/test-026.nt +1 -0
  373. data/spec/rdfcore/rdfms-rdf-names-use/test-026.rdf +25 -0
  374. data/spec/rdfcore/rdfms-rdf-names-use/test-027.nt +1 -0
  375. data/spec/rdfcore/rdfms-rdf-names-use/test-027.rdf +25 -0
  376. data/spec/rdfcore/rdfms-rdf-names-use/test-028.nt +1 -0
  377. data/spec/rdfcore/rdfms-rdf-names-use/test-028.rdf +25 -0
  378. data/spec/rdfcore/rdfms-rdf-names-use/test-029.nt +1 -0
  379. data/spec/rdfcore/rdfms-rdf-names-use/test-029.rdf +25 -0
  380. data/spec/rdfcore/rdfms-rdf-names-use/test-030.nt +1 -0
  381. data/spec/rdfcore/rdfms-rdf-names-use/test-030.rdf +25 -0
  382. data/spec/rdfcore/rdfms-rdf-names-use/test-031.nt +1 -0
  383. data/spec/rdfcore/rdfms-rdf-names-use/test-031.rdf +25 -0
  384. data/spec/rdfcore/rdfms-rdf-names-use/test-032.nt +1 -0
  385. data/spec/rdfcore/rdfms-rdf-names-use/test-032.rdf +24 -0
  386. data/spec/rdfcore/rdfms-rdf-names-use/test-033.nt +1 -0
  387. data/spec/rdfcore/rdfms-rdf-names-use/test-033.rdf +24 -0
  388. data/spec/rdfcore/rdfms-rdf-names-use/test-034.nt +1 -0
  389. data/spec/rdfcore/rdfms-rdf-names-use/test-034.rdf +24 -0
  390. data/spec/rdfcore/rdfms-rdf-names-use/test-035.nt +1 -0
  391. data/spec/rdfcore/rdfms-rdf-names-use/test-035.rdf +24 -0
  392. data/spec/rdfcore/rdfms-rdf-names-use/test-036.nt +1 -0
  393. data/spec/rdfcore/rdfms-rdf-names-use/test-036.rdf +24 -0
  394. data/spec/rdfcore/rdfms-rdf-names-use/test-037.nt +1 -0
  395. data/spec/rdfcore/rdfms-rdf-names-use/test-037.rdf +24 -0
  396. data/spec/rdfcore/rdfms-rdf-names-use/warn-001.nt +1 -0
  397. data/spec/rdfcore/rdfms-rdf-names-use/warn-001.rdf +23 -0
  398. data/spec/rdfcore/rdfms-rdf-names-use/warn-002.nt +1 -0
  399. data/spec/rdfcore/rdfms-rdf-names-use/warn-002.rdf +25 -0
  400. data/spec/rdfcore/rdfms-rdf-names-use/warn-003.nt +1 -0
  401. data/spec/rdfcore/rdfms-rdf-names-use/warn-003.rdf +24 -0
  402. data/spec/rdfcore/rdfms-reification-required/test001.nt +15 -0
  403. data/spec/rdfcore/rdfms-reification-required/test001.rdf +29 -0
  404. data/spec/rdfcore/rdfms-seq-representation/empty.nt +13 -0
  405. data/spec/rdfcore/rdfms-seq-representation/test001.nt +19 -0
  406. data/spec/rdfcore/rdfms-seq-representation/test001.rdf +33 -0
  407. data/spec/rdfcore/rdfms-seq-representation/test002.nt +14 -0
  408. data/spec/rdfcore/rdfms-seq-representation/test003a.nt +14 -0
  409. data/spec/rdfcore/rdfms-seq-representation/test003b.nt +14 -0
  410. data/spec/rdfcore/rdfms-seq-representation/test004.nt +14 -0
  411. data/spec/rdfcore/rdfms-syntax-incomplete/error001.rdf +26 -0
  412. data/spec/rdfcore/rdfms-syntax-incomplete/error002.rdf +26 -0
  413. data/spec/rdfcore/rdfms-syntax-incomplete/error003.rdf +29 -0
  414. data/spec/rdfcore/rdfms-syntax-incomplete/error004.rdf +25 -0
  415. data/spec/rdfcore/rdfms-syntax-incomplete/error005.rdf +25 -0
  416. data/spec/rdfcore/rdfms-syntax-incomplete/error006.rdf +28 -0
  417. data/spec/rdfcore/rdfms-syntax-incomplete/test001.nt +14 -0
  418. data/spec/rdfcore/rdfms-syntax-incomplete/test001.rdf +28 -0
  419. data/spec/rdfcore/rdfms-syntax-incomplete/test002.nt +19 -0
  420. data/spec/rdfcore/rdfms-syntax-incomplete/test002.rdf +38 -0
  421. data/spec/rdfcore/rdfms-syntax-incomplete/test003.nt +17 -0
  422. data/spec/rdfcore/rdfms-syntax-incomplete/test003.rdf +28 -0
  423. data/spec/rdfcore/rdfms-syntax-incomplete/test004.nt +21 -0
  424. data/spec/rdfcore/rdfms-syntax-incomplete/test004.rdf +36 -0
  425. data/spec/rdfcore/rdfms-uri-substructure/error001.nt +18 -0
  426. data/spec/rdfcore/rdfms-uri-substructure/test001.nt +17 -0
  427. data/spec/rdfcore/rdfms-uri-substructure/test001.rdf +29 -0
  428. data/spec/rdfcore/rdfms-xml-literal-namespaces/test001.nt +13 -0
  429. data/spec/rdfcore/rdfms-xml-literal-namespaces/test001.rdf +33 -0
  430. data/spec/rdfcore/rdfms-xml-literal-namespaces/test002.nt +14 -0
  431. data/spec/rdfcore/rdfms-xml-literal-namespaces/test002.rdf +47 -0
  432. data/spec/rdfcore/rdfms-xmllang/test001.nt +14 -0
  433. data/spec/rdfcore/rdfms-xmllang/test001.rdf +30 -0
  434. data/spec/rdfcore/rdfms-xmllang/test002.nt +14 -0
  435. data/spec/rdfcore/rdfms-xmllang/test002.rdf +29 -0
  436. data/spec/rdfcore/rdfms-xmllang/test003.nt +14 -0
  437. data/spec/rdfcore/rdfms-xmllang/test003.rdf +28 -0
  438. data/spec/rdfcore/rdfms-xmllang/test004.nt +14 -0
  439. data/spec/rdfcore/rdfms-xmllang/test004.rdf +28 -0
  440. data/spec/rdfcore/rdfms-xmllang/test005.nt +14 -0
  441. data/spec/rdfcore/rdfms-xmllang/test005.rdf +28 -0
  442. data/spec/rdfcore/rdfms-xmllang/test006.nt +14 -0
  443. data/spec/rdfcore/rdfms-xmllang/test006.rdf +29 -0
  444. data/spec/rdfcore/rdfms-xmllang/test007a.nt +14 -0
  445. data/spec/rdfcore/rdfms-xmllang/test007b.nt +14 -0
  446. data/spec/rdfcore/rdfms-xmllang/test007c.nt +14 -0
  447. data/spec/rdfcore/rdfs-container-membership-superProperty/not1C.rdf +13 -0
  448. data/spec/rdfcore/rdfs-container-membership-superProperty/not1P.rdf +14 -0
  449. data/spec/rdfcore/rdfs-domain-and-range/nonconclusions005.rdf +28 -0
  450. data/spec/rdfcore/rdfs-domain-and-range/nonconclusions006.rdf +28 -0
  451. data/spec/rdfcore/rdfs-domain-and-range/premises005.rdf +32 -0
  452. data/spec/rdfcore/rdfs-domain-and-range/premises006.rdf +32 -0
  453. data/spec/rdfcore/rdfs-domain-and-range/test001.nt +16 -0
  454. data/spec/rdfcore/rdfs-domain-and-range/test001.rdf +29 -0
  455. data/spec/rdfcore/rdfs-domain-and-range/test002.nt +16 -0
  456. data/spec/rdfcore/rdfs-domain-and-range/test002.rdf +29 -0
  457. data/spec/rdfcore/rdfs-entailment/test001.nt +16 -0
  458. data/spec/rdfcore/rdfs-entailment/test002.nt +15 -0
  459. data/spec/rdfcore/rdfs-no-cycles-in-subClassOf/test001.nt +18 -0
  460. data/spec/rdfcore/rdfs-no-cycles-in-subClassOf/test001.rdf +37 -0
  461. data/spec/rdfcore/rdfs-no-cycles-in-subPropertyOf/test001.nt +18 -0
  462. data/spec/rdfcore/rdfs-no-cycles-in-subPropertyOf/test001.rdf +40 -0
  463. data/spec/rdfcore/rdfs-subClassOf-a-Property/test001.nt +15 -0
  464. data/spec/rdfcore/rdfs-subPropertyOf-semantics/test001.nt +24 -0
  465. data/spec/rdfcore/rdfs-subPropertyOf-semantics/test002.nt +21 -0
  466. data/spec/rdfcore/statement-entailment/test001a.nt +12 -0
  467. data/spec/rdfcore/statement-entailment/test001b.nt +2 -0
  468. data/spec/rdfcore/statement-entailment/test002a.nt +2 -0
  469. data/spec/rdfcore/statement-entailment/test002b.nt +5 -0
  470. data/spec/rdfcore/tex-01/test001.rdf +34 -0
  471. data/spec/rdfcore/tex-01/test002.rdf +33 -0
  472. data/spec/rdfcore/unrecognised-xml-attributes/test001.nt +15 -0
  473. data/spec/rdfcore/unrecognised-xml-attributes/test001.rdf +31 -0
  474. data/spec/rdfcore/unrecognised-xml-attributes/test002.nt +14 -0
  475. data/spec/rdfcore/unrecognised-xml-attributes/test002.rdf +32 -0
  476. data/spec/rdfcore/xml-canon/test001.nt +16 -0
  477. data/spec/rdfcore/xml-canon/test001.rdf +28 -0
  478. data/spec/rdfcore/xmlbase/test001.nt +14 -0
  479. data/spec/rdfcore/xmlbase/test001.rdf +27 -0
  480. data/spec/rdfcore/xmlbase/test002.nt +14 -0
  481. data/spec/rdfcore/xmlbase/test002.rdf +28 -0
  482. data/spec/rdfcore/xmlbase/test003.nt +14 -0
  483. data/spec/rdfcore/xmlbase/test003.rdf +25 -0
  484. data/spec/rdfcore/xmlbase/test004.nt +18 -0
  485. data/spec/rdfcore/xmlbase/test004.rdf +27 -0
  486. data/spec/rdfcore/xmlbase/test006.nt +15 -0
  487. data/spec/rdfcore/xmlbase/test006.rdf +26 -0
  488. data/spec/rdfcore/xmlbase/test007.nt +14 -0
  489. data/spec/rdfcore/xmlbase/test007.rdf +25 -0
  490. data/spec/rdfcore/xmlbase/test008.nt +14 -0
  491. data/spec/rdfcore/xmlbase/test008.rdf +25 -0
  492. data/spec/rdfcore/xmlbase/test009.nt +14 -0
  493. data/spec/rdfcore/xmlbase/test009.rdf +26 -0
  494. data/spec/rdfcore/xmlbase/test010.nt +14 -0
  495. data/spec/rdfcore/xmlbase/test010.rdf +26 -0
  496. data/spec/rdfcore/xmlbase/test011.nt +14 -0
  497. data/spec/rdfcore/xmlbase/test011.rdf +27 -0
  498. data/spec/rdfcore/xmlbase/test013.nt +15 -0
  499. data/spec/rdfcore/xmlbase/test013.rdf +28 -0
  500. data/spec/rdfcore/xmlbase/test014.nt +15 -0
  501. data/spec/rdfcore/xmlbase/test014.rdf +28 -0
  502. data/spec/rdfcore/xmlsch-02/test001.rdf +34 -0
  503. data/spec/rdfcore/xmlsch-02/test002.rdf +34 -0
  504. data/spec/rdfcore/xmlsch-02/test003.rdf +37 -0
  505. data/spec/rdfcore_helper.rb +137 -0
  506. data/spec/rdfxml_spec.rb +349 -0
  507. data/spec/spec.opts +1 -0
  508. data/spec/spec_helper.rb +23 -0
  509. data/spec/store_spec.rb +205 -0
  510. data/spec/string_hacks_spec.rb +21 -0
  511. data/spec/triple_spec.rb +172 -0
  512. data/spec/uriref_spec.rb +117 -0
  513. data/test/longtests_spec.rb +25 -0
  514. data/test/n3_tests/lcsh/sh85062913.n3 +41 -0
  515. data/test/n3_tests/lcsh/sh85062913.nt +21 -0
  516. data/test/n3_tests/lcsh/sh85082139.n3 +157 -0
  517. data/test/n3_tests/lcsh/sh85082139.nt +79 -0
  518. data/test/n3_tests/lcsh/sh85118553.n3 +123 -0
  519. data/test/n3_tests/lcsh/sh85118553.nt +63 -0
  520. data/test/n3_tests/misc/on_now-01.n3 +30 -0
  521. data/test/n3_tests/misc/on_now-01.nt +15 -0
  522. data/test/n3_tests/n3p/simple-01.n3 +1 -0
  523. data/test/n3_tests/n3p/simple-01.nt +0 -0
  524. data/test/n3_tests/n3p/simple-02.n3 +4 -0
  525. data/test/n3_tests/n3p/simple-02.nt +0 -0
  526. data/test/n3_tests/n3p/simple-03.n3 +5 -0
  527. data/test/n3_tests/n3p/simple-03.nt +1 -0
  528. data/test/n3_tests/n3p/simple-04.n3 +6 -0
  529. data/test/n3_tests/n3p/simple-04.nt +3 -0
  530. data/test/n3_tests/n3p/simple-05.n3 +7 -0
  531. data/test/n3_tests/n3p/simple-05.nt +2 -0
  532. data/test/n3_tests/n3p/simple-06.n3 +6 -0
  533. data/test/n3_tests/n3p/simple-06.nt +4 -0
  534. data/test/n3_tests/n3p/simple-07.n3 +7 -0
  535. data/test/n3_tests/n3p/simple-07.nt +6 -0
  536. data/test/perf_test/test.rb +11 -0
  537. data/test/perf_test/tommorris.rdf +2267 -0
  538. data/test/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.nt +24 -0
  539. data/test/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.rdf +46 -0
  540. data/test/rdf_tests/tm_001.nt +1 -0
  541. data/test/rdf_tests/tm_001.rdf +7 -0
  542. data/test/rdf_tests/xml-literal-mixed.nt +7 -0
  543. data/test/rdf_tests/xml-literal-mixed.rdf +15 -0
  544. data/test/xml.rdf +6 -0
  545. metadata +698 -0
@@ -0,0 +1,390 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe "Graphs" do
4
+ before(:all) do
5
+ @ex = Namespace.new("http://example.org/", "ex")
6
+ @foaf = Namespace.new("http://xmlns.com/foaf/0.1/", "foaf")
7
+ @bn_ctx = {}
8
+ end
9
+
10
+ subject { Graph.new(:store => ListStore.new) }
11
+ it "should allow you to add one or more triples" do
12
+ lambda do
13
+ subject.add_triple(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new)
14
+ end.should_not raise_error
15
+ end
16
+
17
+ it "should support << as an alias for add_triple" do
18
+ lambda do
19
+ subject << Triple.new(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new)
20
+ end.should_not raise_error
21
+ subject.size.should == 1
22
+ end
23
+
24
+ it "should return bnode subjects" do
25
+ bn = BNode.new
26
+ subject.add_triple(bn, URIRef.new("http://xmlns.com/foaf/0.1/knows"), bn)
27
+ subject.subjects.should == [bn]
28
+ end
29
+
30
+ it "should be able to determine whether or not it has existing BNodes" do
31
+ foaf = Namespace.new("http://xmlns.com/foaf/0.1/", "foaf")
32
+ john = BNode.new('john', @bn_ctx)
33
+ jane = BNode.new('jane', @bn_ctx)
34
+ jack = BNode.new('jack', @bn_ctx)
35
+
36
+ subject << Triple.new(john, foaf.knows, jane)
37
+ subject.has_bnode_identifier?(john).should be_true
38
+ subject.has_bnode_identifier?(jane).should be_true
39
+ subject.has_bnode_identifier?(jack).should_not be_true
40
+ end
41
+
42
+ it "should allow you to create and bind Namespace objects" do
43
+ subject.bind(Namespace.new("http://xmlns.com/foaf/0.1/", "foaf")).should be_a(Namespace)
44
+ subject.nsbinding["foaf"].uri.should == "http://xmlns.com/foaf/0.1/"
45
+ end
46
+
47
+ it "should bind namespace" do
48
+ foaf = Namespace.new("http://xmlns.com/foaf/0.1/", "foaf")
49
+ subject.bind(foaf).should == foaf
50
+ end
51
+
52
+ it "should not allow you to bind things other than namespaces" do
53
+ lambda do
54
+ subject.bind(false)
55
+ end.should raise_error
56
+ end
57
+
58
+ it "should follow the specification as to output identical triples" do
59
+ subject.add_triple(@ex.a, @ex.b, @ex.c)
60
+ subject.add_triple(@ex.a, @ex.b, @ex.c)
61
+ subject.size.should == 1
62
+ end
63
+
64
+ it "should parse into existing graph" do
65
+ n3_string = "<http://example.org/> <http://xmlns.com/foaf/0.1/name> \"Gregg Kellogg\" . "
66
+ graph = subject.parse(n3_string, nil, :type => :n3)
67
+ graph.should == subject
68
+ graph.identifier.should be_a(BNode)
69
+ subject.size.should == 1
70
+ subject[0].subject.to_s.should == "http://example.org/"
71
+ subject[0].predicate.to_s.should == "http://xmlns.com/foaf/0.1/name"
72
+ subject[0].object.to_s.should == "Gregg Kellogg"
73
+ end
74
+
75
+ it "should add multiple triples" do
76
+ subject.add(Triple.new(@ex.a, @ex.b, @ex.c), Triple.new(@ex.a, @ex.b, @ex.d))
77
+ subject.size.should == 2
78
+ end
79
+
80
+ describe "with identifier" do
81
+ before(:all) { @identifier = URIRef.new("http://foo.bar") }
82
+ subject { Graph.new(:identifier => @identifier) }
83
+
84
+ it "should retrieve identifier" do
85
+ subject.identifier.should == @identifier
86
+ subject.identifier.should == @identifier.to_s
87
+ end
88
+ end
89
+
90
+ describe "with named store" do
91
+ before(:all) do
92
+ @identifier = URIRef.new("http://foo.bar")
93
+ @store = ListStore.new(:identifier => @identifier)
94
+ end
95
+
96
+ subject {
97
+ g = Graph.new(:identifier => @identifier, :store => @store)
98
+ g.add_triple(@ex.john, @foaf.knows, @ex.jane)
99
+ g.add_triple(@ex.john, @foaf.knows, @ex.rick)
100
+ g.add_triple(@ex.jane, @foaf.knows, @ex.rick)
101
+ g.bind(@foaf)
102
+ g
103
+ }
104
+
105
+ it "should retrieve identifier" do
106
+ subject.identifier.should == @identifier
107
+ subject.identifier.should == @identifier.to_s
108
+ end
109
+
110
+ it "should be same as graph with same store and identifier" do
111
+ g = Graph.new(:store => @store)
112
+ subject.should == g
113
+ end
114
+ end
115
+
116
+ describe "with XML Literal objects" do
117
+ subject {
118
+ dc = Namespace.new("http://purl.org/dc/elements/1.1/", "dc")
119
+ xhtml = Namespace.new("http://www.w3.org/1999/xhtml", "")
120
+ g = Graph.new(:store => ListStore.new)
121
+ g << Triple.new(
122
+ URIRef.new("http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0011.xhtml"),
123
+ URIRef.new("http://purl.org/dc/elements/1.1/title"),
124
+ Literal.typed("E = mc<sup xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">2</sup>: The Most Urgent Problem of Our Time",
125
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
126
+ g.nsbinding)
127
+ )
128
+ g.bind(dc)
129
+ g.bind(xhtml)
130
+ g
131
+ }
132
+
133
+ it "should output NTriple" do
134
+ nt = '<http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0011.xhtml> <http://purl.org/dc/elements/1.1/title> "E = mc<sup xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">2</sup>: The Most Urgent Problem of Our Time"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .' + "\n"
135
+ subject.to_ntriples.should == nt
136
+ end
137
+
138
+ it "should output RDF/XML" do
139
+ rdfxml = <<-HERE
140
+ <?xml version="1.0" encoding="UTF-8"?>
141
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xhv=\"http://www.w3.org/1999/xhtml/vocab#\">
142
+ <rdf:Description rdf:about="http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0011.xhtml">
143
+ <dc:title rdf:parseType="Literal">E = mc<sup xmlns="http://www.w3.org/1999/xhtml" xmlns:dc="http://purl.org/dc/elements/1.1/">2>/sup>: The Most Urgent Problem of Our Time</dc:title>
144
+ </rdf:Description>
145
+ </rdf:RDF>
146
+ HERE
147
+ subject.to_rdfxml.should include("E = mc<sup xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">2</sup>: The Most Urgent Problem of Our Time")
148
+ end
149
+ end
150
+
151
+ describe "with bnodes" do
152
+ subject {
153
+ g = Graph.new(:store => ListStore.new)
154
+ a = BNode.new("a")
155
+ b = BNode.new("b")
156
+
157
+ g << Triple.new(a, @foaf.name, Literal.untyped("Manu Sporny"))
158
+ g << Triple.new(a, @foaf.knows, b)
159
+ g << Triple.new(b, @foaf.name, Literal.untyped("Ralph Swick"))
160
+ g.bind(@foaf)
161
+ g
162
+ }
163
+
164
+ it "should return bnodes" do
165
+ subject.bnodes.keys.length.should == 2
166
+ subject.bnodes.values.should == [2, 2]
167
+ end
168
+
169
+ it "should output RDF/XML" do
170
+ rdfxml = <<-HERE
171
+ <?xml version="1.0" encoding="utf-8"?>
172
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#">
173
+ <rdf:Description rdf:nodeID="a">
174
+ <foaf:name>Manu Sporny</foaf:name>
175
+ <foaf:knows rdf:nodeID="b"/>
176
+ </rdf:Description>
177
+ <rdf:Description rdf:nodeID="b">
178
+ <foaf:name>Ralph Swick</foaf:name>
179
+ </rdf:Description>
180
+ </rdf:RDF>
181
+ HERE
182
+ xml = subject.to_rdfxml
183
+ xml.should include("Ralph Swick")
184
+ xml.should include("Manu Sporny")
185
+ end
186
+ end
187
+
188
+ describe "with triples" do
189
+ subject {
190
+ g = Graph.new(:store => ListStore.new)
191
+ g.add_triple(@ex.john, @foaf.knows, @ex.jane)
192
+ g.add_triple(@ex.john, @foaf.knows, @ex.rick)
193
+ g.add_triple(@ex.jane, @foaf.knows, @ex.rick)
194
+ g.bind(@foaf)
195
+ g
196
+ }
197
+
198
+ it "should detect included triple" do
199
+ subject.contains?(subject[0]).should be_true
200
+ end
201
+
202
+ it "should tell you how large the graph is" do
203
+ subject.size.should == 3
204
+ end
205
+
206
+ it "should return unique subjects" do
207
+ subject.subjects.should == [@ex.john.uri.to_s, @ex.jane.uri.to_s]
208
+ end
209
+
210
+ it "should return unique predicates" do
211
+ subject.predicates.should == [@foaf.knows.uri.to_s]
212
+ end
213
+
214
+ it "should return unique objects" do
215
+ subject.objects.should == [@ex.jane.uri.to_s, @ex.rick.uri.to_s]
216
+ end
217
+
218
+ it "should allow you to select resources" do
219
+ subject.triples(Triple.new(@ex.john, nil, nil)).size.should == 2
220
+ end
221
+
222
+ it "should allow iteration" do
223
+ count = 0
224
+ subject.triples do |t|
225
+ count = count + 1
226
+ t.class.should == Triple
227
+ end
228
+ count.should == 3
229
+ end
230
+
231
+ it "should allow iteration over a particular subject" do
232
+ count = 0
233
+ subject.triples(Triple.new(@ex.john, nil, nil)) do |t|
234
+ count = count + 1
235
+ t.class.should == Triple
236
+ t.subject.should == @ex.john
237
+ end
238
+ count.should == 2
239
+ end
240
+
241
+ it "should give you a list of resources of a particular type" do
242
+ subject.add_triple(@ex.john, RDF_TYPE, @foaf.Person)
243
+ subject.add_triple(@ex.jane, RDF_TYPE, @foaf.Person)
244
+
245
+ subject.get_by_type("http://xmlns.com/foaf/0.1/Person").should == [@ex.john, @ex.jane]
246
+ end
247
+
248
+ it "should remove a triple" do
249
+ subject.add(Triple.new(@ex.john, RDF_TYPE, @foaf.Person))
250
+ subject.size.should == 4
251
+ subject.remove(Triple.new(@ex.john, RDF_TYPE, @foaf.Person))
252
+ subject.size.should == 3
253
+ end
254
+
255
+ it "should remove all triples" do
256
+ subject.remove(Triple.new(nil, nil, nil))
257
+ subject.size.should == 0
258
+ end
259
+
260
+ describe "find triples" do
261
+ it "should find subjects" do
262
+ subject.triples(Triple.new(@ex.john, nil, nil)).size.should == 2
263
+ subject.triples(Triple.new(@ex.jane, nil, nil)).size.should == 1
264
+ end
265
+
266
+ it "should find predicates" do
267
+ subject.triples(Triple.new(nil, @foaf.knows, nil)).size.should == 3
268
+ end
269
+
270
+ it "should find objects" do
271
+ subject.triples(Triple.new(nil, nil, @ex.rick)).size.should == 2
272
+ end
273
+
274
+ it "should find object with regexp" do
275
+ subject.triples(Triple.new(nil, nil, @ex.rick)).size.should == 2
276
+ end
277
+
278
+ it "should find combinations" do
279
+ subject.triples(Triple.new(@ex.john, nil, @ex.rick)).size.should == 1
280
+ end
281
+ end
282
+
283
+ describe "encodings" do
284
+ it "should output NTriple" do
285
+ nt = "<http://example.org/john> <http://xmlns.com/foaf/0.1/knows> <http://example.org/jane> .\n<http://example.org/john> <http://xmlns.com/foaf/0.1/knows> <http://example.org/rick> .\n<http://example.org/jane> <http://xmlns.com/foaf/0.1/knows> <http://example.org/rick> .\n"
286
+ subject.to_ntriples.should == nt
287
+ end
288
+
289
+ it "should output RDF/XML" do
290
+ rdfxml = <<HERE
291
+ <?xml version="1.0" encoding="UTF-8"?>
292
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#">
293
+ <rdf:Description rdf:about="http://example.org/john">
294
+ <foaf:knows rdf:resource="http://example.org/jane"/>
295
+ </rdf:Description>
296
+ <rdf:Description rdf:about="http://example.org/john">
297
+ <foaf:knows rdf:resource="http://example.org/rick"/>
298
+ </rdf:Description>
299
+ <rdf:Description rdf:about="http://example.org/jane">
300
+ <foaf:knows rdf:resource="http://example.org/rick"/>
301
+ </rdf:Description>
302
+ </rdf:RDF>
303
+ HERE
304
+ subject.to_rdfxml.should be_equivalent_xml(rdfxml)
305
+ end
306
+ end
307
+ end
308
+
309
+ describe "which are merged" do
310
+ it "should be able to integrate another graph" do
311
+ subject.add_triple(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new)
312
+ g = Graph.new(:store => ListStore.new)
313
+ g.merge!(subject)
314
+ g.size.should == 1
315
+ end
316
+
317
+ it "should not merge with non graph" do
318
+ lambda do
319
+ h.merge!("")
320
+ end.should raise_error
321
+ end
322
+
323
+ # One does not, in general, obtain the merge of a set of graphs by concatenating their corresponding
324
+ # N-Triples documents and constructing the graph described by the merged document. If some of the
325
+ # documents use the same node identifiers, the merged document will describe a graph in which some of the
326
+ # blank nodes have been 'accidentally' identified. To merge N-Triples documents it is necessary to check
327
+ # if the same nodeID is used in two or more documents, and to replace it with a distinct nodeID in each
328
+ # of them, before merging the documents.
329
+ it "should remap bnodes to avoid duplicate bnode identifiers" do
330
+ subject.add_triple(BNode.new("a1", @bn_ctx), URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new("a2", @bn_ctx))
331
+ g = Graph.new(:store => ListStore.new)
332
+ g.add_triple(BNode.new("a1", @bn_ctx), URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new("a2", @bn_ctx))
333
+ g.merge!(subject)
334
+ g.size.should == 2
335
+ s1, s2 = g.triples.map(&:subject)
336
+ p1, p2 = g.triples.map(&:predicate)
337
+ o1, o2 = g.triples.map(&:object)
338
+ s1.should_not == s2
339
+ p1.should == p1
340
+ o1.should_not == o2
341
+ end
342
+
343
+ it "should remove duplicate triples" do
344
+ subject.add_triple(@ex.a, URIRef.new("http://xmlns.com/foaf/0.1/knows"), @ex.b)
345
+ g = Graph.new(:store => ListStore.new)
346
+ g.add_triple(@ex.a, URIRef.new("http://xmlns.com/foaf/0.1/knows"), @ex.b)
347
+ g.merge!(subject)
348
+ g.size.should == 1
349
+ end
350
+ end
351
+
352
+ describe "that can be compared" do
353
+ {
354
+ "ListStore" => :list_store,
355
+ "MemoryStore" => :memory_store
356
+ }.each_pair do |t, s|
357
+ describe "using #{t}" do
358
+ subject { Graph.new(:store => s)}
359
+
360
+ it "should be true for empty graphs" do
361
+ subject.should == Graph.new(:store => s)
362
+ end
363
+
364
+ it "should be false for different graphs" do
365
+ f = Graph.new(:store => s)
366
+ f.add_triple(URIRef.new("http://example.org/joe"), URIRef.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), URIRef.new("http://xmlns.com/foaf/0.1/Person"))
367
+ subject.should_not == f
368
+ end
369
+
370
+ it "should be true for equivalent graphs with different BNode identifiers" do
371
+ subject.add_triple(@ex.a, @foaf.knows, BNode.new("a1", @bn_ctx))
372
+ subject.add_triple(BNode.new("a1", @bn_ctx), @foaf.knows, @ex.a)
373
+
374
+ f = Graph.new(:store => s)
375
+ f.add_triple(@ex.a, @foaf.knows, BNode.new("a2", @bn_ctx))
376
+ f.add_triple(BNode.new("a2", @bn_ctx), @foaf.knows, @ex.a)
377
+ subject.should == f
378
+ end
379
+
380
+ it "should be true for graphs with literals" do
381
+ subject.add_triple(@ex.a, @foaf.knows, Literal.untyped("foo"))
382
+
383
+ f = Graph.new(:store => s)
384
+ f.add_triple(@ex.a, @foaf.knows, Literal.untyped("foo"))
385
+ subject.should == f
386
+ end
387
+ end
388
+ end
389
+ end
390
+ end
@@ -0,0 +1,314 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe "Literals: " do
4
+ describe "an untyped string" do
5
+ subject {Literal.untyped("tom")}
6
+ it "should be equal if they have the same contents" do should == Literal.untyped("tom") end
7
+ it "should not be equal if they do not have the same contents" do should_not == Literal.untyped("tim") end
8
+ it "should match a string" do should == "tom" end
9
+ it "should return a string using to_s" do subject.to_s.should == "tom" end
10
+
11
+ it "should infer type" do
12
+ other = Literal.build_from("foo")
13
+ other.encoding.should == "http://www.w3.org/2001/XMLSchema#string"
14
+ end
15
+
16
+ describe "should handle specific cases" do
17
+ {
18
+ '"Gregg"' => Literal.untyped("Gregg"),
19
+ '"\u677E\u672C \u540E\u5B50"' => Literal.untyped("松本 后子"),
20
+ '"D\u00FCrst"' => Literal.untyped("Dürst")
21
+ }.each_pair do |encoded, literal|
22
+ it "should encode '#{literal.contents}'" do
23
+ literal.to_n3.should == encoded
24
+ end
25
+ end
26
+ end
27
+
28
+ describe "encodings" do
29
+ it "should return n3" do subject.to_n3.should == "\"tom\"" end
30
+ it "should return ntriples" do subject.to_ntriples.should == "\"tom\"" end
31
+ it "should return xml_args" do subject.xml_args.should == ["tom", {}] end
32
+ it "should return TriX" do subject.to_trix.should == "<plainLiteral>tom</plainLiteral>" end
33
+ end
34
+
35
+ describe "with extended characters" do
36
+ subject { Literal.untyped("松本 后子") }
37
+
38
+ describe "encodings" do
39
+ it "should return n3" do subject.to_n3.should == '"\u677E\u672C \u540E\u5B50"' end
40
+ it "should return ntriples" do subject.to_ntriples.should == '"\u677E\u672C \u540E\u5B50"' end
41
+ it "should return xml_args" do subject.xml_args.should == ["松本 后子", {}] end
42
+ it "should return TriX" do subject.to_trix.should == "<plainLiteral>" + "松本 后子" + "</plainLiteral>" end
43
+ end
44
+ end
45
+
46
+ describe "with a language" do
47
+ subject { Literal.untyped("tom", "en") }
48
+
49
+ it "should accept a language tag" do
50
+ subject.lang.should == "en"
51
+ end
52
+
53
+ it "should be equal if they have the same contents and language" do
54
+ should == Literal.untyped("tom", "en")
55
+ end
56
+
57
+ it "should not be equal if they do not have the same contents" do
58
+ should_not == Literal.untyped("tim", "en")
59
+ end
60
+
61
+ it "should not be equal if they do not have the same language" do
62
+ should_not == Literal.untyped("tom", "fr")
63
+ end
64
+
65
+ describe "encodings" do
66
+ it "should return n3" do subject.to_n3.should == "\"tom\"@en" end
67
+ it "should return ntriples" do subject.to_ntriples.should == "\"tom\"@en" end
68
+ it "should return xml_args" do subject.xml_args.should == ["tom", {"xml:lang" => "en"}] end
69
+ it "should return TriX" do subject.to_trix.should == "<plainLiteral xml:lang=\"en\">tom</plainLiteral>" end
70
+ end
71
+
72
+ it "should normalize language tags to lower case" do
73
+ f = Literal.untyped("tom", "EN")
74
+ f.lang.should == "en"
75
+ end
76
+ end
77
+ end
78
+
79
+ describe "a typed string" do
80
+ subject { Literal.typed("tom", "http://www.w3.org/2001/XMLSchema#string") }
81
+
82
+ it "accepts an encoding" do
83
+ subject.encoding.to_s.should == "http://www.w3.org/2001/XMLSchema#string"
84
+ end
85
+
86
+ it "should be equal if they have the same contents and datatype" do
87
+ should == Literal.typed("tom", "http://www.w3.org/2001/XMLSchema#string")
88
+ end
89
+
90
+ it "should not be equal if they do not have the same contents" do
91
+ should_not == Literal.typed("tim", "http://www.w3.org/2001/XMLSchema#string")
92
+ end
93
+
94
+ it "should not be equal if they do not have the same datatype" do
95
+ should_not == Literal.typed("tom", "http://www.w3.org/2001/XMLSchema#token")
96
+ end
97
+
98
+ describe "encodings" do
99
+ it "should return n3" do subject.to_n3.should == "\"tom\"^^<http://www.w3.org/2001/XMLSchema#string>" end
100
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
101
+ it "should return xml_args" do subject.xml_args.should == ["tom", {"rdf:datatype" => "http://www.w3.org/2001/XMLSchema#string"}] end
102
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/2001/XMLSchema#string\">tom</typedLiteral>" end
103
+ end
104
+ end
105
+
106
+ describe "an integer" do
107
+ describe "encodings" do
108
+ subject { Literal.typed(5, "http://www.w3.org/2001/XMLSchema#int") }
109
+ it "should return n3" do subject.to_n3.should == "\"5\"^^<http://www.w3.org/2001/XMLSchema#int>" end
110
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
111
+ it "should return xml_args" do subject.xml_args.should == ["5", {"rdf:datatype" => "http://www.w3.org/2001/XMLSchema#int"}] end
112
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/2001/XMLSchema#int\">5</typedLiteral>" end
113
+ end
114
+
115
+ it "should infer type" do
116
+ int = Literal.build_from(15)
117
+ int.encoding.should == "http://www.w3.org/2001/XMLSchema#int"
118
+ end
119
+ end
120
+
121
+ describe "a float" do
122
+ describe "encodings" do
123
+ subject { Literal.typed(15.4, "http://www.w3.org/2001/XMLSchema#float") }
124
+ it "should return n3" do subject.to_n3.should == "\"15.4\"^^<http://www.w3.org/2001/XMLSchema#float>" end
125
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
126
+ it "should return xml_args" do subject.xml_args.should == ["15.4", {"rdf:datatype" => "http://www.w3.org/2001/XMLSchema#float"}] end
127
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/2001/XMLSchema#float\">15.4</typedLiteral>" end
128
+ end
129
+
130
+ it "should infer type" do
131
+ float = Literal.build_from(15.4)
132
+ float.encoding.should == "http://www.w3.org/2001/XMLSchema#float"
133
+ end
134
+ end
135
+
136
+ describe "XML Literal" do
137
+ describe "with no namespace" do
138
+ subject { Literal.typed("foo <sup>bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral") }
139
+ it "should indicate xmlliteral?" do
140
+ subject.xmlliteral?.should == true
141
+ end
142
+
143
+ describe "encodings" do
144
+ it "should return n3" do subject.to_n3.should == "\"foo <sup>bar</sup> baz!\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
145
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
146
+ it "should return xml_args" do subject.xml_args.should == ["foo <sup>bar</sup> baz!", {"rdf:parseType" => "Literal"}] end
147
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral\">foo <sup>bar</sup> baz!</typedLiteral>" end
148
+ end
149
+
150
+ it "should be equal if they have the same contents" do
151
+ should == Literal.typed("foo <sup>bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")
152
+ end
153
+
154
+ it "should be a XMLLiteral encoding" do
155
+ subject.encoding.should == "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"
156
+ end
157
+ end
158
+
159
+ describe "with a namespace" do
160
+ subject {
161
+ Literal.typed("foo <sup>bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
162
+ :namespaces => {"dc" => Namespace.new("http://purl.org/dc/elements/1.1/", "dc")})
163
+ }
164
+
165
+ describe "encodings" do
166
+ it "should return n3" do subject.to_n3.should == "\"foo <sup>bar</sup> baz!\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
167
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
168
+ it "should return xml_args" do subject.xml_args.should == ["foo <sup>bar</sup> baz!", {"rdf:parseType" => "Literal"}] end
169
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral\">foo <sup>bar</sup> baz!</typedLiteral>" end
170
+ end
171
+
172
+ describe "and language" do
173
+ subject {
174
+ Literal.typed("foo <sup>bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
175
+ :namespaces => {"dc" => Namespace.new("http://purl.org/dc/elements/1.1/", "dc")},
176
+ :language => "fr")
177
+ }
178
+
179
+ describe "encodings" do
180
+ it "should return n3" do subject.to_n3.should == "\"foo <sup xml:lang=\\\"fr\\\">bar</sup> baz!\"\^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
181
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
182
+ it "should return xml_args" do subject.xml_args.should == ["foo <sup xml:lang=\"fr\">bar</sup> baz!", {"rdf:parseType" => "Literal"}] end
183
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral\">foo <sup xml:lang=\"fr\">bar</sup> baz!</typedLiteral>" end
184
+ end
185
+ end
186
+
187
+ describe "and language with an existing language embedded" do
188
+ subject {
189
+ Literal.typed("foo <sup>bar</sup><sub xml:lang=\"en\">baz</sub>",
190
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
191
+ :language => "fr")
192
+ }
193
+
194
+ describe "encodings" do
195
+ it "should return n3" do subject.to_n3.should == "\"foo <sup xml:lang=\\\"fr\\\">bar</sup><sub xml:lang=\\\"en\\\">baz</sub>\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
196
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
197
+ it "should return xml_args" do subject.xml_args.should == ["foo <sup xml:lang=\"fr\">bar</sup><sub xml:lang=\"en\">baz</sub>", {"rdf:parseType" => "Literal"}] end
198
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral\">foo <sup xml:lang=\"fr\">bar</sup><sub xml:lang=\"en\">baz</sub></typedLiteral>" end
199
+ end
200
+ end
201
+
202
+ describe "and namespaced element" do
203
+ subject {
204
+ root = Nokogiri::XML.parse(%(
205
+ <?xml version="1.0" encoding="UTF-8"?>
206
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
207
+ <html xmlns="http://www.w3.org/1999/xhtml"
208
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
209
+ xmlns:ex="http://example.org/rdf/"
210
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
211
+ xmlns:svg="http://www.w3.org/2000/svg">
212
+ <head profile="http://www.w3.org/1999/xhtml/vocab http://www.w3.org/2005/10/profile">
213
+ <title>Test 0100</title>
214
+ </head>
215
+ <body>
216
+ <div about="http://www.example.org">
217
+ <h2 property="ex:example" datatype="rdf:XMLLiteral"><svg:svg/></h2>
218
+ </div>
219
+ </body>
220
+ </html>
221
+ ), nil, nil, Nokogiri::XML::ParseOptions::DEFAULT_XML).root
222
+ content = root.css("h2").children
223
+ Literal.typed(content,
224
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
225
+ :namespaces => {
226
+ "svg" => Namespace.new("http://www.w3.org/2000/svg", "svg"),
227
+ "dc" => Namespace.new("http://purl.org/dc/elements/1.1/", "dc")
228
+ })
229
+ }
230
+ it "should return xml_args" do subject.xml_args.should == ["<svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\"></svg:svg>", {"rdf:parseType" => "Literal"}] end
231
+ end
232
+
233
+ describe "and existing namespace definition" do
234
+ subject {
235
+ Literal.typed("<svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\"/>",
236
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
237
+ :namespaces => {"svg" => Namespace.new("http://www.w3.org/2000/svg", "svg")})
238
+ }
239
+ it "should return xml_args" do subject.xml_args.should == ["<svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\"></svg:svg>", {"rdf:parseType" => "Literal"}] end
240
+ end
241
+ end
242
+
243
+ describe "with a default namespace" do
244
+ subject {
245
+ Literal.typed("foo <sup>bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
246
+ :namespaces => {"" => Namespace.new("http://purl.org/dc/elements/1.1/", "")})
247
+ }
248
+
249
+ describe "encodings" do
250
+ it "should return n3" do subject.to_n3.should == "\"foo <sup xmlns=\\\"http://purl.org/dc/elements/1.1/\\\">bar</sup> baz!\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
251
+ it "should return ntriples" do subject.to_ntriples.should == subject.to_n3 end
252
+ it "should return xml_args" do subject.xml_args.should == ["foo <sup xmlns=\"http://purl.org/dc/elements/1.1/\">bar</sup> baz!", {"rdf:parseType" => "Literal"}] end
253
+ it "should return TriX" do subject.to_trix.should == "<typedLiteral datatype=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral\">foo <sup xmlns=\"http://purl.org/dc/elements/1.1/\">bar</sup> baz!</typedLiteral>" end
254
+ end
255
+ end
256
+
257
+ describe "with multiple namespaces" do
258
+ subject {
259
+ Literal.typed("foo <sup <sup xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")
260
+ }
261
+ it "should ignore namespace order" do
262
+ g = Literal.typed("foo <sup <sup xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")
263
+ should == g
264
+ end
265
+ end
266
+
267
+ describe "with multiple attributes" do
268
+ it "should ignore attribute order" do
269
+ f = Literal.typed("foo <sup a=\"a\" b=\"b\">bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")
270
+ g = Literal.typed("foo <sup b=\"b\" a=\"a\">bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")
271
+ f.should == g
272
+ end
273
+ end
274
+ end
275
+
276
+ describe "an n3 literal" do
277
+ {
278
+ "Gregg" => ['Gregg', nil, nil],
279
+ "Dürst" => ['D\u00FCrst', nil, nil],
280
+ "simple literal" => ['simple literal', nil, nil],
281
+ "backslash:\\" => ['backslash:\\\\', nil, nil],
282
+ "dquote:\"" => ['dquote:\\"', nil, nil],
283
+ "newline:\n" => ['newline:\\n', nil, nil],
284
+ "return:\r" => ['return:\\r', nil, nil],
285
+ "tab:\t" => ['tab:\\t', nil, nil],
286
+ }.each_pair do |name, args|
287
+ specify "test #{name}" do
288
+ Literal.n3_encoded(*args).contents.should == name
289
+ end
290
+ end
291
+ end
292
+
293
+ # it "build_from_language" do
294
+ # english = Literal.build_from_language("Have a nice day")
295
+ # english.encoding.should == "en"
296
+ #
297
+ # french = Literal.build_from_language("Bonjour, madame. Parlez vous francais?")
298
+ # french.encoding.should == "fr"
299
+ #
300
+ # german = Literal.build_from_language("Achtung")
301
+ # german.encoding.should == "de"
302
+ # end
303
+
304
+ # TODO: refactor based on new interface
305
+ # describe "Languages" do
306
+ # it "should be inspectable" do
307
+ # literal = Reddy::Literal.new("foo", "en")
308
+ # lang = literal.lang
309
+ # lang.to_s == "en"
310
+ # lang.hash.class.should == Fixnum
311
+ # end
312
+ # end
313
+
314
+ end