首页 > 解决方案 > 使用 python 的 rdflib 框架将三元组从列表添加到图形

问题描述

我正在尝试使用 python 的 rdflib 包将三元组添加到 Graph 中。这些关系以列表的形式提供(数据框中的特定列)

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

我明白这个问题。我正在寻找可以规避这一点的指针。

标签: pythonrdfrdflib

解决方案


RDF terms can be of BNode, URI Reference or a Literal

    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 Reference can be also done using:

for rel in sampleRelations :                
      g.add((gen.term(rel), RDFS.subClassOf, OWL.ObjectProperty))

or

for rel in sampleRelations :                
          g.add((gen[rel], RDFS.subClassOf, OWL.ObjectProperty))

推荐阅读