rdfa_parser 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/History.txt +47 -0
- data/README.rdoc +61 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/bin/rdfa_parser +55 -0
- data/lib/rdfa_parser.rb +35 -0
- data/lib/rdfa_parser/bnode.rb +92 -0
- data/lib/rdfa_parser/exceptions.rb +11 -0
- data/lib/rdfa_parser/graph.rb +222 -0
- data/lib/rdfa_parser/literal.rb +375 -0
- data/lib/rdfa_parser/namespace.rb +91 -0
- data/lib/rdfa_parser/rdfa_parser.rb +415 -0
- data/lib/rdfa_parser/triple.rb +100 -0
- data/lib/rdfa_parser/uriref.rb +94 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/bnode_spec.rb +51 -0
- data/spec/graph_spec.rb +230 -0
- data/spec/literal_spec.rb +282 -0
- data/spec/matchers.rb +134 -0
- data/spec/namespace_spec.rb +61 -0
- data/spec/rdfa_helper.rb +127 -0
- data/spec/rdfa_parser_spec.rb +119 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/triple_spec.rb +145 -0
- data/spec/uriref_spec.rb +117 -0
- data/spec/xhtml1-testcases/.sparql +13 -0
- data/spec/xhtml1-testcases/0001.nt +1 -0
- data/spec/xhtml1-testcases/0001.sparql +3 -0
- data/spec/xhtml1-testcases/0001.xhtml +11 -0
- data/spec/xhtml1-testcases/0002.sparql +3 -0
- data/spec/xhtml1-testcases/0003.sparql +3 -0
- data/spec/xhtml1-testcases/0006.nt +2 -0
- data/spec/xhtml1-testcases/0006.sparql +8 -0
- data/spec/xhtml1-testcases/0006.xhtml +16 -0
- data/spec/xhtml1-testcases/0007.nt +3 -0
- data/spec/xhtml1-testcases/0007.sparql +5 -0
- data/spec/xhtml1-testcases/0007.xhtml +16 -0
- data/spec/xhtml1-testcases/0008.nt +1 -0
- data/spec/xhtml1-testcases/0008.sparql +3 -0
- data/spec/xhtml1-testcases/0008.xhtml +16 -0
- data/spec/xhtml1-testcases/0009.nt +1 -0
- data/spec/xhtml1-testcases/0009.sparql +3 -0
- data/spec/xhtml1-testcases/0009.xhtml +14 -0
- data/spec/xhtml1-testcases/0010.nt +2 -0
- data/spec/xhtml1-testcases/0010.sparql +4 -0
- data/spec/xhtml1-testcases/0010.xhtml +13 -0
- data/spec/xhtml1-testcases/0011.nt +3 -0
- data/spec/xhtml1-testcases/0011.sparql +17 -0
- data/spec/xhtml1-testcases/0011.xhtml +14 -0
- data/spec/xhtml1-testcases/0012.nt +1 -0
- data/spec/xhtml1-testcases/0012.sparql +3 -0
- data/spec/xhtml1-testcases/0012.xhtml +12 -0
- data/spec/xhtml1-testcases/0013.nt +1 -0
- data/spec/xhtml1-testcases/0013.sparql +3 -0
- data/spec/xhtml1-testcases/0013.xhtml +12 -0
- data/spec/xhtml1-testcases/0014.nt +1 -0
- data/spec/xhtml1-testcases/0014.sparql +3 -0
- data/spec/xhtml1-testcases/0014.xhtml +15 -0
- data/spec/xhtml1-testcases/0015.nt +2 -0
- data/spec/xhtml1-testcases/0015.sparql +4 -0
- data/spec/xhtml1-testcases/0015.xhtml +13 -0
- data/spec/xhtml1-testcases/0017.nt +3 -0
- data/spec/xhtml1-testcases/0017.sparql +6 -0
- data/spec/xhtml1-testcases/0017.xhtml +16 -0
- data/spec/xhtml1-testcases/0018.nt +1 -0
- data/spec/xhtml1-testcases/0018.sparql +3 -0
- data/spec/xhtml1-testcases/0018.xhtml +17 -0
- data/spec/xhtml1-testcases/0019.nt +1 -0
- data/spec/xhtml1-testcases/0019.sparql +3 -0
- data/spec/xhtml1-testcases/0019.xhtml +14 -0
- data/spec/xhtml1-testcases/0020.nt +1 -0
- data/spec/xhtml1-testcases/0020.sparql +3 -0
- data/spec/xhtml1-testcases/0020.xhtml +17 -0
- data/spec/xhtml1-testcases/0021.nt +1 -0
- data/spec/xhtml1-testcases/0021.sparql +3 -0
- data/spec/xhtml1-testcases/0021.xhtml +17 -0
- data/spec/xhtml1-testcases/0023.nt +1 -0
- data/spec/xhtml1-testcases/0023.sparql +3 -0
- data/spec/xhtml1-testcases/0023.xhtml +16 -0
- data/spec/xhtml1-testcases/0025.nt +2 -0
- data/spec/xhtml1-testcases/0025.sparql +4 -0
- data/spec/xhtml1-testcases/0025.xhtml +19 -0
- data/spec/xhtml1-testcases/0026.nt +1 -0
- data/spec/xhtml1-testcases/0026.sparql +3 -0
- data/spec/xhtml1-testcases/0026.xhtml +16 -0
- data/spec/xhtml1-testcases/0027.nt +1 -0
- data/spec/xhtml1-testcases/0027.sparql +3 -0
- data/spec/xhtml1-testcases/0027.xhtml +17 -0
- data/spec/xhtml1-testcases/0029.nt +1 -0
- data/spec/xhtml1-testcases/0029.sparql +3 -0
- data/spec/xhtml1-testcases/0029.xhtml +17 -0
- data/spec/xhtml1-testcases/0030.nt +1 -0
- data/spec/xhtml1-testcases/0030.sparql +3 -0
- data/spec/xhtml1-testcases/0030.xhtml +16 -0
- data/spec/xhtml1-testcases/0031.nt +1 -0
- data/spec/xhtml1-testcases/0031.sparql +3 -0
- data/spec/xhtml1-testcases/0031.xhtml +14 -0
- data/spec/xhtml1-testcases/0032.nt +1 -0
- data/spec/xhtml1-testcases/0032.sparql +3 -0
- data/spec/xhtml1-testcases/0032.xhtml +15 -0
- data/spec/xhtml1-testcases/0033.nt +2 -0
- data/spec/xhtml1-testcases/0033.sparql +5 -0
- data/spec/xhtml1-testcases/0033.xhtml +19 -0
- data/spec/xhtml1-testcases/0034.nt +1 -0
- data/spec/xhtml1-testcases/0034.sparql +3 -0
- data/spec/xhtml1-testcases/0034.xhtml +14 -0
- data/spec/xhtml1-testcases/0035.nt +1 -0
- data/spec/xhtml1-testcases/0035.sparql +3 -0
- data/spec/xhtml1-testcases/0035.xhtml +17 -0
- data/spec/xhtml1-testcases/0036.nt +1 -0
- data/spec/xhtml1-testcases/0036.sparql +3 -0
- data/spec/xhtml1-testcases/0036.xhtml +17 -0
- data/spec/xhtml1-testcases/0037.nt +1 -0
- data/spec/xhtml1-testcases/0037.sparql +3 -0
- data/spec/xhtml1-testcases/0037.xhtml +18 -0
- data/spec/xhtml1-testcases/0038.nt +1 -0
- data/spec/xhtml1-testcases/0038.sparql +3 -0
- data/spec/xhtml1-testcases/0038.xhtml +14 -0
- data/spec/xhtml1-testcases/0039.nt +1 -0
- data/spec/xhtml1-testcases/0039.sparql +3 -0
- data/spec/xhtml1-testcases/0039.xhtml +17 -0
- data/spec/xhtml1-testcases/0040.nt +1 -0
- data/spec/xhtml1-testcases/0040.sparql +3 -0
- data/spec/xhtml1-testcases/0040.xhtml +16 -0
- data/spec/xhtml1-testcases/0041.nt +1 -0
- data/spec/xhtml1-testcases/0041.sparql +3 -0
- data/spec/xhtml1-testcases/0041.xhtml +18 -0
- data/spec/xhtml1-testcases/0042.nt +0 -0
- data/spec/xhtml1-testcases/0042.sparql +4 -0
- data/spec/xhtml1-testcases/0042.xhtml +15 -0
- data/spec/xhtml1-testcases/0046.nt +3 -0
- data/spec/xhtml1-testcases/0046.sparql +6 -0
- data/spec/xhtml1-testcases/0046.xhtml +13 -0
- data/spec/xhtml1-testcases/0047.nt +3 -0
- data/spec/xhtml1-testcases/0047.sparql +6 -0
- data/spec/xhtml1-testcases/0047.xhtml +13 -0
- data/spec/xhtml1-testcases/0048.nt +3 -0
- data/spec/xhtml1-testcases/0048.sparql +6 -0
- data/spec/xhtml1-testcases/0048.xhtml +14 -0
- data/spec/xhtml1-testcases/0049.nt +2 -0
- data/spec/xhtml1-testcases/0049.sparql +4 -0
- data/spec/xhtml1-testcases/0049.xhtml +14 -0
- data/spec/xhtml1-testcases/0050.nt +2 -0
- data/spec/xhtml1-testcases/0050.sparql +5 -0
- data/spec/xhtml1-testcases/0050.xhtml +14 -0
- data/spec/xhtml1-testcases/0051.nt +2 -0
- data/spec/xhtml1-testcases/0051.sparql +4 -0
- data/spec/xhtml1-testcases/0051.xhtml +12 -0
- data/spec/xhtml1-testcases/0052.nt +1 -0
- data/spec/xhtml1-testcases/0052.sparql +3 -0
- data/spec/xhtml1-testcases/0052.xhtml +13 -0
- data/spec/xhtml1-testcases/0053.nt +2 -0
- data/spec/xhtml1-testcases/0053.sparql +4 -0
- data/spec/xhtml1-testcases/0053.xhtml +13 -0
- data/spec/xhtml1-testcases/0054.nt +2 -0
- data/spec/xhtml1-testcases/0054.sparql +4 -0
- data/spec/xhtml1-testcases/0054.xhtml +14 -0
- data/spec/xhtml1-testcases/0055.nt +2 -0
- data/spec/xhtml1-testcases/0055.sparql +4 -0
- data/spec/xhtml1-testcases/0055.xhtml +16 -0
- data/spec/xhtml1-testcases/0056.nt +3 -0
- data/spec/xhtml1-testcases/0056.sparql +5 -0
- data/spec/xhtml1-testcases/0056.xhtml +13 -0
- data/spec/xhtml1-testcases/0057.nt +4 -0
- data/spec/xhtml1-testcases/0057.sparql +6 -0
- data/spec/xhtml1-testcases/0057.xhtml +14 -0
- data/spec/xhtml1-testcases/0058.nt +6 -0
- data/spec/xhtml1-testcases/0058.sparql +9 -0
- data/spec/xhtml1-testcases/0058.xhtml +14 -0
- data/spec/xhtml1-testcases/0059.nt +6 -0
- data/spec/xhtml1-testcases/0059.sparql +8 -0
- data/spec/xhtml1-testcases/0059.xhtml +16 -0
- data/spec/xhtml1-testcases/0060.nt +2 -0
- data/spec/xhtml1-testcases/0060.sparql +4 -0
- data/spec/xhtml1-testcases/0060.xhtml +14 -0
- data/spec/xhtml1-testcases/0061.nt +1 -0
- data/spec/xhtml1-testcases/0061.sparql +3 -0
- data/spec/xhtml1-testcases/0061.xhtml +11 -0
- data/spec/xhtml1-testcases/0062.nt +1 -0
- data/spec/xhtml1-testcases/0062.sparql +3 -0
- data/spec/xhtml1-testcases/0062.xhtml +12 -0
- data/spec/xhtml1-testcases/0063.nt +1 -0
- data/spec/xhtml1-testcases/0063.sparql +3 -0
- data/spec/xhtml1-testcases/0063.xhtml +11 -0
- data/spec/xhtml1-testcases/0064.nt +1 -0
- data/spec/xhtml1-testcases/0064.sparql +4 -0
- data/spec/xhtml1-testcases/0064.xhtml +13 -0
- data/spec/xhtml1-testcases/0065.nt +3 -0
- data/spec/xhtml1-testcases/0065.sparql +6 -0
- data/spec/xhtml1-testcases/0065.xhtml +22 -0
- data/spec/xhtml1-testcases/0066.nt +1 -0
- data/spec/xhtml1-testcases/0066.sparql +3 -0
- data/spec/xhtml1-testcases/0066.xhtml +11 -0
- data/spec/xhtml1-testcases/0067.nt +1 -0
- data/spec/xhtml1-testcases/0067.sparql +3 -0
- data/spec/xhtml1-testcases/0067.xhtml +11 -0
- data/spec/xhtml1-testcases/0068.nt +1 -0
- data/spec/xhtml1-testcases/0068.sparql +3 -0
- data/spec/xhtml1-testcases/0068.xhtml +14 -0
- data/spec/xhtml1-testcases/0069.nt +1 -0
- data/spec/xhtml1-testcases/0069.sparql +3 -0
- data/spec/xhtml1-testcases/0069.xhtml +14 -0
- data/spec/xhtml1-testcases/0070.nt +1 -0
- data/spec/xhtml1-testcases/0070.sparql +3 -0
- data/spec/xhtml1-testcases/0070.xhtml +13 -0
- data/spec/xhtml1-testcases/0071.nt +1 -0
- data/spec/xhtml1-testcases/0071.sparql +3 -0
- data/spec/xhtml1-testcases/0071.xhtml +16 -0
- data/spec/xhtml1-testcases/0072.nt +1 -0
- data/spec/xhtml1-testcases/0072.sparql +3 -0
- data/spec/xhtml1-testcases/0072.xhtml +16 -0
- data/spec/xhtml1-testcases/0073.nt +1 -0
- data/spec/xhtml1-testcases/0073.sparql +3 -0
- data/spec/xhtml1-testcases/0073.xhtml +16 -0
- data/spec/xhtml1-testcases/0074.nt +1 -0
- data/spec/xhtml1-testcases/0074.sparql +3 -0
- data/spec/xhtml1-testcases/0074.xhtml +16 -0
- data/spec/xhtml1-testcases/0075.nt +1 -0
- data/spec/xhtml1-testcases/0075.sparql +3 -0
- data/spec/xhtml1-testcases/0075.xhtml +16 -0
- data/spec/xhtml1-testcases/0076.nt +23 -0
- data/spec/xhtml1-testcases/0076.sparql +70 -0
- data/spec/xhtml1-testcases/0076.xhtml +35 -0
- data/spec/xhtml1-testcases/0077.nt +23 -0
- data/spec/xhtml1-testcases/0077.sparql +70 -0
- data/spec/xhtml1-testcases/0077.xhtml +58 -0
- data/spec/xhtml1-testcases/0078.nt +6 -0
- data/spec/xhtml1-testcases/0078.sparql +7 -0
- data/spec/xhtml1-testcases/0078.xhtml +15 -0
- data/spec/xhtml1-testcases/0079.nt +3 -0
- data/spec/xhtml1-testcases/0079.sparql +6 -0
- data/spec/xhtml1-testcases/0079.xhtml +15 -0
- data/spec/xhtml1-testcases/0080.nt +1 -0
- data/spec/xhtml1-testcases/0080.sparql +3 -0
- data/spec/xhtml1-testcases/0080.xhtml +13 -0
- data/spec/xhtml1-testcases/0081.nt +6 -0
- data/spec/xhtml1-testcases/0081.sparql +9 -0
- data/spec/xhtml1-testcases/0081.xhtml +15 -0
- data/spec/xhtml1-testcases/0082.nt +8 -0
- data/spec/xhtml1-testcases/0082.sparql +11 -0
- data/spec/xhtml1-testcases/0082.xhtml +15 -0
- data/spec/xhtml1-testcases/0083.nt +6 -0
- data/spec/xhtml1-testcases/0083.sparql +9 -0
- data/spec/xhtml1-testcases/0083.xhtml +15 -0
- data/spec/xhtml1-testcases/0084.nt +8 -0
- data/spec/xhtml1-testcases/0084.sparql +11 -0
- data/spec/xhtml1-testcases/0084.xhtml +18 -0
- data/spec/xhtml1-testcases/0085.nt +4 -0
- data/spec/xhtml1-testcases/0085.sparql +6 -0
- data/spec/xhtml1-testcases/0085.xhtml +17 -0
- data/spec/xhtml1-testcases/0086.nt +0 -0
- data/spec/xhtml1-testcases/0086.sparql +4 -0
- data/spec/xhtml1-testcases/0086.xhtml +13 -0
- data/spec/xhtml1-testcases/0087.nt +23 -0
- data/spec/xhtml1-testcases/0087.sparql +70 -0
- data/spec/xhtml1-testcases/0087.xhtml +35 -0
- data/spec/xhtml1-testcases/0088.nt +3 -0
- data/spec/xhtml1-testcases/0088.sparql +6 -0
- data/spec/xhtml1-testcases/0088.xhtml +14 -0
- data/spec/xhtml1-testcases/0089.nt +1 -0
- data/spec/xhtml1-testcases/0089.sparql +3 -0
- data/spec/xhtml1-testcases/0089.xhtml +13 -0
- data/spec/xhtml1-testcases/0090.nt +1 -0
- data/spec/xhtml1-testcases/0090.sparql +3 -0
- data/spec/xhtml1-testcases/0090.xhtml +16 -0
- data/spec/xhtml1-testcases/0091.nt +3 -0
- data/spec/xhtml1-testcases/0091.sparql +6 -0
- data/spec/xhtml1-testcases/0091.xhtml +16 -0
- data/spec/xhtml1-testcases/0092.nt +3 -0
- data/spec/xhtml1-testcases/0092.sparql +16 -0
- data/spec/xhtml1-testcases/0092.xhtml +15 -0
- data/spec/xhtml1-testcases/0093.nt +2 -0
- data/spec/xhtml1-testcases/0093.sparql +4 -0
- data/spec/xhtml1-testcases/0093.xhtml +15 -0
- data/spec/xhtml1-testcases/0094.nt +3 -0
- data/spec/xhtml1-testcases/0094.sparql +16 -0
- data/spec/xhtml1-testcases/0094.xhtml +15 -0
- data/spec/xhtml1-testcases/0099.nt +1 -0
- data/spec/xhtml1-testcases/0099.sparql +3 -0
- data/spec/xhtml1-testcases/0099.xhtml +20 -0
- data/spec/xhtml1-testcases/0100.nt +3 -0
- data/spec/xhtml1-testcases/0100.sparql +15 -0
- data/spec/xhtml1-testcases/0100.xhtml +16 -0
- data/spec/xhtml1-testcases/0101.nt +3 -0
- data/spec/xhtml1-testcases/0101.sparql +15 -0
- data/spec/xhtml1-testcases/0101.xhtml +16 -0
- data/spec/xhtml1-testcases/0102.nt +1 -0
- data/spec/xhtml1-testcases/0102.sparql +15 -0
- data/spec/xhtml1-testcases/0102.xhtml +16 -0
- data/spec/xhtml1-testcases/0103.nt +1 -0
- data/spec/xhtml1-testcases/0103.sparql +15 -0
- data/spec/xhtml1-testcases/0103.xhtml +15 -0
- data/spec/xhtml1-testcases/0104.nt +3 -0
- data/spec/xhtml1-testcases/0104.sparql +5 -0
- data/spec/xhtml1-testcases/0104.xhtml +18 -0
- data/spec/xhtml1-testcases/0105.nt +1 -0
- data/spec/xhtml1-testcases/0105.sparql +7 -0
- data/spec/xhtml1-testcases/0105.xhtml +13 -0
- data/spec/xhtml1-testcases/0106.nt +1 -0
- data/spec/xhtml1-testcases/0106.sparql +7 -0
- data/spec/xhtml1-testcases/0106.xhtml +13 -0
- data/spec/xhtml1-testcases/0107.nt +0 -0
- data/spec/xhtml1-testcases/0107.sparql +4 -0
- data/spec/xhtml1-testcases/0107.xhtml +11 -0
- data/spec/xhtml1-testcases/0108.nt +1 -0
- data/spec/xhtml1-testcases/0108.sparql +3 -0
- data/spec/xhtml1-testcases/0108.xhtml +14 -0
- data/spec/xhtml1-testcases/0109.nt +1 -0
- data/spec/xhtml1-testcases/0109.sparql +3 -0
- data/spec/xhtml1-testcases/0109.xhtml +15 -0
- data/spec/xhtml1-testcases/0110.nt +1 -0
- data/spec/xhtml1-testcases/0110.sparql +4 -0
- data/spec/xhtml1-testcases/0110.xhtml +12 -0
- data/spec/xhtml1-testcases/0111.nt +2 -0
- data/spec/xhtml1-testcases/0111.sparql +5 -0
- data/spec/xhtml1-testcases/0111.xhtml +14 -0
- data/spec/xhtml1-testcases/0112.nt +1 -0
- data/spec/xhtml1-testcases/0112.sparql +3 -0
- data/spec/xhtml1-testcases/0112.xhtml +16 -0
- data/spec/xhtml1-testcases/0113.nt +2 -0
- data/spec/xhtml1-testcases/0113.sparql +4 -0
- data/spec/xhtml1-testcases/0113.xhtml +12 -0
- data/spec/xhtml1-testcases/0114.nt +3 -0
- data/spec/xhtml1-testcases/0114.sparql +5 -0
- data/spec/xhtml1-testcases/0114.xhtml +15 -0
- data/spec/xhtml1-testcases/0115.nt +4 -0
- data/spec/xhtml1-testcases/0115.sparql +14 -0
- data/spec/xhtml1-testcases/0115.xhtml +17 -0
- data/spec/xhtml1-testcases/0116.nt +2 -0
- data/spec/xhtml1-testcases/0116.sparql +6 -0
- data/spec/xhtml1-testcases/0116.xhtml +10 -0
- data/spec/xhtml1-testcases/0117.nt +2 -0
- data/spec/xhtml1-testcases/0117.sparql +4 -0
- data/spec/xhtml1-testcases/0117.xhtml +15 -0
- data/spec/xhtml1-testcases/0118.nt +1 -0
- data/spec/xhtml1-testcases/0118.sparql +5 -0
- data/spec/xhtml1-testcases/0118.xhtml +16 -0
- data/spec/xhtml1-testcases/0119.nt +1 -0
- data/spec/xhtml1-testcases/0119.sparql +5 -0
- data/spec/xhtml1-testcases/0119.xhtml +19 -0
- data/spec/xhtml1-testcases/0120.nt +1 -0
- data/spec/xhtml1-testcases/0120.sparql +5 -0
- data/spec/xhtml1-testcases/0120.xhtml +17 -0
- data/spec/xhtml1-testcases/0121.nt +2 -0
- data/spec/xhtml1-testcases/0121.sparql +4 -0
- data/spec/xhtml1-testcases/0121.xhtml +24 -0
- data/spec/xhtml1-testcases/0122.nt +1 -0
- data/spec/xhtml1-testcases/0122.sparql +4 -0
- data/spec/xhtml1-testcases/0122.xhtml +16 -0
- data/spec/xhtml1-testcases/0123.nt +3 -0
- data/spec/xhtml1-testcases/0123.sparql +5 -0
- data/spec/xhtml1-testcases/0123.xhtml +18 -0
- data/spec/xhtml1-testcases/0124.nt +4 -0
- data/spec/xhtml1-testcases/0124.sparql +6 -0
- data/spec/xhtml1-testcases/0124.xhtml +14 -0
- data/spec/xhtml1-testcases/0125.nt +1 -0
- data/spec/xhtml1-testcases/0125.sparql +5 -0
- data/spec/xhtml1-testcases/0125.xhtml +16 -0
- data/spec/xhtml1-testcases/0126.nt +3 -0
- data/spec/xhtml1-testcases/0126.sparql +5 -0
- data/spec/xhtml1-testcases/0126.xhtml +15 -0
- data/spec/xhtml1-testcases/1001.nt +6 -0
- data/spec/xhtml1-testcases/1001.sparql +8 -0
- data/spec/xhtml1-testcases/1001.xhtml +20 -0
- data/spec/xhtml1-testcases/9999.nt +3 -0
- data/spec/xhtml1-testcases/9999.xhtml +14 -0
- data/spec/xhtml1-testcases/rdfa-xhtml1-test-manifest.rdf +1303 -0
- data/tasks/rspec.rake +21 -0
- 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
|
data/spec/rdfa_helper.rb
ADDED
@@ -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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|