rdfa_parser 0.1.0

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 (373) hide show
  1. data/.gitignore +7 -0
  2. data/History.txt +47 -0
  3. data/README.rdoc +61 -0
  4. data/Rakefile +52 -0
  5. data/VERSION +1 -0
  6. data/bin/rdfa_parser +55 -0
  7. data/lib/rdfa_parser.rb +35 -0
  8. data/lib/rdfa_parser/bnode.rb +92 -0
  9. data/lib/rdfa_parser/exceptions.rb +11 -0
  10. data/lib/rdfa_parser/graph.rb +222 -0
  11. data/lib/rdfa_parser/literal.rb +375 -0
  12. data/lib/rdfa_parser/namespace.rb +91 -0
  13. data/lib/rdfa_parser/rdfa_parser.rb +415 -0
  14. data/lib/rdfa_parser/triple.rb +100 -0
  15. data/lib/rdfa_parser/uriref.rb +94 -0
  16. data/script/console +10 -0
  17. data/script/destroy +14 -0
  18. data/script/generate +14 -0
  19. data/spec/bnode_spec.rb +51 -0
  20. data/spec/graph_spec.rb +230 -0
  21. data/spec/literal_spec.rb +282 -0
  22. data/spec/matchers.rb +134 -0
  23. data/spec/namespace_spec.rb +61 -0
  24. data/spec/rdfa_helper.rb +127 -0
  25. data/spec/rdfa_parser_spec.rb +119 -0
  26. data/spec/spec.opts +1 -0
  27. data/spec/spec_helper.rb +23 -0
  28. data/spec/triple_spec.rb +145 -0
  29. data/spec/uriref_spec.rb +117 -0
  30. data/spec/xhtml1-testcases/.sparql +13 -0
  31. data/spec/xhtml1-testcases/0001.nt +1 -0
  32. data/spec/xhtml1-testcases/0001.sparql +3 -0
  33. data/spec/xhtml1-testcases/0001.xhtml +11 -0
  34. data/spec/xhtml1-testcases/0002.sparql +3 -0
  35. data/spec/xhtml1-testcases/0003.sparql +3 -0
  36. data/spec/xhtml1-testcases/0006.nt +2 -0
  37. data/spec/xhtml1-testcases/0006.sparql +8 -0
  38. data/spec/xhtml1-testcases/0006.xhtml +16 -0
  39. data/spec/xhtml1-testcases/0007.nt +3 -0
  40. data/spec/xhtml1-testcases/0007.sparql +5 -0
  41. data/spec/xhtml1-testcases/0007.xhtml +16 -0
  42. data/spec/xhtml1-testcases/0008.nt +1 -0
  43. data/spec/xhtml1-testcases/0008.sparql +3 -0
  44. data/spec/xhtml1-testcases/0008.xhtml +16 -0
  45. data/spec/xhtml1-testcases/0009.nt +1 -0
  46. data/spec/xhtml1-testcases/0009.sparql +3 -0
  47. data/spec/xhtml1-testcases/0009.xhtml +14 -0
  48. data/spec/xhtml1-testcases/0010.nt +2 -0
  49. data/spec/xhtml1-testcases/0010.sparql +4 -0
  50. data/spec/xhtml1-testcases/0010.xhtml +13 -0
  51. data/spec/xhtml1-testcases/0011.nt +3 -0
  52. data/spec/xhtml1-testcases/0011.sparql +17 -0
  53. data/spec/xhtml1-testcases/0011.xhtml +14 -0
  54. data/spec/xhtml1-testcases/0012.nt +1 -0
  55. data/spec/xhtml1-testcases/0012.sparql +3 -0
  56. data/spec/xhtml1-testcases/0012.xhtml +12 -0
  57. data/spec/xhtml1-testcases/0013.nt +1 -0
  58. data/spec/xhtml1-testcases/0013.sparql +3 -0
  59. data/spec/xhtml1-testcases/0013.xhtml +12 -0
  60. data/spec/xhtml1-testcases/0014.nt +1 -0
  61. data/spec/xhtml1-testcases/0014.sparql +3 -0
  62. data/spec/xhtml1-testcases/0014.xhtml +15 -0
  63. data/spec/xhtml1-testcases/0015.nt +2 -0
  64. data/spec/xhtml1-testcases/0015.sparql +4 -0
  65. data/spec/xhtml1-testcases/0015.xhtml +13 -0
  66. data/spec/xhtml1-testcases/0017.nt +3 -0
  67. data/spec/xhtml1-testcases/0017.sparql +6 -0
  68. data/spec/xhtml1-testcases/0017.xhtml +16 -0
  69. data/spec/xhtml1-testcases/0018.nt +1 -0
  70. data/spec/xhtml1-testcases/0018.sparql +3 -0
  71. data/spec/xhtml1-testcases/0018.xhtml +17 -0
  72. data/spec/xhtml1-testcases/0019.nt +1 -0
  73. data/spec/xhtml1-testcases/0019.sparql +3 -0
  74. data/spec/xhtml1-testcases/0019.xhtml +14 -0
  75. data/spec/xhtml1-testcases/0020.nt +1 -0
  76. data/spec/xhtml1-testcases/0020.sparql +3 -0
  77. data/spec/xhtml1-testcases/0020.xhtml +17 -0
  78. data/spec/xhtml1-testcases/0021.nt +1 -0
  79. data/spec/xhtml1-testcases/0021.sparql +3 -0
  80. data/spec/xhtml1-testcases/0021.xhtml +17 -0
  81. data/spec/xhtml1-testcases/0023.nt +1 -0
  82. data/spec/xhtml1-testcases/0023.sparql +3 -0
  83. data/spec/xhtml1-testcases/0023.xhtml +16 -0
  84. data/spec/xhtml1-testcases/0025.nt +2 -0
  85. data/spec/xhtml1-testcases/0025.sparql +4 -0
  86. data/spec/xhtml1-testcases/0025.xhtml +19 -0
  87. data/spec/xhtml1-testcases/0026.nt +1 -0
  88. data/spec/xhtml1-testcases/0026.sparql +3 -0
  89. data/spec/xhtml1-testcases/0026.xhtml +16 -0
  90. data/spec/xhtml1-testcases/0027.nt +1 -0
  91. data/spec/xhtml1-testcases/0027.sparql +3 -0
  92. data/spec/xhtml1-testcases/0027.xhtml +17 -0
  93. data/spec/xhtml1-testcases/0029.nt +1 -0
  94. data/spec/xhtml1-testcases/0029.sparql +3 -0
  95. data/spec/xhtml1-testcases/0029.xhtml +17 -0
  96. data/spec/xhtml1-testcases/0030.nt +1 -0
  97. data/spec/xhtml1-testcases/0030.sparql +3 -0
  98. data/spec/xhtml1-testcases/0030.xhtml +16 -0
  99. data/spec/xhtml1-testcases/0031.nt +1 -0
  100. data/spec/xhtml1-testcases/0031.sparql +3 -0
  101. data/spec/xhtml1-testcases/0031.xhtml +14 -0
  102. data/spec/xhtml1-testcases/0032.nt +1 -0
  103. data/spec/xhtml1-testcases/0032.sparql +3 -0
  104. data/spec/xhtml1-testcases/0032.xhtml +15 -0
  105. data/spec/xhtml1-testcases/0033.nt +2 -0
  106. data/spec/xhtml1-testcases/0033.sparql +5 -0
  107. data/spec/xhtml1-testcases/0033.xhtml +19 -0
  108. data/spec/xhtml1-testcases/0034.nt +1 -0
  109. data/spec/xhtml1-testcases/0034.sparql +3 -0
  110. data/spec/xhtml1-testcases/0034.xhtml +14 -0
  111. data/spec/xhtml1-testcases/0035.nt +1 -0
  112. data/spec/xhtml1-testcases/0035.sparql +3 -0
  113. data/spec/xhtml1-testcases/0035.xhtml +17 -0
  114. data/spec/xhtml1-testcases/0036.nt +1 -0
  115. data/spec/xhtml1-testcases/0036.sparql +3 -0
  116. data/spec/xhtml1-testcases/0036.xhtml +17 -0
  117. data/spec/xhtml1-testcases/0037.nt +1 -0
  118. data/spec/xhtml1-testcases/0037.sparql +3 -0
  119. data/spec/xhtml1-testcases/0037.xhtml +18 -0
  120. data/spec/xhtml1-testcases/0038.nt +1 -0
  121. data/spec/xhtml1-testcases/0038.sparql +3 -0
  122. data/spec/xhtml1-testcases/0038.xhtml +14 -0
  123. data/spec/xhtml1-testcases/0039.nt +1 -0
  124. data/spec/xhtml1-testcases/0039.sparql +3 -0
  125. data/spec/xhtml1-testcases/0039.xhtml +17 -0
  126. data/spec/xhtml1-testcases/0040.nt +1 -0
  127. data/spec/xhtml1-testcases/0040.sparql +3 -0
  128. data/spec/xhtml1-testcases/0040.xhtml +16 -0
  129. data/spec/xhtml1-testcases/0041.nt +1 -0
  130. data/spec/xhtml1-testcases/0041.sparql +3 -0
  131. data/spec/xhtml1-testcases/0041.xhtml +18 -0
  132. data/spec/xhtml1-testcases/0042.nt +0 -0
  133. data/spec/xhtml1-testcases/0042.sparql +4 -0
  134. data/spec/xhtml1-testcases/0042.xhtml +15 -0
  135. data/spec/xhtml1-testcases/0046.nt +3 -0
  136. data/spec/xhtml1-testcases/0046.sparql +6 -0
  137. data/spec/xhtml1-testcases/0046.xhtml +13 -0
  138. data/spec/xhtml1-testcases/0047.nt +3 -0
  139. data/spec/xhtml1-testcases/0047.sparql +6 -0
  140. data/spec/xhtml1-testcases/0047.xhtml +13 -0
  141. data/spec/xhtml1-testcases/0048.nt +3 -0
  142. data/spec/xhtml1-testcases/0048.sparql +6 -0
  143. data/spec/xhtml1-testcases/0048.xhtml +14 -0
  144. data/spec/xhtml1-testcases/0049.nt +2 -0
  145. data/spec/xhtml1-testcases/0049.sparql +4 -0
  146. data/spec/xhtml1-testcases/0049.xhtml +14 -0
  147. data/spec/xhtml1-testcases/0050.nt +2 -0
  148. data/spec/xhtml1-testcases/0050.sparql +5 -0
  149. data/spec/xhtml1-testcases/0050.xhtml +14 -0
  150. data/spec/xhtml1-testcases/0051.nt +2 -0
  151. data/spec/xhtml1-testcases/0051.sparql +4 -0
  152. data/spec/xhtml1-testcases/0051.xhtml +12 -0
  153. data/spec/xhtml1-testcases/0052.nt +1 -0
  154. data/spec/xhtml1-testcases/0052.sparql +3 -0
  155. data/spec/xhtml1-testcases/0052.xhtml +13 -0
  156. data/spec/xhtml1-testcases/0053.nt +2 -0
  157. data/spec/xhtml1-testcases/0053.sparql +4 -0
  158. data/spec/xhtml1-testcases/0053.xhtml +13 -0
  159. data/spec/xhtml1-testcases/0054.nt +2 -0
  160. data/spec/xhtml1-testcases/0054.sparql +4 -0
  161. data/spec/xhtml1-testcases/0054.xhtml +14 -0
  162. data/spec/xhtml1-testcases/0055.nt +2 -0
  163. data/spec/xhtml1-testcases/0055.sparql +4 -0
  164. data/spec/xhtml1-testcases/0055.xhtml +16 -0
  165. data/spec/xhtml1-testcases/0056.nt +3 -0
  166. data/spec/xhtml1-testcases/0056.sparql +5 -0
  167. data/spec/xhtml1-testcases/0056.xhtml +13 -0
  168. data/spec/xhtml1-testcases/0057.nt +4 -0
  169. data/spec/xhtml1-testcases/0057.sparql +6 -0
  170. data/spec/xhtml1-testcases/0057.xhtml +14 -0
  171. data/spec/xhtml1-testcases/0058.nt +6 -0
  172. data/spec/xhtml1-testcases/0058.sparql +9 -0
  173. data/spec/xhtml1-testcases/0058.xhtml +14 -0
  174. data/spec/xhtml1-testcases/0059.nt +6 -0
  175. data/spec/xhtml1-testcases/0059.sparql +8 -0
  176. data/spec/xhtml1-testcases/0059.xhtml +16 -0
  177. data/spec/xhtml1-testcases/0060.nt +2 -0
  178. data/spec/xhtml1-testcases/0060.sparql +4 -0
  179. data/spec/xhtml1-testcases/0060.xhtml +14 -0
  180. data/spec/xhtml1-testcases/0061.nt +1 -0
  181. data/spec/xhtml1-testcases/0061.sparql +3 -0
  182. data/spec/xhtml1-testcases/0061.xhtml +11 -0
  183. data/spec/xhtml1-testcases/0062.nt +1 -0
  184. data/spec/xhtml1-testcases/0062.sparql +3 -0
  185. data/spec/xhtml1-testcases/0062.xhtml +12 -0
  186. data/spec/xhtml1-testcases/0063.nt +1 -0
  187. data/spec/xhtml1-testcases/0063.sparql +3 -0
  188. data/spec/xhtml1-testcases/0063.xhtml +11 -0
  189. data/spec/xhtml1-testcases/0064.nt +1 -0
  190. data/spec/xhtml1-testcases/0064.sparql +4 -0
  191. data/spec/xhtml1-testcases/0064.xhtml +13 -0
  192. data/spec/xhtml1-testcases/0065.nt +3 -0
  193. data/spec/xhtml1-testcases/0065.sparql +6 -0
  194. data/spec/xhtml1-testcases/0065.xhtml +22 -0
  195. data/spec/xhtml1-testcases/0066.nt +1 -0
  196. data/spec/xhtml1-testcases/0066.sparql +3 -0
  197. data/spec/xhtml1-testcases/0066.xhtml +11 -0
  198. data/spec/xhtml1-testcases/0067.nt +1 -0
  199. data/spec/xhtml1-testcases/0067.sparql +3 -0
  200. data/spec/xhtml1-testcases/0067.xhtml +11 -0
  201. data/spec/xhtml1-testcases/0068.nt +1 -0
  202. data/spec/xhtml1-testcases/0068.sparql +3 -0
  203. data/spec/xhtml1-testcases/0068.xhtml +14 -0
  204. data/spec/xhtml1-testcases/0069.nt +1 -0
  205. data/spec/xhtml1-testcases/0069.sparql +3 -0
  206. data/spec/xhtml1-testcases/0069.xhtml +14 -0
  207. data/spec/xhtml1-testcases/0070.nt +1 -0
  208. data/spec/xhtml1-testcases/0070.sparql +3 -0
  209. data/spec/xhtml1-testcases/0070.xhtml +13 -0
  210. data/spec/xhtml1-testcases/0071.nt +1 -0
  211. data/spec/xhtml1-testcases/0071.sparql +3 -0
  212. data/spec/xhtml1-testcases/0071.xhtml +16 -0
  213. data/spec/xhtml1-testcases/0072.nt +1 -0
  214. data/spec/xhtml1-testcases/0072.sparql +3 -0
  215. data/spec/xhtml1-testcases/0072.xhtml +16 -0
  216. data/spec/xhtml1-testcases/0073.nt +1 -0
  217. data/spec/xhtml1-testcases/0073.sparql +3 -0
  218. data/spec/xhtml1-testcases/0073.xhtml +16 -0
  219. data/spec/xhtml1-testcases/0074.nt +1 -0
  220. data/spec/xhtml1-testcases/0074.sparql +3 -0
  221. data/spec/xhtml1-testcases/0074.xhtml +16 -0
  222. data/spec/xhtml1-testcases/0075.nt +1 -0
  223. data/spec/xhtml1-testcases/0075.sparql +3 -0
  224. data/spec/xhtml1-testcases/0075.xhtml +16 -0
  225. data/spec/xhtml1-testcases/0076.nt +23 -0
  226. data/spec/xhtml1-testcases/0076.sparql +70 -0
  227. data/spec/xhtml1-testcases/0076.xhtml +35 -0
  228. data/spec/xhtml1-testcases/0077.nt +23 -0
  229. data/spec/xhtml1-testcases/0077.sparql +70 -0
  230. data/spec/xhtml1-testcases/0077.xhtml +58 -0
  231. data/spec/xhtml1-testcases/0078.nt +6 -0
  232. data/spec/xhtml1-testcases/0078.sparql +7 -0
  233. data/spec/xhtml1-testcases/0078.xhtml +15 -0
  234. data/spec/xhtml1-testcases/0079.nt +3 -0
  235. data/spec/xhtml1-testcases/0079.sparql +6 -0
  236. data/spec/xhtml1-testcases/0079.xhtml +15 -0
  237. data/spec/xhtml1-testcases/0080.nt +1 -0
  238. data/spec/xhtml1-testcases/0080.sparql +3 -0
  239. data/spec/xhtml1-testcases/0080.xhtml +13 -0
  240. data/spec/xhtml1-testcases/0081.nt +6 -0
  241. data/spec/xhtml1-testcases/0081.sparql +9 -0
  242. data/spec/xhtml1-testcases/0081.xhtml +15 -0
  243. data/spec/xhtml1-testcases/0082.nt +8 -0
  244. data/spec/xhtml1-testcases/0082.sparql +11 -0
  245. data/spec/xhtml1-testcases/0082.xhtml +15 -0
  246. data/spec/xhtml1-testcases/0083.nt +6 -0
  247. data/spec/xhtml1-testcases/0083.sparql +9 -0
  248. data/spec/xhtml1-testcases/0083.xhtml +15 -0
  249. data/spec/xhtml1-testcases/0084.nt +8 -0
  250. data/spec/xhtml1-testcases/0084.sparql +11 -0
  251. data/spec/xhtml1-testcases/0084.xhtml +18 -0
  252. data/spec/xhtml1-testcases/0085.nt +4 -0
  253. data/spec/xhtml1-testcases/0085.sparql +6 -0
  254. data/spec/xhtml1-testcases/0085.xhtml +17 -0
  255. data/spec/xhtml1-testcases/0086.nt +0 -0
  256. data/spec/xhtml1-testcases/0086.sparql +4 -0
  257. data/spec/xhtml1-testcases/0086.xhtml +13 -0
  258. data/spec/xhtml1-testcases/0087.nt +23 -0
  259. data/spec/xhtml1-testcases/0087.sparql +70 -0
  260. data/spec/xhtml1-testcases/0087.xhtml +35 -0
  261. data/spec/xhtml1-testcases/0088.nt +3 -0
  262. data/spec/xhtml1-testcases/0088.sparql +6 -0
  263. data/spec/xhtml1-testcases/0088.xhtml +14 -0
  264. data/spec/xhtml1-testcases/0089.nt +1 -0
  265. data/spec/xhtml1-testcases/0089.sparql +3 -0
  266. data/spec/xhtml1-testcases/0089.xhtml +13 -0
  267. data/spec/xhtml1-testcases/0090.nt +1 -0
  268. data/spec/xhtml1-testcases/0090.sparql +3 -0
  269. data/spec/xhtml1-testcases/0090.xhtml +16 -0
  270. data/spec/xhtml1-testcases/0091.nt +3 -0
  271. data/spec/xhtml1-testcases/0091.sparql +6 -0
  272. data/spec/xhtml1-testcases/0091.xhtml +16 -0
  273. data/spec/xhtml1-testcases/0092.nt +3 -0
  274. data/spec/xhtml1-testcases/0092.sparql +16 -0
  275. data/spec/xhtml1-testcases/0092.xhtml +15 -0
  276. data/spec/xhtml1-testcases/0093.nt +2 -0
  277. data/spec/xhtml1-testcases/0093.sparql +4 -0
  278. data/spec/xhtml1-testcases/0093.xhtml +15 -0
  279. data/spec/xhtml1-testcases/0094.nt +3 -0
  280. data/spec/xhtml1-testcases/0094.sparql +16 -0
  281. data/spec/xhtml1-testcases/0094.xhtml +15 -0
  282. data/spec/xhtml1-testcases/0099.nt +1 -0
  283. data/spec/xhtml1-testcases/0099.sparql +3 -0
  284. data/spec/xhtml1-testcases/0099.xhtml +20 -0
  285. data/spec/xhtml1-testcases/0100.nt +3 -0
  286. data/spec/xhtml1-testcases/0100.sparql +15 -0
  287. data/spec/xhtml1-testcases/0100.xhtml +16 -0
  288. data/spec/xhtml1-testcases/0101.nt +3 -0
  289. data/spec/xhtml1-testcases/0101.sparql +15 -0
  290. data/spec/xhtml1-testcases/0101.xhtml +16 -0
  291. data/spec/xhtml1-testcases/0102.nt +1 -0
  292. data/spec/xhtml1-testcases/0102.sparql +15 -0
  293. data/spec/xhtml1-testcases/0102.xhtml +16 -0
  294. data/spec/xhtml1-testcases/0103.nt +1 -0
  295. data/spec/xhtml1-testcases/0103.sparql +15 -0
  296. data/spec/xhtml1-testcases/0103.xhtml +15 -0
  297. data/spec/xhtml1-testcases/0104.nt +3 -0
  298. data/spec/xhtml1-testcases/0104.sparql +5 -0
  299. data/spec/xhtml1-testcases/0104.xhtml +18 -0
  300. data/spec/xhtml1-testcases/0105.nt +1 -0
  301. data/spec/xhtml1-testcases/0105.sparql +7 -0
  302. data/spec/xhtml1-testcases/0105.xhtml +13 -0
  303. data/spec/xhtml1-testcases/0106.nt +1 -0
  304. data/spec/xhtml1-testcases/0106.sparql +7 -0
  305. data/spec/xhtml1-testcases/0106.xhtml +13 -0
  306. data/spec/xhtml1-testcases/0107.nt +0 -0
  307. data/spec/xhtml1-testcases/0107.sparql +4 -0
  308. data/spec/xhtml1-testcases/0107.xhtml +11 -0
  309. data/spec/xhtml1-testcases/0108.nt +1 -0
  310. data/spec/xhtml1-testcases/0108.sparql +3 -0
  311. data/spec/xhtml1-testcases/0108.xhtml +14 -0
  312. data/spec/xhtml1-testcases/0109.nt +1 -0
  313. data/spec/xhtml1-testcases/0109.sparql +3 -0
  314. data/spec/xhtml1-testcases/0109.xhtml +15 -0
  315. data/spec/xhtml1-testcases/0110.nt +1 -0
  316. data/spec/xhtml1-testcases/0110.sparql +4 -0
  317. data/spec/xhtml1-testcases/0110.xhtml +12 -0
  318. data/spec/xhtml1-testcases/0111.nt +2 -0
  319. data/spec/xhtml1-testcases/0111.sparql +5 -0
  320. data/spec/xhtml1-testcases/0111.xhtml +14 -0
  321. data/spec/xhtml1-testcases/0112.nt +1 -0
  322. data/spec/xhtml1-testcases/0112.sparql +3 -0
  323. data/spec/xhtml1-testcases/0112.xhtml +16 -0
  324. data/spec/xhtml1-testcases/0113.nt +2 -0
  325. data/spec/xhtml1-testcases/0113.sparql +4 -0
  326. data/spec/xhtml1-testcases/0113.xhtml +12 -0
  327. data/spec/xhtml1-testcases/0114.nt +3 -0
  328. data/spec/xhtml1-testcases/0114.sparql +5 -0
  329. data/spec/xhtml1-testcases/0114.xhtml +15 -0
  330. data/spec/xhtml1-testcases/0115.nt +4 -0
  331. data/spec/xhtml1-testcases/0115.sparql +14 -0
  332. data/spec/xhtml1-testcases/0115.xhtml +17 -0
  333. data/spec/xhtml1-testcases/0116.nt +2 -0
  334. data/spec/xhtml1-testcases/0116.sparql +6 -0
  335. data/spec/xhtml1-testcases/0116.xhtml +10 -0
  336. data/spec/xhtml1-testcases/0117.nt +2 -0
  337. data/spec/xhtml1-testcases/0117.sparql +4 -0
  338. data/spec/xhtml1-testcases/0117.xhtml +15 -0
  339. data/spec/xhtml1-testcases/0118.nt +1 -0
  340. data/spec/xhtml1-testcases/0118.sparql +5 -0
  341. data/spec/xhtml1-testcases/0118.xhtml +16 -0
  342. data/spec/xhtml1-testcases/0119.nt +1 -0
  343. data/spec/xhtml1-testcases/0119.sparql +5 -0
  344. data/spec/xhtml1-testcases/0119.xhtml +19 -0
  345. data/spec/xhtml1-testcases/0120.nt +1 -0
  346. data/spec/xhtml1-testcases/0120.sparql +5 -0
  347. data/spec/xhtml1-testcases/0120.xhtml +17 -0
  348. data/spec/xhtml1-testcases/0121.nt +2 -0
  349. data/spec/xhtml1-testcases/0121.sparql +4 -0
  350. data/spec/xhtml1-testcases/0121.xhtml +24 -0
  351. data/spec/xhtml1-testcases/0122.nt +1 -0
  352. data/spec/xhtml1-testcases/0122.sparql +4 -0
  353. data/spec/xhtml1-testcases/0122.xhtml +16 -0
  354. data/spec/xhtml1-testcases/0123.nt +3 -0
  355. data/spec/xhtml1-testcases/0123.sparql +5 -0
  356. data/spec/xhtml1-testcases/0123.xhtml +18 -0
  357. data/spec/xhtml1-testcases/0124.nt +4 -0
  358. data/spec/xhtml1-testcases/0124.sparql +6 -0
  359. data/spec/xhtml1-testcases/0124.xhtml +14 -0
  360. data/spec/xhtml1-testcases/0125.nt +1 -0
  361. data/spec/xhtml1-testcases/0125.sparql +5 -0
  362. data/spec/xhtml1-testcases/0125.xhtml +16 -0
  363. data/spec/xhtml1-testcases/0126.nt +3 -0
  364. data/spec/xhtml1-testcases/0126.sparql +5 -0
  365. data/spec/xhtml1-testcases/0126.xhtml +15 -0
  366. data/spec/xhtml1-testcases/1001.nt +6 -0
  367. data/spec/xhtml1-testcases/1001.sparql +8 -0
  368. data/spec/xhtml1-testcases/1001.xhtml +20 -0
  369. data/spec/xhtml1-testcases/9999.nt +3 -0
  370. data/spec/xhtml1-testcases/9999.xhtml +14 -0
  371. data/spec/xhtml1-testcases/rdfa-xhtml1-test-manifest.rdf +1303 -0
  372. data/tasks/rspec.rake +21 -0
  373. metadata +485 -0
