我有一个如下结构的图表:
1.一些顶点代表现实世界中的物品和类型,即一个顶点代表“城市”,而特定城市如“伦敦”或“西雅图”则有顶点。每个顶点都可以与其类型顶点有“是一个(is-a)”联系,例如
2.顶点也可以通过“in”关系相互连接,例如
3.一些顶点可能还具有“in-country”关系,例如
4.可能存在多个链接(例如某些城市可能在两个国家之间有争议,因此会有两个“in-country”或“in”链接)——在这种情况下,应返回多个国家。
任务是针对每个顶点尝试找到其所居住的国家(当然,对于“城市”等通用顶点来说是没有意义的,但在这种情况下它应该只产生null)。所以我尝试做了这样一些事情:
1.一些顶点代表现实世界中的物品和类型,即一个顶点代表“城市”,而特定城市如“伦敦”或“西雅图”则有顶点。每个顶点都可以与其类型顶点有“是一个(is-a)”联系,例如
"伦敦" -(is-a)-> "城市"
,"美国" -(is-a)-> "国家"
。2.顶点也可以通过“in”关系相互连接,例如
"伦敦" -(in)-> "英国"
,"西雅图" -(in)->"华盛顿州"
。3.一些顶点可能还具有“in-country”关系,例如
"西雅图"->(in-country)->"美国"
,但有些则没有。4.可能存在多个链接(例如某些城市可能在两个国家之间有争议,因此会有两个“in-country”或“in”链接)——在这种情况下,应返回多个国家。
任务是针对每个顶点尝试找到其所居住的国家(当然,对于“城市”等通用顶点来说是没有意义的,但在这种情况下它应该只产生null)。所以我尝试做了这样一些事情:
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
开头而不是if
。编写一些根据您的描述创建图形的代码会很不错。 - Faberv
)是一个城市吗?其次,根据您的模式,循环结构的目的是什么?所有城市顶点通过一个或多个标签为“in”或“in-country”的边缘链接到国家 - 那么循环的必要性在哪里?也许我对您的模式有什么误解? - stephen mallette