【问题标题】:dbpedia SPARQL query to get certain value's for a given citydbpedia SPARQL 查询以获取给定城市的特定值
【发布时间】:2012-03-28 09:44:44
【问题描述】:

我确信我想做的事情很简单,但我似乎无法正确查询。我在数据集中有记录,这些记录具有诸如城市名称之类的值。 'New York' 和它对应的国家代码,例如'US'。我还可以访问完整的国家/地区名称和国家/地区 ISO 代码。

我想从 dbpedia 中获取这些城市的人口和抽象值,方法是使用 where 子句,例如:

Get population where name = "New York" and isoCountryCode = "US"

我已经在这方面寻求帮助,但无济于事。

到目前为止,@rohk 帮助我解决了这个问题,但它并不完全适用于所有位置:

SELECT DISTINCT ?city ?abstract ?pop
WHERE {
   ?city rdf:type schema:City ;
     rdfs:label ?label ;
     dbpedia-owl:abstract ?abstract ;
     dbpedia-owl:country ?country ;
     dbpedia-owl:populationTotal ?pop .
   ?country dbpprop:countryCode "USA"@en .
   FILTER ( lang(?abstract) = 'en' and regex(?label, "New York City"))
 }

以上适用于纽约,但是当我将其更改为:

SELECT DISTINCT ?city ?abstract ?pop
WHERE {
   ?city rdf:type schema:City ;
         rdfs:label ?label ;
         dbpedia-owl:abstract ?abstract ;
         dbpedia-owl:country ?country ;
         dbpedia-owl:populationTotal ?pop .
   ?country dbpprop:countryCode "THA"@en .
   FILTER ( lang(?abstract) = 'en' and regex(?label, "Bangkok"))
}

它没有返回泰国曼谷的结果。

我似乎无法正确获取 SPARQL 查询,我确定我的查询很愚蠢。如果任何大师可以为我提供帮助,我将不胜感激。谢谢!

【问题讨论】:

    标签: sparql dbpedia


    【解决方案1】:

    我猜你想要这样的东西:

    SELECT * WHERE {
      ?x rdfs:label "New York City"@en.
      ?x dbpedia-owl:populationTotal ?pop.
      ?x dbpedia-owl:abstract ?abstract.
    }
    

    要仅获取英文摘要,请添加FILTER

    SELECT * WHERE {
      ?x rdfs:label "New York City"@en.
      ?x dbpedia-owl:populationTotal ?pop.
      ?x dbpedia-owl:abstract ?abstract.
      FILTER (LANG(?abstract) = 'en')
    }
    

    “纽约”是州,没有附上populationTotal 数字。 “纽约市”就是这座城市。

    【讨论】:

    • 谢谢,我希望有办法将地点类型指定为城市或城镇?
    • 有多种方法,它们都不能完美地工作,这取决于您要过滤的内容类型。检查rdf:typedcterms:subjectdbpprop:wikiPageUsesTemplate 属性的值是否可以可靠地选择您想要的实体。在您的查询中添加这样的行可能会起作用:?x rdf:type dbpedia-owl:City.
    【解决方案2】:

    此查询有效

    SELECT DISTINCT *
    WHERE {
       ?city rdf:type schema:City ;
             rdfs:label ?label ;
             dbpedia-owl:abstract ?abstract ;
             dbpedia-owl:country ?country ;
             dbpprop:website ?website ;
             dbpedia-owl:populationTotal ?pop .
       ?country dbpprop:countryCode "USA"@en .
       FILTER ( lang(?abstract) = 'en' and regex(?label, "New York City"))
    }
    

    编辑:对于曼谷,有两个问题:

    • 泰国没有国家代码:您可以改用rdfs:label "Thailand"@en
    • 曼谷的rdf:type 不是schema:City 而是dbpedia-owl:Settlement

    这是曼谷的有效查询

    SELECT DISTINCT *
    WHERE {
       ?city rdf:type dbpedia-owl:Settlement ;
             rdfs:label "Bangkok"@en ;
             dbpedia-owl:abstract ?abstract ;
             dbpedia-owl:populationTotal ?pop ;
             dbpedia-owl:country ?country ;
             dbpprop:website ?website .
       ?country rdfs:label "Thailand"@en .
       FILTER ( lang(?abstract) = 'en' )
    }
    

    【讨论】:

    • 嗨 - 谢谢!如下所述,这似乎返回了州而不是城市的详细信息,有没有办法指定 Place 类型必须是城市或城镇而不是州或国家?再次感谢。
    • 删除了我的 cmets 并用进度报告更新了实际问题,谢谢!
    • 非常感谢,所以似乎没有一个自动查询可以让我只将标签的属性传递给函数。
    • 抱歉,在我停止打扰您之前,最后一个问题是,我怎样才能同时检索 dbpprop:website 属性以及城市的流行音乐?正如你所看到的,我是一个完全的新手。再次感谢。
    • @Paul :您必须将其添加到您的 where 子句中...回答已更新
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多