我是 Gremlin 新手,我正在使用 Gremlin 3.0.2 和 Stardog 5.0。我编写此查询是为了找出 schema.org 本体中两个实体之间的路径。下面是输出 -
gremlin>`g.V().hasLabel('Canal').repeat(both().simplePath()).until(g.V().hasLabel('Continent')).path().limit(5)`
==>[v[运河], v[rdf-schema#Class]]
==>[v[运河], v[水域], v[地形], v[大陆]]
==>[v[运河], v[水体], v[rdf-schema#Class], v[大陆]]
==>[v[运河], v[水体], v[池塘], v[rdf-schema#Class], v[大陆]]
==>[v[运河], v[水域], v[海洋水域], v[rdf-schema#Class], v[大陆]]
我无法找到一种方法来消除所有包含“rdf-schema#Class”的路径。请问有人可以提出解决方案吗?我想使用 Gremlin 进行过滤。谢谢!
一种方法是将后置过滤器应用于返回的路径。举例来说,如果你有这样的事情:
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().outE('created').inV().path()
==>[v[1],e[9][1-created->3],v[3]]
==>[v[4],e[10][4-created->5],v[5]]
==>[v[4],e[11][4-created->3],v[3]]
==>[v[6],e[12][6-created->3],v[3]]
想要摆脱边缘,你可以这样做:
gremlin> g.V().outE('created').inV().path().
......1> local(unfold().filter(__.not(hasLabel('created'))).fold())
==>[v[1],v[3]]
==>[v[4],v[5]]
==>[v[4],v[3]]
==>[v[6],v[3]]
因此,新行基本上只是说,对于每个路径项,展开它,对标签上的那些未“创建”的项进行一些过滤,然后将路径折叠回列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)