首页 > 解决方案 > 在 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:integeraxiom 上收到以下错误:

[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;
}

问题是:

  1. 如何解决此 EOF 错误?
  2. 如何将曼彻斯特语法正确插入 OWL-API?
  3. 我在哪里可以找到一些关于如何使用曼彻斯特语法来解析本体的文档?

提前谢谢了。

标签: owlowl-api

解决方案


您对 OWLAPI 类的使用似乎是正确的。输入的问题是预期会出现其他问题,即,这不是一个完整的公理。意思是说hasBrother个人只能出现两次并且具有整数范围吗?

碰巧的是,OWLAPI 合约模块中有一个单元测试,它使用这个字符串作为解析的输入:

    String in = "p max 1 owl:real";
    ManchesterOWLSyntaxParser parser = OWLManager.createManchesterParser();
    parser.setStringToParse(in);
    OWLClassExpression cl = parser.parseClassExpression();

该字符串与您尝试解析的格式相同,并且它提供了类表达式,而不是公理 - 具体来说,是数据属性的限定最大基数限制。例如,这可以是子类公理中的超类或子类,但公理的其余部分不存在。


推荐阅读