Owl Api State ObjectProperty отношения между людьми из импорта - PullRequest
0 голосов
/ 19 мая 2018

У меня есть экземпляр онтологии, который импортирует другие экземпляры онтологии, и я пытаюсь установить связь, используя 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, где отличается.

1 Ответ

0 голосов
/ 20 мая 2018

An rdf:Description with an rdf: about` IRI эквивалентен названному человеку, поэтому между этими двумя версиями нет реальной разницы.OWL API будет анализировать их как одно и то же.

Не уверен, почему Protege выводит его в этом формате - как Генриетта спросила в комментарии, какая версия Protege делает это?

...