如何在 Apache Jena 中将 TriG 文件解析为 RDF 模型?

How to parse a TriG file to a RDF Model in Apache Jena?

我正在编写一个 Java 应用程序,使用 Apache Jena 作为处理 RDF 的框架。目标是在进行 OWL 推理后进行一致性检查。该应用程序已经可以运行,但不支持 TriG 文件。在 Jena 文档中,它说支持 TriG (https://jena.apache.org/documentation/io/index.html)。

这是我解析 RDF 文件的代码:

import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.riot.RDFDataMgr;
import java.io.InputStream;

String rdfFilePath = "sample.ttl";
String rdfReaderType = "TURTLE";
Model model = ModelFactory.createDefaultModel();
InputStream inStream = RDFDataMgr.open(rdfFilePath);
model.read(inStream, null, rdfReaderType);

对于 reader 类型 "TURTLE""RDF/XML""N-TRIPLE""JSONLD",它工作得很好。它不适用于 rdfReaderType = "TRIG"。我收到以下异常:

Exception in thread "main" org.apache.jena.shared.NoReaderForLangException: Reader not found: TRIG
        at org.apache.jena.rdf.model.impl.RDFReaderFImpl.getReader(RDFReaderFImpl.java:61)
        at org.apache.jena.rdf.model.impl.ModelCom.read(ModelCom.java:305)

然后我有了一个理论,TriG 文件可能无法解析为模型,只能解析为数据集。所以我尝试了以下代码:

import org.apache.jena.query.Dataset;
import org.apache.jena.riot.RDFLanguages;

String rdfFilePath = "sample.trig";
Dataset dataset = RDFDataMgr.loadDataset(rdfFilePath, RDFLanguages.TRIG);

但我得到以下异常:

Exception in thread "main" java.lang.NullPointerException
        at org.apache.jena.riot.RDFParserBuilder.build(RDFParserBuilder.java:607)
        at org.apache.jena.riot.RDFParserBuilder.parse(RDFParserBuilder.java:540)
        at org.apache.jena.riot.RDFDataMgr.parseFromURI(RDFDataMgr.java:921)
        at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:550)
        at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:517)
        at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:470)
        at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:460)
        at org.apache.jena.riot.RDFDataMgr.loadDataset(RDFDataMgr.java:414)

感谢您的帮助!

您的数据集示例是正确的,应该可以使用。

错误是重新打包 jar 而不是更正处理服务加载程序文件的特征。

https://jena.apache.org/documentation/notes/jena-repack.html

如果服务加载程序文件未合并,系统初始化将无法正常进行。

这里的效果是没有“上下文”对象的设置,然后导致 NullPointerException。