data/spec/matchers.rb ADDED
@@ -0,0 +1,134 @@
1
+ module Matchers
2
+ class BeEquivalentGraph
3
+ def initialize(expected, info)
4
+ @expected = expected
5
+ @info = info
6
+ end
7
+ def matches?(actual)
8
+ @actual = actual
9
+ @last_line = 0
10
+ @sorted_actual = @actual.triples.sort_by{|t| t.to_ntriples}
11
+ @sorted_expected = @expected.triples.sort_by{|t| t.to_ntriples}
12
+ 0.upto(@sorted_actual.length) do |i|
13
+ @last_line = i
14
+ a = @sorted_actual[i]
15
+ b = @sorted_expected[i]
16
+ return false unless a == b
17
+ end
18
+ @sorted_actual.length == @sorted_expected.length
19
+ end
20
+ def failure_message_for_should
21
+ if @last_line < @sorted_actual.length && @sorted_expected[@last_line]
22
+ "Graph differs at entry #{@last_line}:\nexpected: #{@sorted_expected[@last_line].to_ntriples}\nactual: #{@sorted_actual[@last_line].to_ntriples}"
23
+ elsif @last_line < @actual.triples.length
24
+ "Graph differs at entry #{@last_line}:\nunexpected: #{@sorted_actual[@last_line].to_ntriples}"
25
+ else
26
+ "Graph entry count differs:\nexpected: #{@sorted_expected.length}\nactual: #{@sorted_actual.length}"
27
+ end +
28
+ "\n\n#{@info + "\n" unless @info.empty?}" +
29
+ "Unsorted Expected:\n#{@expected.to_ntriples}" +
30
+ "Unsorted Results:\n#{@actual.to_ntriples}"
31
+ end
32
+ end
33
+
34
+ def be_equivalent_graph(expected, info = "")
35
+ BeEquivalentGraph.new(expected, info)
36
+ end
37
+
38
+ # Run expected SPARQL query against actual
39
+ class PassQuery
40
+ def initialize(expected, info)
41
+ @expected = expected
42
+ @query = Redland::Query.new(expected)
43
+ @info = info
44
+ end
45
+ def matches?(actual)
46
+ @actual = actual
47
+ model = Redland::Model.new
48
+ ntriples_parser = Redland::Parser.ntriples
49
+ ntriples_parser.parse_string_into_model(model, actual.to_ntriples, "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/")
50
+
51
+ @results = @query.execute(model)
52
+ if @expected.match(/(This test should result in a 'NO'|negative test case)/)
53
+ @results.nil? || (@results.is_boolean? && !@results.get_boolean?)
54
+ else
55
+ @results.is_boolean? && @results.get_boolean?
56
+ end
57
+ end
58
+ def failure_message_for_should
59
+ "#{@info + "\n" unless @info.empty?}" +
60
+ if @results.nil?
61
+ "Query failed to return results"
62
+ elsif !@results.is_boolean?
63
+ "Query returned non-boolean results"
64
+ else
65
+ "Query returned false"
66
+ end +
67
+ "\n#{@expected}" +
68
+ "\nResults:\n#{@actual.to_ntriples}"
69
+ end
70
+ end
71
+
72
+ def pass_query(expected, info = "")
73
+ PassQuery.new(expected, info)
74
+ end
75
+
76
+ class BeValidXML
77
+ def initialize(info)
78
+ @info = info
79
+ end
80
+ def matches?(actual)
81
+ @actual = actual
82
+ @doc = Nokogiri::XML.parse(actual)
83
+ @results = @doc.validate
84
+ @results.nil?
85
+ rescue
86
+ false
87
+ end
88
+ def failure_message_for_should
89
+ "#{@info + "\n" unless @info.empty?}" +
90
+ if @doc.nil?
91
+ "did not parse"
92
+ else
93
+ "\n#{@results}" +
94
+ "\nParsed:\n#{@doc}"
95
+ end +
96
+ "\nActual:\n#{@actual}"
97
+ end
98
+ end
99
+
100
+ def be_valid_xml(info = "")
101
+ BeValidXML.new(info)
102
+ end
103
+
104
+ class BeEquivalentXML
105
+ def initialize(expected, info)
106
+ @expected = expected
107
+ @info = info
108
+ end
109
+
110
+ def matches?(actual)
111
+ @actual = actual
112
+
113
+ a = "<foo>#{@actual}</foo>" unless @actual.index("<") == 0
114
+ e = "<foo>#{@expected}</foo>" unless @actual.index("<") == 0
115
+ a_hash = ActiveSupport::XmlMini.parse(a)
116
+ e_hash = ActiveSupport::XmlMini.parse(e)
117
+ a_hash == e_hash
118
+ rescue
119
+ @fault = $!.message
120
+ false
121
+ end
122
+
123
+ def failure_message_for_should
124
+ "#{@info + "\n" unless @info.empty?}" +
125
+ "#{@fault + "\n" unless @fault.nil?}" +
126
+ "Expected:\n#{@expected}\n" +
127
+ "Actual:#{@actual}"
128
+ end
129
+ end
130
+
131
+ def be_equivalent_xml(expected, info = "")
132
+ BeEquivalentXML.new(expected, info)
133
+ end
134
+ end
@@ -0,0 +1,61 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe "Namespace" do
4
+ subject { Namespace.new("http://xmlns.com/foaf/0.1/", "foaf") }
5
+
6
+ describe "method_missing" do
7
+ it "should create URIRef" do
8
+ subject.knows.to_s.should == "http://xmlns.com/foaf/0.1/knows"
9
+ end
10
+
11
+ it "should create URIRef for frag" do
12
+ foaf_frag = Namespace.new("http://xmlns.com/foaf/0.1/", "foaf", true)
13
+ foaf_frag.knows.to_s.should == "http://xmlns.com/foaf/0.1/#knows"
14
+ end
15
+ end
16
+
17
+ it "should have a URI" do
18
+ lambda do
19
+ test = Namespace.new(short='foaf')
20
+ end.should raise_error
21
+ end
22
+
23
+ it "should have equality with URIRefs" do
24
+ foaf_name = URIRef.new("http://xmlns.com/foaf/0.1/name")
25
+ subject.name.should == foaf_name
26
+ end
27
+
28
+ it "should have an XML and N3-friendly prefix" do
29
+ lambda do
30
+ test = Namespace.new('http://xmlns.com/foaf/0.1/', '*~{')
31
+ end.should raise_error
32
+ end
33
+
34
+ it "should be able to attach to the graph for substitution" do
35
+ # rdflib does this using graph.bind('prefix', namespace)
36
+ g = Graph.new
37
+ subject.bind(g)
38
+ should == g.nsbinding["foaf"]
39
+ end
40
+
41
+ it "should not allow you to attach to non-graphs" do
42
+ lambda do
43
+ subject.bind("cheese")
44
+ end.should raise_error
45
+ end
46
+
47
+ it "should construct URI" do
48
+ subject.foo.class.should == URIRef
49
+ subject.foo.should == "http://xmlns.com/foaf/0.1/foo"
50
+ end
51
+
52
+ it "should construct URI with +" do
53
+ (subject + "foo").class.should == URIRef
54
+ (subject + "foo").should == "http://xmlns.com/foaf/0.1/foo"
55
+ end
56
+
57
+ it "will cause method conflict" do
58
+ (subject + "class").should == "http://xmlns.com/foaf/0.1/class"
59
+ subject.class.should == Namespace
60
+ end
61
+ end
@@ -0,0 +1,127 @@
1
+ require 'rdf/redland'
2
+
3
+ module RdfaHelper
4
+ # Class representing test cases in format http://www.w3.org/2006/03/test-description#
5
+ class TestCase
6
+ TEST_DIR = File.join(File.dirname(__FILE__), 'xhtml1-testcases')
7
+
8
+ attr_accessor :about
9
+ attr_accessor :name
10
+ attr_accessor :contributor
11
+ attr_accessor :title
12
+ attr_accessor :informationResourceInput
13
+ attr_accessor :originalInformationResourceInput
14
+ attr_accessor :informationResourceResults
15
+ attr_accessor :originalInformationResourceResults
16
+ attr_accessor :purpose
17
+ attr_accessor :reviewStatus
18
+ attr_accessor :specificationReference
19
+ attr_accessor :expected_results
20
+
21
+ @@test_cases = []
22
+
23
+ def initialize(statements)
24
+ expected_results = true
25
+ statements.each do |statement|
26
+ next if statement.subject.is_a?(Redland::BNode)
27
+ unless self.about
28
+ self.about = URI.parse(statement.subject.uri.to_s)
29
+ self.name = statement.subject.uri.short_name
30
+ end
31
+
32
+ if statement.predicate.uri.short_name == "informationResourceInput"
33
+ self.informationResourceInput = statement.object.uri.to_s.sub!(/^.*xhtml1-testcases/, TEST_DIR)
34
+ self.originalInformationResourceInput = statement.object.uri.to_s
35
+ elsif statement.predicate.uri.short_name == "informationResourceResults"
36
+ self.informationResourceResults = statement.object.uri.to_s.sub!(/^.*xhtml1-testcases/, TEST_DIR)
37
+ self.originalInformationResourceResults = statement.object.uri.to_s
38
+ elsif self.respond_to?("#{statement.predicate.uri.short_name}=")
39
+ s = case
40
+ when statement.object.literal? then statement.object.literal
41
+ when statement.object.resource? then statement.object.uri
42
+ when statement.object.blank? then statement.object.blank_identifier
43
+ else false
44
+ end
45
+ self.send("#{statement.predicate.uri.short_name}=", s.to_s)
46
+ end
47
+ end
48
+ end
49
+
50
+ def information
51
+ %w(purpose specificationReference).map {|a| v = self.send(a); "#{a}: #{v}" if v}.compact.join("\n")
52
+ end
53
+
54
+ def self.parse_test_cases
55
+ return unless @@test_cases.empty?
56
+
57
+ manifest = File.read(File.join(TEST_DIR, "rdfa-xhtml1-test-manifest.rdf"))
58
+ rdfxml_parser = Redland::Parser.new
59
+ test_hash = {}
60
+ rdfxml_parser.parse_string_as_stream(manifest, "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/rdfa-xhtml1-test-manifest.rdf") do |st|
61
+ a = test_hash[st.subject.uri.to_s] ||= []
62
+ a << st
63
+ end
64
+
65
+ @@test_cases = test_hash.values.map {|statements| TestCase.new(statements)}.
66
+ compact.
67
+ select{|t| t.reviewStatus == "http://www.w3.org/2006/03/test-description#approved"}.
68
+ sort_by{|t| t.about.is_a?(URI) ? t.about.to_s : "zzz"}
69
+ end
70
+
71
+ def self.test_cases; parse_test_cases; @@test_cases; end
72
+ end
73
+ end
74
+
75
+
76
+ class Redland::Uri
77
+ def short_name
78
+ u = URI.parse(self.to_s)
79
+ if u.fragment
80
+ return u.fragment
81
+ elsif u.path.split("/").last.class == String and u.path.split("/").last.length > 0
82
+ return u.path.split("/").last
83
+ else
84
+ return false
85
+ end
86
+ end
87
+ end
88
+
89
+ # Simple parser for NTriples
90
+ class NTriplesParser
91
+ attr_reader :graph
92
+
93
+ def initialize(string)
94
+ @graph = RdfaParser::Graph.new
95
+ RdfaParser::BNode.reset
96
+
97
+ ntriples_parser = Redland::Parser.ntriples
98
+ ntriples_parser.parse_string_as_stream(string, "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/") do |st|
99
+ s = redland_to_native(st.subject)
100
+ p = redland_to_native(st.predicate)
101
+ o = redland_to_native(st.object)
102
+ @graph.add_triple(s, p, o)
103
+ end
104
+ end
105
+
106
+ def redland_to_native(resource)
107
+ # puts resource.inspect
108
+ case
109
+ when resource.literal?
110
+ node_type = Redland.librdf_node_get_literal_value_datatype_uri(resource.literal.node)
111
+ node_type = Redland.librdf_uri_to_string(node_type) if node_type
112
+ RdfaParser::Literal.typed(resource.literal.value, node_type, :language => resource.literal.language)
113
+ when resource.blank?
114
+ # Cache anonymous blank identifiers
115
+ @bn_hash ||= {}
116
+ id = resource.blank_identifier.to_s
117
+ id = nil if id.match(/^r[r\d]+$/)
118
+ bn = @bn_hash[resource.blank_identifier.to_s] ||= RdfaParser::BNode.new(id)
119
+ bn.identifier
120
+ bn
121
+ when resource.resource?
122
+ RdfaParser::URIRef.new(resource.uri.to_s)
123
+ else
124
+ nil
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,119 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ require 'rdfa_helper'
4
+
5
+ # Time to add your specs!
6
+ # http://rspec.info/
7
+ describe "RDFa parser" do
8
+ it "should parse simple doc" do
9
+ sampledoc = <<-EOF;
10
+ <?xml version="1.0" encoding="UTF-8"?>
11
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
12
+ <html xmlns="http://www.w3.org/1999/xhtml"
13
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
14
+ <head>
15
+ <title>Test 0001</title>
16
+ </head>
17
+ <body>
18
+ <p>This photo was taken by <span class="author" about="photo1.jpg" property="dc:creator">Mark Birbeck</span>.</p>
19
+ </body>
20
+ </html>
21
+ EOF
22
+
23
+ parser = RdfaParser::RdfaParser.new
24
+ parser.parse(sampledoc, "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0001.xhtml")
25
+ parser.graph.size.should == 1
26
+
27
+ parser.graph.to_rdfxml.should be_valid_xml
28
+ end
29
+
30
+ it "should parse XML Literal and generate valid XML" do
31
+ sampledoc = <<-EOF
32
+ <?xml version="1.0" encoding="UTF-8"?>
33
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
34
+ <html xmlns="http://www.w3.org/1999/xhtml"
35
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
36
+ <head>
37
+ <title>Test 0011</title>
38
+ </head>
39
+ <body>
40
+ <div about="">
41
+ Author: <span property="dc:creator">Albert Einstein</span>
42
+ <h2 property="dc:title">E = mc<sup>2</sup>: The Most Urgent Problem of Our Time</h2>
43
+ </div>
44
+ </body>
45
+ </html>
46
+ EOF
47
+
48
+ parser = RdfaParser::RdfaParser.new
49
+ parser.parse(sampledoc, "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0011.xhtml")
50
+ parser.graph.size.should == 2
51
+
52
+ xml = parser.graph.to_rdfxml
53
+ xml.should be_valid_xml
54
+
55
+ # Ensure that enclosed literal is also valid
56
+ xml.should include("E = mc<sup xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns=\"http://www.w3.org/1999/xhtml\">2</sup>: The Most Urgent Problem of Our Time")
57
+ end
58
+
59
+
60
+ it "should parse BNodes" do
61
+ sampledoc = <<-EOF
62
+ <?xml version="1.0" encoding="UTF-8"?>
63
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
64
+ <html xmlns="http://www.w3.org/1999/xhtml"
65
+ xmlns:foaf="http://xmlns.com/foaf/0.1/">
66
+ <head>
67
+ <title>Test 0017</title>
68
+ </head>
69
+ <body>
70
+ <p>
71
+ <span about="[_:a]" property="foaf:name">Manu Sporny</span>
72
+ <span about="[_:a]" rel="foaf:knows"
73
+ resource="[_:b]">knows</span>
74
+ <span about="[_:b]" property="foaf:name">Ralph Swick</span>.
75
+ </p>
76
+ </body>
77
+ </html>
78
+ EOF
79
+
80
+ parser = RdfaParser::RdfaParser.new
81
+ parser.parse(sampledoc, "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0011.xhtml")
82
+ parser.graph.size.should == 3
83
+
84
+ xml = parser.graph.to_rdfxml
85
+ xml.should be_valid_xml
86
+
87
+ xml.should include("Ralph Swick")
88
+ xml.should include("Manu Sporny")
89
+ end
90
+
91
+ # W3C Test suite from http://www.w3.org/2006/07/SWD/RDFa/testsuite/
92
+ describe "w3c xhtml1 testcases" do
93
+ def self.test_cases
94
+ RdfaHelper::TestCase.test_cases
95
+ end
96
+
97
+ test_cases.each do |t|
98
+ #next unless t.name == "Test0100"
99
+ specify "test #{t.name}: #{t.title}" do
100
+ rdfa_string = File.read(t.informationResourceInput)
101
+ rdfa_parser = RdfaParser::RdfaParser.new
102
+ rdfa_parser.parse(rdfa_string, t.originalInformationResourceInput)
103
+
104
+ query_string = t.informationResourceResults ? File.read(t.informationResourceResults) : ""
105
+
106
+ if query_string.match(/UNION|OPTIONAL/)
107
+ # Check triples, as Rasql doesn't implement UNION
108
+ ntriples = File.read(t.informationResourceResults.sub("sparql", "nt"))
109
+ parser = NTriplesParser.new(ntriples)
110
+ rdfa_parser.graph.should be_equivalent_graph(parser.graph, t.information)
111
+ else
112
+ rdfa_parser.graph.should pass_query(query_string, t.information)
113
+ end
114
+
115
+ rdfa_parser.graph.to_rdfxml.should be_valid_xml
116
+ end
117
+ end
118
+ end
119
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,23 @@
1
+ begin
2
+ require 'spec'
3
+ require 'activesupport'
4
+ rescue LoadError
5
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
6
+ gem 'rspec'
7
+ require 'spec'
8
+ gem 'activesupport'
9
+ require 'activesupport'
10
+ end
11
+
12
+ ActiveSupport::XmlMini.backend = 'Nokogiri'
13
+
14
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
+ $:.unshift File.dirname(__FILE__)
16
+ require 'rdfa_parser'
17
+ require 'matchers'
18
+
19
+ include RdfaParser
20
+
21
+ Spec::Runner.configure do |config|
22
+ config.include(Matchers)
23
+ end