我从一本书中了解到:
容器和集合的区别在于容器总是开放的(即可以通过添加其他RDF语句来添加新成员),而集合可以被关闭。
我不太清楚这个区别。它说不能向集合中添加新成员。如果我将最后一个 rdf:rest
属性的值从 rdf:nil
更改为 _:xyz
并添加
_:xyz rdf:first <ex:aaa> .
_:xyz rdf:rest rdf:nil .
我能够添加一个新成员_:xyz
。为什么它说集合已关闭?
我从一本书中了解到:
容器和集合的区别在于容器总是开放的(即可以通过添加其他RDF语句来添加新成员),而集合可以被关闭。
我不太清楚这个区别。它说不能向集合中添加新成员。如果我将最后一个 rdf:rest
属性的值从 rdf:nil
更改为 _:xyz
并添加
_:xyz rdf:first <ex:aaa> .
_:xyz rdf:rest rdf:nil .
我能够添加一个新成员_:xyz
。为什么它说集合已关闭?
关键区别在于,您可以在容器中简单地继续添加新项,只需断言新的RDF三元组即可。在集合中,您必须先删除一个语句,然后才能添加新项。
这是特别针对RDF推理的重要区别。它很重要,因为RDF推理采用开放世界假设(OWA),简而言之,是指仅因为某个事实未知,并不意味着我们可以认为该事实是不真实的。
如果将此原则应用于容器中,并询问“容器中有多少项”,答案必须始终为“我不知道”,因为没有办法确定可能会有多少未知项在容器中。但是,如果我们有一个集合,我们就有了最后一个项目的明确标记,因此我们可以确定地说集合包含多少个项目 - 没有未知的附加项。
_:xyz rdf:first <ex:aaa> ; rdf:rest rdf:nil
时,您要添加到列表中的元素是<ex:aaa>
,而不是_:xyz
。节点_:xyz
是列表的结构的一部分,而<ex:aaa>
是列表的一个元素。 - Joshua Taylor