【问题标题】:GraphDB Workbench fails to load .owl ontology file from ProtégéGraphDB Workbench 无法从 Protégé 加载 .owl 本体文件
【发布时间】:2020-01-01 03:40:18
【问题描述】:

我用 Protege 创建了一个本体,保存为 .owl 文件。

当我尝试通过 Workbench Import -> RDF -> 上传 RDF 文件(支持的 RDF 格式为.ttl .rdf .rj .n3 .nt .nq .trig .trix .brf .owl .jsonld,以及他们的 .gz 版本和 .zip 档案)我收到了错误:

RDF Parse Error: Content is not allowed in prolog. [line 1, column 1].

完整日志:

01:00:37.877 [import-task-Accounting-1] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Content is not allowed in prolog. (1, 1)
01:00:37.879 [import-task-Accounting-1] ERROR c.o.f.impex.FileImportRunnableTask - RDF Parse Error 
org.eclipse.rdf4j.rio.RDFParseException: Content is not allowed in prolog. [line 1, column 1]
    at org.eclipse.rdf4j.rio.helpers.RDFParserHelper.reportFatalError(RDFParserHelper.java:442)
    at org.eclipse.rdf4j.rio.helpers.AbstractRDFParser.reportFatalError(AbstractRDFParser.java:783)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.reportFatalError(RDFXMLParser.java:1176)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.fatalError(RDFXMLParser.java:1315)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:180)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:994)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.parse(RDFXMLParser.java:265)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.parse(RDFXMLParser.java:207)
    at org.eclipse.rdf4j.repository.util.RDFLoader.loadInputStreamOrReader(RDFLoader.java:286)
    at org.eclipse.rdf4j.repository.util.RDFLoader.load(RDFLoader.java:197)
    at org.eclipse.rdf4j.repository.base.AbstractRepositoryConnection.add(AbstractRepositoryConnection.java:329)
    at com.ontotext.trree.monitorRepository.MonitorRepositoryConnection.add(MonitorRepositoryConnection.java:177)
    at com.ontotext.trree.parallel.ParallelRDFLoader.add(ParallelRDFLoader.java:125)
    at com.ontotext.trree.parallel.ParallelRDFLoader.add(ParallelRDFLoader.java:54)
    at com.ontotext.forest.impex.ParallelAwareImporter.lambda$add$5(ParallelAwareImporter.java:107)
    at com.ontotext.forest.impex.ParallelAwareImporter.wrapInBeginCommit(ParallelAwareImporter.java:128)
    at com.ontotext.forest.impex.ParallelAwareImporter.add(ParallelAwareImporter.java:89)
    at com.ontotext.forest.impex.FileImportRunnableTask.load(FileImportRunnableTask.java:36)
    at com.ontotext.forest.impex.ImportRunnableTask.run(ImportRunnableTask.java:82)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    ... 29 common frames omitted

任何帮助/建议/提示将不胜感激。

【问题讨论】:

    标签: ontology protege graphdb


    【解决方案1】:

    问题在于 GraphDB 假设 .owl 文件是用 XML 编写的,因此会尝试这样解析它们。但是,正如OWL Conformance (2.2 Tool Conformance)中提到的:

    符合 OWL 2 的工具可能还接受使用其他序列化的本体文档,例如 Turtle ...

    事实上,一个 OWL 本体定义可以有 5 种不同的有效格式:函数式、RDF/XML、OWL/XML、Turtle 和 Manchester 语法。 Protégé 决定对其 .owl 文件使用 Turtle 语法,因此 GraphDB 在尝试将它们解析为 XML 时会出错。

    解决方法:只需将文件扩展名从.owl 更改为.ttl,GraphDB 就会愉快地加载它。

    【讨论】:

    • 不止这五个(Trig、Trix、n-triples、json-ld 等)。 Protege 允许他们使用并使用 commons-rdf-api 和相关实现来支持这些格式。但是,不是 Protege 选择输出格式 - 选择权留给用户。文件扩展名充其量只是一个建议。
    • 至于格式,你说得对,不止五种,我刚才提到了一致性文档中提出的那些。至于 Protégé,我是新手,没有选择输出格式,使用默认设置。
    【解决方案2】:

    我的猜测是文件以 BOM 字符 U+FEFF 开头:第 1 行第 1 列错误。这是一个零宽度空间,有时用于将文件标记为某种 Unicode 表示形式,UTF-8, UTF-16LE、UTF-16BE。你能分享文件的第一行吗? 您可以尝试删除文件开头的标签,或者通过使用 Encoding(Tab) > Encode in UTF-8:selected 将文件保存在 Notepad++ 中。

    【讨论】:

    • BOM、空格或文件不是 XML 文件。 Protege 支持许多不同的格式,在这种情况下可能使用了非 XML 格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2016-12-20
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多