У меня есть метод Visit
класса ElementVisitorBase
. Находясь в этом методе Visit
, я хочу получить выражение Filter
для Element
; затем я хочу преобразовать это выражение Filter
в Element
, чтобы я мог пройти через него и выяснить, есть ли в этом выражении OPTIONAL
пункт Filter
. У меня есть код ниже,
public void visit(ElementFilter el) {
Element ele = (Element) el.getExpr();
ElementVisitorsub ev = new ElementVisitorsub();
ElementWalker.walk(ele, ev);
}
Но я получаю сообщение об ошибке: «Выражение не может быть преобразовано в элемент 'ele'». Кроме того, если я использую параметр "el" ElementFilter
непосредственно в моем Walker
, например: ElementWalker.walk(el, ev)
, он зацикливается до бесконечности. Итак, какие решения для этого?
Спасибо!
The Filter expression inside my initial Query is as follows.
FILTER ( ( EXISTS {
?var1 <http://www.wikidata.org/prop/direct/P276> ?var5 .
?var5 <http://www.wikidata.org/prop/direct/P31> ?var6 .
?var5 ( <http://www.wikidata.org/prop/direct/P361> */
<http://www.wikidata.org/prop/direct/P131> *)
<http://www.wikidata.org/entity/Q5061> .
OPTIONAL {
?var5 <http://www.wikidata.org/prop/direct/P625> ?var2 .
}
}
)
)
учитывая, что единственный фильтр, содержащий ДОПОЛНИТЕЛЬНЫЙ, что означает, что шаблон графика может быть «существующим», вы можете проверить, является ли el.getEpr
instanceof E_Exists
, и, если да, примените его так, чтобы вы могли получить из него Element
Да, в моем запросе есть элемент «существует». и я попытался применить его, и он генерирует ошибку, указывая на то, что невозможно преобразовать Expression в Element. Как я могу его разыграть?
Я вам в комментарии сказал, что делать. Вы должны передать его на E_Exists
, если это instanceof
. Затем вы можете обернуть элемент внутри этого
не могли бы вы показать запрос? Мне интересно, как выглядит ваш фильтр, и это сделало бы весь вопрос немного более понятным для более широкой аудитории. Спасибо