3

トリプル ストアに同じトリプルが 2 回含まれている場合、この冗長性に関する信頼できる立場は (存在する場合) ?

さらに、トリプルストアは、同じコンテキスト内で同じトリプルを 2 回格納することを許可されるべきですか?

rdflib では、同じトリプルを 2 回 (またはそれ以上) 保存できるようです。これがリーダー

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

私には、それはバグのように見えます。修正されたバージョンは、両方のトリプルが同じコンテキストに属していることを示しており、実際には 2 つのトリプルもあります。

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 トリプル ストアはトリプルのセットであるため、定義上、同じトリプルが 2 回存在することはありません。ただし、ほとんどの rdf ストアは実際にはクワッド ストア (データセットとも呼ばれる rdf グラフのセット) であり、その場合、トリプルは複数回出現する可能性があります。ストアによっては、コンテキストと呼ばれることもあります (例: mine, Redland )。特定のグラフ名/コンテキスト名が持つ意味を定義する権限は、実際にはユーザー次第です。

于 2009-12-08T06:35:17.433 に答える
2

特定のトリプルは、他のトリプルとは異なるメタデータを持っている可能性があることに注意してください。トリプルの元のソース、接続情報の可能性のある強度などのメタデータ。他の可能な矛盾する接続と比較して、接続の相対的な強さを判断するために、トリプルのコピーの数を単にカウントすることも実行可能です。したがって、いつものように、すべてはデータをどうするかによって異なります。

于 2012-01-20T05:28:22.403 に答える
1

RDFは、事実に基づく主張を表現するための言語であり、グラフに編成およびグループ化されています。グラフに「AliceisaPerson」が2回含まれている場合、それは冗長です。したがって、グラフ内では、トリプルが正規化されます。それらを繰り返す意味はありません。ただし、アプリケーション、ストア、およびSPARQLで照会可能なシステムは、多くの場合、さまざまなソースから事実に基づくクレームを収集します。SPARQL言語には、複数グラフの視点を取り、異なるソースで同じトリプルを探したい場合に使用する「GRAPH」キーワードがあります。

于 2011-09-06T08:10:56.083 に答える