owl - 在 OWL-API 中解析曼彻斯特语法的 EOF 错误
问题描述
我有一个 API 可以接收 JSON 文档,其中包含本体的类、属性和公理。该文件如下所示:
{
"id": "myontologyid",
"outformat": "OWL",
"ontoclass": ["Person", "Man", "Woman", "Animal", "Rational", "Arm"],
"ontoaxioms": ["Man subClassOf (Person)", "Person EquivalentTo: (Man OR Woman)", "hasBrother max 2 xsd:integer"],
"ontoproperties": ["hasPart", "isBrotherOf", "hasBrother"]
}
本体公理键是一个包含本体所有公理的数组。这个数组的值必须是曼彻斯特语法,因为我将使用ManchesterOWLSyntaxParser
来解析。
当我尝试解析此代码时,我在hasBrother max 2 xsd:integer
axiom 上收到以下错误:
[apache-tomcat-8.5.69-2]: org.semanticweb.owlapi.manchestersyntax.renderer.ParserException: Encountered |EOF| at line 1 column 29. Expected one of:
SubClassOf:
or
and
DisjointWith:
EquivalentTo:
我相信曼彻斯特语法是不正确的。但我找不到任何指示如何使用它的 OWL-API 参考或文档。有吗?
以下是我尝试解析公理的代码的一部分:
ManchesterOWLSyntaxParserImpl parser = (ManchesterOWLSyntaxParserImpl) OWLManager.createManchesterParser();
parser.setOWLEntityChecker(entityChecker);
try {
for (int i = 0; i < this.axiomas.length(); i++) {
parser.setStringToParse(this.axiomas.getString(i));
owlOntology.addAxiom(parser.parseAxiom());
}
} catch (Exception e) {
System.out.print(e.toString());
return null;
}
问题是:
- 如何解决此 EOF 错误?
- 如何将曼彻斯特语法正确插入 OWL-API?
- 我在哪里可以找到一些关于如何使用曼彻斯特语法来解析本体的文档?
提前谢谢了。
解决方案
您对 OWLAPI 类的使用似乎是正确的。输入的问题是预期会出现其他问题,即,这不是一个完整的公理。意思是说hasBrother
个人只能出现两次并且具有整数范围吗?
碰巧的是,OWLAPI 合约模块中有一个单元测试,它使用这个字符串作为解析的输入:
String in = "p max 1 owl:real";
ManchesterOWLSyntaxParser parser = OWLManager.createManchesterParser();
parser.setStringToParse(in);
OWLClassExpression cl = parser.parseClassExpression();
该字符串与您尝试解析的格式相同,并且它提供了类表达式,而不是公理 - 具体来说,是数据属性的限定最大基数限制。例如,这可以是子类公理中的超类或子类,但公理的其余部分不存在。
推荐阅读
- excel - 如何在不删除条目行的情况下从单个 Power Query 列中删除重复项?
- javascript - onClick 功能不适用于选定的选项字段
- javascript - 如何在 Vue 组件中使用 Promise
- file - 向第三方软件使用 IIS 流式传输的 PDF 文件添加水印
- c++ - Cryptoauthlib - 匿名联合只能有非静态数据成员 - 分段错误
- node.js - Github OAuth2 访问令牌端点返回“未找到”。[节点]
- php - PDO 连接 AWS RDS 字符集
- python - 修改 __main__ 模块的属性访问(名称解析的细节)
- nginx - Nginx JS 模块流变量
- javascript - 如何获取对象属性为真的密钥?