如何在 rdflib 中获取图形的命名空间
How to get graph's namespaces in rdflib
我已经使用 rdflib 在 Python 中加载了一个 RDF 文件:
g = rdflib.Graph()
g.parse ( "foaf_ex.rdf" )
*.rdf
定义了许多 prefix/namespace 对(例如,foaf:
),我知道它们进入 g
因为当我打印时它们仍然存在g.serialize()
.
我的问题是,是否有一种简单的方法可以从 g
解决 "foaf:Person"
,即变成 "http://xmlns.com/foaf/0.1/Person"
?直接从初始前缀 URI 获取 URIRef
会更好,但如果我至少可以获取完整的 URI 字符串,它无论如何都会有所帮助。
方法namespaces()
returns一个生成器所以:
ns_prefix = 'foaf'
for ns_prefix, namespace in g.namespaces():
if prefix == ns_prefix:
print(namespace)
namespace
变量包含一个 URIRef
对象。
自己回答这个老问题,同时积累经验。
rdflib有一个NamespaceManager
class,Graph
对象有一个namespace_manager属性,可以传给一个from_n3()
函数,后者做我需要的:
def from_n3(s, default=None, backend=None, nsm=None):
r'''
Creates the Identifier corresponding to the given n3 string.
>>> from_n3('<http://ex.com/foo>') == URIRef('http://ex.com/foo')
True
>>> from_n3('"foo"@de') == Literal('foo', lang='de')
True
>>> from_n3('"""multi\nline\nstring"""@en') == Literal(
... 'multi\nline\nstring', lang='en')
True
>>> from_n3('42') == Literal(42)
True
>>> from_n3(Literal(42).n3()) == Literal(42)
True
>>> from_n3('"42"^^xsd:integer') == Literal(42)
True
>>> from rdflib import RDFS
>>> from_n3('rdfs:label') == RDFS['label']
True
>>> nsm = NamespaceManager(Graph())
>>> nsm.bind('dbpedia', 'http://dbpedia.org/resource/')
>>> berlin = URIRef('http://dbpedia.org/resource/Berlin')
>>> from_n3('dbpedia:Berlin', nsm=nsm) == berlin
True
'''
我开发了 NamespaceManager 的扩展版本,XNamespaceManager
,它使访问此功能和其他功能变得简单。
我已经使用 rdflib 在 Python 中加载了一个 RDF 文件:
g = rdflib.Graph()
g.parse ( "foaf_ex.rdf" )
*.rdf
定义了许多 prefix/namespace 对(例如,foaf:
),我知道它们进入 g
因为当我打印时它们仍然存在g.serialize()
.
我的问题是,是否有一种简单的方法可以从 g
解决 "foaf:Person"
,即变成 "http://xmlns.com/foaf/0.1/Person"
?直接从初始前缀 URI 获取 URIRef
会更好,但如果我至少可以获取完整的 URI 字符串,它无论如何都会有所帮助。
方法namespaces()
returns一个生成器所以:
ns_prefix = 'foaf'
for ns_prefix, namespace in g.namespaces():
if prefix == ns_prefix:
print(namespace)
namespace
变量包含一个 URIRef
对象。
自己回答这个老问题,同时积累经验。
rdflib有一个NamespaceManager
class,Graph
对象有一个namespace_manager属性,可以传给一个from_n3()
函数,后者做我需要的:
def from_n3(s, default=None, backend=None, nsm=None):
r'''
Creates the Identifier corresponding to the given n3 string.
>>> from_n3('<http://ex.com/foo>') == URIRef('http://ex.com/foo')
True
>>> from_n3('"foo"@de') == Literal('foo', lang='de')
True
>>> from_n3('"""multi\nline\nstring"""@en') == Literal(
... 'multi\nline\nstring', lang='en')
True
>>> from_n3('42') == Literal(42)
True
>>> from_n3(Literal(42).n3()) == Literal(42)
True
>>> from_n3('"42"^^xsd:integer') == Literal(42)
True
>>> from rdflib import RDFS
>>> from_n3('rdfs:label') == RDFS['label']
True
>>> nsm = NamespaceManager(Graph())
>>> nsm.bind('dbpedia', 'http://dbpedia.org/resource/')
>>> berlin = URIRef('http://dbpedia.org/resource/Berlin')
>>> from_n3('dbpedia:Berlin', nsm=nsm) == berlin
True
'''
我开发了 NamespaceManager 的扩展版本,XNamespaceManager
,它使访问此功能和其他功能变得简单。