Ruby on rails RubyonRails SPARQL客户端

Ruby on rails RubyonRails SPARQL客户端,ruby-on-rails,semantics,rdf,sparql,Ruby On Rails,Semantics,Rdf,Sparql,我目前正在使用RubyonRails SPARQL客户端,尝试从dbpedia的公共SPARQL端点检索信息。我正在运行的通用查询如下所示: query = " PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX prop: <http://dbpedia.org/property/> PREFIX foaf: <http://xmlns.com/foaf/0.1/>

我目前正在使用RubyonRails SPARQL客户端,尝试从dbpedia的公共SPARQL端点检索信息。我正在运行的通用查询如下所示:

query = "
      PREFIX dbo: <http://dbpedia.org/ontology/>
      PREFIX prop: <http://dbpedia.org/property/>
      PREFIX foaf: <http://xmlns.com/foaf/0.1/>
      PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      SELECT * WHERE {
        ?city prop:name 'Antwerpen'@en;
              a dbo:PopulatedPlace;
              dbo:abstract ?abstract .
        FILTER langMatches( lang(?abstract), 'en')
        OPTIONAL { ?city foaf:homepage ?homepage }
        OPTIONAL { ?city rdfs:comment ?comment .
                  FILTER langMatches( lang(?comment), 'en') }
      }"
这是一个从dbpedia返回有关城市的一般信息的通用查询。我已经在sparql端点上手动测试了它,它检索了我希望它返回的信息。 然而,我似乎找不到在RubyonRails中解析响应的方法

目前,我正在尝试使用RDF for Ruby和sparql客户端。根据我可以找到的示例,代码如下所示:

result = {}
    client = SPARQL::Client.new("http://dbpedia.org/sparql")
    client.query(query).first.each_binding { |name, value| result[name] << value}
    result
但我找不到任何东西。当使用调试器手动进入变量时,它会在执行查询时立即停止,我甚至无法查看返回值


任何人都有一个关于如何对SPARQL端点执行查询并解析响应的好例子吗?

我刚刚尝试了您的代码,并使用=进行了轻微修改,而不是重复,现在有了支持SPARQL的dbpedia gem,我将在明天的工作中再次研究它,也许jruby和Windows上的ruby之间有区别——虽然不是不可能,但不太可能有区别。根据我的经验,dbpedia端点可能是不可预测的,所以我的钱就在这上面。好的,很高兴知道。JSON目前也在工作,所以我现在坚持使用这个解决方案。
require 'rubygems'
require 'sparql/client'

query = "
  PREFIX dbo: <http://dbpedia.org/ontology/>
  PREFIX prop: <http://dbpedia.org/property/>
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  SELECT * WHERE {
    ?city prop:name 'Antwerpen'@en;
          a dbo:PopulatedPlace;
          dbo:abstract ?abstract .
    FILTER langMatches( lang(?abstract), 'en')
    OPTIONAL { ?city foaf:homepage ?homepage }
    OPTIONAL { ?city rdfs:comment ?comment .
              FILTER langMatches( lang(?comment), 'en') }
  }"

result = {}
client = SPARQL::Client.new("http://dbpedia.org/sparql")
client.query(query).first.each_binding { |name, value| result[name] = value}
p result
$ jruby sparql.rb 
{:city=>#<RDF::URI:0x890(http://dbpedia.org/resource/Antwerp)>, :abstract=>#<RDF::Literal:0x892("Antwerp is a city and municipality in Belgium and the capital of the Antwerp province in Flanders, one of Belgium's three regions. Antwerp's total population is 472,071 (as of 1 January 2008) and its total area is 204.51 km, giving a population density of 2,308 inhabitants per km\u00B2. The metropolitan area, including the outer commuter zone, covers an area of 1,449 km with a total of 1,190,769 inhabitants as of 1 January 2008. The nickname of inhabitants of Antwerp is Sinjoren, after the Spanish word se\u00F1or, which means 'mister' or 'gent'. Antwerp has long been an important city in the nations of the Benelux both economically and culturally, especially before the Spanish Fury of the Dutch Revolt. It is located on the right bank of the river Scheldt, which is linked to the North Sea by the estuary Westerschelde."@en)>, :homepage=>#<RDF::URI:0x898(http://www.antwerpen.be/)>, :comment=>#<RDF::Literal:0x89a("Antwerp is a city and municipality in Belgium and the capital of the Antwerp province in Flanders, one of Belgium's three regions. Antwerp's total population is 472,071 (as of 1 January 2008) and its total area is 204.51 km, giving a population density of 2,308 inhabitants per km\u00B2. The metropolitan area, including the outer commuter zone, covers an area of 1,449 km with a total of 1,190,769 inhabitants as of 1 January 2008."@en)>}