我一直在与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
。
我被困在这里,任何人都可以帮忙吗? 谢谢!
答案 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对象有关。