先进的URL过滤DSL

介绍

让用户直接使用可视化工具模块设置OData过滤器设置界面,我们正在开发一个简化的语法定义过滤器。说语法必须人类可读的,将直接转化为其OData ModuleSettings表中保存。

查询筛选器语法

查询可以由一个或多个简单的表达式运算符B加入使用逻辑运算符和,或者,不,括在括号里。首先,这是一个更复杂的例子

contentName始于[名字]和(任何contentTag =“个人电脑”或任何contentTag =“苹果”)

表达式

左边的表达式总是一个字段名称,使用相同的术语作为可视化工具的语法。因此我们支持的OData特性约束contentNamecontantTags字段和动态字段。

右边的表达式可以是一个常数,包含在双引号或查询参数,包含在方括号。

转换OData

解析查询过滤器必须转化为有效的OData消费的可视化工具API。这里有一些例子表示转换为个人表达

查询筛选器表达式 OData筛选器表达式 讲话
颜色=“红色” 细节/ color eq‘红色’ 查询语法不需要细节/前缀
任何contentTags =“个人电脑” 标签/任何(标签:标签eq“个人电脑”)
价格等于10 细节/价格eq 10 数字常量不需要包含引号
任何制造商。contentSlug =“梅赛德斯-奔驰” 细节/制造商(r, r /蛞蝓eq“梅赛德斯-奔驰”) 点符号的可视化工具。目前只蛞蝓支架为参考对象字段
日期大于“2017-10-10” 细节/日期gt DateTime‘2017-10-10’ 日期必须使用ISO格式。转换必须包括类型
任何类别=“火箭助推榴弹发射器” /类别/任何详细信息(c: c = RPG) 可以写任何中的任何一个
颜色=(颜色) 细节/ color eq(色)的 参数不需要附上报价
颜色不等于“蓝色” 细节/颜色不“蓝色” 否定转化为专业运营商
contentName始于“(OT)” startswith(名字,“(OT)”) startswith函数。注意,右手值括在引号使其文字不是一个查询参数

将操作符

查询过滤操作符 OData运营商
= 情商
不等于
大于 gt
大于或等于 通用电气
不到 lt
小于或等于

正式的语法

下面是查询的语法DSL增强Backus-Naur形式写的。

QueryFilter =表达式1 *缝纫项目* (LogicalOperator 1 *缝纫项目表达)=表达式“(“QueryFilter”)”/ RootExpression LogicalOperator = "and" / "or" RootExpression = [ AnyModifier 1*LWSP ] FieldAccessor 1*LWSP Operator 1*LWSP ( Variable / Constant ) AnyModifier = "any" / "any of" Operator = "starts with" / ArithmeticOperator ArithmeticOperator = [ "is" 1*LWSP ] [ "not" 1*LWSP ] "equal" [ "s" ] ArithmeticOperator =/ "greater than" / "greater than or equal" ArithmeticOperator =/ "less than" / "less than or equal" FieldAccessor = Identifier [ "." Identifier ] Constant = Number / StringLiteral Number = [ "-" ] *DIGIT [ "." 1*DIGIT ] StringLiteral = """ 1*CHAR """ / "'" 1*CHAR "'" Variable = "[" Identifier "]" Identifier = ALPHA *(ALPHA / DIGIT)

例子

1)在内容库,创建5内容项内容类型:

第一个名字
书中 Kumar Karmankar
迈克 Bigun
曼努埃尔 冈萨雷斯
丹尼尔 阿奎莱拉

2)创建一个空白页面,并添加以下视觉型的人:

类型 列表
内容类型
视觉型的人 广场形象对w /的名字

3)在可视化工具设置屏幕,启用URL过滤:

4)点击高级设置并输入筛选器表达式:

firstName =“Manuel”

5)点击保存然后应用。页面应该如下:

6)悬浮可视化工具并点击管理可视化工具设置:

7)点击下一个在向导的所有步骤的集可视化工具设置页面。点击高级设置和改变筛选器表达式为:

firstName =“迪”

8)点击保存,然后应用。可视化工具将呈现一个新人基于以上标准。

处理查询过滤器

用户可以创建多个过滤器对于一个给定的可视化工具实例。他们将按原样存储在其他模块设置。可视化工具实例保存时,服务也验证语法和使用字段(即。所有字段名称中存在内容类型)以及正确使用数据类型,以确保数字领域相比,不是字符串和日期字段是使用正确格式化的日期。

这是一个交互的序列图描述:

验证查询查询内容类型

被成功解析后,查询过滤器必须验证查询内容类型。这里有规定内容类型字段

数域

只能使用数字

有效的例子

字段等于5

无效的例子

”=“”字段= 5”

日期字段

只能使用正确格式化的ISO日期。

有效的例子

日期=“2017-10-10”日期小于“2018 - 01 - 01 t10:20:10”

无效的例子

日期=“2017/09/07”

日期字段(子类型)

只能使用一个正确格式化的字符串

有效的例子

时间不到“10:10:00”=“12”

无效的例子

时间=“99:00”小于“中午”

参考对象字段

  • 平等运营商不能用于引用对象字段
  • 只允许蛞蝓当查询引用对象字段
  • 单一的裁判可以使用点符号来访问蛞蝓
  • 多个裁判必须使用任何(的)修饰符
  • 开始于不能用于ultipl

有效的例子

singleRef。蛞蝓任何multipleRef =“页面”。蛞蝓=“页面”

无效的例子

singleRef =“id”multipleRef。蛞蝓=“页面”singleRef。的名字="Tomasz" any multipleRef.slug starts with "my-page"

多项选择字段

只能查询与一起吗中的任何一个修饰符。

不能用于开始于

有效的例子

任何的选择等于“是的”engineType =“柴油”

无效的例子

engineType =“柴油”的选择开始“媒介”

提取查询字符串参数

查询语法允许使用两种类型的值:常量和变量。后者包含在方括号中的字母数字标识。例如下面的表达式使用一个变量的名字

contentName始于[名称]

当这样的变量解析它将被转换为一个查询字符串变量OData过滤器定义定义。

[{“QueryStringParams”:“名称”,“ODataFilterQueryFormat”:“名字eq[名字]”}]

注意,一个变量不能包含在报价。

如果一个查询写如下

threadTitle始于“(OT)”

那么价值”(OT)”将被用作一个普通的字符串,并且不会生成一个查询字符串参数:

[{“QueryStringParams”: [],“ODataFilterQueryFormat”:“细节/ threadTitle eq (OT)”}]