【问题标题】:Why different endpoints do not query same datasets?为什么不同的端点不查询相同的数据集?
【发布时间】:2018-01-12 15:36:36
【问题描述】:

我想查询 FOAF 和 DBPedia 等数据集。目的是运行非常简单的请求,例如“马格利特画了哪些画?”,“在美国电影中扮演的美国演员是谁?” …

所以我写了我的查询,并使用DBpedia snorql 来运行它们。然后,由于其他一些原因,我尝试了Live DBpediaOpenLinks 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数据集页面,你可以看到有很多额外的数据——这或多或少是可选的。并非每个公共服务都已加载所有内容,因此,这是另一个差异来源。

标签: sparql endpoint


【解决方案1】:

很像 SQL DBMS 的不同实例(例如 [不按特定顺序且不暗示认可] OpenLink Virtuoso、Oracle、MySQL、Informix、SQL Server、Sybase、DB2、PostgreSQL、Ingres、Progress OpenEdge 等) 保存 RDF RDBMS 的不同数据、不同实例(读取:SPARQL 端点),也称为 Quadstore 或 Triplestore(例如 [无特定顺序且不暗示背书] OpenLink Virtuoso、AllegroGraph、Stardog、Neo4J、MarkLogic 和许多其他)保存不同的数据。

您不能通过 Fred 在 DBMS B 中的数据库查询 Joe 在 DBMS A 中的数据库 - 除非有人已经告诉 Fred 的数据库和/或 DBMS 关于 Joe 的数据库和/或 DBMS(例如,VDBMS 功能),或者您包含一些关于您查询中的 Joe 的数据库和/或 DBMS(例如,SPARQL Federation)等。

(“DBMS”是一个数据库管理系统,例如上面列出的。“数据库”是数据的集合,通常存储在 [large] 文档中,由 DBMS 管理。)

与您的问题有关的特别注意事项 --

  • FOAF 是一个本体,一个词汇表,用来描述实体。
  • DBpedia 是一个数据集(随着时间的推移有不同的版本),一个项目,一个组织,以及其他各种东西(文字标识符的歧义!)。
  • OpenLink Software(不是“openlinks”)是一家生产OpenLink Virtuoso,以及其他与数据相关的软件和服务的公司,并在网络上提供许多实时端点——包括the main DBpedia endpoint(ObDisclaimer:OpenLink Software 也是我的雇主。)

【讨论】:

  • 此外,第二个查询不起作用,因为人们出于某种原因倾向于省略命名空间声明。 dc: 是为http://purl.org/dc/elements/1.1/ 保留的,但subject 的正确命名空间是http://purl.org/dc/terms/,实际上它的前缀是dct:。属性也一样,应该是dbo:starringdbo:director
  • 非常感谢您的回答,现在清楚多了! TallTed 和 AKSW cmets 都让我了解什么是真正的端点以及与 RDBMS 本身的区别。也感谢其他细节:)
  • 一个更普遍的问题:我不知道如何知道哪个命名空间是正确的。例如,“已发布”是 dbp,但“主演”和“导演”是 dbo(因此 dbp 也很有效)。每次我检查命名空间,但它很长。是否有规则可以知道使用哪一个或根据经验?
  • @J.Delannoy 我认为你后面的 cmets 是我们所说的“新问题”,应该这样提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 2012-07-10
  • 2018-12-18
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2014-07-06
相关资源
最近更新 更多