无法解析某些本体

时间:2018-09-02 20:07:24

标签: java protege owl-api

当解析一组本体时,某些文件会给我以下错误,而其他文件却能很好地工作(请注意,我正在使用OWL API 5.1.6):

uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:1033)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:933)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadImports(OWLOntologyManagerImpl.java:1630)

....

Could not parse JSONLD        org.eclipse.rdf4j.rio.jsonld.JSONLDParser.parse(JSONLDParser.java:110)
    org.semanticweb.owlapi.rio.RioParserImpl.parseDocumentSource(RioParserImpl.java:172)
    org.semanticweb.owlapi.rio.RioParserImpl.parse(RioParserImpl.java:125)

....

Stack trace:
org.eclipse.rdf4j.rio.RDFParseException: unqualified attribute 'class' not allowed [line 3, column 65]        
org.semanticweb.owlapi.rio.RioParserImpl.parse(RioParserImpl.java:138)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyFactoryImpl.loadOWLOntology(OWLOntologyFactoryImpl.java:193)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.load(OWLOntologyManagerImpl.java:1071)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:1033)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:933)
    uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadImports(OWLOntologyManagerImpl.java:1630)

....

以及类似的许多错误。 知道如何解决此问题吗?


更新:

加载本体的代码段是:

File file = new File("C:\\vocabs\\" + Ontofile.getName());

OWLOntologyManager m = OWLManager.createOWLOntologyManager();
OWLOntology o;
o = m.loadOntologyFromOntologyDocument(file);
OWLDocumentFormat format = m.getOntologyFormat(o);

OWLOntologyXMLNamespaceManager nsManager = new 
OWLOntologyXMLNamespaceManager(o, format);

1 个答案:

答案 0 :(得分:1)

此错误表示您正在解析的一种本体不是有效的JSON / LD格式。

要解决此问题,您必须做两件事:

  • 确保使用的格式符合您的期望:如果未指定格式,OWLAPI将尝试使用所有可用的解析器,直到其中之一成功解析本体为止

  • 如果格式正确,则修复输入数据:在这种情况下,对于JSON / LD,错误位于第3行

如果使用的格式不正确,则需要在代码中指定一种格式-为此,您必须添加用于解析文件的代码段。