问题描述
我正在尝试使用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:description
和dcterms: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。就像这里的其他示例一样:
我想知道库是否有限制,或者是否有适当的编码方式来生成正确的输出。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)