Как создать онтологию с помощью rdflib?

У меня есть онтология, в которой я определил ряд классов, подклассов и свойств. Теперь я хочу автоматически создать экземпляр онтологии с помощью кода Python, снова сохранить ее в RDF/XML и загрузить в Protege. Я написал следующий код:

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"/>

but when I open the file in Protege there are no instances for the classes.

Может ли кто-нибудь сказать мне, неправильно ли я определил экземпляры или мне следует использовать другие теги?


person msc87    schedule 20.07.2015    source источник


Ответы (1)


Поигравшись с кодом и результатами, я понял, что понятие rdf:nodeID следует заменить на rdf:about. для этого мне нужно было только изменить

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

person msc87    schedule 20.07.2015