如何在 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。
我正在编写一个 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。