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

时间:2013-08-15 21:26:59

标签: sparql jena fuseki

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

URI <java:path.to.functions.halfString> has no registered function factory

我确保将类(包含该文件的jar)添加到类路径中,我可以从该服务器上使用此类的其他应用程序访问此类。

我现在尝试的示例案例是一些函数,它接受图中所有三元组的主题并返回每个主题的前半部分。

作为参考,我添加了以下功能:

public class halfString extends FunctionBase1
{
    public halfString() { super() ; }

    public NodeValue exec(NodeValue nv1)
    {
        if (!nv1.isString())
        {
            return nv1;
        }

        String hey = nv1.toString();
        int mid = hey.length() / 2;
        String nay = hey.substring(0, mid);

        return NodeValue.makeString(nay);
    }
}

以下是我使用的SPARQL查询:

PREFIX f: <path.to.functions.>

SELECT ?half ?s ?o ?g
WHERE {

    ?s ?p ?o

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

运行Fuseki(使用fuseki提供的默认配置):

cd FUSEKI_HOME
./fuseki-server --mem /ds

1 个答案:

答案 0 :(得分:1)

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

  

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

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

为了让Fuseki能够加载jar文件,您需要使用用户定义的函数将您的jar文件的位置添加到fuseki-server.jar的清单文件中的Class-Path键。

要执行此操作,请运行:

jar umf manifest-file fuseki-server.jar

清单文件:

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

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