保护本地文件的导入解析

问题描述 投票:0回答:1

我目前正在建模一个新的本体,在导入本体时,我注意到一个对我来说看起来像错误的行为。这是过程。

我创建了一个

base-ontology
文件,其中包含一个名为
BaseClass
的类。 我想将
base-ontology
导入到
child-ontology
文件中以创建
ChildClass
,它是
BaseClass
的子类。这按预期工作。

最后我想将

child-ontology
文件导入到我的 ABox 文件中以实例化
ChildClass
。然而,Protege 不会让我这样做。我总是在工具中收到以下错误消息:

Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://www.example.org/base-ontology
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.base/java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at org.semanticweb.owlapi.io.AbstractOWLParser.connect(AbstractOWLParser.java:148)
    at org.semanticweb.owlapi.io.AbstractOWLParser.getInputStream(AbstractOWLParser.java:113)
    ... 32 common frames omitted
  ERROR  15:56:02  An error occurred whilst extracting the Ontology Id from the imported ontology: {}
java.lang.NullPointerException: null
    at org.protege.editor.owl.model.repository.MasterOntologyIDExtractor.getOntologyId(MasterOntologyIDExtractor.java:27)
    at org.protege.editor.owl.ui.ontology.imports.wizard.page.AnticipateOntologyIdPage.checkImport(AnticipateOntologyIdPage.java:109)
    at org.protege.editor.owl.ui.ontology.imports.wizard.page.AnticipateOntologyIdPage.lambda$new$0(AnticipateOntologyIdPage.java:44)
    at java.base/java.lang.Thread.run(Unknown Source)

在我看来,Protege 想要从不存在的服务器加载文件(也检查了 Protege 源代码中的行为)。

我检查了

catalog-v001.xml
文件,它缺少
uri
标签,表明它是否可以找到
base-ontology.ttl
的物理文件,但即使在手动添加标签后(基于here找到的文档),它仍然尝试从互联网上的资源加载
base-ontology
的导入。

使用的 Protege 版本是

5.6.4
,但我也用
5.5.0
尝试过,结果相同。所有文件均由 Protege 编辑器创建,无需手动修改文件(除了最后一步尝试修复问题)。

如果我从

child-ontology.ttl
文件中删除导入语句,我可以毫无问题地导入两个本体。

这是 Protege 中可重现的错误,并且可以在其他计算机上重新创建,还是我做错了什么?

旁注:我坐在公司代理后面,将自定义证书注入到链中,这可能是问题的一部分(但我不知道如何,因为 Protege 应该从我的磁盘加载文件)。

这是

base-ontology.ttl
的文件:

@prefix : <http://www.example.org/base-ontology/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.example.org/base-ontology/> .

<http://www.example.org/base-ontology> rdf:type owl:Ontology .

###  http://www.example.org/base-ontology#BaseClass
:BaseClass rdf:type owl:Class .

这是

child-ontology.ttl
的课程:

@prefix : <http://www.example.org/child-ontology/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.example.org/child-ontology/> .

<http://www.example.org/child-ontology> rdf:type owl:Ontology ;
                                         owl:imports <http://www.example.org/base-ontology> .

###  http://www.example.org/child-ontology#ChildClass
:ChildClass rdf:type owl:Class ;
            rdfs:subClassOf <http://www.example.org/base-ontology/BaseClass> .

这是 Protege 创建的

catalog-v001.xml
文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalog prefer="public" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <group id="Folder Repository, directory=, recursive=true, Auto-Update=true, version=2" prefer="public" xml:base=""/>
</catalog>

这是我手动添加物理文件位置的文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalog prefer="public" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <uri id="User Entered Import Resolution" name="http://www.example.org/base-ontology" uri="base-ontology.ttl"/>
    <group id="Folder Repository, directory=, recursive=true, Auto-Update=true, version=2" prefer="public" xml:base=""/>
</catalog>
rdf owl protege owl-api
1个回答
0
投票

当您使用 Protege 和 owl-api 标记此问题时,我最初认为这可能是 AutoIRIMapper(负责加载在指定文件夹中找到的本体的本地副本的 OWLAPI 类)的问题。

AutoIRIMapper 不支持 ttl 文件,而且您只在文件中输入一个条目,而不是文件夹,所以我预计 AutoIRIMapper 不是问题的一部分。

这可能是一个 Protege 问题 - 但我猜你需要一个完整的文件 URL 而不仅仅是文件名。您是否尝试过添加

file:///<local path in your computer>/base-ontology.ttl

到您的注册表文件?

© www.soinside.com 2019 - 2024. All rights reserved.