【问题标题】:Why is a code instead of the string used in RDF for an object?为什么在 RDF 中为对象使用代码而不是字符串?
【发布时间】:2020-03-15 10:29:50
【问题描述】:

例如:

entity:f06574 rdfs:label "Orioles"

或者这样的格式:

:tt0268252 a :Movie .

在任何一种情况下,f06574tt0268252 都是代码,而不是实体或实例的实际字符串。一个原因可能是同一个字符串可能指代不同的事物,但在 RDF 世界中,事物的标识符总是以其唯一的 URI 为前缀,因此即使使用字符串,也不会引起歧义,等等可读且不透明的代码。

这种表述的真正原因是什么? Freebase 中的三元组是相似的。

【问题讨论】:

  • 请注意,“某事物的标识符总是以其唯一URI为前缀”是不准确的。而是“某物的标识符它的唯一URI”。

标签: rdf freebase knowledge-graph


【解决方案1】:

这类似于关系数据库理论中的surrogate keys。代理键不是从应用程序数据派生的,因此没有语义。这与从应用程序数据派生的自然键相反。

代理键的主要优点是,如果应用程序数据发生更改,则不需要对数据的引用进行更改。在自然键的情况下,如果应用程序数据发生变化,就会导致对数据的引用发生变化。因此,所有外键都需要相应更新。

在语义网络中,如果我们本质上希望标签从 Movie 更改为 Film,则任何引用 tt0268252 的三元组都不需要更新。如果我们使用像http://awesome/movie 这样的字符串并且它需要更改为电影,我们将需要更改我们的IRI http://awesome/film,这将违反语义网络的原则(IRI 不应更改)。否则我们将不得不与http://awesome/moviehttp://awesome/movie rdfs:label "Film" 一起生活。这可能会导致更多的混乱而不是不透明的代码。

顺便说一句,这就是为什么有些人更喜欢使用Persistent uniform resource locators,它可以在底层网络资源发生变化时提供弹性。当应用程序数据发生变化时,这些“代码”以类似的方式提供弹性。

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 2021-04-20
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多