代码之家  ›  专栏  ›  技术社区  ›  mcfly soft

sparql更精确地识别发电站

  •  1
  • mcfly soft  · 技术社区  · 6 年前

    我想从dbpedia获得所有动力站和动力站类型(核、水、煤等)。

    我认识到没有特定类型的powerstation,因此我正在查询所有powerstation并尝试从名称中找出powerstation的类型。(我不会抓住所有的,但足够多了)。

    到目前为止我的问题是:

    PREFIX dbpedia: <http://dbpedia.org/resource/>
    PREFIX dbp-ont: <http://dbpedia.org/ontology/>
    #PREFIX georss: <http://www.georss.org/georss/>
    
    select distinct *
    {
    ?name rdf:type dbp-ont:PowerStation .
    ?name geo:lat ?lat .
    ?name geo:long ?long
    OPTIONAL { ?name  dbo:installedCapacity ?installedCapacity }
    OPTIONAL { ?name  dbo:openingDate ?openingDate }
    OPTIONAL { ?name  dbo:closingDate ?closingDate }
    } limit 100 
    

    如果一个名为“nuclear”的新字段的名称包含“nuclear”,那么该字段的值是否为“1”?

    1 回复  |  直到 6 年前
        1
  •  1
  •   TallTed    6 年前

    首先要记住 DBpedia 数据是一个移动的目标,就像维基百科的数据一样。维基百科的更新最终(通常在3-9个月内)将成为dbpedia的一部分。更快(通常在几个小时内,如果不是几分钟或几秒钟;有时是几天,出于各种原因),它们将成为 DBpedia-Live 是的。

    给每个powerstation一个你想要的类型的长期解决方案是编辑wikipedia。

    对于您的特定即时解决方案,请注意 OPTIONAL 子句会使查询花费更长的时间,因此最终可能意味着dbpedia不会返回所需的数据。你可能需要旋转你自己的镜子(例如 DBpedia DBpedia-Live 在亚马逊EC2云中)。

    最后,正如@aksw在评论中指出的那样,下面的一行应该可以 ?nuclear 变量为 1 如果那根线出现在 ?name 是的。把它放在你的后面 可选的 线。

    BIND ( IF ( CONTAINS ( LCASE ( STR ( ?name ) ), "nuclear" ), 1, 0 ) AS ?nuclear )