我正在编写一个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)
谢谢你的帮助!
1条答案
按热度按时间piv4azn71#
您的数据集示例是正确的,应该可以工作。
错误的特征是重新打包jar,但不更正对服务加载器文件的处理。
https://jena.apache.org/documentation/notes/jena-repack.html
如果未合并服务加载器文件,则系统初始化无法正常进行。
这里的效果是没有一个“context”对象的设置会导致nullpointerexception。