У меня есть график, со следующей структурой:Gremlin итерационные условного обход
- Некоторых вершины представляют собой реальные элементы и некоторый типа, т.е. существует вершина для «городов» и вершин для конкретных городов, таких как «Лондон »или« Сиэтл ». Каждая вершина может иметь ребро «is-a» в своей вершине типа, то есть
"London" -(is-a)-> "city"
,"USA" -(is-a)-> "country"
. - Вершины могут быть связаны также «in», т.е.
"London" -(in)-> "UK"
,"Seattle" -(in)->"Washington"
. - Некоторые вершины также могут иметь отношение «внутри страны», то есть
"Seattle"->(in-country)->"USA"
, но некоторые могут не иметь. - Возможно иметь несколько ссылок (т. Е. Какой-то город может оспариваться между двумя странами и поэтому иметь две ссылки «внутри страны» или «в») - в этом случае следует вернуть несколько стран.
Задача состоит в том, чтобы каждая вершина попыталась найти страну, в которой она проживает (конечно, это бессмысленно для общих вершин типа «город», но в этом случае она должна просто производить нуль). Так что я пытался сделать что-то вроде этого:
v.as('loopstep').ifThenElse{it.out('is-a').has('ID', 'country').hasNext()}{
it
}{
it.ifThenElse{it.out('in-country').hasNext()}{
it.out('in-country')
}{
it.out('in').loop('loopstep'){it.loops < 10 }
}
}
но производит NPE на петле, например .:
java.lang.NullPointerException
at com.tinkerpop.pipes.branch.LoopPipe.getLoops(LoopPipe.java:75)
и т.д. Похоже, что петля не может видеть «loopstep» ярлык. Я делаю это неправильно? Каким будет правильный способ написать такой обходной запрос?
Угадайте, что второй 'ifThenElse' должен начинаться с' it' not 'if'. Некоторый код, который создает граф в соответствии с вашим описанием, будет приятным. – Faber
@Faber да, спасибо, исправлена опечатка – StasM
Я не уверен, что полностью понимаю. во-первых, ваша начальная вершина (т. е. 'v') город? во-вторых, какова точка конструкции цикла, учитывая вашу схему? все городские вершины соединяются со странами через один или несколько краев метки «in» или «in-country» - так где же нужна петля? может быть, я что-то не понимаю о вашей схеме? –