3

rdflibPythonでrdfデータを扱うためにライブラリを使い始めています。現時点では、.n3次のような rdf グラフのファイルを作成したいと考えています。

@prefix ns1: <http://some.namespace/with/name#> .
@prefix ns2: <http://second.namespace/some/name#>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<my_example> ns1:annotated_with [ ns1:annotation
        ns2: annotation_value> ] ;
    ns1:name "myname" .

つまり、このグラフにはmy_example「myname」という名前の という 1 つの例があります。この例は、アノテーション値が であるオブジェクトでアノテーションが付けられていますannotation value。この例を Python で次のように作成したかったのです。

import rdflib

gg=rdflib.graph.Graph()
ns1 = rdflib.Namespace('http://some.namespace/with/name#')
ns2 = rdflib.Namespace('http://second.namespace/some/name#')
u = rdflib.term.URIRef('my_example')
gg.add((u, ns1.name, rdflib.Literal('myname')))
blank = rdflib.BNode()
gg.add((u, ns1.annotated_with, blank))
gg.add((blank, ns1.annotation, ns2.annotation_value))

print gg.serialize(format='n3')

私の意見では、どちらが正しい結果を生成するはずであり、ある意味ではそうです。上記のコードの結果は、n3次のような文字列になります。

@prefix ns1: <http://some.namespace/with/name#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<my_example> ns1:annotated_with [ ns1:annotation <http://second.namespace/some/name#annotation_value> ] ;
    ns1:name "myname" .

rdflibこれは近いですが、ファイルの先頭で、使用している2番目の名前空間を定義しなかった理由がわかりません。これを強制的に行う方法はありますか?

4

1 に答える 1