如何在ApacheJena中将trig文件解析为rdf模型?

vwoqyblh  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(408)

我正在编写一个java应用程序,使用ApacheJena作为处理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);

对于读者来说,它工作得非常好 "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)

谢谢你的帮助!

piv4azn7

piv4azn71#

您的数据集示例是正确的,应该可以工作。
错误的特征是重新打包jar,但不更正对服务加载器文件的处理。
https://jena.apache.org/documentation/notes/jena-repack.html
如果未合并服务加载器文件,则系统初始化无法正常进行。
这里的效果是没有一个“context”对象的设置会导致nullpointerexception。

相关问题