Sparql更精确地识别电站

时间:2018-10-02 07:59:56

标签: sparql dbpedia

我想从DBpedia获取所有的动力站以及动力站的类型(核,水,煤等)。

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

到目前为止我的查询:

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 个答案:

答案 0 :(得分:1)

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

为每个发电站提供所需类型的长期解决方案是编辑Wikipedia。

对于您特定的直接解决方法,请注意,大量的OPTIONAL子句会使查询花费更长的时间,因此最终可能意味着DBpedia将不会返回所需的数据。您可能需要旋转自己的镜像(例如Amazon EC2 Cloud中的DBpediaDBpedia-Live)。

最后,正如@AKSW在注释中指出的,如果该字符串出现在?nuclear中,则下面的行应为您的1变量提供一个?name。只需将其放在您的OPTIONAL行之后即可。

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