Я использовал OWL API 4.1.3 для загрузки своей онтологии, которая невелика. Поскольку мне нужно использовать выводимую информацию, я также проводил анализ с использованием библиотеки Hermit 1.3.8.413. Следующий код показывает, как я это сделал.Рассуждение онтологии с использованием OWL API
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<InferredAxiomGenerator<? extends OWLAxiom>> inferredAxioms = new ArrayList<InferredAxiomGenerator<? extends OWLAxiom>>();
//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<InferredIndividualAxiomGenerator<? extends OWLIndividualAxiom>> individualAxioms= new ArrayList<InferredIndividualAxiomGenerator<? extends OWLIndividualAxiom>>();
// 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 ГБ памяти для запуска этого приложения. Я не могу найти никаких проблем с моим кодом или моей онтологией.
Может ли кто-нибудь предложить оптимизацию или, может быть, даже лучший способ реализации или другой api?
here - это моя онтология, если кто-то хочет ее протестировать.
Можете ли вы уточнить: количество терминов в вашей онтологии и количество отношений в вашей онтологии. Кроме того, знаете ли вы, на какой строке (ах) он потратил больше всего времени? –
В моей онтологии есть 15426 аксиом, включая отдельных лиц, SWRL, свойство chaning, GCA и аксиомы закрытия. Кажется, что наиболее трудоемкая часть - это этап хранения. – msc87