rdf - RDF 数据中的简单版本控制

标签 rdf semantic-web linked-data

许多数据集都有变化的历史。将历史数据作为关联数据提供可能是一个挑战。我正在考虑的一般情况是,数据集包含有关具有可以随时间变化的属性的事物的数据。一个例子可能是温莎城堡的历史:它过去有很多配置,但它仍然可以被认为是同一件事。处理这个问题的一种方法可能是对属性进行时间注释。但随后就进入了每个 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:dateTime)会更有用。或 xsd:gYear .这将有助于查询(按时间范围或按时间点)和对数据进行大量排序。例如,SPARQL 中的时间查询依赖于数据类型 xsd:dateTime .

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

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

dct:valid: "Date (often a range) of validity of a resource." This property could correspond to PROV's generation and invalidation of the resource or one of its specializations. However, dct:valid can be used to set expiry dates (e.g., resource valid until 2015), which is not provenance (it is not about past events). Thus this property is left out of the mapping.



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

最佳答案

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

http://vocab.org/changeset/

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

关于rdf - RDF 数据中的简单版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41830542/

相关文章:

python - 将字符串分解为主谓词和宾语的三元组(三个字段的元组)。

xpath - 如何在Python中使用XPath限制特定xml元素的开始和结束标记之间的元素提取范围?

rdf - RDF 中的空白节点

list - 使用 SPARQL 创建 RDF 列表

sparql - 通过 dbpedia 使用 SPARQL 进行查询以显示专有名词

serialization - Rdflib.js,如何将数据序列化为turtle(.ttl)格式?

sparql - 维基数据 - 这个查询可能吗?

rdf - 如何构建正确的 SPARQL 查询

javascript - 使用 lodlive 可视化 D2R rdf 数据