<?xml version="1.0"?>
 <rss version="2.0">
  <channel>
    <title>AMW News</title>
    <link>http://www.eclipse.org/gmt/amw/</link>
    <description>AMW News</description>


<item>
		<title>Changes in the structure of AMW</title>
		<description>
					The AMW component has been restructured, which means a couple of links have been changed. 					
					<p/>
					The CVS is no longer available. The new sources will be committed soon under <a href="http://dev.eclipse.org/viewsvn/index.cgi/?root=Modeling_AMW">SVN</a>.  
					<p/> The newsgroup has changed to  <a href="news://news.eclipse.org/eclipse.amw">news://news.eclipse.org/eclipse.amw</a>.
										
		</description>
		<pubDate>Wed, 17 Sep 2008 18:30:00 CET</pubDate>
	</item>
	
	<item>
		<title>New AMW Use case : interoperability between architectural notations</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/dually/</link>
		<description>
					Nowadays different notations for architectural modeling
					have been proposed, each one focusing on a specific application
					domain, analysis type, or modeling environment. No
					effective interoperability is possible to date.
					<a href="http://www.di.univaq.it/pellicci/dually/"><b>D</b>U<b>AL</b>LY</a> is an automated framework that aims to offer
					an answer to this need allowing both languages
					and tools interoperability. <a href="http://www.di.univaq.it/pellicci/dually/"><b>D</b>U<b>AL</b>LY</a> has been implemented
					as an Eclipse plugin that extends AMW and it is based on model transformation
					techniques (ATL). This use case shows the DUALLy
					approach to achieve interoperability between 
					two outstanding architectural notations, Darwin and Acme.		
		</description>
		<pubDate>Tue, 27 May 2008 18:30:00 CET</pubDate>
	</item>
	
	<item>
		<title>The sources of AMW have been updated</title>
      	<link>http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/AMW/</link>
		<description>
			The sources of AMW have been updated to be compatible with the latest ATL, EMF and Eclipse releases (3.4M5)
		</description>
		<pubDate>Fri, 04 Apr 2008 16:30:00 CET</pubDate>
	</item>
	
	<item>
		<title>New use case available : Modeling Web applications</title>
      	<link>http://www.eclipse.org/m2m/atl/usecases/webapp.modeling/</link>
		<description>
			This use case shows how model weaving is used to help in the development of model transformations. In some cases, the gap between the input and output metamodels makes it 
			difficult to develop a model transformation that works for every input model. In such cases a weaving model can be used to enrich the input model by annotation. This process 
			can be thought of as a way to parameterize the model transformation.
		</description>
		<pubDate>Fri, 5 Oct 2007 16:50:00 CET</pubDate>
	</item>

	<item>
		<title>AMW is now compatible with Eclipse 3.3 and the latest versions of ATL and AM3</title>
      	<link>http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/AMW/</link>
		<description>
				The sources of AMW have been updated to be compatible with Eclipse 3.3, EMF 2.3 and the latest
				versions of ATL and AM3 plug-ins.
				A binary release will be available soon.
		</description>
		<pubDate>Mon, 24 Sep 2007 16:30:00 CET</pubDate>
	</item>


	<item>
		<title>New use case available : comparison of large metamodels for Automotive Systems</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/autosar/</link>
		<description>
			This use case follows the approach of the use case (Metamodel comparison and model migration) in order to show how 
			model weaving can be used to compare two versions of a very large metamodel used in Automotive Systems.	
		</description>
		<pubDate>Tue, 18 Sep 2007 15:30:00 CET</pubDate>
	</item>


	<item>
		<title>New use case available : variability management in software product line</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/variability/</link>
		<description>
				This use case illustrates an approach to manage variability in a Model-Driven Software Product Line. 
			The approach proposes the generation of different applications from metamodels, feature models, weaving models, 
			and special transformation rules. The proposal was developed by the 
			<a href=" http://agamenon.uniandes.edu.co/~csw">Software Construction Group</a> of The University of 
			Los Andes (Colombia). The use case provides an example, publication and user guide.	
		</description>
		<pubDate>Tue, 21 Aug 2007 11:00:00 CET</pubDate>
	</item>

    <item>
    
    
    
		<title>July 13th, 2007 - Free tutorial - "Practice of model transformation and model weaving with ATL, AMW, and TCS"</title>
		<description>
			<p align="justify">
				The INRIA ATLAS team organizes in Nantes (France) a day essentially dedicated to the practice of model transformation (ATL) and model weaving (AMW) tools. This day is intended for 
				ATL and AMW beginners who want to improve their knowledge in the domain. The tools are available in open source under Eclipse and a previous minimal experience with ATL is 
				recommended.
			</p>
			<p align="justify">
				The participation to this day is free of charge but the inscription is mandatory. The number of available places being limited (~15), the inscription's requests will be 
				treated depending on their arrival order.
			</p>

			<p align="justify">
				The tutorial takes place the 13th of July 2007, from 9h to 12h and from 14h to 18h. The inscription's requests have to be sent as soon as possible to Hugo Bruneliere
				(Hugo DOT Bruneliere AT univ-nantes DOT fr).
			</p>

			<p align="justify">
				Please provide us in your request the basic information such as your name, company, phone number, etc. According to the number of available places, an answer will be sent 
				to you including more details concerning the course of the day.
			</p>

			<p align="justify">
				The tutorials will be either in French or in English, depending on the audience. All the slides will be in English and will be provided to the participants at the 
				beginning of the day (slides non-available outside of the tutorial).
			</p>

			<p align="justify">
				The goal of this day is to provide a practical point of view on Model-Driven Engineering (MDE). By following numerous examples and use cases, you will discover how to:
				<ul>
					<li>Refine models in order to target a specific execution platform;</li>
					<li>Make tools and norms interoperable;</li>
					<li>Build, at low cost, domain-specific languages (DSLs);</li>
					<li>Define chains of transformations and integrate them in a workflow.</li>
				</ul>
			</p>

			<p align="justify">
				Each of these points will use on or several tools of the Atlas Model Management Architecture (AMMA) tool suite, with in particular:
				<ul>
					<li>Atlas Transformation Language (ATL): a model transformation language and engine;</li>
					<li>Kernel MetaMetaModel (KM3): a metamodel definition language;</li>
					<li>Atlas Model Weaver (AMW): a model weaving prototype for interoperability and traceability;</li>
					<li>Textual Concrete Syntax (TCS): a model textual syntaxes definition language;</li>
					<li>Atlas MegaModel Management (AM3): a modeling artifact management prototype in order to facilitate the model-driven development (collaboration, distribution, etc).</li>
				</ul>
			</p>

			<p align="justify">
				All these tools are available from the Eclipse foundation website (http://www.eclipse.org ). ATL is a component of the model-to-model transformation project (M2M).The others 
				are available as components of the GMT project. GMT has the goal to provide an incubation area for innovative projects related to model engineering. M2M and GMT are parts of 
				the top-level modeling project gathering the model engineering activities of the Eclipse foundation.
			</p>

			<p align="justify">
				Reference: 
				<ul>
					<li><a href="http://www.eclipse.org/m2m/atl/">http://www.eclipse.org/m2m/atl/</a></li>
					<li><a href="http://www.eclipse.org/gmt/amw/">http://www.eclipse.org/gmt/amw/</a></li>
					<li><a href="http://www.eclipse.org/gmt/am3/">http://www.eclipse.org/gmt/am3/</a></li>
					<li><a href="http://www.eclipse.org/gmt/tcs/">http://www.eclipse.org/gmt/tcs/</a></li>
				</ul>
			</p>
		</description>
		<pubDate>Thu, 5 July 2007 12:00:00 CET</pubDate>
	</item>

 	<item>
		<title>New use case available : inverting metamodel mappings</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/inverse/</link>
		<description>
			The objective of this use case is to show that AMW can easily support the process of inverse mapping generation. 
			Inversing of mappings is on of the most important model management operators. 
			Informally speaking, the operator puts back a given mapping of metamodels. 
			The operator has multiple practical applications. 
			This use case describes an application of inverses using a Sales Force Automation Systems.
		</description>
		<pubDate>Fri, 15 Jun 2007 12:00:00 CET</pubDate>
	</item>


 	<item>
		<title>Major updates on the AMW sources</title>
      	<link>http://www.eclipse.org/gmt/amw/download/</link>
		<description>
			The <a href="http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/AMW/">sources of AMW</a> were updated to 
			be compatible with the migration of the ATL CVS from GMT into M2M. A binary release with these sources will be provided soon.
			<p/>
			The code was also refactored to completely separate the core plug-in (org.eclipse.weaver) from the extensions 
			that execute transformations.
			<p/>
			The latest version before the updates was tagged as <b>build_20070327[ATLRefactoring_Migration]</b>
		</description>
		<pubDate>Thu, 12 Apr 2007 14:00:00 CET</pubDate>
	</item>

 	<item>
		<title>New use case available : Metamodel Annotation for Ontology Design</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/oamusecase/</link>
		<description>
			This use case presents a Model Driven solution for annotating models in order to obtain ontologies. Ontology design can 
			be seen as a difficult task for people who are not aware of ontology concepts. By annotating already made models 
			we expect to reduce the time for producing ontologies. 
			<p/>
			This use case is part of a work for a complete ontology development 
			environment based on Model Driven Engineering made by <a href="mailto:g.hillairet@gmail.com">Guillaume Hillairet</a> from the 
			<a href="http://www.univ-lr.fr/labo/l3i/site_statique/Index.html">L3I</a> Lab in La Rochelle (France).
		</description>
		<pubDate>Wed, 11 Apr 2007 11:00:00 CET</pubDate>
	</item>


 	<item>
		<title>New use case available : Software product line engineering</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/softwareproductline/</link>
		<description>
		Mapping features to models is a necessary step when developing software product lines of
		models. In such product lines, we need to relate objects from feature models (i.e. features) to
		objects from model templates. In this use case we show an extension to the AMW platform to
		specify those relations through weaving models. 
		<p/>
		This use case was developed by <a href="http://www.opencanarias.com">OpenCanarias</a> company.
		</description>
		<pubDate>Mon, 09 Apr 2007 16:00:00 CET</pubDate>
	</item>
	
	 <item>
		<title>New extension to the AMW plug-in: graphical interface to develop simple ATL transformations</title>
      	<link>http://www.eclipse.org/gmt/amw/download/</link>
		<description>
			 We developed an extension to the AMW plug-in that provides a graphical interface to develop simple ATL transformations. 
			 The extension contains a metamodel extension with only the essential elements of ATL transformations: (modules, rules, input and 
			 output elements, bindings).
			 <p/>
			 This extension has two main goals: <br/>
			 - to demonstrate that AMW can be easily extended with new facilities;<br/>
			 - to provide a simple graphical interface to develop ATL transformations.
			 <p/>
			 The plug-in name is <i>org.eclipse.gmt.weaver.qatl</i>. It is available in the 
			 <a href="http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/AMW">AMW CVS</a>.			 
			 
			 
		</description>
		<pubDate>Wed, 07 Mar 2007 14:00:00 CET</pubDate>
	</item>

	
	 <item>
		<title>New use case - calculating the difference between two models</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/diff/</link>
		<description>
			 This use case calculates the differences between two models.
			 The difference between two models is an essential process to control the changes and evolutions of models. 
			 The result of the difference is used to apply a patch in the the models.
		</description>
		<pubDate>Tue, 20 Feb 2007 19:00:00 CET</pubDate>
	</item>


	 <item>
		<title>New use case - System Architecture management</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/sys_of_sys/</link>
		<description>
			This use case shows how to map the overlapping concepts of different views of a complex system. It uses a System Architecture (SA) 
			framework called DoDAF  (Department of Defense Architecture Framework).
		</description>
		<pubDate>Mon, 12 Feb 2007 17:00:00 CET</pubDate>
	</item>

	 <item>
		<title>Improvements on the integration of AMW and ATL (AMW Model Handler)</title>
      	<link>http://wiki.eclipse.org/index.php/AMW_Model_Handler</link>
		<description>
			The integration of AMW and ATL was improved. We created a model handler for weaving models and woven models
			(AMWModelHandler). 
			
			This model handler provides a set of primitives that are often needed when developing ATL transformations that 
			use weaving models.						
		</description>
		<pubDate>Fri, 09 Feb 2007 15:00:00 CET</pubDate>
	</item>

	 <item>
		<title>New AMW use case - Bridge between Domain Specific Languages (DSLs) and UML profiles</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/umlprofiles/</link>
		<description>
				The DSL approach aims at representing every domain with a specific metamodel. The UML approach uses profiles to create 
				domain specific concepts. This use case shows how AMW and ATL are used to produce a bridge between these two modeling 
				approaches.
		</description>
		<pubDate>Mon, 05 Feb 2007 18:30:00 CET</pubDate>
	</item>

	 <item>
		<title>New AMW use case - Merge of geographical information (GML) and statistical data into SVG</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/mergeSVG/</link>
		<description>
			This use case presents a weaving model used to define a merge operation between a metamodel with geographical information 
			(an extension of GML) and a metamodel with data about the results of elections into a graphical representation (SVG).								
		</description>
		<pubDate>Thu, 01 Feb 2007 10:30:00 CET</pubDate>
	</item>

	 <item>
		<title>New AMW use case - Data mapping between relational DB and XML</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/RDBMSXML/ </link>
		<description>
			The data mapping between relational databases and XML is a typical problem in many organizations. This use case shows how weaving 
			models capture the relationships between a metamodel with flat structures and foreign keys relationshps (representing a relational 
			database) and a metamodel that contains nested structures (representing an XML base).
		</description>
		<pubDate>Wed, 31 Jan 2007 10:30:00 CET</pubDate>
	</item>


 <item>
		<title>New AMW use case - Bridge between SQL and KM3</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/modelgen/ </link>
		<description>
			This use case shows how weaving models and model transformations are used to translate SQL-DDL (Data Definition Language) into KM3 
			(modeling technical space). The use case presents the complete bridging process: the injection of the SQL file, the weaving model, 
			the transformations, and finally the extraction into a KM3 file.
		</description>
		<pubDate>Mon, 29 Jan 2007 15:30:00 CET</pubDate>
	</item>


 <item>
		<title>New AMW use case - model annotation</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/annotation/ </link>
		<description>
			 Models are annotated to add extra information that are not defined in the metamodel. 
			 For instance, a model can be annotated with preprocessing informations, comments, etc. <br/>
			 
			 This use case presents a generic annotation framework built using AMW. 
		</description>
		<pubDate>Wed, 24 Jan 2007 11:00:00 CET</pubDate>
	</item>


 <item>
		<title>New AMW use case - tool interoperability</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/interoperability/ </link>
		<description>
			Nowadays, there are a large number of tools that can be used to solve similar problems. 
			However, the tools have different data format and semantics. To support interoperability between 
			different tools, it is necessary to identify the 
			heterogeneities between them.
			<p/> 
			This use case shows how weaving models are used to capture the heterogeneities
			between different tools' metamodels. It uses two bug tracking tools as example.			
		</description>
		<pubDate>Mon, 22 Jan 2007 18:00:00 CET</pubDate>
	</item>


   <item>
		<title>New AMW use case - model matching</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/matching/ </link>
		<description>
			Matching is the process of creating weaving models. It is very important to provide methods 
			to easily create weaving models, because this is the starting point for 
			several other use cases. <p/>
			
			This use case presents a general overview of the matching process. It shows how AMW is integrated with 
			ATL to be able to execute different matching transformations. <p/>
			
			This use case also provides a step-by-step 'HowTo' that explains how to execute these transformations, 
			and a guide that explains how to develop user-defined methods. 		
			
		</description>
		<pubDate>Sun, 21 Jan 2007 17:00:00 CET</pubDate>
	</item>


   <item>
		<title>New AMW use case - aspect oriented modeling</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/AOM/</link>
		<description>
			Aspect oriented modeling aims at weaving business models and cross cutting models in a single model. A weaving can be applied 
			in any model (e.g., weavings in the cross cutting concern AND/OR in the business model), 
			because there is no preferential model. This use case shows how AMW is used on an aspect oriented modeling appplication. 
			The weaving model is interpreted by ATL transformations to weave the models. 
		</description>
		<pubDate>Fri, 19 Jan 2007 15:00:00 CET</pubDate>
	</item>

   <item>
		<title>New AMW use case - traceability</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/traceability/</link>
		<description>
			A new AMW use case is available: traceability of model transformations.
			This use case considers traceability of model transformations. After executing a model transformation, it is often necessary 
			to know the set of elements of the source model that were used to produce the target elements. 
			A weaving model is used to save this traceability information.
		</description>
		<pubDate>Thu, 18 Jan 2007 14:00:00 CET</pubDate>
	</item>

   <item>
		<title>New AMW use case - metamodel comparison</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/compare/</link>
		<description>
			A new use case of AMW is available: metamodel comparison.
			The objective of this use case is to demonstrate how weaving models created with the AMW plug-in are 
			used to compare different versions of a metamodel and to produce executable model transformations. <p/>
			We use two different versions of a 
			Scade metamodel (from the <a href="http://www.eclipse.org/gmt/am3/zoos/atlanticZoo/#SCADE">Atlantic zoo</a>). 
			Scade is a standard for development of embedded software for the Avionics Industry. 
		</description>
		<pubDate>Thu, 18 Jan 2007 10:50:00 CET</pubDate>
	</item>

   <item>
		<title>AMW use cases available</title>
      	<link>http://www.eclipse.org/gmt/amw/usecases/</link>
		<description>
			A new page with a set of use cases of AMW was created. 
			It contains simple and documented use cases of weaving models and AMW.
		</description>
		<pubDate>Fri, 08 Dec 2006 18:00:00 CET</pubDate>
	</item>


   <item>
		<title>New release of AMW</title>
      	<link>http://www.eclipse.org/gmt/amw/download/</link>
		<description>
			There is a new release of AMW plugin. This release is compatible with the latest releases of ATL and AM3.
		</description>
		<pubDate>Fri, 08 Dec 2006 18:00:00 CET</pubDate>
	</item>

   <item>
		<title>Improvements on the integration of AMW and matching transformations</title>
      	<link>http://dev.eclipse.org/viewcvs/indextech.cgi/org.eclipse.gmt/AMW</link>
		<description>
			The integration of the AMW plugin with the execution of matching transformations was improved. 
			The plugin uses the new <a href="http://wiki.eclipse.org/index.php/ATL_2006">ATL 2006 compiler</a> . 
			<p/>
			There is a new project "org.eclipse.weaver.transformation". 
			This project is an extension to the weaving core. It contains a set of matching and higher-order transformations 
			that can be called directly from the Weaving panel.
			<p/>
			For the moment these transformations are available in the context menu of the weaving panel (right click). 
			They are executed one-by-one. We plan to gradually add new transformations and also to combine them, 
			as well as to provide documentation.								
		</description>
		<pubDate>Wed, 29 Nov 2006 18:00:00 CET</pubDate>
	</item>


   <item>
		<title>AMW newsgroup migration</title>
      	<link>http://www.eclipse.org/gmt/</link>
		<description>
			As part of the changes related to the new Eclipse Modeling project, the AMW newsgroup has moved.
			Please use the new AMW newsgroup: eclipse.modeling.gmt.amw<br />
			The old one "eclipse.technology.gmt.amw" will be archived.
		</description>
		<pubDate>Fri, 20 Oct 2006 16:00:00 CET</pubDate>
	</item>

	<item>
		<title>Creation of a library of matching transformations</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>	
			Creation of a new category of examples with a set of matching transformations. 
			The matching transformations are used to automatically create weaving models.
		</description>
		<pubDate>Wed, 18 Oct 2006 17:00:00 CET</pubDate>
	</item>

	<item>
		<title>Creation of the AMW FAQ</title>
		<link>http://wiki.eclipse.org/index.php/AMW_FAQ</link>
		<description>
			Creation of a Wiki FAQ with questions about AMW.
			It will improve gradually. Everybody is welcome to contribute.
		</description>
		<pubDate>Tue, 10 Oct 2006 16:00:00 CET</pubDate>
	</item>

	<item>
		<title>New example - System Architecture (SA) Management</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>	
				This is a complex scenario of management of "systems of systems". 
				It uses many features of AMMA (ATLAS Model Management Architecture) to interoperate between
				different views of the same system. 
				It uses different types of matching transformations to produce weaving models that capture the 
				overlapping concepts of the different views. 				
		</description>
		<pubDate>Wed, 27 September 2006 11:40:00 CET</pubDate>
	</item>

	<item>
		<title>Creation of the AMW Wiki</title>
		<link>http://wiki.eclipse.org/index.php/AMW</link>
		<description>	
			The AMW Wiki was created. It contains general information about the AMW project, metamodel extensions, 
			information about the examples, wish list, etc.
		</description>
		<pubDate>Tue, 22 August 2006 15:30:00 CET</pubDate>
	</item>

	<item>
		<title>New example: using ATL to semi-automatically create weaving models</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>	
			This example contains a set of matching transformations (implemented in ATL) that produce a weaving
			model. The ATL transformations are executed sequentially using AM3 Ant tasks.<br/>
			The example is an adapted implementation of the Similarity Flooding algorithm 
			<font size="-1">(the reference to it is available on the example description)</font>. 
		</description>
		<pubDate>Mon, 24 July 2006 17:30:00 CET</pubDate>
	</item>

	<item>
		<title>New relase / commit with several improvements</title>
		<link>http://www.eclipse.org/gmt/amw/download/</link>
		<description>New release/commit with many changes in the Model Weaver. <p/>			
			Most part of changes are related to the metadata file
			 (that is not hidden from the users anymore), and the 
			 possibility to directly load .ecore weaving metamodels.
			<p/>
			The new release is available for download at the 
			<a href="../download/">
						download page.</a>
			More information
			<a href="../download/20060717/">
						here.</a>
				
		</description>
		<pubDate>Thu, 17 July 2006 11:00:00 CET</pubDate>
	</item>


	<item>
		<title>Weaving Mantis and Bugzilla bug trackers</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
				This example contains an extension to the core weaving metamodel to support interoperability between different tools.
				A weaving model conforming to this extension captures links between the metamodels of two bug tracking tools 
				(<a href="http://www.mantisbt.org/">Mantis</a>
				and <a href="http://www.bugzilla.org/">Bugzilla</a>). The metamodels are extracted from the <a href ="http://www.eclipse.org/gmt/am3/zoos/">Atlantic Zoo</a>.
		</description>
		<pubDate>Mon, 26 June 2006 15:30:00 CET</pubDate>
	</item>



	<item>
		<title>New example: translating KM3 into SQL using AMW and ATL</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
				This example contains a weaving model between a KM3 metamodel and a SQL DDL metamodel.
				The weaving model is used to produce an ATL transformation that translates KM3 models
				into SQL DDL models. It is similar to the example "Translating SQL into KM3", but the bridge
				is executed in the opposite direction. 							
		</description>
		<pubDate>Mon, 26 June 2006 15:30:00 CET</pubDate>
	</item>


	<item>
		<title>New example: translating SQL into KM3 using AMW and ATL</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
				This example uses a weaving model between a SQL DDL metamodel and a KM3 metamodel.
				The weaving model is used to produce an ATL transformation that translates SQL DDL models
				into KM3 models. We used an SQL extracted from <a href="http://www.mantisbt.org/">Mantis</a> bug tracker.
		</description>
		<pubDate>Mon, 20 June 2006 11:30:00 CET</pubDate>
	</item>

	<item>
		<title>New example: production of ATL and XSLT from the same weaving model</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
				This example generates XSLT and ATL transformations from the same weaving model.
				It contains two ATL HOTs (higher-order transformations). 
		</description>
		<pubDate>Mon, 19 June 2006 16:00:00 CET</pubDate>
	</item>

	<item>
		<title>The AMW Zoo is available</title>
		<link>http://www.eclipse.org/gmt/amw/zoo/</link>
		<description>
				The AMW Zoo is a zoo containing weaving metamodels and extensions of weaving metamodels expressed in KM3. 
		</description>
		<pubDate>Fri, 19 May 2006 15:00:00 CET</pubDate>
	</item>

	<item>
		<title>New ATL-AMW traceability example</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
				This example generates an ATL execution trace in a weaving model. 
				An ATL transformation produces a traceability weaving model. 
		</description>
		<pubDate>Fri, 19 May 2006 13:00:00 CET</pubDate>
	</item>
    
	<item>
		<title>New HOT that transforms an AMW model into an ATL model</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
			This example is an complement that uses the metamodel extension between 
			foreign keys and nested structures. <br/>
			It provides a HOT (higher-order transformation) that transforms a weaving model into
			an ATL model. 
		</description>
		<pubDate>Fri, 28 Apr 2006 17:00:00 CET</pubDate>
	</item>

	<item>
		<title>New AMW merge example</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
			There is a new example of an extension to the weaving core metamodel.<br />
			This extension enables to create a merge weaving model a subset of GML metamodel 
			and an election metamodel into a SVG metamodel.			
		</description>
		<pubDate>Fri, 14 Apr 2006 16:00:00 CET</pubDate>
	</item>


	<item>
		<title>New AMW example</title>
		<link>http://www.eclipse.org/gmt/amw/examples/</link>
		<description>
			There is a new example of an extension to the weaving core metamodel.<br />
			This extension enables to create weavings between a metamodel with foreign key structure
			and a metamodel with nested structures.			
		</description>
		<pubDate>Fri, 14 Apr 2006 11:00:00 CET</pubDate>
	</item>


	<item>
		<title>New logo for AMW (Thank you Xavier and Romain)</title>
		<link>http://www.eclipse.org/gmt/amw/</link>
		<description>
			AMW has now a new logo, more sexy.<br />
			
			ATLAS team wants to thank Xavier Mehaut and Romain Larcher for their pretty work.
		</description>
		<pubDate>Mon, 06 Mar 2006 11:00:00 CET</pubDate>
	</item>

	<item>
		<title>New release available</title>
		<link>http://www.eclipse.org/gmt/amw/download/</link>
		<description>
			A new release of AMW is available. It is compatible with the latest release of ATL.
		</description>
		<pubDate>Thu, 26 Jan 2006 18:00:00 CET</pubDate>
	</item>

	<item>
		<title>Creation of AMW newsgroup</title>
		<link>news://news.eclipse.org/eclipse.tools.gmt.amw</link>
		<description>
			A newsgroup for discussing &lt;a href="news://news.eclipse.org/eclipse.tools.gmt.amw"&gt;AMW&lt;/a&gt; technical issues, bugs,
			suggestions, use cases is now available.
		</description>
		<pubDate>14 Jun 2005</pubDate>
	</item>
	<item>
		<title>AMW binaries are available</title>
		<link>http://www.eclipse.org/gmt/amw/download/</link>
		<description>
			The AMW binaries are now available in the &lt;a href="http://www.eclipse.org/gmt/amw/download/"&gt;download section&lt;/a&gt;.
			The sources are available under CVS.
		</description>
		<pubDate>10 Jun 2005</pubDate>
	</item>
	<item>
		<title>Start of AMW subproject</title>
		<link>http://www.eclipse.org/gmt/amw/</link>
		<description>
			Creation of &lt;a href="http://www.eclipse.org/gmt/amw/"&gt;AMW&lt;/a&gt; subproject. AMW will be available for download soon.
		</description>
		<pubDate>07 Jun 2005</pubDate>
	</item>
  </channel>
</rss>