Как читать .owl
файлы в java и отображать его содержимое?Как читать .owl-файлы в java и отображать его содержимое?
ответ
В чем заключен контекст? OWL - это формат онтологии, который читает http://protege.stanford.edu/.
Использование The OWL API.
У вас есть несколько вариантов.
.owl-файлы - это текстовые файлы, и вы можете отображать их таким образом.
.owl использует XML, поэтому вы можете рассматривать его как документ XML. Обратитесь к http://www.w3.org/TR/owl-xmlsyntax/ и http://www.w3.org/TR/owl2-overview/ за список тегов и их количество.
Или вы можете использовать API OWL. Вы можете скачать его по адресу: http://owlapi.sourceforge.net/index.html, и есть несколько примеров на http://owlapi.sourceforge.net/documentation.html
Отображение и онтология OWL несколько сложна, потому что информация, которую вы хотите отобразить, может быть сильно связана, поэтому ее структура представляет собой структуру графика, а не последовательную или табличный. Классы могут быть подклассами многих других подклассов, и циклическая классификация возможна. То есть A может быть подклассом B, который может быть подклассом C, который может быть подклассом A.
OWL API в исходной кузнице (http://owlapi.sourceforge.net/) имеет все основные функции, хотя документация едва достаточно. Вы можете в конечном итоге потратить время на выяснение того, как сложные функции не показаны в примерах.
Я бы порекомендовал для API Protege для файлов OWL. (http://protegewiki.stanford.edu/wiki/ProtegeOWL_API_Programmers_Guide /). Этот API имеет хорошую документацию, а вики легко ориентироваться. OWL-файлы нелегко работать из-за своей семантической природы, и создание собственного API может быть непростым. Protege также имеет SWRL API, если вы хотите обрабатывать аксиомы и правила.
Вот пример для разбора OWL онтологии с библиотекой OWL API:
import static org.semanticweb.owlapi.search.Searcher.annotations;
import static org.semanticweb.owlapi.vocab.OWLRDFVocabulary.RDFS_LABEL;
import java.util.ArrayList;
import java.util.List;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAnnotation;
import org.semanticweb.owlapi.model.OWLAnnotationProperty;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLException;
import org.semanticweb.owlapi.model.OWLLiteral;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
public class OwlParser {
private final OWLOntology ontology;
private OWLDataFactory df;
public OwlParser(OWLOntology ontology, OWLDataFactory df) {
this.ontology = ontology;
this.df = df;
}
public void parseOntology()
throws OWLOntologyCreationException {
for (OWLClass cls : ontology.getClassesInSignature()) {
String id = cls.getIRI().toString();
String label = get(cls, RDFS_LABEL.toString()).get(0);
System.out.println(label + " [" + id + "]");
}
}
private List<String> get(OWLClass clazz, String property) {
List<String> ret = new ArrayList<>();
final OWLAnnotationProperty owlProperty = df
.getOWLAnnotationProperty(IRI.create(property));
for (OWLOntology o : ontology.getImportsClosure()) {
for (OWLAnnotation annotation : annotations(
o.getAnnotationAssertionAxioms(clazz.getIRI()), owlProperty)) {
if (annotation.getValue() instanceof OWLLiteral) {
OWLLiteral val = (OWLLiteral) annotation.getValue();
ret.add(val.getLiteral());
}
}
}
return ret;
}
public static void main(String[] args) throws OWLException,
InstantiationException, IllegalAccessException,
ClassNotFoundException {
String x = "http://ontology.neuinfo.org/NIF/Dysfunction/NIF-Dysfunction.owl";
IRI documentIRI = IRI.create(x);
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLOntology ontology = manager
.loadOntologyFromOntologyDocument(documentIRI);
OwlParser parser = new OwlParser(ontology, manager.getOWLDataFactory());
parser.parseOntology();
}
}
Существует еще один способ использования Jena API в JAVA, но вы должны создать SDB или БРТ файлы для данного файла OWL , Затем вы можете запросить использование SPARQL. JENA API
Я хочу прочитать файл .owl в java и отобразить его концепции и под-концепции – nagender