必知的技术知识:EMF学习,为了实现可扩展可自定义的模型验证

简介: 必知的技术知识:EMF学习,为了实现可扩展可自定义的模型验证

//这里的验证强调的是condition的构造,基于查找来判断验证结果。支持OCL也支持java自己编写。


quary的基本逻辑是:编写约束条件,执行语句条件的查询,根据查询结果判断验证结果。


OCL的实现本身也依赖于Quary


Quary依赖于条件,条件集成自java的条件,基本的验证逻辑是:构造条件,根据isSatisfied(object)函数执行判断是否满足。


emf的验证可以采用上述的方式,可以采用较为复杂的形式,即通过select语句执行验证。


EMF查询框架主要由 org.eclipse.emf.query 这个plugin提供,创建并执行一个EMF查询,大概分为如下几步:


1. 创建查询数据源;


2. 构造EObjectCondition查询条件;


(1)用java构造


  (a)继承EObjectCondition,实现isSatistied函数来编写自己的约束。


private static class ProductsLessThan3Condition extends EObjectCondition {


public ProductsLessThan3Condition() {


super(PruneHandler.NEVER);


}


@Override


//代码效果参考:http://www.lyjsj.net.cn/wz/art_24173.html

public boolean isSatisfied(EObject eObject) {

if (eObject instanceof Category) {


Category category = (Category) eObject;


EList products = category.getProducts();


if (products.size() < 3)


return true;


}


return false;


}


}


  (b)利用框架已提供的条件


  EObjectCondition inShopCondition = new IN(categorySet);


(2)用OCL构造


EObjectCondition tolerableRead = new BooleanOCLCondition(


ocl.getEnvironment(),//ocl根环境


"self.category BookCategory::Mystery implies self.pages < 200",//ocl约束


EXTLibraryPackage.Literals.BOOK);//约束上下文


  构造参数中,还可以不指定约束的上下文(即第3个构造参数为null),这样任何EMF实体如果含有category属性都会在该实体类上执行


"self.category BookCategory::Mystery implies self.pages < 200"约束检测。


3. 使用EMF查询框架提供的SELECT对象和UPDATE对象编写查询和更新语句;


statement = new SELECT(new FROM(shop), new WHERE(new ProductsLessThan3Condition()));


4. 执行语句得到查询或更新结果;


  results = statement.execute();


IQueryResult result = new SELECT(//查询结果封装成IQueryResult对象


new FROM(searchScope),


new WHERE(conditions))


.execute();


5. 对执行结果进行检测,确保执行过程中没有发生异常。


for(Object object : results)


{


System.out.println(object);


}


EMF提供了两套Query对象,SELECT和UPDATE,分别用于模型的查询操作和更新操作。


评估:


1.OCL语句可以灵活插入,主体语句放在第二个参数,约束上下文的定义放在第三个参数。因此比较符合可扩展验证的特性。


2.emf的验证如果采用OCL可以不采用select执行的方式,而是擦用condition自带的isSatisfied的方法。找一下OCL有没有?


3.OCL条件的开发需要再学习一下。


4.可以通过模型遍历,然后判断类型,之后分配给对应的satisfied,这个比较适合,需要查看一下输入的模型类型


5.看例子中需要自己构造集合,集合需要什么类型的,如何进行遍历。。。。


6.validation //代码效果参考:http://www.lyjsj.net.cn/wz/art_24171.html

framework能够给定一个root然后进行遍历, 但是在这里,需要自己去找所有的对象集合。

7.在执行约束是就需要能够识别对应的元模型类别,即在编译时已经有所有的元模型类通过编译,而元模型类的导入只能在运行时执行,所以这里需要反射机制?


遍历,构造集合,交给对应的条件的isSatisfied


进一步的OCL开发


下一步:OCL的实例开发

相关文章
|
2天前
|
人工智能 自然语言处理 开发工具
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
Languine 是一款面向开发者的 AI 翻译工具,支持 100+ 种语言,自动化翻译流程,提升多语言应用开发效率。
27 15
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
|
1天前
|
人工智能 API 数据库
Cognita:小白也能搭建 RAG 系统,提供交互界面的开源模块化 RAG 框架,支持多种文档检索技术
Cognita 是一个面向生产环境的开源模块化 RAG 框架,支持本地部署、无代码 UI 和增量索引,帮助开发者轻松构建和扩展生产级应用。
27 11
Cognita:小白也能搭建 RAG 系统,提供交互界面的开源模块化 RAG 框架,支持多种文档检索技术
|
14天前
|
人工智能 Linux API
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
PromptWizard 是微软开源的 AI 提示词自动化优化框架,通过自我演变和自我适应机制,迭代优化提示指令和上下文示例,提升大型语言模型(LLMs)在特定任务中的表现。本文详细介绍了 PromptWizard 的主要功能、技术原理以及如何运行该框架。
102 8
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
可控细节的长文档摘要,探索开源LLM工具与实践
本文通过将文档分为几部分来解决这个问题,然后分段生成摘要。在对大语言模型进行多次查询后,可以重建完整的摘要。通过控制文本块的数量及其大小,我们最终可以控制输出中的细节级别。
|
5月前
|
人工智能 JSON 数据格式
|
8月前
开箱黑盒LLM!谷歌大一统框架Patchscopes实战教程来了
【5月更文挑战第7天】谷歌推出Patchscopes框架,提升大型语言模型(LLM)的可解释性,通过分解LLM为可解释的Patch模型进行调试。本文提供实战教程,介绍如何安装Patchscopes库、加载预训练模型并查看模型解释性报告。虽然优势在于增强理解与问题定位,但Patchscopes适用模型有限,报告理解需专业知识,且计算成本高。[论文链接](https://arxiv.org/pdf/2401.06102.pdf)
88 1
|
8月前
|
机器学习/深度学习 搜索推荐 物联网
微软开源创新LoRA组合方法,增强文生图复杂细节控制
微软研究团队推出Multi-LoRA Composition技术,改善文本到图像模型的细节控制。利用低秩适应(LoRA)提升图像生成精度,通过LORA SWITCH和LORA COMPOSITE解决组合复杂图像的挑战。新方法在ComposLoRA平台上测试,性能优于基线,为图像生成和个性化内容创作开辟新途径。尽管有学习曲线和定制需求优化的问题,但该研究仍为领域带来显著进步。
438 3
微软开源创新LoRA组合方法,增强文生图复杂细节控制
|
8月前
|
机器学习/深度学习 人工智能 JSON
Prompt进阶系列1:LangGPT(从编程语言反思LLM的结构化可复用提示设计框架)
Prompt进阶系列1:LangGPT(从编程语言反思LLM的结构化可复用提示设计框架)
Prompt进阶系列1:LangGPT(从编程语言反思LLM的结构化可复用提示设计框架)
|
8月前
|
JavaScript 小程序
ESCheck工具原理解析及增强实现(1)
前言 2022了,大家做的面向C端的产品(Web,小程序,其它跨端方案),涉及JS产物的还是避不开兼容性的话题(即使IE已官宣停止支持) 但就目前看来这个停止维护还是避免不了大家做开发还是要考虑兼容低端机,甚至IE11
|
8月前
|
JavaScript
ESCheck工具原理解析及增强实现(2)
精简实现的运行结果如下,完整源码见Github

热门文章

最新文章