[英]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.