У меня есть экземпляр онтологии, который импортирует другие экземпляры онтологии, и я пытаюсь установить связь, используя ObjectProperty
между индивидуумом импорта (professors-instance
или acm-ccs-lite-core
) и индивидуумом основного экземпляра онтологии(curricula-instance
).
Если я делаю это вручную, используя protege, это создает:
<!-- http://www.semanticweb.org/lsarni/ontologies/professors-instance#Andrés_Calviño -->
<rdf:Description rdf:about="http://www.semanticweb.org/lsarni/ontologies/professors-instance#Andrés_Calviño">
<curricula:inChargeOf rdf:resource="http://www.semanticweb.org/lsarni/ontologies/curricula-instance#Software_Architecture"/>
</rdf:Description>
<!-- http://www.semanticweb.org/lulas/ontologies/2018/acm-ccs-lite-core#10011119 -->
<rdf:Description rdf:about="http://www.semanticweb.org/lulas/ontologies/2018/acm-ccs-lite-core#10011119">
<curricula:taughtIn rdf:resource="http://www.semanticweb.org/lsarni/ontologies/curricula-instance#Databases_1"/>
</rdf:Description>
Но, как я пытаюсь сделать это, используя owl api, это создает NamedIndividual
в основной онтологии вместо этого и добавляет отношение следующим образом:
<!-- http://www.semanticweb.org/lsarni/ontologies/professors-instance#Andrés_Calviño -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/lsarni/ontologies/professors-instance#Andrés_Calviño">
<curricula:inChargeOf rdf:resource="http://www.semanticweb.org/lsarni/ontologies/curricula-instance#Software_Architecture"/>
</owl:NamedIndividual>
Вот код, который я использую:
File file = new File("C:\\Users\\lulas\\Documents\\Curricula Ontology\\curricula-instance.owl");
OWLOntology o = man.loadOntologyFromOntologyDocument(file);
OWLDataFactory df = o.getOWLOntologyManager().getOWLDataFactory();
IRI curriculaIOR = IRI.create("http://www.semanticweb.org/lsarni/ontologies/curricula");
IRI instanceIOR = IRI.create("http://www.semanticweb.org/lsarni/ontologies/curricula-instance");
IRI profInstanceIOR = IRI.create("http://www.semanticweb.org/lsarni/ontologies/professors-instance");
OWLObjectProperty charge = df.getOWLObjectProperty(curriculaIOR + "#inChargeOf");
OWLIndividual individual = df.getOWLNamedIndividual(profInstanceIOR + "#Andrés_Calviño");
OWLIndividual course = df.getOWLNamedIndividual(instanceIOR + "#Software_Architecture");
OWLObjectPropertyAssertionAxiom objAssertion = df.getOWLObjectPropertyAssertionAxiom(charge, individual, course);
AddAxiom addAxiom = new AddAxiom(o, objAssertion);
man.applyChange(addAxiom);
Какой правильный способ создания rdf:Description
?
Редактировать
Я использую Protege версии 5.2.0 для Windows.
Поскольку вы оба сказали, что код правильный, я использовал неправильныйIRI для одной из импортированных онтологий, поэтому он действовал так, как это NamedIndividual
, где отличается.