使用存储在python Dictionary中的属性添加RDF三元组

时间:2017-06-15 06:54:33

标签: python rdf semantic-web dbpedia rdflib

我一直在与DBpedia合作开展GSoC项目。我必须使用存储在另一个文件中的属性创建三元组。

例如。我的主文件是main.py,包含所有规则的文件是rules.py

这是我正在尝试/想要做的事情:

rules.py

mapping_rules = {
    'family': 'relatedTo',
    'singer': 'MusicalArtist',
    'writer': 'Author'
}

main.py

import rules
import rdflib

dbo = rdflib.Namespace("http://dbpedia.org/ontology/")
dbr = rdflib.Namespace("http://dbpedia.org/resource/")

uri = "something"
res = "something"
p = mapping_rules[input()]
g.add((rdflib.URIRef(uri), dbo.p, rdflib.URIRef(res)))

我希望动态决定三元组的属性。

如果我在'dbo.relatedTo'中使用mapping_rules.py作为值,则会显示错误:Predicate dbo.related must be an rdflib term.

如果我在dbo.relatedTo中使用mapping_rules.py作为值,则会引发名称错误:dbo is not defined.

如果我在relatedTo中使用mapping_rules.py并使用上述代码,则会添加三元组,但该属性会变为dbo:p,而我想要dbo:relatedTo

我被困在这里,任何人都可以帮忙吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

好的,请看this example

您的代码应为:

import rules
import rdflib

dbo = rdflib.Namespace("http://dbpedia.org/ontology/")
dbr = rdflib.Namespace("http://dbpedia.org/resource/")

uri = "something"
res = "something"
p = mapping_rules[input()]
g.add((rdflib.URIRef(uri), dbo[p], rdflib.URIRef(res)))

请注意,dbo[p]代替dbo.p。您的问题不是特定于rdflib,而是与使用Python对象有关。