Проблема четко указана в первой строке трассировки исключения:
WARN [main] (OntDocumentManager.java:1078) -
An error occurred while attempting to read from
http://www.cs.man.ac.uk/~stevensr/ontology/units.owl.
Msg was 'java.net.SocketException: Permission denied: connect'.
Вы пытаетесь прочитать http://www.cs.man.ac.uk/~stevensr/ontology/units.owl
, но не можете. Поскольку этот файл существует (я только что проверил), существует вероятность того, что вы не подключены к сети или находитесь за веб-прокси, и вам придется настроить JVM с соответствующими настройками прокси.
Почему ваш код читает этот файл? Почти наверняка это потому, что онтология, которую вы читаете, импортирует онтологию единиц. Что-то вроде:
<> a owl:Ontology ;
owl:imports <http://www.cs.man.ac.uk/~stevensr/ontology/units.owl>
Этот оператор будет распознан загрузчиком OntModel
, который попытается извлечь и загрузить импортированную онтологию. Если это не то, что вам нужно, или это неудобно (например, потому что вы не всегда в сети), тогда у вас есть три средства:
- отключить обработку импорта:
yourOntModel.getDocumentManager().setProcessImports(false);
- удалите утверждение
owl:imports
из вашей исходной модели - мнения расходятся относительно того, действительно ли оно действительно полезно в любом случае
- используйте Jena's
LocationMapper
, чтобы указать альтернативное расположение для файла units.owl
, чтобы вы могли иметь оператор owl:imports
, но фактический файл будет считан откуда-то еще (например, на диске вашего компьютера)