sparql 0.0.1 → 0.0.2

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 (84) hide show
  1. data/AUTHORS +3 -0
  2. data/CREDITS +0 -0
  3. data/README.markdown +103 -53
  4. data/UNLICENSE +24 -0
  5. data/VERSION +1 -0
  6. data/bin/sparql +87 -0
  7. data/lib/sparql.rb +105 -22
  8. data/lib/sparql/algebra.rb +369 -0
  9. data/lib/sparql/algebra/evaluatable.rb +37 -0
  10. data/lib/sparql/algebra/expression.rb +284 -0
  11. data/lib/sparql/algebra/extensions.rb +159 -0
  12. data/lib/sparql/algebra/operator.rb +492 -0
  13. data/lib/sparql/algebra/operator/add.rb +34 -0
  14. data/lib/sparql/algebra/operator/and.rb +65 -0
  15. data/lib/sparql/algebra/operator/asc.rb +29 -0
  16. data/lib/sparql/algebra/operator/ask.rb +46 -0
  17. data/lib/sparql/algebra/operator/base.rb +46 -0
  18. data/lib/sparql/algebra/operator/bgp.rb +26 -0
  19. data/lib/sparql/algebra/operator/bound.rb +48 -0
  20. data/lib/sparql/algebra/operator/compare.rb +84 -0
  21. data/lib/sparql/algebra/operator/construct.rb +85 -0
  22. data/lib/sparql/algebra/operator/dataset.rb +77 -0
  23. data/lib/sparql/algebra/operator/datatype.rb +42 -0
  24. data/lib/sparql/algebra/operator/desc.rb +17 -0
  25. data/lib/sparql/algebra/operator/describe.rb +71 -0
  26. data/lib/sparql/algebra/operator/distinct.rb +50 -0
  27. data/lib/sparql/algebra/operator/divide.rb +43 -0
  28. data/lib/sparql/algebra/operator/equal.rb +32 -0
  29. data/lib/sparql/algebra/operator/exprlist.rb +52 -0
  30. data/lib/sparql/algebra/operator/filter.rb +71 -0
  31. data/lib/sparql/algebra/operator/graph.rb +28 -0
  32. data/lib/sparql/algebra/operator/greater_than.rb +32 -0
  33. data/lib/sparql/algebra/operator/greater_than_or_equal.rb +33 -0
  34. data/lib/sparql/algebra/operator/is_blank.rb +35 -0
  35. data/lib/sparql/algebra/operator/is_iri.rb +37 -0
  36. data/lib/sparql/algebra/operator/is_literal.rb +36 -0
  37. data/lib/sparql/algebra/operator/join.rb +67 -0
  38. data/lib/sparql/algebra/operator/lang.rb +29 -0
  39. data/lib/sparql/algebra/operator/lang_matches.rb +53 -0
  40. data/lib/sparql/algebra/operator/left_join.rb +95 -0
  41. data/lib/sparql/algebra/operator/less_than.rb +32 -0
  42. data/lib/sparql/algebra/operator/less_than_or_equal.rb +32 -0
  43. data/lib/sparql/algebra/operator/minus.rb +31 -0
  44. data/lib/sparql/algebra/operator/multiply.rb +34 -0
  45. data/lib/sparql/algebra/operator/not.rb +35 -0
  46. data/lib/sparql/algebra/operator/not_equal.rb +26 -0
  47. data/lib/sparql/algebra/operator/or.rb +65 -0
  48. data/lib/sparql/algebra/operator/order.rb +69 -0
  49. data/lib/sparql/algebra/operator/plus.rb +31 -0
  50. data/lib/sparql/algebra/operator/prefix.rb +45 -0
  51. data/lib/sparql/algebra/operator/project.rb +46 -0
  52. data/lib/sparql/algebra/operator/reduced.rb +47 -0
  53. data/lib/sparql/algebra/operator/regex.rb +70 -0
  54. data/lib/sparql/algebra/operator/same_term.rb +46 -0
  55. data/lib/sparql/algebra/operator/slice.rb +60 -0
  56. data/lib/sparql/algebra/operator/str.rb +35 -0
  57. data/lib/sparql/algebra/operator/subtract.rb +32 -0
  58. data/lib/sparql/algebra/operator/union.rb +55 -0
  59. data/lib/sparql/algebra/query.rb +99 -0
  60. data/lib/sparql/algebra/sxp_extensions.rb +35 -0
  61. data/lib/sparql/algebra/version.rb +20 -0
  62. data/lib/sparql/extensions.rb +102 -0
  63. data/lib/sparql/grammar.rb +298 -0
  64. data/lib/sparql/grammar/lexer.rb +609 -0
  65. data/lib/sparql/grammar/parser.rb +1383 -0
  66. data/lib/sparql/grammar/parser/meta.rb +1801 -0
  67. data/lib/sparql/results.rb +220 -0
  68. data/lib/sparql/version.rb +20 -0
  69. metadata +232 -62
  70. data/Rakefile +0 -22
  71. data/coverage/index.html +0 -252
  72. data/coverage/lib-sparql-execute_sparql_rb.html +0 -621
  73. data/coverage/lib-sparql_rb.html +0 -622
  74. data/lib/sparql/execute_sparql.rb +0 -27
  75. data/lib/sparql/sparql.treetop +0 -159
  76. data/sparql.gemspec +0 -16
  77. data/spec/spec.opts +0 -2
  78. data/spec/spec_helper.rb +0 -24
  79. data/spec/unit/graph_parsing_spec.rb +0 -76
  80. data/spec/unit/iri_parsing_spec.rb +0 -46
  81. data/spec/unit/prefixed_names_parsing_spec.rb +0 -40
  82. data/spec/unit/primitives_parsing_spec.rb +0 -26
  83. data/spec/unit/sparql_parsing_spec.rb +0 -72
  84. data/spec/unit/variables_parsing_spec.rb +0 -36
