`
yiliner
  • 浏览: 213087 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XSD to Ecore connection Mapping

    博客分类:
  • EMF
阅读更多

XSD to Ecore connection Mapping

关键字: xsd emf ecore

在MBI的intern主题就是做关于Model driven的工作,其中大部分是插件、rcp的开发,用的技术也主要是EMF,GEF和GMF。其中,EMF是基础,领域模型总是要放在最前面。EMF的对建模提供了好几种方式,用UML工具、java annotation,xmi,xsd等。当然,用UML工具,如EclipseUML是最方便的了。可是如果应用要涉及到xml的话,还是用xml schema吧,而且xml schema也是比较简单的。

     虽然xsd的学习成本不大,不过对于xsd和ecore的映射问题,我感觉还是有必要学一下。因为用xsd gen ecore的话,为了得到一个比较满意的ecore,就要用一些ecore的标签。如果想详细了解xsd 的ecore标签,google一下“XML Schema to Ecore Mapping”,介绍的比较详细,我这里只想介绍一点关于connection的知识。

     实际上,从xsd到ecore,大部分的映射还是比较简单的。像直接就映射成EClass了,映射成EAttribute。当然,还可以用还多的限定,这里不说了,还是说说关于connection的东西吧。所谓connection,就是面向对象里的关联,聚集之类的概念。

(1)聚集 

A类里有个属性名为container的Elist(注意,如果使用在UML建模的话,以EclipseUML为例,建立关系的时候,要把Property中的Containment设为true)。在xsd里,如何表达这种关系呢。如下:

xml 代码
  1. <xsd:complexType name="A">  
  2.         <xsd:sequence>  
  3.             <xsd:element maxOccurs="unbounded" minOccurs="0"  
  4.                 name="container" type="demo:B" />  
  5.         xsd:sequence>  
  6.     xsd:complexType>  
  7.        
  8.     <xsd:complexType name="B">  
  9.     xsd:complexType>  

和普通的xsd定义没什么区别。

(2)关联

 

对于这种方式的联系,EClass会有EReference生成,EReference是non-containment的,所以就不用设置Containment属性了(默认为false)。xsd定义如下:

xml 代码
  1. <xsd:complexType name="C">  
  2.         <xsd:attribute ecore:reference="demo:D" type="xsd:IDREFS"    
  3.             name="container"/>  
  4.     xsd:complexType>  
  5.        
  6.     <xsd:complexType name="D">  
  7.     xsd:complexType>  

可以看到ecore:reference标签的使用,它会生成一个属性为container的Elist。type="xsd:IDREFS"表明0..*。如果type="xsd:anyURI",则为0..1;type="xsd:IDREF"也为0..1。type="xsd:anyURI"使用了代理,可以关联到不同文档中的其他模型。

双向关联

在这种双向关联中,如果使用EclipseUML,在生成的ecore模型中,C中会有一个名称为ds的Elist,D中会有一个名称为cs的Elist。xsd定义如下:

xml 代码
  1. <xsd:complexType name="C">  
  2.         <xsd:attribute ecore:reference="demo:D" type="xsd:IDREF"    
  3.             name="ds" ecore:opposite="cs"/>  
  4.     xsd:complexType>  
  5.        
  6.     <xsd:complexType name="D">  
  7.         <xsd:attribute ecore:reference="demo:C"    
  8.             name="cs" ecore:opposite="ds">  
  9.             <xsd:simpleType>  
  10.                 <xsd:list itemType="xsd:anyURI" />  
  11.             xsd:simpleType>  
  12.         xsd:attribute>  
  13.     xsd:complexType>  

可以看出,比较单向关联,双向关联增加了属性。当然,EMF并没有硬性的要求这样做,也就是说,在C和D的xsd定义中,属性是可选的,不过还是建议带上它。

最后要说明一些在用xsd建模时需要注意的一些问题:

一般情况下,使用GMF是为了开发工具(这种活在MBI很是常见),所以最后的应用就是带一个pallete,还有一些node啊,edge啊之类的东西。所以在使用xsd建立模型的时候,要注意一些ecore标签的使用。例如,如果将来需要生成一个从C到D的edge边,就像上例那样,那么一定要在xsd中使用标签,否则会出问题。如果不需要拖拽一天edeg来建立两个node之间的联系,那么标签就无所谓了。通俗点说,如果想通过在将来的pallete里拖拽edge来建立两个node之间的联系的话,在定义xsd时,就要使用<xsd:reference>标签。

从我个人来讲,比起EclipseUML,我更喜欢直接定义xsd,再gen model。这样在将来的应用中可以更方便的处理xml了。不过这样也会要缺点,尤其是在用到GMF时,可能会产生一些error。

分享到:
评论

相关推荐

    XML Schema to Ecore Mapping

    当从XML Schema导入EMF模型时,EMF框架会根据预定义的规则将XSD元素转换成相应的Ecore元素。以下是一些重要的映射规则: **1. 简单类型(Simple Types)到EDataType的映射** - 对于XML Schema中的简单类型,EMF将其...

    xsd生成xml工具

    在IT行业中,XML(eXtensible Markup Language)是一种用于标记数据的标准格式,而XSD(XML Schema Definition)则是用于定义XML文档结构和数据类型的规范。"xsd生成xml工具"是一个实用程序,它允许开发者根据XSD...

    xsd文件 xsd1.4,xsd2.0,xsd3.0

    XML Schema Definition (XSD) 文件是用于定义XML文档结构和数据类型的规范。XSD1.4、XSD2.0 和 XSD3.0 是XML Schema语言的不同版本,它们为XML文档提供了严谨的验证框架,确保数据的一致性和正确性。 ### XSD1.4 ...

    XSD Developer Guide

    - `org.eclipse.emf.mapping.xsd2ecore`: 用于将XSD转换为EMF模型。 - `org.eclipse.xsd.ecore`: 包含与XSD模式相关的ECORE元模型。 - `org.eclipse.xsd`: 提供了与XSD模式解析相关的类和接口。 - `org.eclipse....

    XSD使用dom4j校验XML

    SchemaFactory schemaFactory = DocumentHelper.createSchema(new File("path_to_xsd_file.xsd")); ``` 2. 创建Schema对象:有了SchemaFactory,我们可以创建一个Schema对象,它代表了XSD文件定义的验证规则。 ```...

    xml文件转xsd文件

    XSD(XML Schema Definition)文件则是一种规范,用于定义XML文档的结构和数据类型,为XML提供了形式化的语法规则。将XML文件转换为XSD文件,主要是为了更好地管理和验证XML文档的结构,确保数据的一致性和准确性,...

    cxf.apache.org/schemas/(jaxrs.xsd、jaxrs.xsd、core.xsd)文件下载

    在描述中提到的`jaxrs.xsd`、`jaxrs.xsd`和`core.xsd`是XML Schema Definition (XSD)文件,它们定义了CXF中JAX-RS相关元素的结构和约束。这些XSD文件对于理解CXF配置文件的结构至关重要,因为它们包含了所有可用的...

    xml_to_xsd

    "xml_to_xsd"是一个工具或过程,它的目的是根据已经存在的XML文件生成相应的XSD文件。这个过程通常包括以下几个步骤: 1. **理解XML结构**:首先,需要分析XML文件的结构,包括元素、属性、命名空间等。每个元素、...

    XML转XSD\DTD工具

    XML转XSD\DTD工具 W3C XML Schema XSD 工具

    根据XML生成xsd

    XML生成XSD xml生成xsd 生成xsd工具 工具 使用方法: java -jar trang.jar xml文件绝对路径 要生成的xsd文件绝对路径 例如在当前目录有文件aaa.xml,需要生成xsd文件名为aaa,并存放在当前目录: java -jar trang....

    dubbo.xsd文件下载

    - schema_reference.4: Failed to read schema document 'http:// code.alibabatech.com/schema/dubbo/dubbo.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root ...

    xsd解析实例创建表结构

    在IT行业中,XML Schema Definition(XSD)是一种用于定义XML文档结构和数据类型的规范。它为XML文件提供了严格的语法规则,确保了数据的一致性和有效性。本篇将深入探讨如何利用XSD解析实例来创建数据库表结构。 ...

    xml生成xsd工具

    xml生成xsd 使用方法:java -jar trang.jar EchoRequest.xml EchoRequest.xsd

    dubbo xsd

    《Dubbo XSD详解——构建高效微服务架构的关键》 在现代企业级应用开发中,分布式服务框架Dubbo扮演了至关重要的角色。Dubbo XSD是Dubbo框架的一部分,它是XML Schema Definition的缩写,主要用于定义XML文档的结构...

    dubbo xsd的支持

    "dubbo.xsd"文件是Dubbo框架中用于XML配置文件解析的重要组成部分,本文将深入探讨其作用和相关知识点。 首先,xsd(XML Schema Definition)文件是XML的一种规范,用于定义XML文档的结构和数据类型。在Java世界中...

    java生成xsd,xml示例

    在Java开发中,XML(可扩展标记语言)和XSD(XML Schema定义)是常见的数据交换格式和技术。XML用于结构化数据的存储和传输,而XSD则为XML文档提供了语义验证的规则。本教程将详细介绍如何在Java环境中生成XML和XSD...

    xsd转换成java对象

    10. **工具选择**:除了JAXB,还有其他的库和工具可以进行XSD到Java的转换,如Apache CXF、Eclipse的XSD to Java插件等,它们各有特点,适用于不同的开发环境和需求。 总的来说,将XSD转换成Java对象是提升开发效率...

    dubbo的.xsd文件分享

    《Dubbo的.xsd文件详解》 Dubbo作为一款高性能、轻量级的Java开源服务框架,其在设计和实现过程中广泛使用了XML Schema(简称XSD)来定义服务接口和配置规范。XSD文件是XML文档的模式定义,它为XML提供了结构约束和...

    xsd生成javaBean

    java -jar castor-compiler.jar -xml schema.xsd -src /path/to/your/source/directory ``` 4. **生成的JavaBean**:执行上述命令后,Castor会在指定的源代码目录下生成对应的JavaBean类。这些类包含了根据XSD...

    xsd可视化操作

    XML Schema Definition (XSD) 是一种用于定义XML文档结构的语言,它规范了XML文档的元素、属性、数据类型以及它们之间的关系。XSD可视化操作是将这些复杂的XSD定义通过图形化界面展示出来,以便于开发者更好地理解和...

Global site tag (gtag.js) - Google Analytics