PyEmofUC

Formato XMI de serialización de modelos

J.M. Drake, P. López Martínez y C. Cuevas

Grupo de Ingeniería Software y Tiempo Real (ISTR) - Universidad de Cantabria

Tabla de Contenidos

Especificación XMI

La especificación XMI ha sido propuesta por OMG a fin de estandarizar el intercambio de datos y el almacenamiento persistente en ficheros y se formaliza a través de del W3C-Schema XMI.xsd.

En el entono PyEmofUC se utiliza la formulación XMI de un modelo en dos casos:

La representación textual XMI utiliza texto etiquetado XML y sobre él incorpora ciertas restricciones y extensiones para estandarizar su formulación entre entornos UML.

Los aspectos fundamentales especificados por el formato XMI son:


Especificación XMI específica de PyEmofUC

Estructura: Aunque XMI restringe mucho la estructura y los recursos para codificar la información de modelos, dejan abiertas muchas opciones para acoger las estrategias de diferentes diseñadores de entornos.
En PyEmofUC se han adoptado las siguientes características para la codificación textual de los modelos y metamodelos:

Elemento principal de un metamodelo

<?xml version="1.0" encoding="UTF-8"?>

<emof:METAMODEL date="2015-03-06"

             uri="http://unican.es/istr/PyEmofUC/CountyCity/County"

             mmUrl="http://unican.es/istr/PyEmofUC/EmofUC.xmi"

             importedUrls="platform:CountyCity/City.xmi"

             nsPrefix="cnty"

             rootType="cnty.County"

             xmlns:xmi="http://www.omg.org/XMI"

             xmlns:emof="http://unican.es/istr/PyEmofUC/EmofUC"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://unican.es/istr/PyEmofUC/EmofUC ..\EMOF.xsd">

             <rootPackage name="rootPackage" . . . .

             . . . . .

             </rootPackage>

</emof:METAMODEL>

Elemento principal de un modelo

<?xml version="1.0" encoding="UTF-8"?>

<cty:MODEL date="2013-03-07T20:34:18"

             uri="http://unican.es/istr/PyEmofUC/CountyCity/EagleCity"

             mmUrl="platform:CountyCity/City.xmi"

             importedUrls="platform:CountyCity/EagleCounty.xmi"

             nsPrefix="ecty"

             xmlns:xmi="http://www.omg.org/XMI"

             xmlns:cty="http://unican.es/istr/PyEmofUC/CountyCity/City"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://unican.es/istr/PyEmofUC/CountyCity/City City.xsd">

             <rootPackage . . . .

              . . . .

             </rootPackage>

</cty:MODEL>



<company xmi:id="ecty.AbbyBank" xsi:type="cty:Company" . . . >

                <employ . . .  />

                . . . .

</company>

Formulación de las referencias: En la formulación XMI, las referencias a elementos del mismo modelo o de otros modelos utilizan la sintaxis genérica definida para los  Uniform Resource Identifier (URI). Sin embargo, la conveniencia de unificar estas referencia con otros estandares como XLink, sin duplicar la información, ha hecho que en función del atributo se utilicen diferentes esquemas de referencias:

Schemas

Todos los ficheros xmi que definen modelos o metamodelos dentro del entorno PyEmofUC tienen definidos el correspondiente W3C-Schema que define su contenido y su formato:

El objetivo del schema en PyEmof es servir de ayuda para que el operador cree o edite los modelos conformes a él en base a un editor XML. Por ello su formulación es laxa y utiliza los siguientes criterios:
  1. Los nombres de los elementos, de los elementos anidados y de los atributos son los definidos para el correspondiente elemento en el metamodelo.
  2. Los elementos anidados se introducen en cualquier orden.
  3. Los atributos derivados no se incluyen.
  4. Los atributos xmi:id y xsi:type son obligatorios en todos los elementos.
  5. Los tipos de los atributos se definen siempre como un xsd:string.
  6. El tipo de las referencias a otros elementos es xsd:anyURI.

En las dos columnas de la siguiente tabla se muestra como ejemplo un metamodelo y el correspondiente schema que genera el entono.

<?xml version="1.0" encoding="UTF-8"?>