@@ -1,27 +0,0 @@
1
- # This file is part of Sparql.rb.
2
- #
3
- # Sparql.rb is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU Lesser General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # Sparql.rb is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU Lesser General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU Lesser General Public License
14
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
15
-
16
-
17
- require 'rubygems'
18
- require 'treetop'
19
-
20
- Treetop.load "lib/sparql/primitives"
21
- Treetop.load "lib/sparql/prefixed_names"
22
- Treetop.load "lib/sparql/variables"
23
- Treetop.load "lib/sparql/iri"
24
- Treetop.load "lib/sparql/logical_expressions"
25
- Treetop.load "lib/sparql/graph"
26
- Treetop.load "lib/sparql/series"
27
- Treetop.load "lib/sparql/sparql"
@@ -1,159 +0,0 @@
1
- #!/usr/bin/env tt
2
- # Author:: Pius Uzamere, The Uyiosa Corporation (http://uyiosa.com/)
3
- # Copyright:: 2008 Pius Uzamere
4
-
5
- # This file is part of Sparql.rb.
6
- #
7
- # Sparql.rb is free software: you can redistribute it and/or modify
8
- # it under the terms of the GNU Lesser General Public License as published by
9
- # the Free Software Foundation, either version 3 of the License, or
10
- # (at your option) any later version.
11
- #
12
- # Sparql.rb is distributed in the hope that it will be useful,
13
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- # GNU Lesser General Public License for more details.
16
- #
17
- # You should have received a copy of the GNU Lesser General Public License
18
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
19
-
20
- grammar Sparql
21
- include Primitives
22
- include Variables
23
- include LogicalExpressions
24
- include Graph
25
- include Series
26
-
27
- # 'SELECT ?v WHERE { ?v ?p "cat"@en }'
28
-
29
- rule query
30
- prologue space query_part:( select_query / construct_query / describe_query / ask_query ) {
31
- def well_formed?
32
- true #=> if a node has been identified as a query, it's well-formed by definition.
33
- end
34
- }
35
- end
36
-
37
- rule prologue
38
- base_decl? prefix_decl*
39
- end
40
-
41
- rule base_decl
42
- 'BASE' space iri_ref
43
- end
44
-
45
- rule prefix_decl
46
- 'PREFIX' space pname_ns space iri_ref
47
- end
48
-
49
- rule select_query
50
- 'SELECT' space (( 'DISTINCT' / 'REDUCED' ) space)? ( series_of_variables / '*' ) space (series_of_dataset_clauses space)? where space solution_modifier
51
- {
52
- def query_type
53
- "SELECT"
54
- end
55
- }
56
- end
57
-
58
- rule ask_query
59
- 'ASK' space (series_of_dataset_clauses space)? where {
60
- def query_type
61
- "ASK"
62
- end
63
- }
64
- end
65
-
66
- rule describe_query
67
- 'DESCRIBE' space ( series_of_var_or_irirefs / '*' ) space (series_of_dataset_clauses space)? (where space)? solution_modifier {
68
- def query_type
69
- "DESCRIBE"
70
- end
71
- }
72
- end
73
-
74
- rule construct_query
75
- 'CONSTRUCT' space construct_template space (dataset_clause space)* (where space) solution_modifier {
76
- def query_type
77
- "CONSTRUCT"
78
- end
79
- }
80
- end
81
-
82
- rule where
83
- ('WHERE' space)? group_graph_pattern
84
- end
85
-
86
- rule construct_template
87
- '{' space construct_triples? space '}'
88
- end
89
-
90
- rule construct_triples
91
- triples_same_subject space ( '.' construct_triples? )?
92
- end
93
-
94
- rule solution_modifier
95
- (order_clause space limit_offset_clauses)? / order_clause? / limit_offset_clauses?
96
- end
97
-
98
- rule order_clause
99
- 'ORDER BY' space series_of_order_conditions
100
- end
101
-
102
- rule offset_clause
103
- 'OFFSET' space integer
104
- end
105
-
106
- rule limit_clause
107
- 'LIMIT' space integer
108
- end
109
-
110
- rule limit_offset_clauses
111
- ( limit_clause space (offset_clause? / offset_clause space limit_clause?) )
112
- end
113
-
114
- rule order_condition
115
- ( ( 'ASC' / 'DESC' ) space bracketted_expression ) / ( constraint / var )
116
- end
117
-
118
- rule constraint
119
- bracketted_expression / built_in_call / function_call
120
- end
121
-
122
- rule built_in_call
123
- 'STR' space '(' expression ')'
124
- / 'LANG' space '(' expression ')'
125
- / 'LANGMATCHES' space '(' expression ',' expression ')'
126
- / 'DATATYPE' space '(' expression ')' / 'BOUND' space '(' var ')'
127
- / 'sameTerm' '(' expression ',' expression ')'
128
- / 'isIRI' space '(' expression ')'
129
- / 'isURI' space '(' expression ')'
130
- / 'isBLANK' space '(' expression ')'
131
- / 'isLITERAL' space '(' expression ')'
132
- / regex_expression
133
- end
134
-
135
- rule regex_expression
136
- 'REGEX' space '(' expression ',' expression ( ',' expression )? ')'
137
- end
138
-
139
- rule function_call
140
- iriref arg_list
141
- end
142
-
143
- rule dataset_clause
144
- 'FROM' space ( default_graph_clause / named_graph_clause )
145
- end
146
-
147
- rule default_graph_clause
148
- source_selector
149
- end
150
-
151
- rule source_selector
152
- iriref
153
- end
154
-
155
- rule named_graph_clause
156
- 'NAMED' space SourceSelector
157
- end
158
-
159
- end
data/sparql.gemspec DELETED
@@ -1,16 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "sparql"
3
- s.version = "0.0.1"
4
- s.date = "2008-07-15"
5
- s.summary = "SPARQL library for Ruby."
6
- s.email = "pius+github@uyiosa.com"
7
- s.homepage = "http://github.com/pius/sparql"
8
- s.description = "sparql is a Ruby library for parsing SPARQL queries. Implements the formal grammar of SPARQL as a parsing expression grammar."
9
- s.has_rdoc = true
10
- s.authors = ['Pius Uzamere']
11
- s.files = ["README.markdown", "Rakefile", "sparql.gemspec", "lib/sparql.rb", "lib/sparql/execute_sparql.rb", "lib/sparql/sparql.treetop", "coverage/index.html", "coverage/lib-sparql-execute_sparql_rb.html", "coverage/lib-sparql_rb.html"]
12
- s.test_files = ["spec/spec.opts", "spec/spec_helper.rb", "spec/unit/graph_parsing_spec.rb", "spec/unit/graph_parsing_spec.rb", "spec/unit/iri_parsing_spec.rb", "spec/unit/sparql_parsing_spec.rb", "spec/unit/variables_parsing_spec.rb", "spec/unit/primitives_parsing_spec.rb", "spec/unit/prefixed_names_parsing_spec.rb"]
13
- #s.rdoc_options = ["--main", "README.txt"]
14
- #s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
15
- s.add_dependency("treetop", [">= 1.2.4"])
16
- end
data/spec/spec.opts DELETED
@@ -1,2 +0,0 @@
1
- --format specdoc
2
- --colour
data/spec/spec_helper.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'rubygems'
2
- require 'pathname'
3
- require 'treetop'
4
-
5
- # rule triples_same_subject
6
- # var_or_term space property_list_not_empty / triples_node space property_list
7
- # end
8
-
9
-
10
- class Pathname
11
- def /(path)
12
- (self + path).expand_path
13
- end
14
- end # class Pathname
15
-
16
- spec_dir_path = Pathname(__FILE__).dirname.expand_path
17
- require spec_dir_path.parent + 'lib/sparql'
18
-
19
-
20
-
21
- # require fixture resources
22
- Dir[spec_dir_path + "fixtures/*.rb"].each do |fixture_file|
23
- require fixture_file
24
- end
@@ -1,76 +0,0 @@
1
- # This file is part of Sparql.rb.
2
- #
3
- # Sparql.rb is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU Lesser General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # Sparql.rb is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU Lesser General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU Lesser General Public License
14
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
15
-
16
- require 'pathname'
17
-
18
- require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
19
-
20
- describe "GraphParser", '#parse' do
21
-
22
- before(:all) do
23
- @parser = GraphParser.new
24
- end
25
-
26
- it "should recognize a triple block where the predicate is a prefixed name" do
27
- some_triple_block = '?x foaf:knows ?y'
28
- @parser.parse(some_triple_block).should_not == nil
29
- @parser.parse(some_triple_block).triples_same_subject.text_value.should == '?x foaf:knows ?y'
30
- end
31
-
32
- it "should recognize a triple block where the predicate is a variable" do
33
- some_triple_block = '?x ?theta ?y'
34
- @parser.parse(some_triple_block).should_not == nil
35
- @parser.parse(some_triple_block).triples_same_subject.text_value.should == '?x ?theta ?y'
36
- end
37
-
38
- it "should recognize 'triples_same_subject'" do
39
- some_triple_block = '?x foaf:knows ?y'
40
- triples_same_subject = @parser.parse(some_triple_block).triples_same_subject
41
- triples_same_subject.property_list_not_empty.text_value.should == "foaf:knows ?y"
42
- end
43
-
44
- it "should recognize 'triples_same_subject' when the predicate is a variable" do
45
- some_triple_block = '?x ?theta ?y'
46
- triples_same_subject = @parser.parse(some_triple_block).triples_same_subject
47
- triples_same_subject.property_list_not_empty.text_value.should == '?theta ?y'
48
- end
49
-
50
- it "should recognize 'triples_same_subject' when the object is a literal" # do
51
- # some_triple_block = '?x ?theta "foo"'
52
- # triples_same_subject = @parser.parse(some_triple_block).triples_same_subject
53
- # triples_same_subject.property_list_not_empty.text_value.should == '?theta ?y "foo"'
54
- # end
55
-
56
- it "should recognize a 'group_graph_pattern'" # do
57
- # some_group_graph_pattern = '?v ?p "cat"'
58
- # parsed = @parser.parse(some_group_graph_pattern)
59
- # parsed.should_not == nil
60
- # end
61
-
62
- it "should recognize a 'graph_pattern_not_triples'" # do
63
- # some_graph_pattern_not_triples = '{ ?v ?p "cat" }'
64
- # parsed = @parser.parse(some_graph_pattern_not_triples)
65
- # parsed.should_not == nil
66
- # end
67
-
68
- # it "should recognize a basic SELECT query with one variable and one triple pattern" do
69
- # basic_valid_select_query = 'SELECT ?foo WHERE { ?x foaf:knows ?y . }'
70
- # parser = SparqlParser.new
71
- # parser.parse(basic_valid_select_query).well_formed?.should == true
72
- # parser.parse(basic_valid_select_query).prologue.text_value.should == ""
73
- # parser.parse(basic_valid_select_query).query_part.text_value.should == "SELECT ?foo WHERE { ?x foaf:knows ?y . }"
74
- # parser.parse('SELECT ?foo ?bar WHERE { ?x foaf:knows ?y . ?z foaf:name ?y . }').should_not == nil
75
- # end
76
- end
@@ -1,46 +0,0 @@
1
- # This file is part of Sparql.rb.
2
- #
3
- # Sparql.rb is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU Lesser General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # Sparql.rb is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU Lesser General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU Lesser General Public License
14
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
15
-
16
- require 'pathname'
17
-
18
- require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
19
-
20
- describe "IriParser", '#parse' do
21
-
22
- before(:all) do
23
- @parser = IriParser.new
24
- end
25
-
26
- it "should be able to recognize an iriref in brackets" do
27
- the_iriref = "<http://purl.org/dc/elements/1.1/title>"
28
- @parser.parse(the_iriref).should_not == nil
29
- end
30
-
31
- it "should be able to recognize an 'iri_ref'" do
32
- the_iri_ref = "<http://xmlns.com/foaf/0.1/>"
33
- @parser.parse(the_iri_ref).should_not == nil
34
- end
35
-
36
- # it "should be able to recognize an 'irirefchars'" do
37
- # the_iriref = "<http://xmlns.com/foaf/0.1/>"
38
- # @parser.parse(the_iriref).should_not == nil
39
- # end
40
- #
41
- # it "should be able to recognize a 'prefixed_name'" do
42
- # the_iriref = "<http://xmlns.com/foaf/0.1/>"
43
- # @parser.parse(the_iriref).should_not == nil
44
- # end
45
-
46
- end
@@ -1,40 +0,0 @@
1
- # This file is part of Sparql.rb.
2
- #
3
- # Sparql.rb is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU Lesser General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # Sparql.rb is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU Lesser General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU Lesser General Public License
14
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
15
-
16
- require 'pathname'
17
- require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
18
-
19
- describe "PrefixedNamesParser", '#parse' do
20
-
21
- before(:all) do
22
- @parser = PrefixedNamesParser.new
23
- end
24
-
25
- it "should be able to recognize a common prefixed_name" do
26
- the_pn = "foaf:knows"
27
- tree = @parser.parse(the_pn)
28
- tree.should_not == nil
29
- tree.pname_ns.text_value.should == "foaf:"
30
- tree.pn_local.text_value.should == "knows"
31
- end
32
-
33
- it "should be able to recognize a prefixed_name whose local name has a leading digit (SPARQL idiosyncrasy)" do
34
- the_pn = "foaf:1knows"
35
- tree = @parser.parse(the_pn)
36
- tree.should_not == nil
37
- tree.pname_ns.text_value.should == "foaf:"
38
- tree.pn_local.text_value.should == "1knows"
39
- end
40
- end
@@ -1,26 +0,0 @@
1
- # This file is part of Sparql.rb.
2
- #
3
- # Sparql.rb is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU Lesser General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # Sparql.rb is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU Lesser General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU Lesser General Public License
14
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
15
-
16
- require 'pathname'
17
-
18
- require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
19
-
20
- describe "PrimitivesParser", '#parse' do
21
-
22
- before(:all) do
23
- @parser = PrimitivesParser.new
24
- end
25
-
26
- end
@@ -1,72 +0,0 @@
1
- # This file is part of Sparql.rb.
2
- #
3
- # Sparql.rb is free software: you can redistribute it and/or modify
4
- # it under the terms of the GNU Lesser General Public License as published by
5
- # the Free Software Foundation, either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # Sparql.rb is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU Lesser General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU Lesser General Public License
14
- # along with Sparql.rb. If not, see <http://www.gnu.org/licenses/>.
15
-
16
- require 'pathname'
17
-
18
- require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
19
- describe "SparqlParser", '#parse' do
20
-
21
- before(:all) do
22
- end
23
-
24
- it "should recognize a basic SELECT query with one variable and one triple pattern" do
25
- basic_valid_select_query = 'SELECT ?foo WHERE { ?x foaf:knows ?y . }'
26
- parser = SparqlParser.new
27
- parser.parse(basic_valid_select_query).well_formed?.should == true
28
- parser.parse(basic_valid_select_query).prologue.text_value.should == ""
29
- parser.parse(basic_valid_select_query).query_part.text_value.should == "SELECT ?foo WHERE { ?x foaf:knows ?y . }"
30
- parser.parse('SELECT ?foo ?bar WHERE { ?x foaf:knows ?y . ?z foaf:name ?y . }').should_not == nil
31
- end
32
-
33
- it "should recognize a basic SELECT query with one variable, one triple pattern, and a PREFIX declaration" do
34
- basic_valid_select_query_with_prologue = 'PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?foo WHERE { ?x foaf:knows ?y . }'
35
- parser = SparqlParser.new
36
- parser.parse(basic_valid_select_query_with_prologue).well_formed?.should == true
37
- parser.parse(basic_valid_select_query_with_prologue).prologue.text_value.should == "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"
38
- parser.parse(basic_valid_select_query_with_prologue).query_part.text_value.should == "SELECT ?foo WHERE { ?x foaf:knows ?y . }"
39
- end
40
-
41
- it "should recognize a basic SELECT query with one variable, two triple patterns, and a PREFIX declaration" do
42
- query = 'PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?foo WHERE { ?x foaf:knows ?y . ?z foaf:knows ?x .}'
43
- parser = SparqlParser.new
44
- parser.parse(query).well_formed?.should == true
45
- parser.parse(query).prologue.text_value.should == "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"
46
- parser.parse(query).query_part.text_value.should == "SELECT ?foo WHERE { ?x foaf:knows ?y . ?z foaf:knows ?x .}"
47
- end
48
-
49
- it "should recognize a SELECT query with a literal" # do
50
- # query = 'SELECT ?v WHERE { ?v ?p "cat" }'
51
- # parser = SparqlParser.new
52
- # parser.parse(query).well_formed?.should == true
53
- # parser.parse(query).prologue.text_value.should == ""
54
- # parser.parse(query).query_part.text_value.should == 'SELECT ?v WHERE { ?v ?p "cat"@en }'
55
- # end
56
-
57
- it "should recognize a SELECT query with a LANGTAG" # do
58
- # query = 'SELECT ?v WHERE { ?v ?p "cat"@en }'
59
- # parser = SparqlParser.new
60
- # parser.parse(query).well_formed?.should == true
61
- # parser.parse(query).prologue.text_value.should == ""
62
- # parser.parse(query).query_part.text_value.should == 'SELECT ?v WHERE { ?v ?p "cat"@en }'
63
- # end
64
-
65
-
66
-
67
-
68
- it "should recognize a CONSTRUCT query"
69
- it "should recognize an ASK query"
70
- it "should recognize a DESCRIBE query"
71
-
72
- end