我正在尝试使用python的rdflib软件包向图添加三元组。关系以列表的形式提供(数据框中的特定列)
sampleRelations = ['similarTo', 'brotherOf', 'capitalOf']
g = Graph()
# general relations
gen = Namespace('http://abcd.com/general#')
g.bind('gen',gen)
# Adding predefined relationships
g.add( (gen.relatedTo, RDFS.subClassOf, OWL.ObjectProperty) )
这照常工作。但是,当遍历列表时:
for rel in sampleRelations:
g.add( ('gen.'+rel, RDFS.subClassOf, OWL.ObjectProperty) )
它引发错误:“主题%s必须是rdflib术语”%(s,)。
relWithNamespace = gen+rel
print(relWithNamespace)
g.add( (relWithNamespace, RDFS.subClassOf, OWL.ObjectProperty) )
错误
AssertionError: Subject http://abcd.com/general#similarTo must be an rdflib term
我了解这个问题。我正在寻找可以避免这种情况的指针。
RDF术语可以是BNode,URI参考或文字
sampleRelations = ['similarTo', 'brotherOf', 'capitalOf'`]
g = Graph()
# general relations
gen = Namespace('http://abcd.com/general#')
g.bind('gen',gen)
# Adding predefined relationships
g.add( (gen.relatedTo, RDFS.subClassOf, OWL.ObjectProperty) )
for rel in sampleRelations :
rel = URIRef('http://abcd.com/general#' + rel)
g.add((rel, RDFS.subClassOf, OWL.ObjectProperty))
URI引用也可以使用:
for rel in sampleRelations :
g.add((gen.term(rel), RDFS.subClassOf, OWL.ObjectProperty))
或
for rel in sampleRelations :
g.add((gen[rel], RDFS.subClassOf, OWL.ObjectProperty))