4

データセットの名前をグラフオブジェクトに追加し、後でそれらを取得しようとしています。それを実現する簡単な方法があるはずですが、これまでのところ何も見つかりませんでした...ありがとう

4

1 に答える 1

3

あなたが探しているのは、グラフにコンテキストを添付することだと思います。これは、サブグラフを解析してグラフを作成するようなものです。各サブグラフにはURIRef、rdflibの場合はaという名前が付いています。

次の2つのファイルで表されるグラフを作成する必要があると想像してください。

dataA.nt

<http://data.org/inst1> <http://xmlns.com/foaf/0.1/name> "david" .
<http://data.org/inst2> <http://xmlns.com/foaf/0.1/name> "luis" .
<http://data.org/inst3> <http://xmlns.com/foaf/0.1/name> "max" .

dataB.nt

<http://data.org/inst1> <http://xmlns.com/foaf/0.1/knows> <http://data.org/inst2> .
<http://data.org/inst2> <http://xmlns.com/foaf/0.1/knows> <http://data.org/inst3> .
<http://data.org/inst3> <http://xmlns.com/foaf/0.1/knows> <http://data.org/inst1> .

そして、次のコード:

import rdflib

g = rdflib.ConjunctiveGraph("IOMemory",)

#g is made of two sub-graphs or triples gathered in two different contexts.
#the second paramaters identifies the URIRef for each subgraph.
g.parse("dataA.nt",rdflib.URIRef("http://mygraphs.org/names"),format="n3")
g.parse("dataB.nt",rdflib.URIRef("http://mygraphs.org/relations"),format="n3")

print "traverse all contexts and all triples for each context"
for subgraph in g.contexts():
    print "Graph name",subgraph.identifier 
    for triple in subgraph.triples((None,None,None)):
        print triple

print "traverse all contexts where a triple appears"
for subgraph in g.contexts(triple=(rdflib.URIRef('http://data.org/inst1'),rdflib.URIRef("http://xmlns.com/foaf/0.1/name"),rdflib.Literal(u'david'))):
    print "Graph name",subgraph.identifier 
    for triple in subgraph.triples((None,None,None)):
        print triple

print "traverse a triple pattern regardless the context is in"
for t in g.triples((None,rdflib.URIRef("http://xmlns.com/foaf/0.1/name"),None)):
    print t
于 2011-04-11T11:44:08.070 に答える