Утверждение класса OWL Api - PullRequest
0 голосов
/ 06 мая 2018

У меня есть два класса A и B, и я хочу утверждать, что A - это relatedClass B.

Я хочу сделать это на уровне класса, сначала я подумал о создании свойства объекта relatedClass и добавлении этого утверждения. Но я могу делать это только между людьми.

OWLObjectProperty related = dataFactory.getOWLObjectProperty(IOR + "#relatedClass");
OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, classA, classB);

Это неверно, потому что метод ожидает, что classA и classB будут отдельными лицами.

Можно ли установить отношения между классами? Как это делается с помощью OWL API?

Я следую этому шаблону , чтобы преобразовать таксономию и он говорит:

Утверждают, что компетенция связана с классом производительности

Где competence и performance являются классами.


Обновление

Хорошо, поэтому, основываясь на ваших ответах и ​​комментариях, я пытался понять, о каких отношениях идет речь. Но я в растерянности.

Во-первых, значение related такое же, как и значение skos:related, поэтому оно очень общее:

Свойство skos: related используется для установления ассоциативной связи между двумя концепциями SKOS.

Используется, когда два понятия связаны, но одно не является более общим или конкретным понятием другого. Плюс, это симметричное свойство. Одним из примеров из моего домена является то, что «Информационные системы» относятся к «Системной безопасности» (но, как вы можете видеть, это очень общий вид отношений).

Вот схема, которая является частью шаблона:

enter image description here

А вот (очень размытая, но так выглядит на бумаге) версия диаграммы для примера:

enter image description here

Так что я получаю отсюда, что это должен быть ObjectProperty, и я должен установить домен и диапазон, но как это работает, если:

ClassA related ClassB
ClassC related ClassD

Как мне установить домен и диапазон в этом случае? Или вы думаете, у меня должно быть по одному на пару связанных классов?

1 Ответ

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

Этого нельзя достичь с помощью API OWL, потому что OWL его не поддерживает. В частности, в спецификации OWL указано

Свойства объекта связывают пары особей.

Следовательно, свойства объекта не связывают классы отдельных лиц, но отдельные лица. Лучшее, что вы можете сделать, это сказать, что если 2 человека связаны через свойство объекта, эти люди принадлежат к определенным классам, что может быть достигнуто с помощью ограничений домена и диапазона. I.e.:

ObjectProperty: relatedClass
  Domain: A
  Range: B

Используя OWL API, вам нужно будет сделать следующее:

OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLDataFactory dataFactory = manager.getOWLDataFactory(); 

IRI relatedClassPropertyIRI = IRI.create(ontologyIRI + "#relatedClass");
IRI aClassIRI = IRI.create(ontologyIRI + "#A");
IRI bClassIRI = IRI.create(ontologyIRI + "#B");

OWLObjectProperty relatedClassProperty = dataFactory.getOWLObjectProperty(relatedClassPropertyIRI);

OWLClass aClass = dataFactory.getOWLClass(aClassIRI);
OWLClass bClass = dataFactory.getOWLClass(bClassIRI);

dataFactory.getOWLObjectPropertyDomainAxiom(relatedClassProperty, aClass);
dataFactory.getOWLObjectPropertyRangeAxiom(relatedClassProperty, bClass);

Если вы теперь используете аксиому утверждения свойства, такую ​​как

OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, individualA, individualB);

рассуждатель сделает вывод, что individualA относится к классу A и individualB к классу B.

Обновление

Чтобы иметь дело с несколькими связанными классами, вы должны использовать объединения классов для домена и диапазона:

ObjectProperty: relatedClass
 Domain: A or C
 Range: B or D
...