先进的URL过滤DSL
介绍
让用户直接使用可视化工具模块设置OData过滤器设置界面,我们正在开发一个简化的语法定义过滤器。说语法必须人类可读的,将直接转化为其OData ModuleSettings表中保存。
查询筛选器语法
查询可以由一个或多个简单的表达式运算符B加入使用逻辑运算符和,或者,不,括在括号里。首先,这是一个更复杂的例子
contentName始于[名字]和(任何contentTag =“个人电脑”或任何contentTag =“苹果”)
表达式
左边的表达式总是一个字段名称,使用相同的术语作为可视化工具的语法。因此我们支持的OData特性约束contentName和contantTags字段和动态字段。
右边的表达式可以是一个常数,包含在双引号或查询参数,包含在方括号。
转换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)”}]