如何通过 rdflib 获取 XML 属性

How to get XML Attributes via rdflib

我有一个包含以下内容的 rdf 文件:

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
>
    <rdf:Description rdf:about="http://someurl.com/def/elementtype/projectState">
        <rdfs:domain rdf:nodeID="projectState_0" />
    </rdf:Description>
</rdf:RDF>

由以下代码解析:

import rdflib

g = rdflib.Graph()

with open("problem/err.rdf", 'r', encoding='UTF-8') as fp:
    g.load(fp, format='application/rdf+xml')

for s, p, o in g:
    print(f"subject:{s}")
    print(f"predicate:{p}")
    print(f"object:{o}")
    print()

我希望谓词公开属性 nodeID 但我没有找到获取它的方法。该文档也不承认 BNode 上的 xml 属性(没有内容的空白节点)。

通常不承诺在导入图形时保留空白节点主题(一些图形数据库如 GraphDB 确实提供了选项)。当我第一次 运行 代码时,输​​出是

subject:http://someurl.com/def/elementtype/projectState
predicate:http://www.w3.org/2000/01/rdf-schema#domain
object:N4ae82de375104726a1a2e5344ee6a44e

当我第二次运行时,输出是

subject:http://someurl.com/def/elementtype/projectState
predicate:http://www.w3.org/2000/01/rdf-schema#domain
object:N79f7d744f68f439388484f02a9367be5

所以关于公开 nodeId 的问题,它只是不尊重你给它的标识符。查看有关 this 问题的更多信息。

我会建议

我。使用不同的支持空白节点保存的图数据库

二。使用 XML 解析器

三。将空白节点提升为 rdf:resource