python - 强制 rdflib 定义命名空间

标签 python rdf rdflib

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

@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 构建这个示例,如下所示:

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 没有在文件开头定义我正在使用的第二个命名空间。有没有办法强制它这样做?

最佳答案

方法bind正是我正在寻找的。它已在相关问题中使用,在这里也很有用。

添加行

gg.bind('myprefix1', ns1)
gg.bind('myprefix2', ns1)

得到了我需要的结果。

关于python - 强制 rdflib 定义命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503628/

相关文章:

python - zip(跳过一个列表中的元素,但不跳过其他列表中的元素)

python - 使用 Python 的 Azure Blob 存储,创建容器但不列出它们?

python - 扁平化嵌套字典,压缩键

java - 如何在 Jena TDB 数据集中保留命名空间前缀?

rdf - sparql DESCRIBE 查询以获取有关链接对象的数据

python - 使用相同的参数初始化两个Python类,得到不同的结果

java - tdbloader2 因类路径错误而失败

python - 如何将 Pandas DataFrame 转换为 RDF(资源描述框架)?

python - 查询大的海龟文件

python - 使用 RDFlib 获取 Literal 对象的 lang 值