Attribute和Reference是模型中的其中两大元素,通常我们查询都会根据Attribute和Reference来查询。EMF-Query中提供了针对这两种元素的封装了条件类哦,怎么使用?easy~~
接触了eclipse那么久,对eclipse所说的feature的理解感觉还是有点模糊,仅仅就是我们理解成的“功能部件”吗?很怀疑,还得仔细查查资料。要是有哪位兄台能在这里给我指点一下就好了,呵呵。Feature Conditions是有关features of model elements的(不知如何翻译这个词才恰当,保留它吧)。给我自己的感觉,在EMF中,“features of model elements”的feature包含的模型元素的Attribute和Reference,或许Containment也算。看看结构图来分析:
EObjectStructuralFeatureCondition关联了一个EStructuralFeature,主要用来判断模型元素feature 是否有效(模型元素的 EClass 是否具有feature)。
EObjectReferencerCondition用于选取元素所有引用到的对象,并且不考虑contaiment(或container features )。
看看一个例子,列出商品中所有关于食品类food的产品product:
再看看下面的结构图(用于Feature Values 的条件):
EObjectStructuralFeatureValueCondition 使得断言在查询对象的features的值变得非常方便。它既支持EAttributes又支持EReferences。取feature值是通过IEStructuralFeatureValueGetter的对象获取structural features.的,大多数时候,你可以使用默认的FeatureValueGetter,默认的FeatureValueGetter是这样一个对象:EStructuralFeatureValueGetter.getInstance()
EObjectCondition是支持复合操作和策略使用的,作为子类的EObjectStructuralFeatureValueCondition 当然也不会例外。
EObjectReferenceValueCondition和EObjectAttributeValueConditions十分相似(使用角度),看它们的名称就很容易猜到它们之间的各自的服务对象了,前者是针对Reference的,后者是针对Attribute的。看完下面的例子,就完全可以体会到它们基本的用法了。
下一节,将介绍查询的执行,也就是通过SELECT Statement来查询对象。