<emof:METAMODEL date="2015-03-06"

      uri="http://unican.es/istr/PyEmofUC/CountyCity/City"

      mmUrl="http://unican.es/istr/PyEmofUC/EmofUC.xmi"

      importedUrls="platform:CountyCity/County.xmi"

      nsPrefix="cty"

      rootType="#cty.CompanyDirectory"

      xmlns:xmi="http://www.omg.org/XMI"

      xmlns:emof="http://unican.es/istr/PyEmofUC/EmofUC"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://unican.es/.../EmofUC ..\EMOF.xsd">            

      <rootPackage name="rootPackage"

            xmi:id="cty.rootPacage"

            xsi:type="emof:Package">

             <ownedType name="CompanyDirectory"

                  xmi:id="cty.CompanyDirectory"

                  xsi:type="emof:Class"

                  superclass="emof#emof.Object">

                   <ownedAttribute name="company"

                        xmi:id="cty.CompanyDirectory.company"

                        xsi:type="emof:Property"

                        theType="#cty.Company"

                        isComposite="True"

                        upper="*"/>

             </ownedType>

             <ownedType name="Company"

                  xmi:id="cty.Company"

                  xsi:type="emof:Class"

                  superclass="emof#emof.Object">

                   <ownedAttribute name="name"

                        xmi:id="cty.Company.name"

                        xsi:type="emof:Property"

                        theType="emof#emof.PyString"/>

                   <ownedAttribute name="employ"

                        xmi:id="cty.Company.employ"

                        xsi:type="emof:Property"

                        theType="#cty.Employ"

                        isComposite="True"

                        lower='0'

                        upper="*"

                        opposite="#cty.Employ.employer"/>

             </ownedType>

            

             <ownedType name="Employ"

                  xmi:id="cty.Employ"

                  xsi:type="emof:Class"

                  superclass="emof#emof.Object">

                   <ownedAttribute name="name"

                        xmi:id="cty.Employ.name"

                        xsi:type="emof:Property"

                        theType="emof#emof.PyString"/>

                   <ownedAttribute name="salary"

                        xmi:id="cty.Employ.salary"

                        xsi:type="emof:Property"

                        theType="emof#emof.PyReal"

                        default="0.0"/>

                   <ownedAttribute name="employer"

                        xmi:id="cty.Employ.employer"

                        xsi:type="emof:Property"

                        theType="#cty.Company"

                        opposite="#cty.Company.employ"/>

                   <ownedAttribute name="worker"

                        xmi:id="cty.Employ.worker"

                        xsi:type="emof:Property"

                        theType="cnty#cnty.Adult"

                        opposite="cnty#cnty.Adult.job"/>

             </ownedType>

      </rootPackage>

</emof:METAMODEL>

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

      xmlns:cty="http://unican.es/istr/PyEmofUC/CountyCity/City"

      xmlns:xmi=http://www.omg.org/XMI

      xmlns:emof=http://unican.es/istr/PyEmofUC/EmofUC

      targetNamespace="http://unican.es/istr/PyEmofUC/CountyCity/City">

      <xsd:import namespace=http://www.omg.org/XMI

            schemaLocation="../XMI.xsd"/>

      <xsd:import namespace=http://unican.es/istr/PyEmofUC/EmofUC

            schemaLocation="../EMOF.xsd"/>

      <xsd:complexType name="CompanyDirectory">

             <xsd:complexContent>

                   <xsd:extension base="emof:PyEmofObject">

                         <xsd:sequence>

                                <xsd:element name="company"

                                     type="cty:Company"

                                    maxOccurs="unbounded"/>

                         </xsd:sequence>

                   </xsd:extension>

             </xsd:complexContent>

      </xsd:complexType>

      <xsd:complexType name="Company">

             <xsd:complexContent>

                   <xsd:extension base="emof:PyEmofObject">

                         <xsd:sequence>

                                <xsd:element name="employ"

                                    type="cty:Employ"

                                    minOccurs="0"

                                    maxOccurs="unbounded"/>

                         </xsd:sequence>

                         <xsd:attribute name="name"

                              type="xsd:string"

                              use="required"/>

                   </xsd:extension>

             </xsd:complexContent>

      </xsd:complexType>

      <xsd:complexType name="Employ">

             <xsd:complexContent>

                   <xsd:extension base="emof:PyEmofObject">

                         <xsd:attribute name="name"

                              type="xsd:string"

                              use="required"/>

                         <xsd:attribute name="salary"

                              type="xsd:float"        

                              use="optional"

                              default="0.0"/>

                         <xsd:attribute name="employer"

                              type="xsd:anyURI"

                              use="optional"/>

                         <xsd:attribute name="worker"

                              type="xsd:anyURI"

                              use="required"/>

                   </xsd:extension>

             </xsd:complexContent>

      </xsd:complexType>

      <!-- ROOT ELEMENT -->

      <xsd:element name="MODEL">

             <xsd:complexType>

                   <xsd:complexContent>

                         <xsd:extension base="emof:Model">

                                <xsd:sequence>

                                      <xsd:element name="rootPackage"

                                          type="cty:CompanyDirectory"

                                          maxOccurs="unbounded"/>

                                </xsd:sequence>

                         </xsd:extension>

                   </xsd:complexContent>

             </xsd:complexType>

      </xsd:element>

</xsd:schema>


Documentos

Enlaces de interés