1

Тема: Как подгрузить модульную онтологию посредством OWLapi?

Есть модульная онтология, т.е. онтология A импортирует B и С. Все файлы онтологий лежат в одной папке. URL у них разные (указывают на вебресурсы, а не файлы). Protege "проглатывает" это дело и грузит их, а вот когда пробую через OWLapi возникает ошибка?
The ontology could not be created: Problem parsing file:/f://Working...

Фрагмент кода такой:

URI physicalURI = URI.create(URLofOnt);
OWLOntology  ont = mng.loadOntologyFromPhysicalURI(physicalURI);

Отдельно модули B и C грузятся. Есть ли возможность работать с модульной онтологией локально через OWLapi?

Отредактировано Crider (2010-06-04 20:57:18)

2

Re: Как подгрузить модульную онтологию посредством OWLapi?

Crider пишет:

Есть модульная онтология, т.е. онтология A импортирует B и С. Все файлы онтологий лежат в одной папке. URL у них разные (указывают на вебресурсы, а не файлы). Protege "проглатывает" это дело и грузит их, а вот когда пробую через OWLapi возникает ошибка?
The ontology could not be created: Problem parsing file:/f://Working...

Фрагмент кода такой:

URI physicalURI = URI.create(URLofOnt);
OWLOntology  ont = mng.loadOntologyFromPhysicalURI(physicalURI);

Отдельно модули B и C грузятся. Есть ли возможность работать с модульной онтологией локально через OWLapi?

Да, в OWLAPI естьOWLOntologyManager, ему можно сказать "загрузка онтологий с учетом импортов" (там вообще семейство manager-ов есть для всего), собственно рабочий пример смотреть здесь : http://owlapi.svn.sourceforge.net/viewv … iew=markup

и использовать SimpleURIMapper для маппинга "настоящий URI" - "local URI"

Меня смущает "file:/f://Working..." - если файлы берутся "не локально", то там не может быть "...f:/..."

Thumbs up +1 Thumbs down

3

Re: Как подгрузить модульную онтологию посредством OWLapi?

Попробовал сделать похоже как в примере:

        IRI URIontocl = IRI.create("http://d.owl");
        IRI pURIontocl = IRI.create("file:/f://WorkingHDD//d.owl");
        SimpleIRIMapper mapperOntocl = new SimpleIRIMapper(URIontocl, pURIontocl);

        IRI URIthsOwl = IRI.create("http://b.owl");
        IRI pURIthsOwl = IRI.create("file:/f://WorkingHDD//b.owl");
        SimpleIRIMapper mapperThsOwl = new SimpleIRIMapper(URIthsOwl, pURIthsOwl);

        IRI URIthsSKS = IRI.create("http://c.owl");
        IRI pURIthsSKS = IRI.create("file:/f://WorkingHDD//c.owl");
        SimpleIRIMapper mapperThsSKS = new SimpleIRIMapper(URIthsOwl, pURIthsOwl);

        IRI URIthsThWh = IRI.create("http://A.owl");
        IRI pURIthsThWh = IRI.create("file:/f://WorkingHDD//A.owl");
        SimpleIRIMapper mapperThsWh = new SimpleIRIMapper(URIthsThWh, pURIthsThWh);
        
        
        mng.addIRIMapper(mapperOntocl);
        mng.addIRIMapper(mapperThsOwl);
        mng.addIRIMapper(mapperThsSKS);
        mng.addIRIMapper(mapperThsWh);        
        try
        {
            IRI physicalURI = IRI.create(physicalURL);        
            //mng.loadOntologyFromPhysicalURI(physicalURI);
            mng.loadOntology(URIthsThWh);
        }
        catch (OWLOntologyCreationException e) 
        {
             System.out.println("The ontology could not be created: " + e.getMessage());             
        }

Неполучилось - опять ошибка парсера - т.е. пишит что берет из файла, а на самом деле - лезет в Интернет - и парсить HTMLку с DNS ошибкой.
Стал дальше копать - и не помню по какой причине обновил Pellet и OWLapi - и тут полетело...
В OWLapi поменялась структура + изменился способ прикручивания Reasonero, что я и пробовал сделать по примеру:
http://owlapi.svn.sourceforge.net/viewv … iew=markup
Но не выходит - в коде:

