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
@@ -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