如何在java中读取.owl文件并显示其内容?

时间:2010-07-29 16:06:18

标签: java semantic-web owl

如何阅读java中的.owl文件并显示其内容?

6 个答案:

答案 0 :(得分:5)

source forge中的OWL API(http://owlapi.sourceforge.net/)具有所有基本功能,尽管文档勉强够用。您最终可能会浪费时间来弄清楚复杂功能如何在示例中显示。

我建议使用Protege API for OWL文件。 (http://protegewiki.stanford.edu/wiki/ProtegeOWL_API_Programmers_Guide /)。此API具有良好的文档,并且wiki易于导航。 OWL文件由于其语义特性而不易解决,并且构建自己的API可能并不容易。如果您想处理公理和规则,Protege也有SWRL API。

答案 1 :(得分:2)

使用The OWL API

答案 2 :(得分:1)

背景是什么? OWL是http://protege.stanford.edu/读取的本体格式。

答案 3 :(得分:0)

您有几种选择。

.owl文件是文本文件,您可以这样显示它们。

.owl使用XML,因此您可以将其视为XML文档。有关标记列表及其代表的内容,请参阅http://www.w3.org/TR/owl-xmlsyntax/http://www.w3.org/TR/owl2-overview/

或者您可以使用OWL API。您可以在http://owlapi.sourceforge.net/index.html下载,http://owlapi.sourceforge.net/documentation.html

上有几个示例

显示和OWL本体具有一定的挑战性,因为您要显示的信息可以高度链接,因此其结构是图形而不是顺序或表格。类可以是许多其他子类的子类,并且循环分类是可能的。也就是说,A可以是B的子类,它可以是C的子类,可以是A的子类。

答案 4 :(得分:0)

以下是使用OWL API库解析OWL本体的示例:

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();
    }
}

答案 5 :(得分:0)

在JAVA中还有一种使用jena api的方法,但是你必须为给定的OWL文件创建SDB或TDB文件。然后,您可以使用SPARQL进行查询。 JENA API