额外的RDF:在编码RDF三元组序列化为XML时添加了说明

问题描述

我正在尝试使用rdflib生成以下XML:

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-Syntax-ns#">
  <rdf:Description rdf:about="#TNFalpha_944">
    <dcterms:modified rdf:parseType="Resource">
        <dcterms:W3CDTF rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2020-09-02T17:07:46.407152</dcterms:W3CDTF>
    </dcterms:modified>
  </rdf:Description>
</rdf:RDF>

但是,我只能输出以下结果,该结果在rdf:descriptiondcterms:modified之间有一个dcterms:W3CDTF。另外,似乎无法在rdf:parseType="Resource"标签上包含<dcterms:modified>

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
  xmlns:dcterms="http://purl.org/dc/terms/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-Syntax-ns#">
  <rdf:Description rdf:about="#TNFalpha_944">
    <dcterms:modified>
      <rdf:Description rdf:nodeID="N947975008f3148c88ca6d2e3fd93f58f">
        <dcterms:W3CDTF rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2020-09-02T17:07:46.407152</dcterms:W3CDTF>
      </rdf:Description>
    </dcterms:modified>
  </rdf:Description>
</rdf:RDF>

重现我的问题的代码如下:

import rdflib
from rdflib.namespace import Namespace,DCTERMS,RDF,XSD
from datetime import datetime

graph = rdflib.Graph()

graph.bind('dcterms',DCTERMS)
graph.bind('xsd',XSD)
description = rdflib.URIRef(f'#TNFalpha_944')

w3cdtf_node = rdflib.BNode()

date = rdflib.Literal(datetime.Now(),datatype=XSD.dateTime)
graph.add((description,DCTERMS.modified,w3cdtf_node))
graph.add((w3cdtf_node,DCTERMS.W3CDTF,date))

ann = graph.serialize(format="pretty-xml").decode('utf-8')
print(ann)

我的印象是我确实缺少一些明显的东西,但是经过rdflib文档和其他论坛几个小时之后,我无法摆脱第二个rdf:description标记。我想念什么?

非常感谢您。

更新:

我认为这与省略空白节点有关:

https://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-parsetype-resource

因此,由于无法将属性rdf:parseType="Resource"添加<dcterms:modified>,因此rdflib会生成附加级别的rdf:Description。就像这里的其他示例一样:

http://etutorials.org/Misc/Practical+resource+description+framework+rdf/Chapter+9.+RDF+and+Perl+PHP+and+Python/9.3+RDF+and+Python+RDFLib/

我想知道库是否有限制,或者是否有适当的编码方式来生成正确的输出

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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