我有一个在某个服务器上运行的 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