rdf-virtuoso 0.1.1 → 0.1.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.
@@ -266,6 +266,13 @@ module RDF::Virtuoso
266
266
  self
267
267
  end
268
268
 
269
+ # @param RDF::URI uri
270
+ # @return [Query]
271
+ def from_named(uri)
272
+ options[:from_named] = uri
273
+ self
274
+ end
275
+
269
276
  # @param RDF::URI uri
270
277
  # @return [Query]
271
278
  def graph(uri)
@@ -284,6 +291,25 @@ module RDF::Virtuoso
284
291
 
285
292
  alias_method :whether, :where
286
293
 
294
+ ##
295
+ # @param [Array<RDF::Query::Pattern, Array>] patterns
296
+ # @return [Query]
297
+ # Group is a non-SPARQL function. It works same as where, but groups the
298
+ # patterns within brackets: { }, allowing to structure the query.
299
+ def group(*patterns)
300
+ @patterns += [Pattern.new(:start_group_pattern)] + build_patterns(patterns) + [Pattern.new(:end_group_pattern)]
301
+ self
302
+ end
303
+
304
+ ##
305
+ # @param RDF::URI uri
306
+ # @return [Query]
307
+ # Inline version of graph
308
+ def graph2(uri)
309
+ @patterns += [Pattern.new(:graph_statement, uri)]
310
+ self
311
+ end
312
+
287
313
  ##
288
314
  # @param [Array<Symbol, String>] variables
289
315
  # @return [Query]
@@ -310,7 +336,7 @@ module RDF::Virtuoso
310
336
  options[:reduced] = state
311
337
  self
312
338
  end
313
-
339
+
314
340
  ## SPARQL 1.1 Aggregates
315
341
  # @return [Query]
316
342
  # @see http://www.w3.org/TR/sparql11-query/#defn_aggCount
@@ -577,40 +603,42 @@ module RDF::Virtuoso
577
603
  end
578
604
 
579
605
  buffer << "FROM #{serialize_value(options[:from])}" if options[:from]
606
+ buffer << "FROM NAMED #{serialize_value(options[:from_named])}" if options[:from_named]
607
+
580
608
 
581
609
  unless patterns.empty? && ([:describe, :insert_data, :delete_data, :create, :clear, :drop].include?(form))
582
610
  buffer << 'WHERE {'
583
-
611
+
584
612
  buffer << '{' if options[:unions]
585
-
613
+
586
614
  # iterate patterns
587
615
  # does patterns have :context hash? build with GRAPH statement
588
- if patterns.any? { |p| p.has_context? }
589
- patterns.each do | pattern|
590
- buffer << "GRAPH #{serialize_value(RDF::URI(pattern.context))}" if pattern.context
616
+ patterns.each do | pattern|
617
+ if pattern.context
618
+ buffer << "GRAPH #{serialize_value(RDF::URI(pattern.context))}"
591
619
  buffer << '{'
592
620
  buffer << serialize_patterns(pattern)
593
621
  buffer << '}'
622
+ else
623
+ buffer << serialize_patterns(pattern)
594
624
  end
595
- else
596
- buffer += serialize_patterns(patterns)
597
625
  end
598
-
626
+
599
627
  if options[:optionals]
600
628
  options[:optionals].each do |patterns|
601
629
  buffer << 'OPTIONAL {'
602
-
603
- if patterns.any? { |p| p.has_context? }
604
- patterns.each do | pattern|
605
- buffer << "GRAPH #{serialize_value(RDF::URI(pattern.context))}" if pattern.context
606
- buffer << '{'
607
- buffer << serialize_patterns(pattern)
608
- buffer << '}'
609
- end
610
- else
611
- buffer += serialize_patterns(patterns)
612
- end
613
-
630
+
631
+ patterns.each do | pattern|
632
+ if pattern.context
633
+ buffer << "GRAPH #{serialize_value(RDF::URI(pattern.context))}"
634
+ buffer << '{'
635
+ buffer << serialize_patterns(pattern)
636
+ buffer << '}'
637
+ else
638
+ buffer << serialize_patterns(pattern)
639
+ end
640
+ end
641
+
614
642
  buffer << '}'
