2017-01-09 3 views
1

Я использовал 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 - это моя онтология, если кто-то хочет ее протестировать.

+0

Можете ли вы уточнить: количество терминов в вашей онтологии и количество отношений в вашей онтологии. Кроме того, знаете ли вы, на какой строке (ах) он потратил больше всего времени? –

+0

В моей онтологии есть 15426 аксиом, включая отдельных лиц, SWRL, свойство chaning, GCA и аксиомы закрытия. Кажется, что наиболее трудоемкая часть - это этап хранения. – msc87

ответ

1

Размер онтологии связан только со сложностью рассуждений на нее - некоторые небольшие онтологии гораздо сложнее для разумных, чем другие очень большие. (Конечно, есть вероятность появления ошибки).

Возможно ли предоставить вам информацию о онтологии?

Редактировать: попробовав онтологию, похоже, что размер не имеет большого значения; онтология оказывается довольно сложной.

Я попытался отключить правила SWRL и пропустить генерацию утверждения класса и все равно попасть в блокпост. Количество и топологию свойств объекта достаточно, чтобы подчеркнуть Герми Т жесткость.

Я пробовал версию 1.3.8.500, в случае возникновения каких-либо проблем в OWLAPI, которые могли быть исправлены в обновленных версиях; единственный существенный результат, который я получил, заключается в том, что код не работает с привязкой к памяти. Кажется, что более 3-х гигабайт оперативной памяти, назначенных VM.

Несогласованные рассуждения, кажется, занимают много времени - это не неожиданно. Подумайте, можете ли вы удалить несовместимые аксиомы из своей онтологии и по-прежнему выполнять свои требования.

Также рассмотрите вопрос о целесообразности разделения лиц путем разделения ABox - если есть люди, которые, как вы уверены, не связаны друг с другом, может быть полезно разделить утверждения в нескольких онтологиях. Большое количество людей, не имеющих отношения к делу, может быть причиной того, что разумник пытается использовать пути рассуждений, которые никогда не предоставят полезных выводов.

+0

Я добавил ссылку на свою онтологию в вопросе. – msc87

+0

как я могу разделить мою онтологию? Я хочу извлечь экземпляры, которые связаны с целевым экземпляром в пределах одного или двух отношений. – msc87

Смежные вопросы