DSL Parsing规则

在 Parser 级别(即,在 stream 或 task 定义的主体内),规则如下:

  • 选项的值通常解析到第一个空格字符。

  • 不过,它们可以由字符串组成,用单引号或双引号包围。

  • 请使用连续的两个相同引号使用。

因此,--expression在以下示例中,filter application 的配置效果是完全相同的:

filter --expression=payload>5
filter --expression="payload>5"
filter --expression='payload>5'
filter --expression='payload > 5'

可以说,最后一个更容易阅读。因为在实际的表达式周围使用了引号。实际表达式是payload > 5(没有引号)。

现在,假设我们想对字符串的值进行测试。如果我们想要比较 payload和 SpEL表达式,我们可以使用以下方法:

filter --expression=payload=='something'       
filter --expression='payload == ''something''' 
filter --expression='payload == "something"'  

key

content

第一行

这是有效的,不过因为没有空格,可读性并不好

第二行

只使用单引号来包括整个参数。因此,参数中的单引号需要

加倍

第三行

SpEL可以识别带有单引号或双引号的字符串文本,因此最后

一种方法可以说是最易读的。

请注意,前面的示例是不考虑在shell之中使用(例如,当直接调用REST API时)。因为在shell中输入时,很可能整个stream 的定义本身都在双引号中,需要转义。整个例子变成如下:

dataflow:>stream create something --definition "http | filter --expression=payload='something' | log"

dataflow:>stream create something --definition "http | filter --expression='payload == ''something''' | log"

dataflow:>stream create something --definition "http | filter --expression='payload == \"something\"' | log"

Last updated