Rdf 尝试加载带有tdb2.tdbloader的Wikidata truthy-latest.nt会导致代码:58/用户中存在禁止的组件

Rdf 尝试加载带有tdb2.tdbloader的Wikidata truthy-latest.nt会导致代码:58/用户中存在禁止的组件,rdf,wikidata,fuseki,tdb,tdbloader,Rdf,Wikidata,Fuseki,Tdb,Tdbloader,使用Apache Jena Fuseki,我试图从中加载最新的truthy.nt数据集,但在尝试导入文件时出现以下错误。从他们成功的地方获得的成功中获得灵感 错误日志: 14:36:16信息加载器::添加:198.500.000最新版本-truthy.nt(批次:453.309/Avg:213.382) 14:36:17错误:错误:[行:198884173,列:87]错误IRI:代码:58/用户中存在禁止的组件:存在方案禁止的组件。 org.apache.jena.riot.RiotExcept

使用Apache Jena Fuseki,我试图从中加载最新的truthy.nt数据集,但在尝试导入文件时出现以下错误。从他们成功的地方获得的成功中获得灵感

错误日志:

14:36:16信息加载器::添加:198.500.000最新版本-truthy.nt(批次:453.309/Avg:213.382)
14:36:17错误:错误:[行:198884173,列:87]错误IRI:代码:58/用户中存在禁止的组件:存在方案禁止的组件。
org.apache.jena.riot.RiotException:[行:198884173,列:87]错误的IRI:代码:58/用户中存在禁止的组件:存在方案禁止的组件。
位于org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.error(ErrorHandlerFactory.java:146)
位于org.apache.jena.riot.system.ParserProfileStd.internalMakeIRI(ParserProfileStd.java:112)
位于org.apache.jena.riot.system.ParserProfileStd.resolveIRI(ParserProfileStd.java:85)
位于org.apache.jena.riot.system.ParserProfileStd.createURI(ParserProfileStd.java:187)
位于org.apache.jena.riot.system.ParserProfileStd.create(ParserProfileStd.java:259)
位于org.apache.jena.riot.lang.LangNTriples.tokenAsNode(LangNTriples.java:70)
位于org.apache.jena.riot.lang.LangNTuple.parsetree(LangNTuple.java:109)
位于org.apache.jena.riot.lang.LangNTriples.parseOne(LangNTriples.java:61)
位于org.apache.jena.riot.lang.LangNTriples.runParser(LangNTriples.java:53)
位于org.apache.jena.riot.lang.LangBase.parse(LangBase.java:43)
位于org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:184)
位于org.apache.jena.riot.RDFParser.read(RDFParser.java:357)
位于org.apache.jena.riot.RDFParser.parseURI(RDFParser.java:323)
位于org.apache.jena.riot.RDFParser.parse(RDFParser.java:298)
位于org.apache.jena.riot.RDFParserBuilder.parse(RDFParserBuilder.java:550)
位于org.apache.jena.tdb2.loader.base.LoaderOps.inputFile(LoaderOps.java:107)
位于org.apache.jena.tdb2.loader.base.LoaderBase.loadOne(LoaderBase.java:125)
位于org.apache.jena.tdb2.loader.base.LoaderBase.lambda$load$0(LoaderBase.java:102)
位于java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
在org.apache.jena.tdb2.loader.base.LoaderBase.load(LoaderBase.java:99)上
位于tdb2.tdbloader.lambda$execBulkLoad$4(tdbloader.java:196)
位于org.apache.jena.atlas.lib.Timer.time(Timer.java:85)
位于tdb2.tdbloader.execBulkLoad(tdbloader.java:194)
位于tdb2.tdbloader.loadQuads(tdbloader.java:175)
位于tdb2.tdbloader.exec(tdbloader.java:136)
位于org.apache.jena.cmd.CmdMain.main方法(CmdMain.java:92)
位于org.apache.jena.cmd.CmdMain.mainRun(CmdMain.java:58)
位于org.apache.jena.cmd.CmdMain.mainRun(CmdMain.java:45)
位于tdb2.tdbloader.main(tdbloader.java:64)
要导入的脚本:

@ECHO关闭
cd apache-jena-4.0.0
echo在%DATE%%TIME%开始导入
tdb2\u tdbloader--loader=parallel--loc“C:\fuseki\data”F:\latest truthy.nt“>tdb2-out.log 2>tdb2-err.log
echo在%DATE%%TIME%完成导入
暂停
文件结构:

- C:/fuseki/
-- apache-jena-4.0.0/
-- apache-jena-fuseki-4.0.0/
-- data/
-- startfusekidb.bat
-- wikidata2fuseki.bat

- F:/
-- latest-truthy.nt
这是Fuseki的问题吗?我无法亲自打开.nt文件来删除该问题。我是否可以使用任何标志,使其跳过tdbloader对给定导入的验证

我还在维基数据的IRC频道上问这个问题,看看他们是否能帮助我

更新: 我从IRC的人那里得到了答案,他们告诉我数据集中存在大量错误,所以我知道需要找到一种方法跳过与错误相关的行并继续加载。但是他们没有表现出任何帮助

同时尝试--help输出以下内容,从而表明不存在跳过

c:\fuseki\apache-jena-4.0.0\bin>tdb2\u tdbloader-h
tdbloader--loader=[--desc数据集|--loc DIR]文件。。。
位置
--loc=目录位置(一个目录)
--tdb=汇编程序描述文件
--graph=IRI对命名图执行操作
--加载器=要使用的加载器:“基本”、“分阶段”(默认)、“顺序”、“并行”或“轻”
--syntax=来自stdin的数据的LANG语法
符号定义
--将配置符号设置为值
--mem=在内存TDB数据库上执行的文件(用于测试)
--desc=汇编程序描述文件
一般的
-v——冗长的
-q——以最小输出安静运行
--用于调试的调试输出信息
--帮助
--版本信息
--严格在严格SPARQL模式下操作(没有任何类型的扩展)

我认为tdbloader没有跳过无效三元组的选项。有一些关于这方面的讨论,例如,还有一些可能与您相关的讨论。这意味着,使用版本
4.1.0
时,解析器可能会更轻松。因此,也许从Github查看最新的开发版本并在本地构建它可以解决您的问题。我将首先尝试4.1.0中的新加载程序,然后我最好的步骤是将Wikidata数据集转换为turtle,例如(由于某些原因,我无法以文本形式打开.nt文件)。然后运行
riot--validate
查看哪些行断开,并手动删除它们。单调乏味,但它应该可以工作。就我所知,使用
4.1.0
应该没有必要过滤这些三元组。解析器/加载程序不应该失败并停止。关于您的另一个问题,您不能打开.nt文件是什么意思?我的意思是,它肯定很大,所以我无论如何都不会打开它。可以通过
sed
或其他有效的Unix工具删除这些行