如何通过 rdflib 获取 XML 属性

问题描述

我有一个包含以下内容的 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...