- From: Christoph Badura <bad@bsd.de>
- Date: Sat, 9 Oct 2010 16:55:12 +0200
- To: public-rdf-ruby@w3.org
I'm trying to use SPARQL::Client as a Repository for Spira.
require 'spira'
require 'sparql/client'
class Foo
include Spira::Resource
property :whatever, :predicate => DC.whatever
end
repo = SPARQL::Client::Repository.new 'http://localhost:2020/sparql'
Spira.add_repository! :default, repo
foo = Foo.for(RDF::URI.new("http://example.com/foo/1"))
As soon as I access the first property, the sparql server (i'm using joseki)
is reporting the first query:
INFO SPARQL :: Query: CONSTRUCT { ?s ?p ?o . } WHERE { ?s ?p ?o . }
Returning all the triples in the graph will take a while for any real world
repository. The test data I have loaded is some 40MB.
The reason for this are the "unless stamtements.empty?" modifiers used in
#reload_attributes. Countable#empty? relies on #each and SPARQL::Client::
Repository#each does
client.construct([:s, :p, :o]).where([:s, :p, :o]).each_statement(&block)
I haven't come up with a useful test case, so I'm posting here instead.
Here's relevant info from the stacktraces:
(rdb:1) l
[8, 17] in /usr/pkg/lib/ruby/gems/1.8/gems/rdf-0.2.3/lib/rdf/mixin/countable.rb
8 # Returns `true` if `self` contains no RDF statements.
9 #
10 # @return [Boolean]
11 def empty?
12 empty = true
=> 13 each { empty = false; break }
14 empty
15 end
16
17 ##
(rdb:1) up
#4 /usr/pkg/lib/ruby/gems/1.8/gems/spira-0.0.8/lib/spira/resource/instance_methods.rb:87:in `reload_attributes'
(rdb:1) where
#1 /usr/pkg/lib/ruby/gems/1.8/gems/sparql-client-0.0.5/lib/sparql/client/repository.rb:26:in `each'
#2 /usr/pkg/lib/ruby/gems/1.8/gems/rdf-0.2.3/lib/rdf/mixin/queryable.rb:67:in `query_pattern'
#3 /usr/pkg/lib/ruby/gems/1.8/gems/rdf-0.2.3/lib/rdf/mixin/countable.rb:13:in `empty?'
--> #4 /usr/pkg/lib/ruby/gems/1.8/gems/spira-0.0.8/lib/spira/resource/instance_methods.rb:87:in `reload_attributes'
#5 /usr/pkg/lib/ruby/gems/1.8/gems/spira-0.0.8/lib/spira/resource/instance_methods.rb:57:in `reload'
#6 /usr/pkg/lib/ruby/gems/1.8/gems/promise-0.3.0/lib/promise.rb:89:in `method_missing'
#7 /usr/pkg/lib/ruby/gems/1.8/gems/spira-0.0.8/lib/spira/resource/instance_methods.rb:323:in `attribute_get'
#8 /usr/pkg/lib/ruby/gems/1.8/gems/spira-0.0.8/lib/spira/resource/dsl.rb:254:in `identifier'
#9 test-sparql.rb:10
(rdb:1)
down 3
#1 /usr/pkg/lib/ruby/gems/1.8/gems/sparql-client-0.0.5/lib/sparql/client/repository.rb:26:in `each'
(rdb:1) l
[21, 30] in /usr/pkg/lib/ruby/gems/1.8/gems/sparql-client-0.0.5/lib/sparql/client/repository.rb
21 # @yield [statement]
22 # @yieldparam [RDF::Statement] statement
23 # @return [Enumerator]
24 # @see RDF::Repository#each
25 def each(&block)
=> 26 unless block_given?
27 RDF::Enumerator.new(self, :each)
28 else
29 client.construct([:s, :p, :o]).where([:s, :p, :o]).each_statement(&block)
30 end
(rdb:1) p block_given?
true
(rdb:1)
--chris
Received on Saturday, 9 October 2010 14:55:44 UTC