<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Programmatic Muddle Management</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Dimitrios</forename><forename type="middle">S</forename><surname>Kolovos</surname></persName>
							<email>dimitris.kolovos@york.ac.uk</email>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">University of York</orgName>
								<address>
									<addrLine>Deramore Lane</addrLine>
									<postCode>YO10 5GH</postCode>
									<settlement>York</settlement>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Nicholas</forename><surname>Matragkas</surname></persName>
							<email>nicholas.matragkas@york.ac.uk</email>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">University of York</orgName>
								<address>
									<addrLine>Deramore Lane</addrLine>
									<postCode>YO10 5GH</postCode>
									<settlement>York</settlement>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Horacio</forename><forename type="middle">Hoyos</forename><surname>Rodríguez</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">University of York</orgName>
								<address>
									<addrLine>Deramore Lane</addrLine>
									<postCode>YO10 5GH</postCode>
									<settlement>York</settlement>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Richard</forename><forename type="middle">F</forename><surname>Paige</surname></persName>
							<email>richard.paige@york.ac.uk</email>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">University of York</orgName>
								<address>
									<addrLine>Deramore Lane</addrLine>
									<postCode>YO10 5GH</postCode>
									<settlement>York</settlement>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Programmatic Muddle Management</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">5FDB6FC9F6950834859E0F50BA17057B</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-25T03:11+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>In this paper we demonstrate how diagrams constructed using general-purpose drawing tools in the context of agile language development processes can be annotated and consumed by model management programs (such as simulators, model-to-model and model-to-text transformations). The aim of this work is to enable engineers to engage in programmatic model management early in the language development process, so that they can explore whether or not the languages and models constructed are fit for purpose. We demonstrate a proof-of-concept prototype developed atop the Epsilon platform and a flexible graph definition language (GraphML).</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>The quality and usefulness of a Domain Specific Language (DSL) depends on accurately identifying the domain concepts, their features and relationships. As such, the involvement of domain experts in the language development process is crucial. In the early stages of the language development process, domain experts often provide informal example diagrams/sketches from which engineers can infer a first version of the metamodel of the envisioned language. To obtain additional feeback, engineers then need to develop an initial version of a language-specific modelling tool that enables domain experts to further experiment with the language. This typically constitutes the first step of an iterative process during which the metamodel of the language can undergo several revisions. When 3-layer modelling frameworks such as MOF/EMF are used, for each change in the metamodel, language engineers need to update and re-deploy a new version of the modelling tool, and for non-additive changes to the metamodel they also need to provide support for automated migration of older models.</p><p>To achieve shorter and more efficient iteration cycles, several techniques that challenge this top-down metamodel-centric approach have recently been proposed. In such approaches, the early phases of the language development process involve the construction of example diagrams using flexible drawing tools, which can be used to (semi-)automatically infer a rigid metamodel only once sufficient confidence in the completeness and maturity of the language has been developed.</p><p>In this paper we argue that example diagrams constructed in the context of this process should also be processable by model management programs (such as simulators, model-to-model and model-to-text transformations) so that engineers can develop additional and early confidence that the constructed language is fit for purpose. The rest of the paper is organised as follows. In Section 2 we provide an overview of related work in the field of bottom-up and agile metamodelling. In Section 3 we illustrate an approach for enabling engineers to engage in programmatic model management activities early in the language development process, and demonstrate a proof-of-concept prototype developed atop the Epsilon platform and a flexible graph definition language (GraphML). In Section 4 we conclude and provide directions to further work.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Background and Motivation</head><p>In <ref type="bibr" target="#b0">[1]</ref>, the authors propose an example-driven approach where users are able to construct informal diagrams using the Dia drawing tool, and these diagrams are then used to infer appropriate metamodels in an interactive manner. Similarly, in <ref type="bibr" target="#b1">[2]</ref> the authors introduce a systematic semi-automated approach to create visual DSLs from a set of domain model examples provided by an end-user. The MetAmodel Recovery System (MARS) <ref type="bibr" target="#b2">[3]</ref> is a semi-automatic inferencebased system for recovering a metamodel from a set of instance models through application of grammar inference algorithms. This approach does not rely on example models provided by end-users, but it relies on models, which no longer conform to a metamodel due to its evolution. In <ref type="bibr" target="#b3">[4]</ref>, the authors present a tool (GraCoT) that supports co-development of EMF models and metamodels, in a loosely-coupled manner that promotes agility and simplifies the process of co-evolution.</p><p>To our knowledge, research in this area so far has focused solely on agile model construction and automated metamodel inference. In our view, to further validate the maturity and completeness of a metamodel, it is also important for language engineers to develop some confidence that models conforming to this metamodel can support the automated model management operations involved in the envisioned MDE workflow (simulation, model-to-model and model-to-text transformation etc.)</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Proposed Approach</head><p>In this paper we illustrate an approach for rendering diagrams constructed using general-purpose drawing tools amenable to programmatic model management. An overview of the proposed approach is illustrated in Figure <ref type="figure" target="#fig_0">1</ref>. Consistently with previously-proposed bottom-up metamodelling techniques, in this approach language engineers and domain experts can start the language development process by drawing diagrams depicting example models, which (conceptually) conform to the envisioned language, using a general purpose diagram drawing tool.</p><p>In the next stage, engineers can augment these conceptual diagrams using a set of predefined textual annotations (discussed in Section 3.2) to specify the types and features of diagram elements of interest in an agile manner. Annotated diagrams are then automatically transformed into an intermediate representation (muddle) that can be programmatically managed using existing model management languages.</p><p>In this work we use GraphML, the conceptual metamodel of which is illustrated in Figure <ref type="figure" target="#fig_1">2</ref>, for diagram drawing, and languages of the Epsilon platform <ref type="bibr" target="#b4">[5]</ref> for automated model management, but in principle this approach should be applicable to other diagram formats and model management languages.  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Running Example</head><p>We illustrate the process of constructing, annotating, and programmatically managing GraphML diagrams through a running example. In this example, our aim is to define a flowchart language that supports timed events and delays. To develop some confidence that the envisioned language is feature-complete, we also need to implement a proof-of-concept program that can execute/simulate models that conform to the language. We start by using the yEd<ref type="foot" target="#foot_0">1</ref> GraphML-compliant tool to draw an example diagram that conceptually conforms to the envisioned flowchart language. The diagram, illustrated in Figure <ref type="figure" target="#fig_2">3</ref> consists of labeled rectangles which conceptually represent actions, a diamond which represents a decision, directed edges which represent transitions, a hexagon that represents the triggering event, a circle which represents a delay, and a hexagon which represents the time at which the attached event should fire for the first time. We now take a leap and in Listing 1.1 we present the implementation of a simple simulator for such flowcharts, expressed in the Epsilon Object Language <ref type="bibr" target="#b5">[6]</ref>, an imperative OCL-based model query and transformation language. We provide a brief overview of the behaviour and the organisation of the simulator and then demonstrate how we need to annotate the diagram of Figure <ref type="figure" target="#fig_2">3</ref> so that the simulator program can use it as an input model that can drive its execution. -Assuming that a flowchart can contain many events, in line 1 we select one event that has its entryPoint attribute set to true;</p><p>-In line 3, we keep a copy of the time (converted to minutes) at which this event is fired for the first time;</p><p>-In line 4, we process the target of the first outgoing transition of the event; Calls to process() operations are dynamically dispatched depending on the type of their context object, and behave as discussed below;</p><p>-The Event.process() operation prints a message and processes the target of its first outgoing transition;</p><p>-The Action.process() operation prints a message and then, if the action has any outgoing transition, it processes the target of the first of them;</p><p>-The Decision.process() operation chooses a random outgoing transition, prints its name and processes its target;</p><p>-The Delay.process() operation adds the delay time to the global time, prints a message and then processes the target of its first outgoing transition;</p><p>-The toMinutes() and toHours() operations can convert HH:MM-formatted time strings to integers (number of minutes) and vice versa.</p><p>A sample execution trace of the simulator appears below. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Annotating GraphML Diagrams</head><p>To facilitate the execution of model management programs such as the one illustrated in Listing 1.1, we need to annotate diagram elements with additional information. For example, we need to declare that the type of all rectangle nodes in this diagram is Action, and that the type of directed edges is Transition. As GraphML does not provide built-in support for capturing type-related information for nodes and edges, we need to use GraphML's extensibility facilities<ref type="foot" target="#foot_1">2</ref> to define Type extension fields for nodes and edges.</p><p>The value of the Type extension field of a node/edge needs to adhere to the name (&gt; name) * pattern, where &gt; is used to denote inheritance. For example, by setting the Type field of the Wake up node to Action &gt; FlowchartElement, we define that the node is an instance of the Action type, and that the FlowchartElement type is a super-class of Action. All types are unique by name and are created the first time they are encountered in the diagram. For example, by subsequently setting the Type field of Hit snooze to Action, we are reusing the Action type defined in Wake up instead of creating a new one. Beyond typerelated information, we also need to capture additional information using the following GraphML extensions summarised in Table <ref type="table" target="#tab_3">1</ref>. The value of the Properties field of a node/edge can contain zero or more lines of text. Each line needs to adhere to the pattern above and define the type, multiplicity, name and value of the property. For example, by setting the value of the Type field of the Alarm clock rings node to Event and the text of its Properties field to boolean startEvent = true, we define that the node has a single-valued boolean startEvent property, with a value set to true.</p><p>The value of the Default field should conform to the pattern above and define the name of the default slot of the node/edge and, optionally, its primitive type (defaults to String). For example, by setting the Default field of the Wake up node to name, the first label of the node that does not match the property descriptor pattern (in this case, the Wake up label), will be made accessible through a name property of type String.</p><p>The values of the Source role, Target role, Role in source, and Role in target fields of an edge define the name and multiplicity of the respective roles. For example, in the yes transition we define the following values for these properties: Source role: source, Target role: target, Role in source: outgoing *, Role in target: incoming *.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3">Deriving a Muddle</head><p>The next step of the process is to parse the annotated GraphML diagram and construct an intermediate model (muddle) that conforms to the metamodel of Figure <ref type="figure" target="#fig_3">4</ref>. This is achieved through a multi-pass transformation which is transparent to the end-user and which comprises the following steps. engineers to annotate and programmatically manage GraphML diagrams using languages of the Epsilon platform. In the future, we plan to investigate supporting additional GraphML constructs such as subgraphs and hyperedges.</p><p>In our view, while constructing diagrams using using general-purpose drawing tools can be very useful in the early phases of the language development process, it can become cumbersome and error-prone as the example diagrams and the DSL become larger and more mature -at which stage a transition to a language-specific modelling tool should be consider. To reduce the overhead of this transition, we plan to investigate inferring annotated metamodels that can then be consumed by tools such as Eugenia<ref type="foot" target="#foot_5">6</ref> to automatically generate languagespecific model editors.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 1 .</head><label>1</label><figDesc>Fig. 1. Process Overview</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 2 .</head><label>2</label><figDesc>Fig. 2. GraphML Metamodel</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Fig. 3 .</head><label>3</label><figDesc>Fig. 3. Flowchart Diagram</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 4 .</head><label>4</label><figDesc>Fig. 4. Intermediate (Muddle) Metamodel</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>outgoing.at(0).target.process();</head><label></label><figDesc></figDesc><table><row><cell>1 var event = Event.all.selectOne(e|e.entryPoint = true); 2 var time = event.time.hours.toMinutes(); 3 event.process(); 4 5 operation Event process() { ("Event: " + self.name + " at " + time.toHours()).println(); 6 7 self.8 } 9 10 operation Action process() { 11 ("Action: " +</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head>self.name).println(); 12 if (not self.outgoing.isEmpty()) { 13 self.outgoing.at(0).target.process();</head><label></label><figDesc></figDesc><table><row><cell>self.outgoing.at(0).target.process(); 29 operation String toMinutes() : Integer { 26 27 } 28 var parts = self.split(":"); 30 31 return parts[0].asInteger() * 60 + parts[1].asInteger(); 32 } 33 34 operation Integer toHours() : String { return (self / 60).asString().pad(2, "0", false) + 35 36 ":" + (self -(self / 60) * 60).asString().pad(2, "0", false); 37 }</cell></row><row><cell>Listing 1.1. Simple flowchart simulator</cell></row><row><cell>} 16 operation Decision process() { 14 15 } ("Decision: " + self.name).println(); 17 var random = self.outgoing.random(); 18 ("Chose: " + random.name).println(); 19 random.target.process(); 20 21 } 22 23 operation Delay process() { time = time + self.mins; 24 25 ("Waited for " + self.mins + "mins").println();</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head>Table 1 :</head><label>1</label><figDesc>GraphML extensions</figDesc><table><row><cell>Extension</cell><cell cols="2">For Description</cell><cell></cell><cell></cell><cell>Pattern</cell></row><row><cell>Properties</cell><cell>Node,</cell><cell>Descriptors</cell><cell>and</cell><cell>values</cell><cell>(int|String|boolean|real)?</cell></row><row><cell></cell><cell>Edge</cell><cell cols="3">for primitive attributes of</cell><cell>(\*)? name (= value)?</cell></row><row><cell></cell><cell></cell><cell>nodes/edges</cell><cell></cell><cell></cell><cell></cell></row><row><cell>Default</cell><cell>Node,</cell><cell cols="3">Descriptor of the slot under</cell><cell>(int|String|boolean|real)?</cell></row><row><cell></cell><cell>Edge</cell><cell cols="3">which the first label of the</cell><cell>name</cell></row><row><cell></cell><cell></cell><cell cols="3">node/edge should be made ac-</cell><cell></cell></row><row><cell></cell><cell></cell><cell>cessible</cell><cell></cell><cell></cell><cell></cell></row><row><cell>Source role</cell><cell cols="4">Edge Descriptor of the role of the</cell><cell>name (\*)?</cell></row><row><cell></cell><cell></cell><cell cols="2">source end of the edge</cell><cell></cell><cell></cell></row><row><cell>Target role</cell><cell cols="4">Edge Descriptor of the role of the</cell><cell>name (\*)?</cell></row><row><cell></cell><cell></cell><cell cols="2">target end of the edge</cell><cell></cell><cell></cell></row><row><cell cols="5">Role in source Edge Descriptor of the role of the</cell><cell>name (\*)?</cell></row><row><cell></cell><cell></cell><cell cols="2">edge in its source node</cell><cell></cell><cell></cell></row><row><cell cols="5">Role in target Edge Descriptor of the role of the</cell><cell>name (\*)?</cell></row><row><cell></cell><cell></cell><cell cols="2">edge in its target node</cell><cell></cell><cell></cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">http://www.yworks.com/en/products_yed_about.html</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">http://docs.yworks.com/yfiles/doc/developers-guide/graphml. html</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">http://www.eclipse.org/epsilon/doc/emc</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_3">http://www.eclipse.org/epsilon/doc/evl</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_4">http://www.eclipse.org/epsilon/doc/egl</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_5">http://www.eclipse.org/epsilon/doc/eugenia</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acknowledgements</head><p>This research was part supported by the EPSRC, through the Large-Scale Complex IT Systems project (EP/F001096/1) and by the EU, through the Automated Measurement and Analysis of Open Source Software (OSSMETER) FP7 STREP project (318736).</p></div>
			</div>

			<div type="annex">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>5.</head><p>For every typed edge of the graph it creates an empty MuddleElement and its corresponding LinkElementType, similar to what was discussed for nodes in step 1. It also attempts to create primary, role in source, role in target, source and target Features for the created LinkElementTypes; 6. Iterates through the typed edges of the graph and creates/populates their slots similar to what was discussed in step 2; 7. Adjusts the multiplicities of features based on the maximum number of values of their slots. In this process, single-valued features, slots of which contain more than one values become multi-valued (but not the opposite).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.4">Consuming Muddles in Epsilon Programs</head><p>Epsilon provides an abstraction layer (Epsilon Model Connectivity -EMC 3 ) that shields the languages of the platform from the intricacies of concrete model representations and enables them to access models conforming to a wide range of technologies. To enable Epsilon languages to access muddles, we have developed a new driver that implements the set of interfaces required by EMC. Due to space restrictions, a detailed discussion on the new driver is beyond the scope of this paper.</p><p>The driver enables all languages in Epsilon to query muddles. For example, in addition to the simulator of Listing 1.1, Listing 1.2 demonstrates an exemplar constraint written in the validation language of the platform (EVL 4 ), and Listing 1.3 demonstrates an exemplar model-to-text transformation written in EGL 5 . </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Conclusions and Further Work</head><p>In this paper we have argued for the importance of enabling engineers to engage in exploratory model management operations early on in the language development process and demonstrated an approach and a prototype that enables</p></div>			</div>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Bottom-up metamodelling: An interactive approach</title>
		<author>
			<persName><forename type="first">Jesús</forename><surname>Sánchez-Cuadrado</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Juan</forename><surname>Lara</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Esther</forename><surname>Guerra</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Model Driven Engineering Languages and Systems</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>
			<persName><forename type="first">Robert</forename><surname>France</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Jürgen</forename><surname>Kazmeier</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Ruth</forename><surname>Breu</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Colin</forename><surname>Atkinson</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2012">2012</date>
			<biblScope unit="volume">7590</biblScope>
			<biblScope unit="page" from="3" to="19" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Creating visual domain-specific modeling languages from end-user demonstration</title>
		<author>
			<persName><forename type="first">Hyun</forename><surname>Cho</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Gray</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Syriani</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Modeling in Software Engineering (MISE), 2012 ICSE Workshop on</title>
				<imprint>
			<date type="published" when="2012">2012</date>
			<biblScope unit="page" from="22" to="28" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Mars: A metamodel recovery system using grammar inference</title>
		<author>
			<persName><forename type="first">Faizan</forename><surname>Javed</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marjan</forename><surname>Mernik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jeff</forename><surname>Gray</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Barrett</forename><forename type="middle">R</forename><surname>Bryant</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Inf. Softw. Technol</title>
		<imprint>
			<biblScope unit="volume">50</biblScope>
			<biblScope unit="issue">9-10</biblScope>
			<biblScope unit="page" from="948" to="968" />
			<date type="published" when="2008-08">August 2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Gracot, a tool for co-creation of models and metamodels in specific domains</title>
		<author>
			<persName><forename type="first">J</forename><surname>Villalobos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Gómez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Sánchez</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. Academics Tooling with Eclipse (ACME 2013) at European Conference on Object-Oriented Programming (ECOOP2013)</title>
				<meeting>Academics Tooling with Eclipse (ACME 2013) at European Conference on Object-Oriented Programming (ECOOP2013)</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">The Design of a Conceptual Framework and Technical Infrastructure for Model Management Language Engineering</title>
		<author>
			<persName><forename type="first">Richard</forename><forename type="middle">F</forename><surname>Paige</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Dimitrios</forename><forename type="middle">S</forename><surname>Kolovos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Louis</forename><forename type="middle">M</forename><surname>Rose</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Nicholas</forename><surname>Drivalos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Fiona</forename><forename type="middle">A C</forename><surname>Polack</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. 14th IEEE International Conference on Engineering of Complex Computer Systems</title>
				<meeting>14th IEEE International Conference on Engineering of Complex Computer Systems<address><addrLine>Potsdam, Germany</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">The Epsilon Object Language</title>
		<author>
			<persName><forename type="first">Dimitrios</forename><forename type="middle">S</forename><surname>Kolovos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Richard</forename><forename type="middle">F</forename><surname>Paige</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Fiona</forename><forename type="middle">A C</forename><surname>Polack</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. European Conference in Model Driven Architecture (EC-MDA) 2006</title>
				<meeting>European Conference in Model Driven Architecture (EC-MDA) 2006<address><addrLine>Bilbao, Spain</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2006-07">July 2006</date>
			<biblScope unit="volume">4066</biblScope>
			<biblScope unit="page" from="128" to="142" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
