ybt*_*195 5 sparql jena fuseki
我在某个服务器上运行了一个 Fuseki 端点。我想使用 Jena 的com.hp.hpl.jena.sparql.function库传递用户定义的函数。不幸的是,我收到错误:
URI <java:path.to.functions.halfString> has no registered function factory
Run Code Online (Sandbox Code Playgroud)
我确保将类(包含文件的 jar)添加到类路径中,并且我可以从该服务器上使用此类的其他应用程序访问此类。
我现在正在尝试的示例案例是一些函数,它采用图中所有三元组的主题并返回每个主题的前半部分。
作为参考,我添加了以下功能:
URI <java:path.to.functions.halfString> has no registered function factory
Run Code Online (Sandbox Code Playgroud)
这是我使用的 SPARQL 查询:
PREFIX f: <path.to.functions.>
SELECT ?half ?s ?o ?g
WHERE {
?s ?p ?o
BIND (f:halfString(str(?s)) as ?half)
}
Run Code Online (Sandbox Code Playgroud)
运行 Fuseki(使用 fuseki 提供的默认配置):
cd FUSEKI_HOME
./fuseki-server --mem /ds
Run Code Online (Sandbox Code Playgroud)
问题不在于Fuseki。java 文档指出,当使用java带有-jar选项的命令时,
JAR文件是所有用户类的来源,其他用户类路径设置将被忽略。
简单地将带有用户定义函数的 jar 文件添加到CLASSPATH变量中并不能解决问题,因为该环境变量将被忽略。此外,使用--classpathor-cp选项也将被忽略。
为了使 Fuseki 能够加载 jar 文件,您需要将用户定义的函数的 jar 文件位置添加到 fusions-server.jar 的清单文件中的 Class-Path 键中。
为此,请运行:
jar umf manifest-file fuseki-server.jar
Run Code Online (Sandbox Code Playgroud)
清单文件:
Class-Path: path/to/functions/udf.jar
Run Code Online (Sandbox Code Playgroud)
作为参考,这更详细地描述了将类添加到 jar 文件类路径的过程。