2015-07-20 143 views
1

我有一个本体,我定义了一系列的类,子类和属性。现在我想自动实例化Python代码中的本体,并将其保存在RDF/XML中,并将其加载到Protege中。我写了下面的代码:如何使用rdflib创建本体?

def instantiating_ontology(rdf_address): 
from rdflib import * 
g = Graph() 
input_RDF = g.parse(rdf_address) 
#input_RDF = g.open(rdf_address, create=False) 
myNamespace="http://www.semanticweb.org/.../ontologies/2015/3/RNO_V5042_RDF" 
rno = Namespace(myNamespace+"#") 
nodeClass = URIRef(rno+"Node") 
arcClass = URIRef(rno+"Arc") 
#owlNamespace = 'http://www.w3.org/2002/07/owl#NamedIndividual' 
namedIndividual = URIRef('http://www.w3.org/2002/07/owl#NamedIndividual') 
rdftype = URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#type") 
for i in range(0,100): 
    individualName = rno + "arc_"+str(arcID) 
    #arc_individual= BNode(individualName) 
    arc_individual = BNode() 
    #g.add() 
    #g.add((arc_individual,rdftype, namedIndividual)) 
    g.add((arc_individual,rdftype, arcClass)) 
    g.add((arc_individual,rdftype, arcClass)) 
    #g.commit() 
output_address ="RNO_V5042_RDF.owl" 
g.serialize(destination = output_address) 

该文件包含加三元到RDF/XML:

<rdf:Description rdf:nodeID="N0009844208f0490887a02160fbbf8b98"> 
<rdf:type rdf:resource="http://www.semanticweb.org/ehsan.abdolmajidi/ontologies/2015/3/RNO_V5042#Arc"/> 

,但是当我在门徒打开该文件不存在用于实例类。

有人可以告诉我,如果我定义的实例的方式是错误的或我应该使用不同的标签?

任何帮助,非常感谢。

回答

2

玩过代码和结果后,我意识到应该用rdf:about替换rdf:nodeID这个概念。这样做我只需要改变

for i in range(0,100): 
individualName = rno + "arc_"+str(arcID) 
#arc_individual= BNode(individualName) 
arc_individual = BNode()  #---> remove this one 
arc_individual = URIRef(individualName) #----> add this one 
g.add((arc_individual,rdftype, arcClass)) 
g.add((arc_individual,rdftype, arcClass)) 
arc_individual = URIRef(individualName) 

这似乎很容易,但让我有一段时间了解。我希望这可以帮助别人。 :D