Индивидуальное описание (owl-api)

Я хотел бы добавить это утверждение (от Protégé «Индивидуальное описание») с помощью java owl-api:

person hasProperty only (ClassA or ClassB )

В качестве :

<ClassAssertion>
  <ObjectAllValuesFrom>
    <ObjectProperty IRI=“#hasProperty”/>
      <ObjectUnionOf>
        <Class IRI=“#ClassA”/>
        <Class IRI=“#ClassB”/>
       </ObjectUnionOf>
   </ObjectAllValuesFrom>
  <NamedIndividual IRI=“#Person”/>
</ClassAssertion

Как я могу это сделать?

OWLClass c1 = factory.getOWLClass(":ClassA", prefix );

OWLClass c2 = factory.getOWLClass(":ClassB", prefix );

OWLObjectProperty p = factory.getOWLObjectProperty("hasProperty", prefix);

OWLObjectIntersectionOf u = factory.getOWLObjectUnionOf(c1, c2);

OWLClassExpression e = factory.getOWLClass(property, u);

manager.addAxiom(owlOntology, factory.getOWLClassAssertionAxiom(p, person, e));
factory.getOWLClass(property, u); <- это явно неправильно, если вы посмотрите Javadoc этого метода! используйте вместо него factory.getOWLObjectAllValuesFrom(p, u).
UninformedUser 21.09.2018 09:40

У вас неправильный порядок имени класса и префикса. Префикс идет первым. См. Ответ ниже.

Ignazio 21.09.2018 09:46

Примечание: вставленный вами пример вывода выглядит как OWL / XML. Если вы редактируете файл на месте, при сохранении файла вам не нужно указывать формат, но если вы создаете онтологию и не хотите использовать формат RDF / XML по умолчанию, вам нужно будет указать аргумент формата для метод saveOntology.

Ignazio 21.09.2018 11:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
46
1

Ответы 1

Несколько проблем с написанным вами кодом:

OWLOntologyManager manager=OWLManager.createOWLOntologyManager();
OWLDataFactory factory=manager.getOWLDataFactory();
String str = "urn:test:ontology";
OWLOntology owlOntology=manager.createOntology(IRI.create(str));
String prefix=str+"#";

OWLClass c1 = factory.getOWLClass( prefix ,"ClassA");
OWLClass c2 = factory.getOWLClass( prefix, "ClassB" );
OWLObjectProperty p = factory.getOWLObjectProperty( prefix, "hasProperty");
OWLObjectUnionOf u = factory.getOWLObjectUnionOf(c1, c2);
OWLClassExpression e = factory.getOWLObjectAllValuesFrom(p, u);
OWLNamedIndividual person=factory.getOWLNamedIndividual(prefix, "Person");
manager.addAxiom(owlOntology, factory.getOWLClassAssertionAxiom(e, person));
// don't forget to save the ontology
manager.saveOntology(owlOntology, ... output stream here...);

ну, как упоминалось в моем комментарии под ответом, это должен быть factory.getOWLObjectAllValuesFrom

UninformedUser 22.09.2018 16:23

Дхо! Действительно. Бросился ответ.

Ignazio 22.09.2018 19:45

Другие вопросы по теме