615
643
  end
616
644
  end
@@ -619,21 +647,21 @@ module RDF::Virtuoso
619
647
  options[:minuses].each do |patterns|
620
648
  buffer << 'MINUS {'
621
649
 
622
- if patterns.any? { |p| p.has_context? }
623
- patterns.each do | pattern|
624
- buffer << "GRAPH #{serialize_value(RDF::URI(pattern.context))}" if pattern.context
625
- buffer << '{'
626
- buffer << serialize_patterns(pattern)
627
- buffer << '}'
628
- end
629
- else
630
- buffer += serialize_patterns(patterns)
631
- end
650
+ patterns.each do | pattern|
651
+ if pattern.context
652
+ buffer << "GRAPH #{serialize_value(RDF::URI(pattern.context))}"
653
+ buffer << '{'
654
+ buffer << serialize_patterns(pattern)
655
+ buffer << '}'
656
+ else
657
+ buffer << serialize_patterns(pattern)
658
+ end
659
+ end
632
660
 
633
661
  buffer << '}'
634
662
  end
635
663
  end
636
-
664
+
637
665
  if options[:filters]
638
666
  buffer += options[:filters].map { |filter| "FILTER(#{filter})" }
639
667
  end
@@ -666,7 +694,15 @@ module RDF::Virtuoso
666
694
  # @private
667
695
  def serialize_patterns(patterns)
668
696
  if patterns.is_a?(RDF::Query::Pattern)
669
- patterns.to_triple.map { |v| serialize_value(v) }.join(' ') << " ."
697
+ if patterns.variables[:start_group_pattern]
698
+ "{"
699
+ elsif patterns.variables[:end_group_pattern]
700
+ "}"
701
+ elsif patterns.variables[:graph_statement]
702
+ "GRAPH #{serialize_value(patterns[1])}"
703
+ else
704
+ patterns.to_triple.map { |v| serialize_value(v) }.join(' ') << " ."
705
+ end
670
706
  else
671
707
  patterns.map do |p|
672
708
  p.to_triple.map { |v| serialize_value(v) }.join(' ') << " ."
@@ -1,5 +1,5 @@
1
1
  module RDF
2
2
  module Virtuoso
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
@@ -126,26 +126,34 @@ describe RDF::Virtuoso::Query do
126
126
  @query.select(:s, :p, :o).where([:s, :p, :o]).to_s.should == "SELECT ?s ?p ?o WHERE { ?s ?p ?o . }"
127
127
  end
128
128
 
129
- it "should support SELECT from NAMED GRAPH" do
129
+ it "should support SELECT FROM" do
130
130
  @graph = RDF::URI("http://example.org/")
131
131
  @query.select(:s).where([:s, :p, :o]).from(@graph).to_s.should == "SELECT ?s FROM <#{@graph}> WHERE { ?s ?p ?o . }"
132
132
  end
133
-
133
+
134
+ it "should support SELECT FROM and FROM NAMED" do
135
+ @graph1 = RDF::URI("a")
136
+ @graph2 = RDF::URI("b")
137
+ @query.select(:s).where([:s, :p, :o, :context => @graph2]).from(@graph1).from_named(@graph2).to_s.should ==
138
+ "SELECT ?s FROM <#{@graph1}> FROM NAMED <#{@graph2}> WHERE { GRAPH <#{@graph2}> { ?s ?p ?o . } }"
139
+ end
140
+
141
+
134
142
  it "should support SELECT with complex WHERE patterns" do
135
143
  @query.select.where(
136
- [:s, :p, :o],
144
+ [:s, :p, :o],
137
145
  [:s, RDF.type, RDF::DC.Document]
138
- ).to_s.should ==
146
+ ).to_s.should ==
139
147
  "SELECT * WHERE { ?s ?p ?o . ?s <#{RDF.type}> <#{RDF::DC.Document}> . }"
140
148
  end
141
149
 
142
150
  it "should support SELECT WHERE patterns from different GRAPH contexts" do
143
151
  @graph1 = "http://example1.org/"
144
152
  @graph2 = "http://example2.org/"
