我想从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”?
答案 0 :(得分:1)
第一件事是要记住DBpedia数据是一个移动的目标,就像从其导出Wikipedia数据一样。维基百科的更新最终(通常在3到9个月内)将成为DBpedia的一部分。更快(通常在几个小时内,如果不是几分钟或几秒钟;有时是几天,由于各种原因),它们将成为DBpedia-Live的一部分。
为每个发电站提供所需类型的长期解决方案是编辑Wikipedia。
对于您特定的直接解决方法,请注意,大量的OPTIONAL
子句会使查询花费更长的时间,因此最终可能意味着DBpedia将不会返回所需的数据。您可能需要旋转自己的镜像(例如Amazon EC2 Cloud中的DBpedia或DBpedia-Live)。
最后,正如@AKSW在注释中指出的,如果该字符串出现在?nuclear
中,则下面的行应为您的1
变量提供一个?name
。只需将其放在您的OPTIONAL
行之后即可。
BIND ( IF ( CONTAINS ( LCASE ( STR ( ?name ) ), "nuclear" ), 1, 0 ) AS ?nuclear )