首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制rdflib定义命名空间

强制rdflib定义命名空间
EN

Stack Overflow用户
提问于 2015-02-13 16:00:43
回答 1查看 3K关注 0票数 5

我开始使用rdflib库来处理Python中的rdf数据。目前,我希望创建一个.n3文件,该文件的一些rdf图如下所示:

代码语言:javascript
复制
@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“。此示例使用注释值为annotation value的对象进行注释。我想用Python构建这个示例,如下所示:

代码语言:javascript
复制
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字符串,如下所示:

代码语言:javascript
复制
@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没有在文件的开头定义我正在使用的第二个命名空间。有没有办法强迫它这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-24 10:47:30

bind方法是我一直在寻找的。它曾用于相关问题,在此也很有用。

加行

代码语言:javascript
复制
gg.bind('myprefix1', ns1)
gg.bind('myprefix2', ns1)

结果就是我所需要的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28503628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档