import org.mindswap.pellet.owlapi.PelletReasonerFactory;

import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.*;

import com.clarkparsia.pellet.owlapiv3.PelletReasoner;
import com.hp.hpl.jena.reasoner.ReasonerFactory;
import org.mindswap.pellet.owlapi.Reasoner;
......
......
OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();
OWLReasoner reasoner = reasonerFactory.createReasoner(ont, config);

В Reasoner.ReasonerFactory() нету такого статитческого метода - ReasonerFactory().

Пробовал также как на Пеллетовском сайте:
http://clarkparsia.com/pellet/faq/owl-api/

import org.mindswap.pellet.owlapi.PelletReasonerFactory;

import org.semanticweb.owl.model.OWLOntologyManager;
//import org.semanticweb.owlapi.apibinding.OWLManager;

import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.*;

import com.clarkparsia.pellet.owlapiv3.PelletReasoner;
import com.hp.hpl.jena.reasoner.ReasonerFactory;
import org.mindswap.pellet.owlapi.Reasoner;
....
....
OWLOntologyManager mng = OWLManager.createOWLOntologyManager();
Reasoner reasoner = new Reasoner( mng );

Тут с он контруктора не находит - чтб с параметром OOntologyManager. Видимо я запутался, так как в разных пакеджах одноименные классы и не всегда ясно какой использовать.
Нет ли у кого-нибуд живого примера подгрузки пеллета 2.1.1 в OWLapi 3.0.0?

Отредактировано Crider (2010-06-14 23:12:28)

4

Re: Как подгрузить модульную онтологию посредством OWLapi?

KeNGa пишет:
Crider пишет:

The ontology could not be created: Problem parsing file:/f://Working...

а там слэш второй нужен? Может так "file:/f:/work.../"?

Не там все - ОК - это Винда, а в Java "/" экранировать надо

5

Re: Как подгрузить модульную онтологию посредством OWLapi?

Crider пишет:


Нет ли у кого-нибуд живого примера подгрузки пеллета 2.1.1 в OWLapi 3.0.0?

Попробуйте оттолкнуться от файла в аттаче.
передаются 2 параметра: первый - каталог, из которого будут браться локальные копии, второй - IRI онтологии

C:/work1/koala http://protege.stanford.edu/plugins/owl … /koala.owl

и тестовая онтология 7futkoala.owl

<?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns="http://semanticfuture.net/7futkoala.owl#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:koala="http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#"
  xml:base="http://sf.net/sfkoala.owl">
  <owl:Ontology rdf:about="">
    <owl:imports rdf:resource="http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"/>
  </owl:Ontology>
  <owl:Class rdf:ID="SemanticFuture">
    <rdfs:subClassOf rdf:resource="http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#Habitat"/>
  </owl:Class>
</rdf:RDF>
Post's attachments

LocalOntoUsage.java 1.38 kb, 6 downloads since 2010-06-05 

You don't have the permssions to download the attachments of this post.

Thumbs up +1 Thumbs down

6

Re: Как подгрузить модульную онтологию посредством OWLapi?

Crider пишет:

Нет ли у кого-нибуд живого примера подгрузки пеллета 2.1.1 в OWLapi 3.0.0?

Если ты сейчас впервые перешел с OWL API 2.x на 3.x, то сочувствую. Там потерялась обратная совместимость, но на то были веские причины. Могу разве что передать извинения от разработчиков smile

Что касается вопроса, то вот так, например, работает (только что проверил в рабочем проекте):

...
import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory;
...
OWLReasonerFactory reasonerFactory = new PelletReasonerFactory();
...
//Здесь загрузка онтологии по физическому IRI, например, file:///C:/test/test.owl
...
OWLReasoner reasoner = reasonerFactory.createReasoner( ontology );
...

7

Re: Как подгрузить модульную онтологию посредством OWLapi?

Спасибо! Получилось AutoIRIMapper творит чудеса! big_smile

С резанером тоже с вашей помощью разобрался.

PavelK пишет:

с OWL API 2.x на 3.x, то сочувствую. Там потерялась обратная совместимость

Хорошо еще что много не успел напрограммировать smile Смутило то, что примеры (вроде как новые) с http://owlapi.svn.sourceforge.net/ не описывали как Pellet подключать.