gkellogg-reddy 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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