嵌套三元组>在 turtle 文件中具有值单位



我目前正在制作一个海龟文件。我必须根据qudt.org将价值/单位联系起来基于以下示例数据:

data = {    "objectid_l1": "Bridge_1",
"defid_l1": "Bridge",
"objectid_l2": "Deck_1",
"defid_l2": "Deck",
"variable": "height",
"value": "50.0",
"unit": "M",
}

我做了以下代码,但输出不是我想要的:

from rdflib.namespace import RDF
from rdflib import URIRef, BNode, Literal, Namespace, Graph
EX = Namespace('https://example.com/id/') 
UNIT = Namespace('http://qudt.org/2.1/vocab/unit/')
BS = Namespace('https://w3id.org/def/basicsemantics-owl#')
for i in data:
if i['objectid_l1'] != None:
g.add((
EX[i['objectid_l1']],
RDF.type,
EX[i['defid_l1']]
))
g.add((
EX[i['objectid_l1']],
BS['hasPart'],
EX[i['objectid_l2']]
))
g.add((
EX[i['objectid_l1']],
EX[i['variable']],
EX[i['value']]
))
g.add((
EX[i['variable']],
BS['unit'],
UNIT[i['unit']]
))

输出:

ex:Bridge_1
a ex:Bridge ;
bs:hasPart ex:Deck_1 ;
ex:height 50.0 .
50.0 bs:unit unit:M .

作为输出,我希望单位缩进,所需的输出如下:

ex:Bridge_1
a ex:Bridge ;
bs:hasPart ex:Deck_1 ;
ex:height [
rdf:value 50.0 ;
bs:unit unit:M ;
];

为了实现您想要的目标,您的代码中缺少了一些东西:

  • 您需要使用rdflibBNode显式创建在预期输出中显示的空白节点,然后将其用作设置高度值和单位的三元组的主题
  • 您必须指定高度值(50.0(是一个窝值
from rdflib.namespace import RDF, XSD, NamespaceManager
from rdflib import BNode, Literal, Namespace, Graph
EX = Namespace('https://example.com/id/') 
UNIT = Namespace('http://qudt.org/2.1/vocab/unit/')
BS = Namespace('https://w3id.org/def/basicsemantics-owl#')
g = Graph()
g.namespace_manager = NamespaceManager(Graph())
g.namespace_manager.bind('unit', UNIT)
g.namespace_manager.bind('bs', BS)
g.namespace_manager.bind('ex', EX)
i = {
"objectid_l1": "Bridge_1",
"defid_l1": "Bridge",
"objectid_l2": "Deck_1",
"defid_l2": "Deck",
"variable": "height",
"value": "50.0",
"unit": "M",
}
if i['objectid_l1'] != None:
g.add((EX[i['objectid_l1']], RDF.type, EX[i['defid_l1']]))
g.add((EX[i['objectid_l1']], BS['hasPart'], EX[i['objectid_l2']]))
bnode = BNode()
g.add((bnode, RDF.value, Literal(i['value'])))
g.add((bnode, BS['unit'], UNIT[i['unit']]))
g.add((EX[i['objectid_l1']], EX[i['variable']], bnode))
g.serialize('test.ttl', format='ttl')

应按预期输出:

ex:Bridge_1 a ex:Bridge ;
bs:hasPart ex:Deck_1 ;
ex:height [ rdf:value "50.0" ;
bs:unit unit:M ] .

最新更新