3

如果三元组存储包含两次相同的三元组,那么关于这种冗余的权威立场是什么(如果存在的话)?

此外,是否应该允许三元组在同一上下文中存储两次相同的三元组?

我问这个是因为在 rdflib 中显然你可以将相同的三元组存储两次(或更多)。这是读者

import rdflib
from rdflib import store

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore')

config_string = "host=localhost,password=foo,user=foo,db=foo"
rt = s.open(config_string,create=False)
if rt != store.VALID_STORE:
    s.open(config_string,create=True)

graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef("urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52"))
rows = graph.query("SELECT ?id ?value { ?id <http://localhost#ha> ?value . }")
for r in rows:
    print r[0], r[1]

这是作家

import rdflib
from rdflib import store

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore')

config_string = "host=localhost,password=foo,user=foo,db=foo"
rt = s.open(config_string,create=False)
if rt != store.VALID_STORE:
    s.open(config_string,create=True)

graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef("urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52"))
graph.add( ( rdflib.URIRef("http://localhost/1000"), rdflib.URIRef("http://localhost#ha"), rdflib.Literal("18")) )
graph.commit()

这是我得到的

sbo@dhcp-045:~/tmp/gd $ python ./reader2.py 
table kb_7b066eca61_relations Doesn't exist
table kb_7b066eca61_relations Doesn't exist
sbo@dhcp-045:~/tmp/gd $ python ./reader2.py 
sbo@dhcp-045:~/tmp/gd $ python ./reader2.py 
sbo@dhcp-045:~/tmp/gd $ python ./writer2.py 
sbo@dhcp-045:~/tmp/gd $ python ./reader2.py 
http://localhost/1000 18
sbo@dhcp-045:~/tmp/gd $ python ./writer2.py 
sbo@dhcp-045:~/tmp/gd $ python ./reader2.py 
http://localhost/1000 18
http://localhost/1000 18

对我来说,它似乎是一个错误。修改后的版本显示两个三元组属于同一个上下文,并且确实也有两个三元组

len : 2
http://localhost/1000 18
http://localhost/1000 18
(rdflib.URIRef('http://localhost/1000'), rdflib.URIRef('http://localhost#ha'), rdflib.Literal(u'18'), <Graph identifier=urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52 (<class 'rdflib.Graph.Graph'>)>)
(rdflib.URIRef('http://localhost/1000'), rdflib.URIRef('http://localhost#ha'), rdflib.Literal(u'18'), <Graph identifier=urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52 (<class 'rdflib.Graph.Graph'>)>)
4

3 回答 3

8

RDF 三元组存储是一组三元组,因此根据定义,同一个三元组不能出现两次。然而,大多数 rdf 存储实际上是四元存储(一组 rdf 图也称为数据集),在这种情况下,三元组可能会出现多次。这有时称为上下文,具体取决于商店(例如我的Redland)。权限实际上取决于用户来定义特定图形名称/上下文名称的含义。

于 2009-12-08T06:35:17.433 回答
2

应该记住,任何特定的三元组可能具有与其他元数据不同的元数据 - 否则是相同的 - 三元组。元数据,例如三元组的原始来源、连接信息的可能强度等。仅计算三元组的副本数以判断连接与其他可能的矛盾连接相比的相对强度也是可行的。因此,与往常一样,这一切都取决于您打算如何处理数据。

于 2012-01-20T05:28:22.403 回答
1

RDF 是一种用于表达事实主张的语言,它被组织并分组为图形。如果一个图包含两次“Alice is a Person”,那只是多余的。所以在一个图中,三元组是标准化的;重复它们是没有意义的。然而,应用程序、商店和 SPARQL 可查询系统通常会从不同来源收集事实声明。SPARQL 语言具有“GRAPH”关键字,用于当您想要从多图视角并在不同来源中查找相同的三元组时。

于 2011-09-06T08:10:56.083 回答