Database 密码';s和小精灵';语法和语义

Database 密码';s和小精灵';语法和语义,database,cypher,graph-databases,gremlin,Database,Cypher,Graph Databases,Gremlin,我想知道我能用Cypher和Gremlin执行什么样的查询,但我没有找到该语言的完整语法及其转换为操作语义。有人知道这些语言的表达能力是否有什么东西可以澄清吗 对于cypher,语法作为一组Scala文件提供,这些文件使用Parboiled库。您应该能够在neo4jgithub repo中找到这些scala文件。它本身不是一个正式的语法,但是如果你查看源文件,你会得到与正式语法相同的生成规则。查看Query.scala作为定义密码查询及其语法成分的起点 对于gremlin,我不确定它是如何工作的

我想知道我能用Cypher和Gremlin执行什么样的查询,但我没有找到该语言的完整语法及其转换为操作语义。有人知道这些语言的表达能力是否有什么东西可以澄清吗

对于cypher,语法作为一组Scala文件提供,这些文件使用Parboiled库。您应该能够在neo4jgithub repo中找到这些scala文件。它本身不是一个正式的语法,但是如果你查看源文件,你会得到与正式语法相同的生成规则。查看
Query.scala
作为定义密码查询及其语法成分的起点

对于gremlin,我不确定它是如何工作的,但我想你还是需要深入研究源代码,很可能他们也使用了某种解析器生成器,语法将有效地应用于代码中

你关于“表达能力”的问题有点模糊;只要说cypher是一种声明性语言(关注返回什么,而不是指定如何遍历),gremlin在我看来就像一种声明性语言(因为它说明了如何遍历,而不是返回什么数据)。最终他们都是图灵完全的,所以虽然他们的风格完全不同,但在任何形式上,一个都不比另一个更“强大”


根据您正在执行的特定任务以及“强大”的上下文定义,一个可能比另一个更强大。比如说,你想做的是对一棵树进行广度优先的搜索,寻找特定的东西。在这种情况下,面向遍历的方法是最好的,也许gremlin更好,因为Cypher不允许您指定遍历顺序。另一方面,假设您想要表达一个复杂的路径查询,该查询返回某个数据项,而不管它在图中的什么位置。那么,或许可以说cypher更强大,因为它关注的是“什么”而不是“如何”。

是否有证据证明它们的图灵完整性,或者这只是一个建议?Gremlin有类似于循环的东西,但Cypher没有。此外,我认为查询语言不应该像SQL那样是图灵完整的,因此我认为它们没有那么强大。为什么?我没有证据证明它们是图灵完全的,但这是一个很低的标准。它们都有存储(通过数据库),并且都有条件。这是你现在最需要的。在Gremlin中实现完整性的证据如下: