Skip to content
SPARQL client for Ruby.
Branch: develop
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
etc Fix doap file. Jul 3, 2013
examples Use Travis "trusty" build and wildcard Ruby versions. Mar 31, 2017
lib/sparql Add `Client#close` to shutdown any HTTP connection and object finaliz… Jul 2, 2019
.gitignore match code style in spec Nov 13, 2018
.travis.yml Run 2.2.2 on Travis. Jul 2, 2019
.yardopts Renamed the CONTRIBUTORS file to CREDITS. Sep 6, 2010
AUTHORS Corrected my email address in the AUTHORS file. Jan 11, 2013
CREDITS disable webmock for rdf-spec repo tests and reenable repo tests Oct 3, 2014
Gemfile Remove jruby-openssl from Gemfiles. Jul 2, 2019
Gemfile-pure Remove jruby-openssl from Gemfiles. Jul 2, 2019 Add `Client#close` to shutdown any HTTP connection and object finaliz… Jul 2, 2019
Rakefile Remove require of 'sparql/client' from Rakefile. Sep 6, 2016
UNLICENSE Unlicensed the project into the public domain. Dec 20, 2009
VERSION Version 3.0.1. Dec 3, 2018
dependencyci.yml Skip depencency checking on rdf-isomorphic. Sep 2, 2016
sparql-client.gemspec Add `Client#close` to shutdown any HTTP connection and object finaliz… Jul 2, 2019

SPARQL Client for RDF.rb

This is a Ruby implementation of a SPARQL client for RDF.rb.

Gem Version Build Status Coverage Status


  • Executes queries against any SPARQL 1.0/1.1-compatible endpoint over HTTP, or against an RDF::Queryable instance, using the SPARQL gem.
  • Provides a query builder DSL for ASK, SELECT, DESCRIBE and CONSTRUCT queries.
  • Includes preliminary support for some SPARQL 1.1 Update operations.
  • Supports tuple result sets in both XML, JSON, CSV and TSV formats, with JSON being the preferred default for content-negotiation purposes.
  • Supports graph results in any RDF serialization format understood by RDF.rb.
  • Returns results using the RDF.rb object model.
  • Supports accessing endpoints as read/write RDF::Repository instances {SPARQL::Client::Repository}.


Querying a remote SPARQL endpoint

require 'sparql/client'
sparql ="")

Querying a remote SPARQL endpoint with a custom User-Agent

By default, SPARQL::Client adds a User-Agent field to requests, but applications may choose to provide their own, using the headers option:

require 'sparql/client'
sparql ="", headers: {'User-Agent' => 'MyBotName'})

Querying a remote SPARQL endpoint with a specified default graph

require 'sparql/client'
sparql ="", { :graph => "" })

Querying a RDF::Repository instance

require 'rdf/trig'
repository = RDF::Repository.load("http://example/dataset.trig")
sparql =

Executing a boolean query and outputting the result

# ASK WHERE { ?s ?p ?o }
result = sparql.ask.whether([:s, :p, :o]).true?
puts result.inspect   #=> true or false

Executing a tuple query and iterating over the returned solutions

# SELECT * WHERE { ?s ?p ?o } OFFSET 100 LIMIT 10
query =[:s, :p, :o]).offset(100).limit(10)

query.each_solution do |solution|
  puts solution.inspect

Executing a graph query and iterating over the returned statements

# CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 10
query = sparql.construct([:s, :p, :o]).where([:s, :p, :o]).limit(10)

query.each_statement do |statement|
  puts statement.inspect

Executing an arbitrary textual SPARQL query string

result = sparql.query("ASK WHERE { ?s ?p ?o }")

puts result.inspect   #=> true or false

Inserting data into a graph

# INSERT DATA { <> <> "J. Random Hacker" .}
data = do |graph|
  graph << [RDF::URI(''),, "J. Random Hacker"]

Deleting data from a graph

# DELETE DATA { <> <> "J. Random Hacker" .}
data = do |graph|
  graph << [RDF::URI(''),, "J. Random Hacker"]




The recommended installation method is via RubyGems. To install the latest official release of the SPARQL::Client gem, do:

% [sudo] gem install sparql-client


To get a local working copy of the development repository, do:

% git clone git://

Alternatively, download the latest development version as a tarball as follows:

% wget

Mailing List




This repository uses Git Flow to mange development and release activity. All submissions must be on a feature branch based on the develop branch to ease staging and integration.

  • Do your best to adhere to the existing coding conventions and idioms.
  • Don't use hard tabs, and don't leave trailing whitespace on any line.
  • Do document every method you add using YARD annotations. Read the tutorial or just look at the existing code for examples.
  • Don't touch the .gemspec, VERSION or AUTHORS files. If you need to change them, do so on your private branch only.
  • Do feel free to add yourself to the CREDITS file and the corresponding list in the the README. Alphabetical order applies.
  • Do note that in order for us to merge any non-trivial changes (as a rule of thumb, additions larger than about 15 lines of code), we need an explicit public domain dedication on record from you.



This is free and unencumbered public domain software. For more information, see or the accompanying {file:UNLICENSE} file.

You can’t perform that action at this time.