sparql-client 1.1.0 → 1.1.1
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.
- checksums.yaml +4 -4
- data/README +1 -0
- data/VERSION +1 -1
- data/lib/sparql/client.rb +61 -31
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 251df215fdb211b37f325950b2d6f64d37639558
|
|
4
|
+
data.tar.gz: f07ba6ef756c9bf6306b496a0626661638ee6af3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 281f97c225fc2a75aadd4483699043562a784aee163ebb899c8baa57e7118852950706ea939456c9c13f8d01e887d13517b3e14dc4de3b1d01c7b7e21a7ff431
|
|
7
|
+
data.tar.gz: c6c0b441502b862d6abde67a6933aa2eb4633b1cba6c2685eae3eca2a42a1f6829218d9fa1f6c91a16bdcf58bdb76263c941ecc53bb0df0de13d150f3ecd8375
|
data/README
CHANGED
|
@@ -78,6 +78,7 @@ This is a [Ruby][] implementation of a [SPARQL][] client for [RDF.rb][].
|
|
|
78
78
|
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 1.1)
|
|
79
79
|
* [Net::HTTP::Persistent](http://rubygems.org/gems/net-http-persistent) (>= 1.4)
|
|
80
80
|
* Soft dependency on [SPARQL](http://rubygems.org/gems/sparql) (>= 1.1)
|
|
81
|
+
* Soft dependency on [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1.5)
|
|
81
82
|
|
|
82
83
|
##Installation
|
|
83
84
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.1.
|
|
1
|
+
1.1.1
|
data/lib/sparql/client.rb
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
require 'net/http/persistent' # @see http://rubygems.org/gems/net-http-persistent
|
|
2
2
|
require 'rdf' # @see http://rubygems.org/gems/rdf
|
|
3
3
|
require 'rdf/ntriples' # @see http://rubygems.org/gems/rdf
|
|
4
|
+
begin
|
|
5
|
+
require 'nokogiri'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'rexml/document'
|
|
8
|
+
end
|
|
4
9
|
|
|
5
10
|
module SPARQL
|
|
6
11
|
##
|
|
@@ -35,6 +40,8 @@ module SPARQL
|
|
|
35
40
|
DEFAULT_PROTOCOL = 1.0
|
|
36
41
|
DEFAULT_METHOD = :post
|
|
37
42
|
|
|
43
|
+
XMLNS = {'sparql' => 'http://www.w3.org/2005/sparql-results#'}.freeze
|
|
44
|
+
|
|
38
45
|
##
|
|
39
46
|
# The SPARQL endpoint URL, or an RDF::Queryable instance, to use the native SPARQL engine.
|
|
40
47
|
#
|
|
@@ -64,6 +71,7 @@ module SPARQL
|
|
|
64
71
|
# @option options [Symbol] :method (DEFAULT_METHOD)
|
|
65
72
|
# @option options [Number] :protocol (DEFAULT_PROTOCOL)
|
|
66
73
|
# @option options [Hash] :headers
|
|
74
|
+
# @option options [Hash] :read_timeout
|
|
67
75
|
def initialize(url, options = {}, &block)
|
|
68
76
|
case url
|
|
69
77
|
when RDF::Queryable
|
|
@@ -314,7 +322,7 @@ module SPARQL
|
|
|
314
322
|
# @param [Hash{Symbol => Object}] options
|
|
315
323
|
# @return [Object]
|
|
316
324
|
def parse_response(response, options = {})
|
|
317
|
-
case
|
|
325
|
+
case options[:content_type] || response.content_type
|
|
318
326
|
when RESULT_BOOL # Sesame-specific
|
|
319
327
|
response.body == 'true'
|
|
320
328
|
when RESULT_JSON
|
|
@@ -343,7 +351,7 @@ module SPARQL
|
|
|
343
351
|
when json.has_key?('results')
|
|
344
352
|
solutions = json['results']['bindings'].map do |row|
|
|
345
353
|
row = row.inject({}) do |cols, (name, value)|
|
|
346
|
-
cols.merge(name.to_sym => parse_json_value(value))
|
|
354
|
+
cols.merge(name.to_sym => parse_json_value(value, nodes))
|
|
347
355
|
end
|
|
348
356
|
RDF::Query::Solution.new(row)
|
|
349
357
|
end
|
|
@@ -404,15 +412,18 @@ module SPARQL
|
|
|
404
412
|
tsv.each do |row|
|
|
405
413
|
solution = RDF::Query::Solution.new
|
|
406
414
|
row.each_with_index do |v, i|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
415
|
+
if !v.empty?
|
|
416
|
+
term = RDF::NTriples.unserialize(v) || case v
|
|
417
|
+
when /^\d+\.\d*[eE][+-]?[0-9]+$/ then RDF::Literal::Double.new(v)
|
|
418
|
+
when /^\d*\.\d+[eE][+-]?[0-9]+$/ then RDF::Literal::Double.new(v)
|
|
419
|
+
when /^\d*\.\d+$/ then RDF::Literal::Decimal.new(v)
|
|
420
|
+
when /^\d+$/ then RDF::Literal::Integer.new(v)
|
|
421
|
+
else
|
|
422
|
+
RDF::Literal(v)
|
|
423
|
+
end
|
|
424
|
+
nodes[term.id] = term if term.is_a? RDF::Node
|
|
425
|
+
solution[vars[i].to_sym] = term
|
|
414
426
|
end
|
|
415
|
-
solution[vars[i].to_sym] = term
|
|
416
427
|
end
|
|
417
428
|
solutions << solution
|
|
418
429
|
end
|
|
@@ -420,33 +431,52 @@ module SPARQL
|
|
|
420
431
|
end
|
|
421
432
|
|
|
422
433
|
##
|
|
423
|
-
# @param [String, REXML::Element] xml
|
|
434
|
+
# @param [String, IO, Nokogiri::XML::Node, REXML::Element] xml
|
|
424
435
|
# @return [<RDF::Query::Solutions>]
|
|
425
436
|
# @see http://www.w3.org/TR/rdf-sparql-json-res/#results
|
|
426
437
|
def self.parse_xml_bindings(xml, nodes = {})
|
|
427
438
|
xml.force_encoding(::Encoding::UTF_8) if xml.respond_to?(:force_encoding)
|
|
428
|
-
require 'rexml/document' unless defined?(::REXML::Document)
|
|
429
|
-
xml = REXML::Document.new(xml).root unless xml.is_a?(REXML::Element)
|
|
430
439
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
440
|
+
if defined?(::Nokogiri)
|
|
441
|
+
xml = Nokogiri::XML(xml).root unless xml.is_a?(Nokogiri::XML::Document)
|
|
442
|
+
case
|
|
443
|
+
when boolean = xml.xpath("//sparql:boolean", XMLNS)[0]
|
|
444
|
+
boolean.text == 'true'
|
|
445
|
+
when results = xml.xpath("//sparql:results", XMLNS)[0]
|
|
446
|
+
solutions = results.elements.map do |result|
|
|
447
|
+
row = {}
|
|
448
|
+
result.elements.each do |binding|
|
|
449
|
+
name = binding.attr('name').to_sym
|
|
450
|
+
value = binding.elements.first
|
|
451
|
+
row[name] = parse_xml_value(value, nodes)
|
|
452
|
+
end
|
|
453
|
+
RDF::Query::Solution.new(row)
|
|
441
454
|
end
|
|
442
|
-
RDF::Query::
|
|
443
|
-
|
|
444
|
-
|
|
455
|
+
RDF::Query::Solutions.new(solutions)
|
|
456
|
+
end
|
|
457
|
+
else
|
|
458
|
+
# REXML
|
|
459
|
+
xml = REXML::Document.new(xml).root unless xml.is_a?(REXML::Element)
|
|
460
|
+
case
|
|
461
|
+
when boolean = xml.elements['boolean']
|
|
462
|
+
boolean.text == 'true'
|
|
463
|
+
when results = xml.elements['results']
|
|
464
|
+
solutions = results.elements.map do |result|
|
|
465
|
+
row = {}
|
|
466
|
+
result.elements.each do |binding|
|
|
467
|
+
name = binding.attributes['name'].to_sym
|
|
468
|
+
value = binding.select { |node| node.kind_of?(::REXML::Element) }.first
|
|
469
|
+
row[name] = parse_xml_value(value, nodes)
|
|
470
|
+
end
|
|
471
|
+
RDF::Query::Solution.new(row)
|
|
472
|
+
end
|
|
473
|
+
RDF::Query::Solutions.new(solutions)
|
|
474
|
+
end
|
|
445
475
|
end
|
|
446
476
|
end
|
|
447
477
|
|
|
448
478
|
##
|
|
449
|
-
# @param [REXML::Element] value
|
|
479
|
+
# @param [Nokogiri::XML::Element, REXML::Element] value
|
|
450
480
|
# @return [RDF::Value]
|
|
451
481
|
# @see http://www.w3.org/TR/rdf-sparql-json-res/#variable-binding-results
|
|
452
482
|
def self.parse_xml_value(value, nodes = {})
|
|
@@ -456,10 +486,9 @@ module SPARQL
|
|
|
456
486
|
when :uri
|
|
457
487
|
RDF::URI.new(value.text)
|
|
458
488
|
when :literal
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
})
|
|
489
|
+
lang = value.respond_to?(:attr) ? value.attr('xml:lang') : value.attributes['xml:lang']
|
|
490
|
+
datatype = value.respond_to?(:attr) ? value.attr('datatype') : value.attributes['datatype']
|
|
491
|
+
RDF::Literal.new(value.text, :language => lang, :datatype => datatype)
|
|
463
492
|
else nil
|
|
464
493
|
end
|
|
465
494
|
end
|
|
@@ -540,6 +569,7 @@ module SPARQL
|
|
|
540
569
|
end
|
|
541
570
|
klass = Net::HTTP::Persistent.new(self.class.to_s, proxy_url)
|
|
542
571
|
klass.keep_alive = 120 # increase to 2 minutes
|
|
572
|
+
klass.read_timeout = @options[:read_timeout] || 60
|
|
543
573
|
klass
|
|
544
574
|
end
|
|
545
575
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sparql-client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Arto Bendiken
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2013-
|
|
13
|
+
date: 2013-12-19 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rdf
|