#!/usr/bin/env ruby require 'net/http' require 'json' require 'ostruct' require 'erb' SPARQL_HEADER=" prefix rdfs: prefix rdf: prefix dc: prefix schema: PREFIX pubseq: " # Build a SPARQL query, submit and return results. Apply transform lambda def sparql q, transform = nil q = SPARQL_HEADER+q api_url = "http://sparql.genenetwork.org/sparql/?default-graph-uri=&format=application%2Fsparql-results%2Bjson&timeout=0&debug=on&run=+Run+Query+&query=#{ERB::Util.url_encode(q)}" response = Net::HTTP.get_response(URI.parse(api_url)) data = JSON.parse(response.body) vars = data['head']['vars'] results = data['results']['bindings'] results.map { |rec| res = {} vars.each { |name| res[name.to_sym] = rec[name]['value'] } if transform transform.call(res) else res end } end MAX=5_000 start = 0 num = MAX begin query = " select distinct ?id where { ?arvid ?id . } limit #{num} offset #{start} " list = sparql(query, lambda { |rec| rec[:id] }) list.each do | l | print(l,"\n") end start += num $stderr.print(start,":",list.first,"\n") end while list.size == MAX