【发布时间】:2018-01-12 15:36:36
【问题描述】:
我想查询 FOAF 和 DBPedia 等数据集。目的是运行非常简单的请求,例如“马格利特画了哪些画?”,“在美国电影中扮演的美国演员是谁?” …
所以我写了我的查询,并使用DBpedia snorql 来运行它们。然后,由于其他一些原因,我尝试了Live DBpedia和OpenLinks demo.openlinksw.com,发现根据端点不同,结果不同。
这里有两个例子:
1) 使用 DBpedia SnorQL 回答,但既不是 Live DBpedia 也不是 OpenLinks demo.openlinksw.com
#works of Magritte
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT * WHERE {
?person a dbo:Artist .
?person foaf:surname "Magritte"@en .
?work dbo:author ?person .
OPTIONAL {?work dbp:year ?year ; dbo:museum ?museum .}
}
ORDER BY ?year
2) 使用 Live DBpedia 回答,但既不是 DBpedia SnorQL 也不是 OpenLinks demo.openlinksw.com
#来自Willem Robert van Hage R tutorial的美国演员
SELECT ?actor ?movie ?director ?movie_date
WHERE {
?m dc:subject <http://dbpedia.org/resource/Category:American_films> .
?m rdfs:label ?movie .
FILTER(LANG(?movie) = "en")
?m dbp:released ?movie_date .
FILTER(DATATYPE(?movie_date) = xsd:date)
?m dbp:starring ?a .
?a rdfs:label ?actor .
FILTER(LANG(?actor) = "en")
?m dbp:director ?d .
?d rdfs:label ?director .
FILTER(LANG(?director) = "en")
}
LIMIT 1000
我认为端点只是一个查询数据集的工具。所以我想你可以从 dbpedia、live dbpedia 或 openlinks demo.openlinksw.com 中查询 DBPedia 和 FOAF ..
我读到实际上不同的端点使用不同的数据集,但我不明白为什么,因为您提供了特定的 URI 来访问。
为什么相同的查询会根据 SPARQL 端点返回不同的结果?
【问题讨论】:
-
老实说,我不明白这个问题......或者更好地说,我不明白你为什么不明白 1) SPARQL 端点只提供对数据的访问已加载,并且 2) 不同的公共端点可能确实包含不同的数据。
-
DBpedia 是基于从 Wikipedia 中提取数据,事实上,Wikipedia 数据会随着时间而变化——人们称之为动态数据。现在,问题是如何使 RDF 数据保持最新?最明显的方式是定期进行负载转储,这确实很耗时,而且不能每秒都完成。因此,数据不同步。另一种选择是只应用变更集,即差异。这仅由 DBpedia Live 完成(确实有一些延迟)。您提到的其他两个服务刚刚加载了一些转储(最后一个是 2017 年末的 2016-10 版本)。可以肯定的是,这些数据比实时数据集要早得多。
-
另外,如果你去DBpedia数据集页面,你可以看到有很多额外的数据——这或多或少是可选的。并非每个公共服务都已加载所有内容,因此,这是另一个差异来源。