在之前实做主从维护界面中我们接触了DataPath,另外在@DataProvider与@DataResolver中我们也将DataPath与数据中的SQL做过类比。其实也可以认为它是XML中的XPath技术。主要用于描述如何提取、挖掘立体数据模型中的数据的表达式。
基本语法:
属性名1(参数1,参数2,..)[逻辑表达式1,逻辑表达式2,..].属性名2(参数1,..)[逻辑表达式1,..]..
除了上面的基本语法外,DataPath支持用户为其扩展语法——自定义片段。
关于DataPath的详细说明请参考: http://wiki.bsdn.org/x/HgAL
范例说明
下面我么通过一些实例了解DataPath的基本用法,首先我们设计的立体数据模型如下:
下面为正对上述立体数据模型定义的一些DataPath,我们解释一下它的含义:
表达式 | 含义 |
---|---|
null(即空) | 相当于直接返回被查询的数据,也就是整个集合 |
* | 同上 |
[#current] | 表示顶层集合中的当前Department,也就是第三个Department(带红框表示是当前对象) |
# | 同上 |
[#dirty] | 表示顶层集合中所有在客户端被改变过的(包含被删除的)Department |
#.employees | 表示顶层集合中当前Department中所有的Employee,也就是第三个Department对应的员工列表 |
#.#employees | 表示顶层集合中当前Department中的当前Employee,也就是第三个Department对应的员工列表中的第二个员工 |
departments(repeat)或者departments(R) | 表示所有Department的集合,它表示循环整棵树,将所有的Department作为一个数组返回 |
.departments(R) | 表示除顶层Department外所有其它Department的集合 |
#departments(R) | 表示各层当前Department的集合 |
#departments(leaf) | 表示最末端的当前Department。即通过不断的尝试获取当前Department中的当前Department,直到最末端那个Department |
departments(R).employees[@.get("salary")>5000 && @.get("sex")=="male"] | 表示所有Department中的薪水高于5000的男性Employee |
departments(R).employees.id | 表示返回所有Employee对象的id属性值的集合(DataPath并不总是返回实体对象,如本例是将值的集合返回) |