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
@@ -0,0 +1,375 @@
1
+ require 'iconv'
2
+
3
+ module RdfaParser
4
+ # An RDF Literal, with value, encoding and language elements.
5
+ class Literal
6
+ class Encoding
7
+ attr_reader :value
8
+
9
+ def self.integer
10
+ @integer ||= coerce "http://www.w3.org/2001/XMLSchema#int"
11
+ end
12
+
13
+ def self.float
14
+ @float ||= coerce "http://www.w3.org/2001/XMLSchema#float"
15
+ end
16
+
17
+ def self.string
18
+ @string ||= coerce "http://www.w3.org/2001/XMLSchema#string"
19
+ end
20
+
21
+ def self.coerce(string_or_nil)
22
+ if string_or_nil.nil? || string_or_nil == ''
23
+ the_null_encoding
24
+ elsif xmlliteral == string_or_nil.to_s
25
+ xmlliteral
26
+ else
27
+ new string_or_nil
28
+ end
29
+ end
30
+
31
+ def inspect
32
+ to_s()
33
+ end
34
+
35
+ def self.the_null_encoding
36
+ @the_null_encoding ||= Null.new(nil)
37
+ end
38
+
39
+ def self.xmlliteral
40
+ @xmlliteral ||= XMLLiteral.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")
41
+ end
42
+
43
+ def initialize(value)
44
+ @value = URIRef.new(value.to_s) if value
45
+ end
46
+
47
+ def should_quote?
48
+ #@value != self.class.integer.to_s
49
+ true # All non-XML literals are quoted per W3C RDF Test Cases
50
+ end
51
+
52
+ def ==(other)
53
+ case other
54
+ when String
55
+ other == @value.to_s
56
+ when self.class
57
+ other.value.to_s == @value.to_s
58
+ else
59
+ false
60
+ end
61
+ end
62
+
63
+ def hash
64
+ @value.hash
65
+ end
66
+
67
+ def to_s
68
+ @value.to_s
69
+ end
70
+
71
+ # Serialize literal, adding datatype and language elements, if present.
72
+ # XMLLiteral and String values are encoding using C-style strings with
73
+ # non-printable ASCII characters escaped.
74
+ def format_as_n3(content, lang)
75
+ content = c_style(content.to_s)
76
+ quoted_content = should_quote? ? "\"#{content}\"" : content
77
+ "#{quoted_content}^^<#{value}>#{lang ? "@#{lang}" : ""}"
78
+ end
79
+
80
+ def format_as_trix(content, lang)
81
+ lang = " xml:lang=\"#{lang}\"" if lang
82
+ "<typedLiteral datatype=\"#{@value}\"#{lang}>#{content}</typedLiteral>"
83
+ end
84
+
85
+ def xml_args(content, lang)
86
+ hash = {"rdf:datatype" => @value.to_s}
87
+ hash["xml:lang"] = lang if lang
88
+ [content.to_s, hash]
89
+ end
90
+
91
+ def compare_contents(a, b, same_lang)
92
+ a == b && same_lang
93
+ end
94
+
95
+ def encode_contents(contents, options)
96
+ contents
97
+ end
98
+
99
+ def xmlliteral?
100
+ false
101
+ end
102
+
103
+ #private
104
+ # "Borrowed" from JSON utf8_to_json
105
+ MAP = {
106
+ "\x0" => '\u0000',
107
+ "\x1" => '\u0001',
108
+ "\x2" => '\u0002',
109
+ "\x3" => '\u0003',
110
+ "\x4" => '\u0004',
111
+ "\x5" => '\u0005',
112
+ "\x6" => '\u0006',
113
+ "\x7" => '\u0007',
114
+ "\b" => '\b',
115
+ "\t" => '\t',
116
+ "\n" => '\n',
117
+ "\xb" => '\u000B',
118
+ "\f" => '\f',
119
+ "\r" => '\r',
120
+ "\xe" => '\u000E',
121
+ "\xf" => '\u000F',
122
+ "\x10" => '\u0010',
123
+ "\x11" => '\u0011',
124
+ "\x12" => '\u0012',
125
+ "\x13" => '\u0013',
126
+ "\x14" => '\u0014',
127
+ "\x15" => '\u0015',
128
+ "\x16" => '\u0016',
129
+ "\x17" => '\u0017',
130
+ "\x18" => '\u0018',
131
+ "\x19" => '\u0019',
132
+ "\x1a" => '\u001A',
133
+ "\x1b" => '\u001B',
134
+ "\x1c" => '\u001C',
135
+ "\x1d" => '\u001D',
136
+ "\x1e" => '\u001E',
137
+ "\x1f" => '\u001F',
138
+ '"' => '\"',
139
+ '\\' => '\\\\',
140
+ '/' => '/',
141
+ } # :nodoc:
142
+
143
+ # Convert a UTF8 encoded Ruby string _string_ to a C-style string, encoded with
144
+ # UTF16 big endian characters as \U????, and return it.
145
+ if String.method_defined?(:force_encoding)
146
+ def c_style(string) # :nodoc:
147
+ string << '' # XXX workaround: avoid buffer sharing
148
+ string.force_encoding(Encoding::ASCII_8BIT)
149
+ string.gsub!(/["\\\/\x0-\x1f]/) { MAP[$&] }
150
+ string.gsub!(/(
151
+ (?:
152
+ [\xc2-\xdf][\x80-\xbf] |
153
+ [\xe0-\xef][\x80-\xbf]{2} |
154
+ [\xf0-\xf4][\x80-\xbf]{3}
155
+ )+ |
156
+ [\x80-\xc1\xf5-\xff] # invalid
157
+ )/nx) { |c|
158
+ c.size == 1 and raise TypeError, "invalid utf8 byte: '#{c}'"
159
+ s = Iconv.new('utf-16be', 'utf-8').iconv(c).unpack('H*')[0].upcase
160
+ s.gsub!(/.{4}/n, '\\\\u\&')
161
+ }
162
+ string.force_encoding(Encoding::UTF_8)
163
+ string
164
+ end
165
+ else
166
+ def c_style(string) # :nodoc:
167
+ string = string.gsub(/["\\\/\x0-\x1f]/) { MAP[$&] }
168
+ string.gsub!(/(
169
+ (?:
170
+ [\xc2-\xdf][\x80-\xbf] |
171
+ [\xe0-\xef][\x80-\xbf]{2} |
172
+ [\xf0-\xf4][\x80-\xbf]{3}
173
+ )+ |
174
+ [\x80-\xc1\xf5-\xff] # invalid
175
+ )/nx) { |c|
176
+ c.size == 1 and raise TypeError, "invalid utf8 byte: '#{c}'"
177
+ s = Iconv.new('utf-16be', 'utf-8').iconv(c).unpack('H*')[0].upcase
178
+ s.gsub!(/.{4}/n, '\\\\u\&')
179
+ }
180
+ string
181
+ end
182
+ end
183
+ end
184
+
185
+ class Null < Encoding
186
+ def to_s
187
+ ''
188
+ end
189
+
190
+ def format_as_n3(content, lang)
191
+ "\"#{c_style(content)}\"" + (lang ? "@#{lang}" : "")
192
+ # Perform translation on value if it's typed
193
+ end
194
+
195
+ def format_as_trix(content, lang)
196
+ if lang
197
+ "<plainLiteral xml:lang=\"#{lang}\"\>#{content}</plainLiteral>"
198
+ else
199
+ "<plainLiteral>#{content}</plainLiteral>"
200
+ end
201
+ end
202
+
203
+ def xml_args(content, lang)
204
+ hash = {}
205
+ hash["xml:lang"] = lang if lang
206
+ [content, hash]
207
+ end
208
+
209
+ def inspect
210
+ "<theReddy::TypeLiteral::Encoding::Null>"
211
+ end
212
+
213
+ def xmlliteral?
214
+ false
215
+ end
216
+ end
217
+
218
+ class XMLLiteral < Encoding
219
+ # Compare XMLLiterals
220
+ # FIXME: Nokogiri doesn't do a deep compare of elements
221
+ def compare_contents(a, b, same_lang)
222
+ begin
223
+ a_hash = ActiveSupport::XmlMini.parse("<foo>#{a}</foo>")
224
+ b_hash = ActiveSupport::XmlMini.parse("<foo>#{b}</foo>")
225
+ a_hash == b_hash
226
+ rescue
227
+ super
228
+ end
229
+ end
230
+
231
+ def format_as_n3(content, lang)
232
+ "\"#{c_style(content)}\"^^<#{value}>"
233
+ end
234
+
235
+ def format_as_trix(content, lang)
236
+ "<typedLiteral datatype=\"#{@value}\">#{content}</typedLiteral>"
237
+ end
238
+
239
+ def xml_args(content, lang)
240
+ hash = {"rdf:parseType" => "Literal"}
241
+ [content, hash]
242
+ end
243
+
244
+ # Map namespaces from context to each top-level element found within snippet
245
+ def encode_contents(contents, options)
246
+ ns_hash = options[:namespaces].values.inject({}) {|h, ns| h.merge(ns.xmlns_hash)}
247
+ ns_strs = []
248
+ ns_hash.each_pair {|a, u| ns_strs << "#{a}=\"#{u}\""}
249
+
250
+ # Add inherited namespaces to created root element so that they're inherited to sub-elements
251
+ contents = Nokogiri::XML::Document.parse("<foo #{ns_strs.join(" ")}>#{contents}</foo>").root
252
+
253
+ @contents = contents.children.map do |c|
254
+ if c.is_a?(Nokogiri::XML::Element)
255
+ ns_hash.each_pair { |a, u| c[a] = u unless c.namespaces[a]}
256
+ if options[:language] && c["lang"].to_s.empty?
257
+ c["xml:lang"] = options[:language]
258
+ end
259
+ end
260
+ c.to_html
261
+ end.join("")
262
+ end
263
+
264
+ def xmlliteral?
265
+ true
266
+ end
267
+ end
268
+
269
+ class Language
270
+ attr_accessor :value
271
+ def initialize(string)
272
+ @value = string.to_s.downcase
273
+ end
274
+
275
+ def clean(string)
276
+ case string
277
+ when "eng"; "en"
278
+ else string
279
+ end
280
+ end
281
+
282
+ def == (other)
283
+ case other
284
+ when String
285
+ other == @value
286
+ when self.class
287
+ other.value == @value
288
+ end
289
+ end
290
+
291
+ def to_s; @value; end
292
+ end
293
+
294
+ attr_accessor :contents, :encoding, :lang
295
+
296
+ # Create a new Literal. Optinally pass a namespaces hash
297
+ # for use in applying to rdf::XMLLiteral values.
298
+ def initialize(contents, encoding, options = {})
299
+ unless encoding.is_a?(Encoding)
300
+ raise TypeError, "#{encoding.inspect} should be an instance of Encoding"
301
+ end
302
+ @encoding = encoding
303
+ lang = options[:language]
304
+ @lang = Language.new(lang) if lang
305
+ options = {:namespaces => {}}.merge(options)
306
+
307
+ @contents = @encoding.encode_contents(contents, options)
308
+ end
309
+
310
+ def self.untyped(contents, language = nil)
311
+ options = {}
312
+ options[:language] = language if language
313
+ new(contents, Encoding.the_null_encoding, options)
314
+ end
315
+
316
+ # Options include:
317
+ # _namespaces_:: A hash of namespace entries (for XMLLiteral)
318
+ # _language_:: Language encoding
319
+ def self.typed(contents, encoding, options = {})
320
+ encoding = Encoding.coerce(encoding)
321
+ new(contents, encoding, options)
322
+ end
323
+
324
+ def self.build_from(object)
325
+ new(object.to_s, infer_encoding_for(object))
326
+ end
327
+
328
+ def self.infer_encoding_for(object)
329
+ case object
330
+ when Integer then Encoding.new("http://www.w3.org/2001/XMLSchema#int")
331
+ when Float then Encoding.new("http://www.w3.org/2001/XMLSchema#float")
332
+ when Time then Encoding.new("http://www.w3.org/2001/XMLSchema#time")
333
+ when DateTime then Encoding.new("http://www.w3.org/2001/XMLSchema#dateTime")
334
+ when Date then Encoding.new("http://www.w3.org/2001/XMLSchema#date")
335
+ else Encoding.new("http://www.w3.org/2001/XMLSchema#string")
336
+ end
337
+ end
338
+
339
+ class << self
340
+ protected :new
341
+ end
342
+
343
+ def ==(other)
344
+ case other
345
+ when String then other == self.contents
346
+ when self.class
347
+ other.encoding == @encoding &&
348
+ @encoding.compare_contents(self.contents, other.contents, other.lang == @lang)
349
+ else false
350
+ end
351
+ end
352
+
353
+ def to_n3
354
+ encoding.format_as_n3(self.contents, @lang)
355
+ end
356
+ alias_method :to_ntriples, :to_n3
357
+
358
+ def to_trix
359
+ encoding.format_as_trix(@contents, @lang)
360
+ end
361
+
362
+ def xml_args
363
+ encoding.xml_args( @contents, @lang)
364
+ end
365
+
366
+ def xmlliteral?
367
+ encoding.xmlliteral?
368
+ end
369
+
370
+ # Output value
371
+ def to_s
372
+ self.contents.to_s
373
+ end
374
+ end
375
+ end
@@ -0,0 +1,91 @@
1
+ module RdfaParser
2
+ # From Reddy
3
+ class Namespace
4
+ attr_accessor :short, :uri, :fragment
5
+
6
+ ##
7
+ # Creates a new namespace given a URI and the short name.
8
+ #
9
+ # ==== Example
10
+ # Namespace.new("http://xmlns.com/foaf/0.1/", "foaf") # => returns a new Foaf namespace
11
+ #
12
+ # @param [String] uri the URI of the namespace
13
+ # @param [String] short the short name of the namespace
14
+ # @param [Boolean] fragment are the identifiers on this resource fragment identifiers? (e.g. '#') Defaults to false.
15
+ #
16
+ # ==== Returns
17
+ # @return [Namespace] The newly created namespace.
18
+ #
19
+ # @raise [Error] Checks validity of the desired shortname and raises if it is incorrect.
20
+ # [gk] nil is a valid shortname to specify the default namespace
21
+ # @author Tom Morris, Pius Uzamere
22
+
23
+ def initialize(uri, short, fragment = nil)
24
+ @uri = URIRef.new(uri) unless uri.is_a?(URIRef)
25
+ @fragment = fragment
26
+ @fragment = uri.to_s.match(/\#$/) ? true : false if fragment.nil?
27
+ short = nil if short.to_s.empty?
28
+ if shortname_valid?(short)
29
+ @short = short
30
+ else
31
+ raise ParserException, "Invalid shortname '#{short}"
32
+ end
33
+ end
34
+
35
+ ##
36
+ # Allows the construction of arbitrary URIs on the namespace.
37
+ #
38
+ # ==== Example
39
+ # foaf = Namespace.new("http://xmlns.com/foaf/0.1/", "foaf"); foaf.knows # => returns a new URIRef with URI "http://xmlns.com/foaf/0.1/knows"
40
+ # foaf = Namespace.new("http://xmlns.com/foaf/0.1/", "foaf", true); foaf.knows # => returns a new URIRef with URI "http://xmlns.com/foaf/0.1/#knows"
41
+ #
42
+ # @param [String] uri the URI of the namespace
43
+ # @param [String] short the short name of the namespace
44
+ # @param [Boolean] fragment are the identifiers on this resource fragment identifiers? (e.g. '#') Defaults to false.
45
+ #
46
+ # ==== Returns
47
+ # @return [URIRef] The newly created URIRegerence.
48
+ #
49
+ # @raise [Error] Checks validity of the desired shortname and raises if it is incorrect.
50
+ # @author Tom Morris, Pius Uzamere
51
+
52
+ def method_missing(methodname, *args)
53
+ self + methodname
54
+ end
55
+
56
+ # Construct a URIRef from a namespace as in method_missing, but without method collision issues
57
+ def +(suffix)
58
+ URIRef.new((fragment ? "##{suffix}" : suffix.to_s), @uri)
59
+ end
60
+
61
+ def bind(graph)
62
+ if graph.class == Graph
63
+ graph.bind(self)
64
+ else
65
+ raise GraphException, "Can't bind namespace to graph of type #{graph.class}"
66
+ end
67
+ end
68
+
69
+ # Output xmlns attribute name
70
+ def xmlns_attr
71
+ short.nil? ? "xmlns" : "xmlns:#{short}"
72
+ end
73
+
74
+ def xmlns_hash
75
+ {xmlns_attr => @uri.to_s}
76
+ end
77
+
78
+ def inspect
79
+ "Namespace[abbr='#{short}',uri='#{uri}']"
80
+ end
81
+
82
+ private
83
+ def shortname_valid?(shortname)
84
+ if shortname =~ /[a-zA-Z_][a-zA-Z0-9_]+/ || shortname.nil?
85
+ return true
86
+ else
87
+ return false
88
+ end
89
+ end
90
+ end
91
+ end