Расширение выполнения запросов Jena ARQ

Мы пытаемся расширить jena ARQ, добавив нового оператора. Однако пока мы не хотим делать это с самого начала, т. е. проходить все этапы от разбора запроса до выполнения запроса. Мы думаем переписать план выполнения вручную, а затем позволить ARQ выполнить переписанный план. Я провел поиск в Интернете, однако не смог найти никакой информации о редактировании плана выполнения вручную. Мне было интересно, есть ли способ записать план в файл и отредактировать файл вручную, а затем позволить ARQ прочитать файл с диска и выполнить его. Это вообще возможно? Может ли кто-нибудь дать мне подсказку о том, как начать эту проблему?


person sgao    schedule 13.02.2016    source источник
comment
Это довольно расплывчато для StackOverflow. Пожалуйста, сделайте это более конкретным, например. что за оператор? Что вы пробовали?   -  person AndyS    schedule 14.02.2016
comment
Если оператор улучшает выполнение, то в OpExt есть точка расширения. Если операторы не могут быть записаны в std SPARQL, вы также можете добавить их туда. Однако, если правильно добавить оператор, то изменить OpExecutor может быть проще. Таким образом, вы можете написать алгебру SPARQL и прочитать ее с помощью функций SSE, а также выполнить см. QueryExecUtils. Это внутренние классы, и вы должны проверить код. jena.apache.org/documentation/query/extension.html   -  person AndyS    schedule 14.02.2016
comment
AndyS, большое спасибо за совет! Да, оператор, который мы собираемся добавить, не может быть написан в std SPARQL. Насколько я знаю, механизм запросов сгенерирует план выполнения для заданного алгебраического выражения и выполнит его. Итак, добавляя новый оператор и изменяя OpExecutor, нужно ли нам затрагивать класс Plan?   -  person sgao    schedule 16.02.2016
comment
План трогать не нужно — он не принимает решений, это просто держатель для выполнения операции и результирующий итератор. (PlanBase добавляет небольшое количество проверок и управляет закрытием итератора.)   -  person AndyS    schedule 17.02.2016


Ответы (1)


Отправной точкой является чтение и запись алгебры с помощью SSE.parseOp и выполнение с помощью QueryExecUtils.

OpExecutor — это механизм выполнения алгебры SPARQL, и если вы добавите новый тип Op, то туда же и добавить выполнение.

person AndyS    schedule 17.02.2016
comment
Большое спасибо. Это очень помогает. - person sgao; 19.02.2016