我试图使用来自 protege 的 SWRL 规则推理器来设置 Apache Jena Fuseki。 遵循了Miguel2617/apacheJenaSetUp.md教程,但出现了这个错误
Exception in initialization: org/apache/jena/reasoner/BaseInfGraph$InfFindSafeCapabilities
21:48:48 WARN WebAppContext :: Failed startup of context oeje10w.WebAppContext@6eb089e6{Apache Jena Fuseki Server,/,b=file:///C:/Users/admin/Downloads/apache-jena-fuseki-5.0.0-rc1/webapp/,a=AVAILABLE,h=oeje10s.SessionHandler@715a70e9{STARTED}}
java.lang.NoClassDefFoundError: org/apache/jena/reasoner/BaseInfGraph$InfFindSafeCapabilities
不确定这是 Fuseki 还是 Reasoner 的问题。
也许罐子放错地方了?
apache-jena-fuseki-5.0.0-rc1\lib\original-openllet-distribution-2.6.5.jar
或者某处配置错误?
@prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
[] rdf:type fuseki:Server ;
fuseki:services (
<#service1>
) .
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
<#service1> rdf:type fuseki:Service ;
fuseki:name "FireDSS" ; # http://host:port/FireDSS
fuseki:serviceQuery "query" ; # SPARQL query service (alt name)
fuseki:serviceQuery "sparql" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore "data" ; # SPARQL Graph store protocol (read and write)
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#dataset> .
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> .
<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerClass "openllet.jena.PelletReasonerFactory" ;
] .
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbDataset> .
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "TDB2" ;
#set the timeout for a SPARQL query in milliseconds. 0 means no timeout and the query never times out.
ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "0" ] .
或者fuseki-server.bat包含错误?
java -Xmx1200M -cp fuseki-server.jar;lib/* org.apache.jena.fuseki.cmd.FusekiCmd %*
我已经尝试将 tdb 的前缀更改为 tdb2 并将 tdb 更改为本地内存中的 ttl。 在我删除除服务之外的所有内容后,它起作用了,但没有推理器,因此它不能使用 SWRL 规则。如果有其他推理器适用于 Protege 的 SWRL 规则,很高兴知道。
正如评论中所说,Openllet 2.6.5与Apache Fuseki 5.0.0不兼容,它是为Apache Fuseki 4.2.0编写的
类
InfFindSafeCapabilities
已被提交 4923bf7d 删除,并且仍然存在于 Apache Fuseki 4.7.0 中。您也可以尝试这个版本。