Skip to content

Referenciar UML registrado en Eclipse (evitar uml.ecore)

mayo 15, 2012

Estoy haciendo transformaciones QVT, donde mi metamodelo de entrada es un UML Profile (UDMP), y el metamodelo de salida es otro UML Profile (UTP). Necesito referenciar desde estos metamodelos al metamodelo de UML (por definición digamos que es algo necesario), pero si para crear estos profiles (o sea, los archivos .ecore) seguía los pasos que venía siguiendo estaba generando un problema, que es que se creaban al mismo tiempo los archivos uml.ecore y ecore.ecore, los cuales eran referenciados desde mis utp.ecore y udmp.ecore que quería usar. El problema principal es que ese uml.ecore es una versión simplificada y menos completa (aparentemente), ya que las operaciones OCL que necesitaba no estaban funcionando. A su vez tengo otro problema hace rato que también le di solución con esto que voy a explicar ahora.

Veamos por ejemplo el archivo utp.ecore, pero es lo mismo en el udmp.ecore, hice lo mismo para ambos y funcionó. Yo lo que quería es que en lugar de usar ese uml local, usen el que se registra en Eclipse al instalar UML2 SDK. Este está en este namespace: http://www.eclipse.org/uml2/3.0.0/UML

Originalmente el archivo se veía así:

<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
 xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="utp"
 nsURI="http:///utp.ecore" nsPrefix="utp">
 <eClassifiers xsi:type="ecore:EClass" name="TestComponent">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_StructuredClassifier"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//StructuredClassifier"/>
 <eStructuralFeatures xsi:type="ecore:EAttribute" name="zone" ordered="false" eType="#//Timezone"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EDataType" name="Timezone" instanceClassName="Timezone"/>
 <eClassifiers xsi:type="ecore:EClass" name="TestContext">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_StructuredClassifier"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//StructuredClassifier"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="arbiter" ordered="false"
 lowerBound="1" eType="#//Arbiter"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_BehavioredClassifier"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//BehavioredClassifier"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="Arbiter" abstract="true" interface="true">
 <eOperations name="setVerdict" ordered="false" lowerBound="1">
 <eParameters name="v" ordered="false" lowerBound="1" eType="#//Verdict"/>
 </eOperations>
 <eOperations name="getVerdict" ordered="false" lowerBound="1" eType="#//Verdict"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EEnum" name="Verdict">
 <eLiterals name="none"/>
 <eLiterals name="pass" value="1"/>
 <eLiterals name="inconclusive" value="2"/>
 <eLiterals name="fail" value="3"/>
 <eLiterals name="error" value="4"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="Timer" abstract="true" interface="true">
 <eOperations name="start" ordered="false" lowerBound="1">
 <eParameters name="expire" ordered="false" lowerBound="1" eType="#//Time"/>
 </eOperations>
 <eOperations name="stop" ordered="false" lowerBound="1"/>
 <eOperations name="read" ordered="false" lowerBound="1" eType="#//Time"/>
 <eStructuralFeatures xsi:type="ecore:EAttribute" name="isRunning" ordered="false"
 lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
 changeable="false"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EDataType" name="Time" instanceClassName="Time"/>
 <eClassifiers xsi:type="ecore:EDataType" name="Duration" instanceClassName="Duration"/>
 <eClassifiers xsi:type="ecore:EClass" name="TestCase">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Behavior" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Behavior"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Operation" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Operation"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TestObjective">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Dependency" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Dependency"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="Default">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Behavior" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Behavior"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="DefaultApplication">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Dependency" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Dependency"/>
 <eStructuralFeatures xsi:type="ecore:EAttribute" name="repetition" ordered="false"
 lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
 defaultValueLiteral="-1"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="ValidationAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_CallOperationAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//CallOperationAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="LogAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_SendObjectAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//SendObjectAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="FinishAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_OpaqueAction" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//OpaqueAction"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_InvocationAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//InvocationAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TestLog">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Behavior" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Behavior"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TestLogApplication">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Dependency" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Dependency"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="CodingRule">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_ValueSpecification"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//ValueSpecification"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Namespace" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Namespace"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Property"/>
 <eStructuralFeatures xsi:type="ecore:EAttribute" name="coding" ordered="false"
 lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="LiteralAny">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_LiteralSpecification"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//LiteralSpecification"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="LiteralAnyOrNull">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_LiteralSpecification"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//LiteralSpecification"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="DataPool">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Classifier" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Classifier"/>
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Property"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="DataPartition">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Classifier" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Classifier"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="DataSelector">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Operation" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Operation"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TimeOut">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_TimeEvent" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//TimeEvent"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TimeOutMessage">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Message" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Message"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TimeOutAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_AcceptEventAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//AcceptEventAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="StartTimerAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_CallOperationAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//CallOperationAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="StopTimerAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_CallOperationAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//CallOperationAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="ReadTimerAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_CallOperationAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//CallOperationAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="TimerRunningAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_ReadStructuralFeatureAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//ReadStructuralFeatureAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="GetTimezoneAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_ReadStructuralFeatureAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//ReadStructuralFeatureAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="SetTimezoneAction">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_WriteStructuralFeatureAction"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//WriteStructuralFeatureAction"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="DetermAlt">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_CombinedFragment"
 ordered="false" lowerBound="1" eType="ecore:EClass uml.ecore#//CombinedFragment"/>
 </eClassifiers>
 <eClassifiers xsi:type="ecore:EClass" name="SUT">
 <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
 lowerBound="1" eType="ecore:EClass uml.ecore#//Property"/>
 </eClassifiers>
</ecore:EPackage>

Observar las referencias a uml.ecore. Estas las sustituí por la URL deseada, y con eso fue suficiente (o al menos por ahora me está funcionando la transformación QVT y me está ejecutando las operaciones OCL que necesito para poder encontrar los elementos estereotipados).

Dejo aquí el archivo UTP.ECORE y el UDMP.ECORE que me están funcionando.

Anuncios

From → Eclipse, Estándares, QVT, UML

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: