Sparql 如何在fuseki中使用用户定义的函数?

Sparql 如何在fuseki中使用用户定义的函数?,sparql,jena,fuseki,Sparql,Jena,Fuseki,我在某台服务器上运行了一个Fuseki端点。我想使用Jena的com.hp.hpl.Jena.sparql.function库传递用户定义的函数。不幸的是,我得到了一个错误: URI <java:path.to.functions.halfString> has no registered function factory 以下是我使用的SPARQL查询: PREFIX f: <path.to.functions.> SELECT ?half ?s ?o ?g WHE

我在某台服务器上运行了一个Fuseki端点。我想使用Jena的
com.hp.hpl.Jena.sparql.function
库传递用户定义的函数。不幸的是,我得到了一个错误:

URI <java:path.to.functions.halfString> has no registered function factory
以下是我使用的SPARQL查询:

PREFIX f: <path.to.functions.>

SELECT ?half ?s ?o ?g
WHERE {

    ?s ?p ?o

    BIND (f:halfString(str(?s)) as ?half)
}

问题不在于Fuseki。java文档指出,在使用带有
-jar
选项的
java
命令时

JAR文件是所有用户类和其他用户类的源 路径设置将被忽略

简单地将带有用户定义函数的jar文件添加到
CLASSPATH
变量并不能解决问题,因为该环境变量将被忽略。此外,使用
--classpath
-cp
选项也将被忽略

为了让Fuseki能够加载jar文件,您需要使用用户定义的函数将位置添加到jar文件中,并将其添加到Fuseki server.jar清单文件中的类路径键中

要执行此操作,请运行:

jar umf manifest-file fuseki-server.jar
清单文件:

Class-Path: path/to/functions/udf.jar

作为参考,更详细地描述了将类添加到jar文件类路径的过程

如果您的代码位于类路径上,它应该可以工作。使用-jar的标准脚本将无法工作。如果您想给出一个完整的、最小的示例,也许我们可以知道发生了什么。很抱歉,响应太晚,我使用一些伪三元组运行脚本fuseki服务器(sparql查询会显示三元组,因此我知道数据在那里,但函数不返回任何结果)只有我放在类路径上的那个函数。@ybt195请编辑您的问题,以准确显示您是如何运行Fuseki的
Class-Path: path/to/functions/udf.jar