【问题标题】:Simple versioning in RDF dataRDF 数据中的简单版本控制
【发布时间】:2017-01-24 14:20:16
【问题描述】:

许多数据集都有更改历史记录。将历史数据作为关联数据提供可能是一项挑战。我正在考虑的一般情况是数据集包含有关具有可以随时间变化的属性的事物的数据。一个例子可以是温莎城堡的历史:它过去有很多配置,但仍然可以被认为是同一件事。处理该问题的一种方法可能是对属性进行时间注释。但是随后就会陷入尴尬的境地,即每个 RDF 三元组都有元数据。我认为更简单的解决方案是考虑事物的版本:当资源的一个或多个属性发生变化时,新版本就会出现。

以下是某人在特定日期改名的简单示例:

@prefix : <http://www.example.com/mydataset/> .
@base <http://www.example.com/mydataset/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

:p1 a foaf:Person ;
  foaf:name "Bob" ;
  dcterms:valid "start=2015-06-20;" ;
  dcterms:replaces <p1/version1> .

<p1/version1> a foaf:Person ;
  foaf:name "Alfred" ;
  dcterms:valid "start=1975-08-01; end=2015-06-19;" ;
  dcterms:isVersionOf :p1 ;
  dcterms:isReplacedBy :p1 .

在此示例中,主 URI (:p1) 始终指向最新版本。这很有用,因为可能并不总是需要历史数据。当前数据确实有指向以前版本的链接。属性dcterms:replacesdcterms:isReplacedBy 可以形成一个旧版本链。

我喜欢这种设置,因为它简单明了,并且不依赖于 SPARQL 之类的东西来工作。然而,一个问题是时间有效性的规范。我能找到的唯一合适的术语是dcterms:valid。但它的范围是字面的。这适用于DCMI Period Encoding Scheme,但我认为能够使用xsd:dateTimexsd:gYear 等常见数据类型会更有用。这将有助于查询(按时间范围或按时间点)并对数据进行大量排序。例如,SPARQL 中的时间查询依赖于数据类型xsd:dateTime

所以我的问题是:有人可以为链接数据建议一个简单的版本控制方案,可以使用常见的数据类型作为时间吗?或者只是dcterms:valid 的替代品?

更新:一个建议是查看PROV,它为出处提供语义,以寻找替代方案。 PROV 确实包含有效性的概念,并且已尝试将dct:valid 映射到 PROV。我的声誉太低,无法发布额外的超链接,所以我引用:

dct:valid: "资源有效的日期(通常是一个范围)。"此属性可能对应于 PROV 的资源生成和失效或其专业化之一。但是,dct:valid 可用于设置到期日期(例如,资源有效期至 2015 年),这与出处无关(与过去事件无关)。因此,该属性被排除在映射之外。

对于这个问题所涉及的历史数据,dct:valid 可以设置未来日期这一事实并不重要。所以 PROV 的生成和失效仍然可以适用。相关的 PROV 术语似乎是 prov:generatedAtTimeprov:invalidatedAtTime。它们可以用来表达版本的时间有效性。但是,这些属性的范围是xsd:dateTime,这意味着每次都需要知道达到秒的水平。特别是对于数字时代之前的历史数据,这并不总是已知的。有时只知道一年或日期。所以看起来 PROV 在另一个方面过于严格了。

【问题讨论】:

  • 这不是本站的好Q,因为没有简单的答案。 RDF 没有固有的版本控制概念。 RDF 中描述的任何内容都是“是”。时间性的所有解决方案在某种程度上都是kludges。你可以看看PROV,它涵盖了这方面的很多内容。
  • @TallTed 是正确的; PROV 确实启用了归因和间隔。
  • @TallTed:你认为这个问题不属于这里还是只是标题具有误导性?我不是指 RDF 中的版本控制,而是基于 RDF 的数据或基于 RDF 的链接数据中的版本控制。关于 PROV:这是一个很好的线索,但似乎没有提供完整的解决方案。我将更新原始问题以包括 PROV。
  • 我认为您有一个有趣的问题,PROV 是一种非常有趣的方法,但我认为它不能解决您的问题。至于这对 SO 是否是一个好问题,很难说,但我会投票保留它。
  • 嗯。作为 PROV 工作组的参与者,我知道其目的是允许使用模糊的符号,例如艺术作品的创作年份,而我们可能不知道其他时间细节。快速浏览一下,在完成的规范中可能没有正确传达,甚至是真实的。也就是说,RDF 本体不像 SQL 模式定义那样强制执行。本体说范围是xsd:dateTime 并不妨碍您将此范围视为包括xsd:date 和/或xsd:gYear...

标签: rdf semantic-web linked-data


【解决方案1】:

支持此类更改的词汇表例如 ChangeSet

http://vocab.org/changeset/

如果你用它来建模,一方面你有你的数据,另一方面你有关于变化的元数据。

【讨论】:

  • 我发现了类似的东西,但我不知道它与您的词汇量相比如何:topbraid.org/change
  • 我只是比较一下词汇,看看哪个最适合你想要完成的事情
  • 谢谢,我之前看过变更集词汇。这些示例目前不可用,但w3.org/2009/12/rdf-ws/papers/ws07 提供了一个示例。我的印象是变更集词汇更多地用于跟踪数据集中的编辑更改,而不是表达资源如何具有不同的历史版本。我认为这些是不同的用例。我将更新原始问题以澄清这一点,以温莎城堡的历史为例。
  • topbraid 变更本体似乎与变更集词汇具有相似的目的:在数据集中记录事务。我想我正在寻找其他东西:记录资源描述的有效性时间间隔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多