Я хотел бы добавить это утверждение (от 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));
У вас неправильный порядок имени класса и префикса. Префикс идет первым. См. Ответ ниже.
Примечание: вставленный вами пример вывода выглядит как OWL / XML. Если вы редактируете файл на месте, при сохранении файла вам не нужно указывать формат, но если вы создаете онтологию и не хотите использовать формат RDF / XML по умолчанию, вам нужно будет указать аргумент формата для метод saveOntology.




Несколько проблем с написанным вами кодом:
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
Дхо! Действительно. Бросился ответ.
factory.getOWLClass(property, u);<- это явно неправильно, если вы посмотрите Javadoc этого метода! используйте вместо негоfactory.getOWLObjectAllValuesFrom(p, u).