【问题标题】:SPARQL, RDF & processing DataSPARQL、RDF 和处理数据
【发布时间】:2011-11-01 03:37:01
【问题描述】:

我对整个语义方面的东西很陌生,并且我陷入了一个项目,该项目需要我使用 dbpedia 中的 SPARQL 端点来检索有关某些事物的信息,例如城市。这个想法是我的应用程序收集了其中一些关键字(预定义的,例如城市、国家和地区),并依靠 dbpedia 来获取一些相关的合理信息.

在摆弄 SPARQL 端点一段时间后,我想出了以下查询:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX prop: <http://dbpedia.org/property/>

SELECT ?city
WHERE {
?city prop:name "X"@en; 
a dbo:PopulatedPlace
}

X 代表我要获取信息的城市名称。当我对 SPARQL 端点运行此查询时,我收到一个 RDF 结构中的 URI,它指向 DBPedia 上的 RDF 存储(至少我是这样解释的,如果我错了,请纠正我)

城市“安特卫普”的返回结果如下所示:

<rdf:RDF><rdf:Description rdf:nodeID="rset"><rdf:type rdf:resource="http://www.w3.org/2005/sparql-results#ResultSet"/><res:resultVariable>city</res:resultVariable><res:solution rdf:nodeID="r0"><res:binding rdf:nodeID="r0c0"><res:variable>city</res:variable><res:value rdf:resource="http://dbpedia.org/resource/Antwerp"/></res:binding></res:solution></rdf:Description></rdf:RDF>

我正在使用 Ruby on RailsRDF for Ruby gem 来处理 RDF 数据。但老实说,我对如何实际使用这些信息一无所知。当我点击链接时,我似乎收到了一个 RDF 存储,其中包含有关我查询的城市的所有信息。

我是否正确,我可能需要将我的代码指向收到的 URI 并解析我们想要的信息?或者是否可以直接通过 SPARQL 端点选择一些信息?例如描述和人口统计数据?

我知道这是一个非常模糊的问题,但我正在尽最大努力掌握这项技术,并寻找一些示例来帮助我更好地理解它。

【问题讨论】:

    标签: ruby-on-rails rdf sparql


    【解决方案1】:

    直接从 SPARQL 端点获取所需的所有信息可能更容易开始。您可以使用这样的查询:

    SELECT ?city ?property ?value
    WHERE {
        ?city prop:name "X"@en; 
              a dbo:PopulatedPlace;
              ?property ?value .
    }
    

    这将返回一组详细描述城市的属性和值,并让您了解可以获取的信息类型。

    下一步是专门查询您感兴趣的属性:

    SELECT *
    WHERE {
        ?city prop:name "Galway"@en; 
              a dbo:PopulatedPlace .
        OPTIONAL { ?city dbo:populationUrban ?pop }
        OPTIONAL { ?city foaf:homepage ?homepage }
        OPTIONAL { ?city geo:lat ?lat }
        OPTIONAL { ?city geo:long ?long }
    }
    

    我将每个三重模式都放入OPTIONAL 块中,因为某些城市可能没有所有可用信息。如果没有 OPTIONAL 块,只有当所有三元组模式都匹配城市时,您才会得到结果。

    【讨论】:

      【解决方案2】:

      是的,您可以使用接收到的 URI 并解析出信息,或者,您可以在 SPARQL 中使用“绑定”来仅获取信息。例如,在以下 SPARQL 代码中:

      PREFIX dbo: <http://dbpedia.org/ontology/> 
      PREFIX prop: <http://dbpedia.org/property/>
      PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos/>
      
      SELECT ?city, ?latitude, ?longitude
      WHERE {
      ?city prop:name "Edinburgh"@en; 
          a dbo:PopulatedPlace;
          geo:lat ?lat;
          geo:long ?long.
          bind(strafter(str(?lat), "http://www.w3.org/2003/01/geo/wgs84_pos/") as ?latitude)
          bind(strafter(str(?lat), "http://www.w3.org/2003/01/geo/wgs84_pos/") as ?longitude)
      }
      

      您将仅获得“55.93”,而不是获得“http://www.w3.org/2003/01/geo/wgs84_pos/55.93”作为纬度。

      当然,如果您不必使用 SPARQL 端点,Jena(用于 java)和 rdflib(用于 python)是处理 SPARQL 查询和编辑本体的非常好的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        相关资源
        最近更新 更多