rdfa_parser 0.1.0

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