Uml 如何根据元模型验证对象图(又称“实例图”)?
我必须开发一个API,将一个元模型(类图)和他的实例(对象图)作为输入,但我不知道如何以编程的方式实现 我做了一些研究,发现我可以使用EMFAPI,但我不知道如何做,也不知道如何在验证之前插入我的图表 我是一个初学者,在互联网上的所有文档之间迷失了方向,所以如果我的主题不清楚,请原谅 我只是需要一些指导,建议我明白我必须做什么 编辑:Uml 如何根据元模型验证对象图(又称“实例图”)?,uml,eclipse-emf,metamodel,object-diagram,Uml,Eclipse Emf,Metamodel,Object Diagram,我必须开发一个API,将一个元模型(类图)和他的实例(对象图)作为输入,但我不知道如何以编程的方式实现 我做了一些研究,发现我可以使用EMFAPI,但我不知道如何做,也不知道如何在验证之前插入我的图表 我是一个初学者,在互联网上的所有文档之间迷失了方向,所以如果我的主题不清楚,请原谅 我只是需要一些指导,建议我明白我必须做什么 编辑: 主题是根据使用创建的元模型验证实例。所以我必须导出文件(ecore?XMI?我不知道谁是最好的),然后创建一个Java API来解析这两个文件(我还需要弄清楚如何
主题是根据使用创建的元模型验证实例。所以我必须导出文件(ecore?XMI?我不知道谁是最好的),然后创建一个Java API来解析这两个文件(我还需要弄清楚如何注入/导入它们),并返回一个关于验证的布尔值。这是第一步,之后我想我会添加OCL约束来验证实例,但现在我需要关注一个简单的验证。如果需要,我如何使用EMF或其他工具来实现这一点您的问题可以从两个层面得到回答:概念层面和实施层面。我不确定你在寻求哪方面的帮助,所以我会尽量涵盖这两个方面。如果其中一个是多余的(希望不是两个都是!),就道歉 首先:对于您给出的示例,将类图称为“模型”,将对象图称为该模型的实例更为正常。严格地说,“元模型”用来描述模型,而模型又有实例。我将继续使用下面的术语,但可能值得注意 概念层面 “概念”指的是回答“根据元模型验证模型意味着什么”的问题 答案很简单。元模型是一个模式或一组规则,用于定义有效模型的组成部分。xml提供了一个很好的示例。xml模式定义了某些主题的结构和规则:允许哪些类型,可以具有哪些属性,一个属性是否可以具有多个值,以及可能的值集ues属性可以保存。以此类推。如果xml文档不违反模式中定义的任何规则,则xml文档符合模式 推广到模型:一个模型在不违反元模型中定义的任何规则的情况下(且仅当)符合其元模型 实施级别 您没有详细说明“API”的用途。可能您最简单的解决方案就是使用xml:然后元模型就是xml模式,模型就是与这些模式兼容的xml文档。然后,您的“实现”只需要从众多验证xml解析器库中选择一个,并从客户端调用它代码 不过,您提到了EMF,所以可能需要使用它。为了简化问题,假设我们要定义一个元模型,如下所示:
Class Dog {
name: String
gender: String
owner: Person
}
Class Person {
name: String
address: Address
dogs: Set<Dog>
}
类狗{
名称:String
性别:字符串
业主:人
}
班主任{
名称:String
地址:地址
狗:设定
}
EMF提供了一个用于定义此类内容的API-the-将其视为java的反射API。您可以通过创建eCore API的实例(以编程方式或通过其中一个编辑器)来定义元模型。因此,您可以创建:
EClass的两个实例(一个用于人,一个用于狗)
的六个实例(每个属性一个)EAttribute
- Class.owner的
,Person.dogs的电子参考
电子参考集合
- 将类图(“元模型”)导出为ecore并加载到EMF中以创建模型。这应该非常简单
- 同样地,将对象图导出为ecore和load,让EMF在加载时进行验证。如果您需要添加进一步的验证,@Charles'post提供了指向EMF验证框架的良好链接
hth.您的问题可以从两个层面得到回答:概念层面和实施层面。我不确定您在寻求哪方面的帮助,因此我将尝试涵盖这两个方面。如果其中一个是多余的(希望不是两个!),请道歉 首先:对于您给出的示例,将类图称为“模型”,将对象图称为该模型的实例更为正常。严格地说,“元模型”用于描述依次具有实例的模型。我将继续使用下面的术语,但可能值得注意 概念层面 “概念”指的是回答“根据元模型验证模型意味着什么”的问题 答案很简单。元模型是一个模式或一组规则,用于定义构成有效模型的内容。xml提供了一个很好的例子。xml模式定义了一些主题的结构和规则:允许什么类型,什么类型
public class MyConstraint extends AbstractModelConstraint{
@Override
public IStatus validate(IValidationContext ctx) {
try{
//Get the object that will be validated
Object obj = ctx.getTarget();
//Here you can run you validation
//Create Validation Status
return validationStatus
} catch (Exception e) {
return ctx.createFailureStatus(e);
}
}
}