Импортировать онтологию с тем же IRI - PullRequest
0 голосов
/ 09 октября 2019

У меня есть одна онтология, которая состоит из двух отдельных файлов:

  • tbox.owl
  • abox.owl

(Последний содержит толькоэкземпляры)

Моя идея состоит в том, чтобы использовать API-интерфейс Manchester OWL 5 для чтения Abox и получения всех свойств объекта в подписи (например).

Abox использует owl:imports для включенияTbox. Но, насколько я понимаю, сначала я должен сопоставить удаленный IRI Tbox (например, http://mywebsite.com/ontology/artists.owl) с локальным файлом в моей системе.

Это то, что я пробовал:

// Create an ontology manager
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

// Manually map imports
IRI remoteIRI = IRI.create("http://mywebsite.com/ontology/tbox.owl");
IRI localIRI = IRI.create(new File("tbox.owl"));

SimpleIRIMapper mapper = new SimpleIRIMapper(remoteIRI, localIRI);
manager.getIRIMappers().add(mapper);

// Read individuals (i.e. ABox)
File file = new File("abox.owl");
OWLOntology ABox = manager.loadOntologyFromOntologyDocument(file);

И это исключение, которое возникает:

Exception in thread "main" org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException: Ontology already exists. OntologyID(OntologyIRI(<http://mywebsite.com/ontology/tbox.owl>) VersionIRI(<null>))
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.load(OWLOntologyManagerImpl.java:1122)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:1057)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:1007)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:1020)
    at examples.PopulateDatabaseWithPropIndividuals.main(PopulateDatabaseWithPropIndividuals.java:71)
Caused by: org.semanticweb.owlapi.model.OWLOntologyRenameException: Could not rename ontology. An ontology with this ID already exists: OntologyID(OntologyIRI(<http://mywebsite.com/ontology/tbox.owl>) VersionIRI(<null>))

Есть идеи?

1 Ответ

2 голосов
/ 13 октября 2019

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

Мой рекомендуемый обходной путь - изменить IRI онтологии abox и добавить к нему оператор owl:imports, импортируя онтологию tbox. Это можно сделать в другом направлении (tbox может импортировать abox), хотя это не самый распространенный шаблон;Вы также можете добавить третью онтологию, цель которой состоит только в агрегировании двух онтологий, и содержащую только два оператора импорта, к вашим abox и tbox.

...