145
- @query.select.where([:s, :p, :o, :context => @graph1],[:s, RDF.type, RDF::DC.Document, :context => @graph2]).to_s.should ==
153
+ @query.select.where([:s, :p, :o, :context => @graph1],[:s, RDF.type, RDF::DC.Document, :context => @graph2]).to_s.should ==
146
154
  "SELECT * WHERE { GRAPH <#{@graph1}> { ?s ?p ?o . } GRAPH <#{@graph2}> { ?s <#{RDF.type}> <#{RDF::DC.Document}> . } }"
147
155
  end
148
-
156
+
149
157
  it "should support string objects in SPARQL queries" do
150
158
  @query.select.where([:s, :p, "dummyobject"]).to_s.should == "SELECT * WHERE { ?s ?p \"dummyobject\" . }"
151
159
  end
@@ -322,7 +330,19 @@ describe RDF::Virtuoso::Query do
322
330
  @query.select.where([:s, RDF::DC.abstract, :o]).define(define).to_s.should ==
323
331
  "DEFINE #{define} SELECT * WHERE { ?s <#{RDF::DC.abstract}> ?o . }"
324
332
  end
325
-
333
+
334
+ it "should support grouping graph patterns within brackets" do
335
+ @query.select.where.group([:s, :p, :o],[:s2, :p2, :o2]).
336
+ where([:s3, :p3, :o3]).to_s.should ==
337
+ "SELECT * WHERE { { ?s ?p ?o . ?s2 ?p2 ?o2 . } ?s3 ?p3 ?o3 . }"
338
+ end
339
+
340
+ it "should support grouping with several graph statements" do
341
+ @query.select.where.graph2(RDF::URI.new("a")).group([:s, :p, :o],[:s2, :p2, :o2]).
342
+ where.graph2(RDF::URI.new("b")).group([:s3, :p3, :o3]).to_s.should ==
343
+ "SELECT * WHERE { GRAPH <a> { ?s ?p ?o . ?s2 ?p2 ?o2 . } GRAPH <b> { ?s3 ?p3 ?o3 . } }"
344
+ end
345
+
326
346
  end
327
347
 
328
348
  context "when building DESCRIBE queries" do
@@ -1,12 +1,3 @@
1
1
  require 'rdf/spec'
2
2
  require 'rdf'
3
- require 'rdf/virtuoso'
4
- #require 'active_rdf'
5
- require 'vcr'
6
-
7
- VCR.configure do |c|
8
- c.cassette_library_dir = 'fixtures/cassettes'
9
- c.hook_into :webmock
10
- end
11
-
12
- Dir[File.expand_path('../../spec/support/**/*.rb', File.path(__FILE__))].each { |f| require f }
3
+ require 'rdf/virtuoso'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-virtuoso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-12-13 00:00:00.000000000 Z
13
+ date: 2013-03-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 2.8.0
22
+ version: 2.13.0
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: 2.8.0
30
+ version: 2.13.0
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: rdf-spec
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -35,7 +35,7 @@ dependencies:
35
35
  requirements:
36
36
  - - ~>
37
37
  - !ruby/object:Gem::Version
38
- version: 0.3.5
38
+ version: 1.0.0
39
39
  type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - ~>
45
45
  - !ruby/object:Gem::Version
46
- version: 0.3.5
46
+ version: 1.0.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdf
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -51,7 +51,7 @@ dependencies:
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.3.7
54
+ version: 1.0.3
55
55
  type: :runtime
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  requirements:
60
60
  - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 0.3.7
62
+ version: 1.0.3
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: httparty
65
65
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ dependencies:
67
67
  requirements:
68
68
  - - ~>
69
69
  - !ruby/object:Gem::Version
70
- version: 0.8.2
70
+ version: 0.10.2
71
71
  type: :runtime
72
72
  prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,7 +75,7 @@ dependencies:
75
75
  requirements:
76
76
  - - ~>
77
77
  - !ruby/object:Gem::Version
78
- version: 0.8.2
78
+ version: 0.10.2
79
79
  - !ruby/object:Gem::Dependency
80
80
  name: api_smith
81
81
  requirement: !ruby/object:Gem::Requirement