为什么在对象的RDF中使用代码而不是字符串?

为什么在对象的RDF中使用代码而不是字符串?,rdf,freebase,knowledge-graph,Rdf,Freebase,Knowledge Graph,例如: entity:f06574 rdfs:label "Orioles" 或这种格式: :tt0268252 a :Movie . 在这两种情况下,f06574和tt0268252都是代码,而不是实体或实例的实际字符串。一个原因可能是因为同一个字符串可能引用不同的东西,但在RDF世界中,某个东西的标识符总是以其唯一的URI作为前缀,因此即使使用了字符串,也不会引起歧义,而且代码更具可读性和不透明性 这种陈述的真正原因是什么?Freebase中的三元组相似。这与关系数据库理论中的三元组相似

例如:

entity:f06574 rdfs:label "Orioles"
或这种格式:

:tt0268252 a :Movie .
在这两种情况下,
f06574
tt0268252
都是代码,而不是实体或实例的实际字符串。一个原因可能是因为同一个字符串可能引用不同的东西,但在RDF世界中,某个东西的标识符总是以其唯一的URI作为前缀,因此即使使用了字符串,也不会引起歧义,而且代码更具可读性和不透明性

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

这与关系数据库理论中的三元组相似。代理键不是从应用程序数据派生的,因此没有语义意义。这与从应用程序数据派生的自然密钥相反

代理键的主要优点是,如果应用程序数据发生更改,则不需要更改对数据的引用。对于自然关键点,如果应用程序数据发生更改,将导致对数据的引用发生更改。因此,所有外键都需要相应地更新

在语义网中,如果我们本质上希望标签从say
Movie
更改为
Movie
,那么引用
tt0268252
的任何三元组都不需要更新。如果我们使用像
http://awesome/movie
而且需要换成胶卷,我们需要更改IRI
http://awesome/film
,这将违反语义网的原则(虹膜不应改变)。否则我们将不得不忍受
http://awesome/movie
http://awesome/movie rdfs:标签为“胶片”
。这可能会导致更多的混乱,而不是不透明的代码

另一方面,这就是为什么有些人更喜欢使用在底层web资源发生变化时提供弹性的方法。以类似的方式,这些“代码”在应用程序数据更改时提供弹性。

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

代理键的主要优点是,如果应用程序数据发生更改,则不需要更改对数据的引用。对于自然关键点,如果应用程序数据发生更改,将导致对数据的引用发生更改。因此,所有外键都需要相应地更新

在语义网中,如果我们本质上希望标签从say
Movie
更改为
Movie
,那么引用
tt0268252
的任何三元组都不需要更新。如果我们使用像
http://awesome/movie
而且需要换成胶卷,我们需要更改IRI
http://awesome/film
,这将违反语义网的原则(虹膜不应改变)。否则我们将不得不忍受
http://awesome/movie
http://awesome/movie rdfs:标签为“胶片”
。这可能会导致更多的混乱,而不是不透明的代码

另一方面,这就是为什么有些人更喜欢使用在底层web资源发生变化时提供弹性的方法。以类似的方式,这些“代码”在应用程序数据更改时提供弹性。

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