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

如何在java中读取.owl文件并显示其内容?,java,semantic-web,owl,Java,Semantic Web,Owl,如何读取java中的.owl文件并显示其内容?上下文是什么?OWL是一种本体格式,可供阅读。使用。您有几个选项 .owl文件是文本文件,您可以这样显示它们 .owl使用XML,因此可以将其视为XML文档。请参阅和,以获取标记列表及其表示的内容 或者您可以使用OWLAPI。您可以在以下位置下载它:,并且在以下位置有几个示例: 显示和OWL本体具有一定的挑战性,因为要显示的信息可以高度链接,因此其结构是图形结构,而不是顺序或表格结构。类可能是许多其他子类的子类,循环分类也是可能的。也就是说,A可以是

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

上下文是什么?OWL是一种本体格式,可供阅读。

使用。

您有几个选项

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

.owl使用XML,因此可以将其视为XML文档。请参阅和,以获取标记列表及其表示的内容

或者您可以使用OWLAPI。您可以在以下位置下载它:,并且在以下位置有几个示例:


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

source forge()中的OWL API具有所有基本功能,尽管文档还不够。您可能最终会浪费时间来弄清楚如何处理示例中未显示的复杂函数


我建议为OWL文件使用ProtegeAPI。(/). 这个API有很好的文档,wiki很容易导航。OWL文件不容易处理,因为它具有语义性质,构建自己的API可能并不容易。如果你想处理公理和规则,Protege也有SWRLAPI

以下是使用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();
    }
}
导入静态org.semanticweb.owlapi.search.Searcher.annotations;
导入静态org.semanticweb.owlapi.vocab.owlrdfvaculary.RDFS_标签;
导入java.util.ArrayList;
导入java.util.List;
导入org.semanticweb.owlapi.apibinding.OWLManager;
导入org.semanticweb.owlapi.model.IRI;
导入org.semanticweb.owlapi.model.owlanotation;
导入org.semanticweb.owlapi.model.OWLAnnotationProperty;
导入org.semanticweb.owlapi.model.OWLClass;
导入org.semanticweb.owlapi.model.OWLDataFactory;
导入org.semanticweb.owlapi.model.OWLException;
导入org.semanticweb.owlapi.model.OWLLiteral;
导入org.semanticweb.owlapi.model.OWLOntology;
导入org.semanticweb.owlapi.model.owletologyCreationException;
导入org.semanticweb.owlapi.model.owletologyManager;
公共类OwlParser{
私有本体论;
私人数据工厂df;
公共OwlParser(owldontology本体,OWLDataFactory-df){
本体=本体;
this.df=df;
}
公共本体()
抛出OntologyCreationException{
for(OWLClass:ontology.getClassesInSignature()){
字符串id=cls.getIRI().toString();
字符串label=get(cls,RDFS_label.toString()).get(0);
System.out.println(标签+“[”+id+“]”);
}
}
私有列表获取(owlclasclazz,String属性){
List ret=new ArrayList();
最终OWLAnnotationProperty owlProperty=df
.getOWLAnnotationProperty(IRI.create(property));
for(owlo:ontology.getImportClosure()){
用于(OWL)注释:注释(
o、 getAnnotationAssertionAxioms(clazz.getIRI()),owlProperty)){
if(注释.getValue()实例OWLLiteral){
OWLLiteral val=(OWLLiteral)annotation.getValue();
ret.add(val.getLiteral());
}
}
}
返回ret;
}
公共静态void main(字符串[]args)引发异常,
实例化异常,非法访问异常,
ClassNotFoundException{
字符串x=”http://ontology.neuinfo.org/NIF/Dysfunction/NIF-Dysfunction.owl";
IRI documentIRI=IRI.create(x);
OWLOntologyManager=OWLManager.createOWLOntologyManager();
本体=管理器
.loadOntologyFromOntologyDocument(文档IRI);
OwlParser parser=新的OwlParser(ontology,manager.getOWLDataFactory());
parser.parseOntology();
}
}

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

我想在java中读取.owl文件并显示其概念和子概念