У меня есть онтология, созданная с использованием Protegé 4.3.0, и я бы использовал OWL-API, чтобы получить значения свойств объекта (т. Е. Набор объектов OWLNamedIndividual
) для указанного индивидуального выражения свойства объекта и объекта.Как получить значения свойств объекта для указанного человека?
Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, hasPart).getFlattened();
К сожалению, выше инструкции не возвращают элементов, так как в моей онтологии связь между людьми осуществляется через несколько подразделов свойств объекта hasPart
свойства объекта.
ОБНОВЛЕНИЕ: В последние несколько часов я нашел следующее решение, чтобы получить свойства подлога, связанные с указанным OWLNamedIndividual
.
private Set<OWLObjectProperty> getRelatedSubObjectProperties(OWLNamedIndividual individual) {
HashSet<OWLObjectProperty> relatedObjectProperties = new HashSet<>();
HashSet<OWLObjectPropertyExpression> subProperties = new HashSet<>();
subProperties.addAll(hasPart.getSubProperties(ontology));
Set<OWLClass> types = reasoner.getTypes(individual, true).getFlattened();
for (OWLObjectPropertyExpression property : subProperties) {
Set<OWLClassExpression> domains = property.getDomains(ontology);
for (OWLClassExpression domain : domains) {
if (types.contains(domain.asOWLClass())) {
relatedObjectProperties.add(property.asOWLObjectProperty());
}
}
}
return relatedObjectProperties;
}
Тогда я хотел бы получить значение свойств объекта следующим образом:
for (OWLObjectProperty property : getRelatedSubObjectProperties(individual)) {
Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, property).getFlattened();
if (values != null) {
for (OWLNamedIndividual value : values) {
// a value associated to the individual
}
}
}
Как я могу решить эту проблему?
Простите, может быть, это очень очевидно, но только для моей информации, почему вы называете метод 'getObjectPropertyValues ()' аргументом, а не конкретным 'OWLNamedIndividual'? –
Вызов метода для отдельного человека не использует аргументатора для ответа, поэтому его результаты могут быть неполными. – Ignazio
@KunalKhaladkar: ваше решение на самом деле выглядит лучше: вызов метода 'getObjectPropertyValues ()' для конкретного 'OWLNamedIndividual' возвращает' Map> ', поэтому я должен проверить, какие ключи являются атрибутом sub object' hasPart '... –
enzom83