簡體   English   中英

RDFlib 在三元組中添加空白節點

[英]RDFlib adding blank nodes in triples

我正在使用 RDFlib 來自動化創建 DSD 的過程。 我想得到如下格式:

_:refPeriodStep1 a qb4o:HierarchyStep;
etc...

但使用這個:

graph.add((BNode('refPeriodStep1'), RDF.type, URIRef(qb4o + 'HierarchyStep')))

該文件未按需要創建。

我嘗試使用 function n3():

graph.add((BNode('refPeriodStep1').n3(), RDF.type, URIRef(qb4o + 'HierarchyStep')))

但我收到以下錯誤:

AssertionError: Subject _:refPeriodStep1 must be an rdflib term

有什么辦法可以隨心所欲嗎?

正如評論中所建議的,如果空白節點的名稱很重要,您可能應該使用 URI。 您的最后一條評論表明您在說明URIRef('_', 'refPeriodStep1')時沒有正確使用 URIRef (根據我的理解)。

如果您希望refPeriodStep1不是空白節點,同時保持(以某種方式)無前綴,您可以使用圖形的namespace_manager定義一個空前綴。

例如,下面的代碼使用Namespace fonctionnalities 而不是 URIRef 直接創建refPeriodStep qb4o:HierarchyStep類型的 refPeriodStep(如果您按照文檔中的說明重用大量命名空間,這可能是最簡單的方法):

from rdflib.namespace import NamespaceManager
from rdflib import BNode, Namespace, Graph

QB4O = Namespace('http://example.com/qb4o#')
n = Namespace('http://example.com/base-ns#')

g = Graph()
g.namespace_manager = NamespaceManager(Graph())
g.namespace_manager.bind('qb4o', QB4O)
g.namespace_manager.bind('', n)

g.add((n['refPeriodStep1'], RDF.type, QB4O['HierarchyStep']))

g.serialize('test.ttl', format='turtle')

這將 output 以下(在海龜中)接近您的期望:

@prefix : <http://example.com/base-ns#> .
@prefix qb4o: <http://example.com/qb4o#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

:refPeriodStep1 a qb4o:HierarchyStep .

請注意,如果您嘗試以n-triples triples 格式序列化一個空白節點,RDFLib 將保留創建該空白節點時使用的名稱,例如:

_:refPeriodStep1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.com/qb4o#HierarchyStep> .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM