Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uml 如何根据元模型验证对象图(又称“实例图”)?_Uml_Eclipse Emf_Metamodel_Object Diagram - Fatal编程技术网

Uml 如何根据元模型验证对象图(又称“实例图”)?

Uml 如何根据元模型验证对象图(又称“实例图”)?,uml,eclipse-emf,metamodel,object-diagram,Uml,Eclipse Emf,Metamodel,Object Diagram,我必须开发一个API,将一个元模型(类图)和他的实例(对象图)作为输入,但我不知道如何以编程的方式实现 我做了一些研究,发现我可以使用EMFAPI,但我不知道如何做,也不知道如何在验证之前插入我的图表 我是一个初学者,在互联网上的所有文档之间迷失了方向,所以如果我的主题不清楚,请原谅 我只是需要一些指导,建议我明白我必须做什么 编辑: 主题是根据使用创建的元模型验证实例。所以我必须导出文件(ecore?XMI?我不知道谁是最好的),然后创建一个Java API来解析这两个文件(我还需要弄清楚如何

我必须开发一个API,将一个元模型(类图)和他的实例(对象图)作为输入,但我不知道如何以编程的方式实现

我做了一些研究,发现我可以使用EMFAPI,但我不知道如何做,也不知道如何在验证之前插入我的图表

我是一个初学者,在互联网上的所有文档之间迷失了方向,所以如果我的主题不清楚,请原谅

我只是需要一些指导,建议我明白我必须做什么

编辑
主题是根据使用创建的元模型验证实例。所以我必须导出文件(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的
    电子参考集合
EcoreAPI还提供了使用API创建模型实例的能力。(如果需要,它还将自动生成一个编辑器,供您在EclipseGUI中创建实例)。您还可以读取各种具体语法中的模型实例。如果您正在读取的模型不符合元模型,EMF将引发异常

如果有点长,很抱歉。如果需要,有一篇很好的文章会更详细地介绍一个示例

编辑

对经修正的问题的答复:

主题是根据其元模型验证一个实例,该元模型是 创造了魔术画

好的。我不太了解MagicDraw的导出功能,但如果它可以导出ecore,那么这应该是一个很好的起点:

  • 将类图(“元模型”)导出为ecore并加载到EMF中以创建模型。这应该非常简单
  • 同样地,将对象图导出为ecore和load,让EMF在加载时进行验证。如果您需要添加进一步的验证,@Charles'post提供了指向EMF验证框架的良好链接
如果你有很多工作要做,它可能是值得投资的。它不是最容易访问的,但它确实提供了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);
      }
   }
}