owl java_使用 OWL API 推理本体

news/2024/11/5 10:58:34

我使用 OWL API 4.1.3 来加载我的本体并不大。由于我需要使用推断信息,我还使用 Hermit 1.3.8.413 库进行推理。以下代码显示了我是如何完成它的。

public class ReasonRDF {

public static void main(String[] args) throws OWLOntologyCreationException, OWLOntologyStorageException {

readRDF("C:/Users/workspace/Ontology_matching/NVDB_Matching_v18_H_4_1_CONVERTYING/results/NewInstantiated/owl/OSM1.owl");

}

public static void readRDF(String address) throws OWLOntologyCreationException, OWLOntologyStorageException{

OWLOntologyManager manager =OWLManager.createOWLOntologyManager();

File file = new File (address);

OWLOntology ont = manager.loadOntologyFromOntologyDocument(IRI.create(file));

System.out.println("Ontology Loaded...");

System.out.println("Logical IRI : " + ont.getOntologyID());

System.out.println("Format : " + manager.getOntologyFormat(ont));

System.out.println("Runtime memory: " + Runtime.getRuntime().totalMemory());

ReasonerFactory reasonerFactory = new ReasonerFactory();

ConsoleProgressMonitor progressMonitor = new ConsoleProgressMonitor();

Configuration config = new Configuration();

config.ignoreUnsupportedDatatypes=true;

config.reasonerProgressMonitor= progressMonitor;

OWLReasoner reasoner = reasonerFactory.createReasoner(ont, config);

long t0 = System.nanoTime();

System.out.println("Starting to add axiom generators");

OWLDataFactory datafactory = manager.getOWLDataFactory();

List> inferredAxioms = new ArrayList>();

//inferredAxioms.add(new InferredSubClassAxiomGenerator());

inferredAxioms.add(new InferredClassAssertionAxiomGenerator());

//inferredAxioms.add(new InferredDataPropertyCharacteristicAxiomGenerator());

//inferredAxioms.add(new InferredObjectPropertyCharacteristicAxiomGenerator());

//inferredAxioms.add(new InferredEquivalentClassAxiomGenerator());

//inferredAxioms.add(new InferredPropertyAssertionGenerator());

//inferredAxioms.add(new InferredInverseObjectPropertiesAxiomGenerator());

inferredAxioms.add(new InferredSubDataPropertyAxiomGenerator());

inferredAxioms.add(new InferredSubObjectPropertyAxiomGenerator());

System.out.println("finished adding axiom generators");

// List> individualAxioms= new ArrayList>();

// inferredAxioms.addAll(individualAxioms);

// for writing inferred axioms to the new ontology

OWLOntology infOnt = manager.createOntology(IRI.create(ont.getOntologyID().getOntologyIRI().get()+"_inferred"));

// use generator and reasoner to infer some axioms

System.out.println("Starting to infer");

InferredOntologyGenerator iog = new InferredOntologyGenerator(reasoner, inferredAxioms);

//InferredOntologyGenerator iog = new InferredOntologyGenerator(reasoner);

System.out.println("Inferrence is over");

System.out.println("Storing the results");

iog.fillOntology(datafactory,infOnt);

System.out.println("Results are stored");

long elapsed_time = System.nanoTime()-t0;

System.out.println(elapsed_time);

// save the ontology

manager.saveOntology(infOnt, IRI.create("file:///C:/Users/ontologies/NVDB4_test.rdf"));

}

}

它不会抛出任何错误,但需要将推断的本体存储在新文件中。事实上,即使在 2 天之后它也无法完成工作。我的 IDE 是 eclipse EE,我已经提供了 6 到 12 GB 的内存来运行这个应用程序。我发现我的代码或本体没有任何问题。

有人可以建议优化,甚至可能是更好的实施方式或其他 api?

这里是我的本体论,以防有人想测试它。


http://www.niftyadmin.cn/n/1999051.html

相关文章

探索NTFS

探索NTFS WebCrazy(tsu00263.net) NTFS是Windows NT引入的新型文件系统,它具有许多新特性。本文旨在探索NTFS的底层结构,所叙述的也仅是文件在NTFS卷上的分布。NTFS中,卷中所有存放的数据均在一个叫$MFT的文件中&#xf…

python上位机串口发送数据给51单片机_请问单片机串口如何接收上位机不断发送的数据帧并将该帧的有效数据提取出来?...

2018-8-29 11:16我编写的主程序中LED无法点亮,硬件电路核查过没问题,void Data_anlysize()函数也没问题,Data_ok能收到,不清楚问题在哪? #include "reg52.h" //此文件中定义了单片机…

java 生成序列化id_IDEA自动生成序列化ID

idea是十分智能的Java集成开发环境而我们在用实体类继承 java.io.Serializable后,需要设置序列化ID。java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体…

在 Visual C++ 中使用内联汇编

在 Visual C 中使用内联汇编 一、 优点 使用内联汇编可以在 C/C 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以…

关于ST-Link的internal command error问题的解决方法

调试stm32的停止模式的时候老遇到这个问题,据说是芯片进入休眠自锁状态 解决办法: 按住开发板的复位按钮不放开,然后再进行烧写程序,即按Downing或Debug,过大约0.5到1秒后松开复位按钮即可成功烧写。 效果:…

载波聚合或双连接的方式进行_工厂企业适合用电力载波抄表方案吗

电力载波远程抄表方案广泛用于工厂企业,他是通过电力线直接传输数据的,所以现场施工无需布线,所以比较节省施工成本,适用于变压器台区不多,电表分散安装的场合,比如工厂、别墅、园区等。有些工厂车间安装电…

java类序列化_Java序列化与反序列化学习序列化类实现Serializable接口

一.序列化类实现Serializable接口Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。ObjectOutputStream只能对Serializable接口的类的对象进行序列化。默认情况下,ObjectOutputStream按照默认方式序列化,这…

Python工程师面试必备25条Python知识点

1.到底什么是Python?你可以在回答中与其他技术进行对比 下面是一些关键点:Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。Python是动态类型语言&a…