У меня есть конечная точка Fuseki, работающая на каком-то сервере. Я хотел бы передать пользовательские функции, используя библиотеку Jena's com.hp.hpl.jena.sparql.function
. К сожалению, я получаю ошибку:Как вы используете пользовательские функции в fuseki?
URI <java:path.to.functions.halfString> has no registered function factory
Я удостоверился, чтобы добавить класс (в баночке, содержащую файл) к классам, и я могу получить доступ к этому классу из других приложений, использующих этот класс на этом сервере.
Пример, к которому я сейчас пользуюсь, - это некоторая функция, которая берет предмет всех троек в графе и возвращает первую половину каждого объекта.
В качестве эталона, я добавил функцию ниже:
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)
}
Запуск фусеки (с использованием конфигурации по умолчанию, который был дан с фусеки) :
cd FUSEKI_HOME
./fuseki-server --mem /ds
Он должен работать, если у вас есть код на пути к классам. Стандартный скрипт, который использовал -jar, не будет работать. если вы хотите дать полный, минимальный пример, возможно, мы сможем решить, что происходит. – AndyS
Извините за поздний ответ, я запустил скрипт fuseki-server с некоторыми фиктивными троек (запрос sparql вызывает тройки, поэтому я знаю, что данные есть, но функция ничего не возвращает) только с той функцией, которую я накладываю на путь к классам. – ybt195
@ ybt195 Пожалуйста, отредактируйте свой вопрос, чтобы точно показать, как вы побежали Fuseki – RobV