Bug 563950 - [Robotics] Provide text-based editors for data-types and communication objects

- Provide text editor for enumerations

Change-Id: Ic77bd736727a878148766eeea556f57fec3083a4
Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/compdef.ctx b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/compdef.ctx
index 101d45a..e3fbea1 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/compdef.ctx
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/compdef.ctx
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ASCII"?>
-<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_NcDrkCXJEeiyk8lv-B0xsw" name="Ports">
+<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_NcDrkCXJEeiyk8lv-B0xsw" name="ComponentDef">
   <dependencies href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_69QJkKDJEeSZxfCXzZz3-w"/>
   <dependencies href="ppe:/context/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx#_NcDrkCXJEeiyk8lv-B0xsw"/>
   <tabs xmi:id="_TAoucCXJEeiyk8lv-B0xsw" label="Component definition" id="compdef" priority="99">
@@ -10,6 +10,9 @@
     <sections xmi:id="section.robotics.ComponentDefinitionModel" name="Single ComponentInstance" sectionFile="ui/SingleComponentDefinitionModel.xwt">
       <widget href="ui/SingleComponentDefinitionModel.xwt#/"/>
     </sections>
+    <sections xmi:id="section.robotics.ParameterEntry" name="Single ParameterEntry" sectionFile="ui/SingleParameterEntry.xwt">
+      <widget href="ui/SingleParameterEntry.xwt#/"/>
+    </sections>
   </tabs>
   <views xmi:id="view.robotics.ComponentInstance" name="Single ComponentInstance" sections="section.robotics.ComponentInstance" automaticContext="true">
     <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_NcDr4CXJEeiyk8lv-B0xsw" name="isSingleComponentInstance">
@@ -25,4 +28,11 @@
     </constraints>
     <datacontexts href="ppe:/context/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx#org.eclipse.papyrus.robotics.properties.dataContexts.components"/>
   </views>
+  <views xmi:id="view.robotics.ParameterEntry" name="Single ParameterEntry" sections="section.robotics.ParameterEntry" automaticContext="true">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_NcDr4CXJEeiyk8lv-Bsdfs" name="isSingleParameterEntry">
+      <constraintType href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_NcDr4SXJEeiyk8lhtedhfa" name="stereotypeName" value="robotics::parameters::ParameterEntry"/>
+    </constraints>
+    <datacontexts href="ppe:/context/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx#org.eclipse.papyrus.robotics.properties.dataContexts.parameters"/>
+  </views>
 </contexts:Context>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleParameterEntry.xwt b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleParameterEntry.xwt
new file mode 100644
index 0000000..1acaaa5
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleParameterEntry.xwt
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:uml="clr-namespace:org.eclipse.papyrus.uml.properties.widgets"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:ReferenceDialog input="{Binding}" property="UML:TypedElement:type"></ppe:ReferenceDialog>
+		<uml:MultiplicityDialog input="{Binding}"
+			property="Multiplicity:multiplicity"></uml:MultiplicityDialog>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx
index a368485..09dcba5 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx
@@ -266,6 +266,11 @@
         <properties xmi:id="datactx.robotics.components.componentdefinitionmodel.dependspackage" name="dependsPackage"  multiplicity="-1"/>
       </elements>
     </elements>
+    <elements xsi:type="contexts:DataContextPackage" xmi:id="org.eclipse.papyrus.robotics.properties.dataContexts.parameters" name="parameters">
+      <elements xmi:id="_NcDsJyXJEesdfsfndvsesw" name="ParameterEntry">
+        <supertypes href="../../../org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690yG6DJEeSZxfCXzZz3-w"/>
+      </elements>
+    </elements>
     <elements xsi:type="contexts:DataContextPackage" xmi:id="org.eclipse.papyrus.robotics.properties.dataContexts.services" name="services">
       <elements xmi:id="_NcDsLSXJEeiyk8lv-B0xsw" name="ServiceLink">
         <supertypes href="../../../org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690xu6DJEeSZxfCXzZz3-w"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/text.ctx b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/text.ctx
index b1b3bf3..c930e19 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/text.ctx
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/text.ctx
@@ -12,6 +12,9 @@
     <sections xmi:id="sections.robotics.SingleDataType" name="Single DataType" sectionFile="ui/SingleDataType.xwt">
       <widget href="ui/SingleDataType.xwt#/"/>
     </sections>
+    <sections xmi:id="sections.robotics.SingleEnum" name="Single Enum" sectionFile="ui/SingleEnum.xwt">
+      <widget href="ui/SingleEnum.xwt#/"/>
+    </sections>
   </tabs>
   <views xmi:id="_iM9pgM33Eee3Tq5d85ujcg" name="Single Port" sections="sections.robotics.SinglePort" automaticContext="true">
     <constraints xsi:type="constraints:SimpleConstraint" xmi:id="constraints.robotics.isSinglePort" name="isSinglePort">
@@ -27,6 +30,13 @@
     </constraints>
     <datacontexts href="ppe:/context/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx#org.eclipse.papyrus.robotics.properties.dataContexts.components"/>
   </views>
+  <views xmi:id="views.robotics.SingleEnum" name="Single Enum" sections="sections.robotics.SingleEnum" automaticContext="true">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="constraints.robotics.isSingleEnum" name="isSingleEnum">
+      <constraintType href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_iM9pjs33Eee3Tq5d85ujcg" name="stereotypeName" value="robotics::commobject::Enumeration"/>
+    </constraints>
+    <datacontexts href="ppe:/context/org.eclipse.papyrus.robotics.properties/properties/robotics/robotics.ctx#org.eclipse.papyrus.robotics.properties.dataContexts.commobject"/>
+  </views>
   <views xmi:id="views.robotics.SingleDataType" name="Single DataType" sections="sections.robotics.SingleDataType" automaticContext="true">
     <constraints xsi:type="constraints:SimpleConstraint" xmi:id="constraints.robotics.isSingleDataType" name="isSingleDataType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleDataType.xwt b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleDataType.xwt
index 3b5252a..37b38ab 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleDataType.xwt
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleDataType.xwt
@@ -11,7 +11,7 @@
 		<Composite.layout>
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
-		<robotics:DataTypeEditor customLabel="Component editor (xtext)" input="{Binding}"
+		<robotics:DataTypeEditor customLabel="DataType editor (xtext)" input="{Binding}"
 				property="UML:Class"></robotics:DataTypeEditor>
 	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleEnum.xwt b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleEnum.xwt
new file mode 100644
index 0000000..3eb9818
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/text/ui/SingleEnum.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:robotics="clr-namespace:org.eclipse.papyrus.robotics.properties.widgets"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<robotics:EnumEditor customLabel="Enumeration editor (xtext)" input="{Binding}"
+				property="UML:Class"></robotics:EnumEditor>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/EnumEditor.java b/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/EnumEditor.java
new file mode 100644
index 0000000..d671d8b
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/EnumEditor.java
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Ansgar Radermacher (CEA LIST) ansgar.radermacher@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.properties.widgets;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.papyrus.infra.properties.ui.modelelement.ModelElement;
+import org.eclipse.papyrus.robotics.xtext.util.TransactionalXtextEditor;
+import org.eclipse.papyrus.uml.properties.xtext.widget.property.AbstractXtextPropertyEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * A Property editor for DAtaTypes
+ * 
+ * @see AbstractXtextPropertyEditor
+ */
+public class EnumEditor extends TransactionalXtextEditor {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param parent
+	 *            The composite in which the widget is created
+	 * @param style
+	 *            The style of the editor
+	 */
+	public EnumEditor(Composite parent, int style) {
+		super("Enum editor", parent, style);	//$NON-NLS-1$
+		// find size of owning scrolled composite and set height accordingly
+		while (parent != null) {
+			if (parent instanceof ScrolledComposite) {
+				int height = parent.getBounds().height - 4;	// remove 4 pixels (for border, etc.)
+				GridDataFactory.fillDefaults().grab(true, true).hint(SWT.DEFAULT, height).applyTo(xtextEditor.getTextControl());
+				break;
+			}
+			parent = parent.getParent();
+		}
+	}
+
+	@SuppressWarnings("nls")
+	@Override
+	protected void registerChangeListeners(ModelElement element) {
+		registerObservable(element, "name");
+		registerObservable(element, "ownedAttribute");
+	}
+}
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/DTMLParser.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/DTMLParser.java
index bdd7f1b..f55ee90 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/DTMLParser.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/DTMLParser.java
@@ -39,28 +39,36 @@
 			builder.put(grammarAccess.getUnlimitedLiteralAccess().getAlternatives(), "rule__UnlimitedLiteral__Alternatives");
 			builder.put(grammarAccess.getVisibilityKindAccess().getAlternatives(), "rule__VisibilityKind__Alternatives");
 			builder.put(grammarAccess.getDirectionAccess().getAlternatives(), "rule__Direction__Alternatives");
-			builder.put(grammarAccess.getDTModelAccess().getGroup(), "rule__DTModel__Group__0");
+			builder.put(grammarAccess.getXDataTypeAccess().getGroup(), "rule__XDataType__Group__0");
 			builder.put(grammarAccess.getPropertyAccess().getGroup(), "rule__Property__Group__0");
 			builder.put(grammarAccess.getPropertyAccess().getGroup_2(), "rule__Property__Group_2__0");
 			builder.put(grammarAccess.getPropertyAccess().getGroup_4(), "rule__Property__Group_4__0");
-			builder.put(grammarAccess.getAssignmentAccess().getGroup(), "rule__Assignment__Group__0");
+			builder.put(grammarAccess.getXAssignmentAccess().getGroup(), "rule__XAssignment__Group__0");
+			builder.put(grammarAccess.getXEnumerationAccess().getGroup(), "rule__XEnumeration__Group__0");
+			builder.put(grammarAccess.getXEnumLiteralAccess().getGroup(), "rule__XEnumLiteral__Group__0");
+			builder.put(grammarAccess.getXEnumLiteralAccess().getGroup_1(), "rule__XEnumLiteral__Group_1__0");
 			builder.put(grammarAccess.getQualifiedNameAccess().getGroup(), "rule__QualifiedName__Group__0");
 			builder.put(grammarAccess.getTypeRuleAccess().getGroup(), "rule__TypeRule__Group__0");
 			builder.put(grammarAccess.getMultiplicityRuleAccess().getGroup(), "rule__MultiplicityRule__Group__0");
 			builder.put(grammarAccess.getMultiplicityRuleAccess().getGroup_2(), "rule__MultiplicityRule__Group_2__0");
-			builder.put(grammarAccess.getDTModelAccess().getNameAssignment_1(), "rule__DTModel__NameAssignment_1");
-			builder.put(grammarAccess.getDTModelAccess().getAttributesAssignment_3(), "rule__DTModel__AttributesAssignment_3");
+			builder.put(grammarAccess.getXDataTypeAccess().getNameAssignment_1(), "rule__XDataType__NameAssignment_1");
+			builder.put(grammarAccess.getXDataTypeAccess().getAttributesAssignment_3(), "rule__XDataType__AttributesAssignment_3");
 			builder.put(grammarAccess.getPropertyAccess().getNameAssignment_1(), "rule__Property__NameAssignment_1");
 			builder.put(grammarAccess.getPropertyAccess().getTypeAssignment_2_1_0(), "rule__Property__TypeAssignment_2_1_0");
 			builder.put(grammarAccess.getPropertyAccess().getTypeUndefinedAssignment_2_1_1(), "rule__Property__TypeUndefinedAssignment_2_1_1");
 			builder.put(grammarAccess.getPropertyAccess().getMultiplicityAssignment_3(), "rule__Property__MultiplicityAssignment_3");
 			builder.put(grammarAccess.getPropertyAccess().getValueAssignment_4_1(), "rule__Property__ValueAssignment_4_1");
 			builder.put(grammarAccess.getPropertyAccess().getCommentAssignment_5(), "rule__Property__CommentAssignment_5");
-			builder.put(grammarAccess.getAssignmentAccess().getNameAssignment_0(), "rule__Assignment__NameAssignment_0");
-			builder.put(grammarAccess.getAssignmentAccess().getExpressionAssignment_2(), "rule__Assignment__ExpressionAssignment_2");
+			builder.put(grammarAccess.getXAssignmentAccess().getNameAssignment_0(), "rule__XAssignment__NameAssignment_0");
+			builder.put(grammarAccess.getXAssignmentAccess().getExpressionAssignment_2(), "rule__XAssignment__ExpressionAssignment_2");
 			builder.put(grammarAccess.getValueAccess().getStrAssignment_0(), "rule__Value__StrAssignment_0");
 			builder.put(grammarAccess.getValueAccess().getIvalAssignment_1(), "rule__Value__IvalAssignment_1");
 			builder.put(grammarAccess.getValueAccess().getDvalAssignment_2(), "rule__Value__DvalAssignment_2");
+			builder.put(grammarAccess.getXEnumerationAccess().getNameAssignment_1(), "rule__XEnumeration__NameAssignment_1");
+			builder.put(grammarAccess.getXEnumerationAccess().getLiteralsAssignment_3(), "rule__XEnumeration__LiteralsAssignment_3");
+			builder.put(grammarAccess.getXEnumLiteralAccess().getNameAssignment_0(), "rule__XEnumLiteral__NameAssignment_0");
+			builder.put(grammarAccess.getXEnumLiteralAccess().getValueAssignment_1_1(), "rule__XEnumLiteral__ValueAssignment_1_1");
+			builder.put(grammarAccess.getXEnumLiteralAccess().getCommentAssignment_2(), "rule__XEnumLiteral__CommentAssignment_2");
 			builder.put(grammarAccess.getQualifiedNameAccess().getPathAssignment_0(), "rule__QualifiedName__PathAssignment_0");
 			builder.put(grammarAccess.getQualifiedNameAccess().getRemainingAssignment_2(), "rule__QualifiedName__RemainingAssignment_2");
 			builder.put(grammarAccess.getTypeRuleAccess().getPathAssignment_0(), "rule__TypeRule__PathAssignment_0");
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.g b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.g
index 5003ff8..7a75b2e 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.g
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.g
@@ -74,25 +74,25 @@
 	restoreStackSize(stackSize);
 }
 
-// Entry rule entryRuleDTModel
-entryRuleDTModel
+// Entry rule entryRuleXDataType
+entryRuleXDataType
 :
-{ before(grammarAccess.getDTModelRule()); }
-	 ruleDTModel
-{ after(grammarAccess.getDTModelRule()); } 
+{ before(grammarAccess.getXDataTypeRule()); }
+	 ruleXDataType
+{ after(grammarAccess.getXDataTypeRule()); } 
 	 EOF 
 ;
 
-// Rule DTModel
-ruleDTModel 
+// Rule XDataType
+ruleXDataType 
 	@init {
 		int stackSize = keepStackSize();
 	}
 	:
 	(
-		{ before(grammarAccess.getDTModelAccess().getGroup()); }
-		(rule__DTModel__Group__0)
-		{ after(grammarAccess.getDTModelAccess().getGroup()); }
+		{ before(grammarAccess.getXDataTypeAccess().getGroup()); }
+		(rule__XDataType__Group__0)
+		{ after(grammarAccess.getXDataTypeAccess().getGroup()); }
 	)
 ;
 finally {
@@ -149,25 +149,25 @@
 	restoreStackSize(stackSize);
 }
 
-// Entry rule entryRuleAssignment
-entryRuleAssignment
+// Entry rule entryRuleXAssignment
+entryRuleXAssignment
 :
-{ before(grammarAccess.getAssignmentRule()); }
-	 ruleAssignment
-{ after(grammarAccess.getAssignmentRule()); } 
+{ before(grammarAccess.getXAssignmentRule()); }
+	 ruleXAssignment
+{ after(grammarAccess.getXAssignmentRule()); } 
 	 EOF 
 ;
 
-// Rule Assignment
-ruleAssignment 
+// Rule XAssignment
+ruleXAssignment 
 	@init {
 		int stackSize = keepStackSize();
 	}
 	:
 	(
-		{ before(grammarAccess.getAssignmentAccess().getGroup()); }
-		(rule__Assignment__Group__0)
-		{ after(grammarAccess.getAssignmentAccess().getGroup()); }
+		{ before(grammarAccess.getXAssignmentAccess().getGroup()); }
+		(rule__XAssignment__Group__0)
+		{ after(grammarAccess.getXAssignmentAccess().getGroup()); }
 	)
 ;
 finally {
@@ -224,6 +224,56 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRuleXEnumeration
+entryRuleXEnumeration
+:
+{ before(grammarAccess.getXEnumerationRule()); }
+	 ruleXEnumeration
+{ after(grammarAccess.getXEnumerationRule()); } 
+	 EOF 
+;
+
+// Rule XEnumeration
+ruleXEnumeration 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getXEnumerationAccess().getGroup()); }
+		(rule__XEnumeration__Group__0)
+		{ after(grammarAccess.getXEnumerationAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleXEnumLiteral
+entryRuleXEnumLiteral
+:
+{ before(grammarAccess.getXEnumLiteralRule()); }
+	 ruleXEnumLiteral
+{ after(grammarAccess.getXEnumLiteralRule()); } 
+	 EOF 
+;
+
+// Rule XEnumLiteral
+ruleXEnumLiteral 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getXEnumLiteralAccess().getGroup()); }
+		(rule__XEnumLiteral__Group__0)
+		{ after(grammarAccess.getXEnumLiteralAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRuleQualifiedName
 entryRuleQualifiedName
 :
@@ -355,15 +405,21 @@
 	}
 :
 	(
-		{ before(grammarAccess.getModelAccess().getDTModelParserRuleCall_0()); }
-		ruleDTModel
-		{ after(grammarAccess.getModelAccess().getDTModelParserRuleCall_0()); }
+		{ before(grammarAccess.getModelAccess().getXDataTypeParserRuleCall_0()); }
+		ruleXDataType
+		{ after(grammarAccess.getModelAccess().getXDataTypeParserRuleCall_0()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getModelAccess().getAssignmentParserRuleCall_1()); }
-		ruleAssignment
-		{ after(grammarAccess.getModelAccess().getAssignmentParserRuleCall_1()); }
+		{ before(grammarAccess.getModelAccess().getXAssignmentParserRuleCall_1()); }
+		ruleXAssignment
+		{ after(grammarAccess.getModelAccess().getXAssignmentParserRuleCall_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getModelAccess().getXEnumerationParserRuleCall_2()); }
+		ruleXEnumeration
+		{ after(grammarAccess.getModelAccess().getXEnumerationParserRuleCall_2()); }
 	)
 ;
 finally {
@@ -511,134 +567,134 @@
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__0
+rule__XDataType__Group__0
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__DTModel__Group__0__Impl
-	rule__DTModel__Group__1
+	rule__XDataType__Group__0__Impl
+	rule__XDataType__Group__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__0__Impl
+rule__XDataType__Group__0__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getDTModelAccess().getDTKeyParserRuleCall_0()); }
+	{ before(grammarAccess.getXDataTypeAccess().getDTKeyParserRuleCall_0()); }
 	ruleDTKey
-	{ after(grammarAccess.getDTModelAccess().getDTKeyParserRuleCall_0()); }
+	{ after(grammarAccess.getXDataTypeAccess().getDTKeyParserRuleCall_0()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__1
+rule__XDataType__Group__1
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__DTModel__Group__1__Impl
-	rule__DTModel__Group__2
+	rule__XDataType__Group__1__Impl
+	rule__XDataType__Group__2
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__1__Impl
+rule__XDataType__Group__1__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getDTModelAccess().getNameAssignment_1()); }
-	(rule__DTModel__NameAssignment_1)
-	{ after(grammarAccess.getDTModelAccess().getNameAssignment_1()); }
+	{ before(grammarAccess.getXDataTypeAccess().getNameAssignment_1()); }
+	(rule__XDataType__NameAssignment_1)
+	{ after(grammarAccess.getXDataTypeAccess().getNameAssignment_1()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__2
+rule__XDataType__Group__2
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__DTModel__Group__2__Impl
-	rule__DTModel__Group__3
+	rule__XDataType__Group__2__Impl
+	rule__XDataType__Group__3
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__2__Impl
+rule__XDataType__Group__2__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getDTModelAccess().getLeftCurlyBracketKeyword_2()); }
+	{ before(grammarAccess.getXDataTypeAccess().getLeftCurlyBracketKeyword_2()); }
 	'{'
-	{ after(grammarAccess.getDTModelAccess().getLeftCurlyBracketKeyword_2()); }
+	{ after(grammarAccess.getXDataTypeAccess().getLeftCurlyBracketKeyword_2()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__3
+rule__XDataType__Group__3
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__DTModel__Group__3__Impl
-	rule__DTModel__Group__4
+	rule__XDataType__Group__3__Impl
+	rule__XDataType__Group__4
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__3__Impl
+rule__XDataType__Group__3__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getDTModelAccess().getAttributesAssignment_3()); }
-	(rule__DTModel__AttributesAssignment_3)*
-	{ after(grammarAccess.getDTModelAccess().getAttributesAssignment_3()); }
+	{ before(grammarAccess.getXDataTypeAccess().getAttributesAssignment_3()); }
+	(rule__XDataType__AttributesAssignment_3)*
+	{ after(grammarAccess.getXDataTypeAccess().getAttributesAssignment_3()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__4
+rule__XDataType__Group__4
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__DTModel__Group__4__Impl
+	rule__XDataType__Group__4__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__Group__4__Impl
+rule__XDataType__Group__4__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getDTModelAccess().getRightCurlyBracketKeyword_4()); }
+	{ before(grammarAccess.getXDataTypeAccess().getRightCurlyBracketKeyword_4()); }
 	'}'
-	{ after(grammarAccess.getDTModelAccess().getRightCurlyBracketKeyword_4()); }
+	{ after(grammarAccess.getXDataTypeAccess().getRightCurlyBracketKeyword_4()); }
 )
 ;
 finally {
@@ -916,107 +972,377 @@
 }
 
 
-rule__Assignment__Group__0
+rule__XAssignment__Group__0
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__Assignment__Group__0__Impl
-	rule__Assignment__Group__1
+	rule__XAssignment__Group__0__Impl
+	rule__XAssignment__Group__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__0__Impl
+rule__XAssignment__Group__0__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getAssignmentAccess().getNameAssignment_0()); }
-	(rule__Assignment__NameAssignment_0)
-	{ after(grammarAccess.getAssignmentAccess().getNameAssignment_0()); }
+	{ before(grammarAccess.getXAssignmentAccess().getNameAssignment_0()); }
+	(rule__XAssignment__NameAssignment_0)
+	{ after(grammarAccess.getXAssignmentAccess().getNameAssignment_0()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__1
+rule__XAssignment__Group__1
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__Assignment__Group__1__Impl
-	rule__Assignment__Group__2
+	rule__XAssignment__Group__1__Impl
+	rule__XAssignment__Group__2
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__1__Impl
+rule__XAssignment__Group__1__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1()); }
+	{ before(grammarAccess.getXAssignmentAccess().getEqualsSignKeyword_1()); }
 	'='
-	{ after(grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1()); }
+	{ after(grammarAccess.getXAssignmentAccess().getEqualsSignKeyword_1()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__2
+rule__XAssignment__Group__2
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__Assignment__Group__2__Impl
-	rule__Assignment__Group__3
+	rule__XAssignment__Group__2__Impl
+	rule__XAssignment__Group__3
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__2__Impl
+rule__XAssignment__Group__2__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getAssignmentAccess().getExpressionAssignment_2()); }
-	(rule__Assignment__ExpressionAssignment_2)
-	{ after(grammarAccess.getAssignmentAccess().getExpressionAssignment_2()); }
+	{ before(grammarAccess.getXAssignmentAccess().getExpressionAssignment_2()); }
+	(rule__XAssignment__ExpressionAssignment_2)
+	{ after(grammarAccess.getXAssignmentAccess().getExpressionAssignment_2()); }
 )
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__3
+rule__XAssignment__Group__3
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
-	rule__Assignment__Group__3__Impl
+	rule__XAssignment__Group__3__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__Group__3__Impl
+rule__XAssignment__Group__3__Impl
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 (
-	{ before(grammarAccess.getAssignmentAccess().getSemicolonKeyword_3()); }
+	{ before(grammarAccess.getXAssignmentAccess().getSemicolonKeyword_3()); }
 	';'
-	{ after(grammarAccess.getAssignmentAccess().getSemicolonKeyword_3()); }
+	{ after(grammarAccess.getXAssignmentAccess().getSemicolonKeyword_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__XEnumeration__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumeration__Group__0__Impl
+	rule__XEnumeration__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumerationAccess().getEnumerationKeyword_0()); }
+	'Enumeration'
+	{ after(grammarAccess.getXEnumerationAccess().getEnumerationKeyword_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumeration__Group__1__Impl
+	rule__XEnumeration__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumerationAccess().getNameAssignment_1()); }
+	(rule__XEnumeration__NameAssignment_1)
+	{ after(grammarAccess.getXEnumerationAccess().getNameAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumeration__Group__2__Impl
+	rule__XEnumeration__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumerationAccess().getLeftCurlyBracketKeyword_2()); }
+	'{'
+	{ after(grammarAccess.getXEnumerationAccess().getLeftCurlyBracketKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumeration__Group__3__Impl
+	rule__XEnumeration__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumerationAccess().getLiteralsAssignment_3()); }
+	(rule__XEnumeration__LiteralsAssignment_3)*
+	{ after(grammarAccess.getXEnumerationAccess().getLiteralsAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumeration__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumerationAccess().getRightCurlyBracketKeyword_4()); }
+	'}'
+	{ after(grammarAccess.getXEnumerationAccess().getRightCurlyBracketKeyword_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__XEnumLiteral__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumLiteral__Group__0__Impl
+	rule__XEnumLiteral__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumLiteralAccess().getNameAssignment_0()); }
+	(rule__XEnumLiteral__NameAssignment_0)
+	{ after(grammarAccess.getXEnumLiteralAccess().getNameAssignment_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumLiteral__Group__1__Impl
+	rule__XEnumLiteral__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumLiteralAccess().getGroup_1()); }
+	(rule__XEnumLiteral__Group_1__0)?
+	{ after(grammarAccess.getXEnumLiteralAccess().getGroup_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumLiteral__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumLiteralAccess().getCommentAssignment_2()); }
+	(rule__XEnumLiteral__CommentAssignment_2)?
+	{ after(grammarAccess.getXEnumLiteralAccess().getCommentAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__XEnumLiteral__Group_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumLiteral__Group_1__0__Impl
+	rule__XEnumLiteral__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_1_0()); }
+	'='
+	{ after(grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__XEnumLiteral__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__Group_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getXEnumLiteralAccess().getValueAssignment_1_1()); }
+	(rule__XEnumLiteral__ValueAssignment_1_1)
+	{ after(grammarAccess.getXEnumLiteralAccess().getValueAssignment_1_1()); }
 )
 ;
 finally {
@@ -1321,30 +1647,30 @@
 }
 
 
-rule__DTModel__NameAssignment_1
+rule__XDataType__NameAssignment_1
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getDTModelAccess().getNameIDTerminalRuleCall_1_0()); }
+		{ before(grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_1_0()); }
 		RULE_ID
-		{ after(grammarAccess.getDTModelAccess().getNameIDTerminalRuleCall_1_0()); }
+		{ after(grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_1_0()); }
 	)
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DTModel__AttributesAssignment_3
+rule__XDataType__AttributesAssignment_3
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getDTModelAccess().getAttributesPropertyParserRuleCall_3_0()); }
+		{ before(grammarAccess.getXDataTypeAccess().getAttributesPropertyParserRuleCall_3_0()); }
 		ruleProperty
-		{ after(grammarAccess.getDTModelAccess().getAttributesPropertyParserRuleCall_3_0()); }
+		{ after(grammarAccess.getXDataTypeAccess().getAttributesPropertyParserRuleCall_3_0()); }
 	)
 ;
 finally {
@@ -1445,30 +1771,30 @@
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__NameAssignment_0
+rule__XAssignment__NameAssignment_0
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0()); }
+		{ before(grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0()); }
 		RULE_ID
-		{ after(grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0()); }
+		{ after(grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0()); }
 	)
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Assignment__ExpressionAssignment_2
+rule__XAssignment__ExpressionAssignment_2
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); }
+		{ before(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); }
 		ruleExpressionString
-		{ after(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); }
+		{ after(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); }
 	)
 ;
 finally {
@@ -1520,6 +1846,81 @@
 	restoreStackSize(stackSize);
 }
 
+rule__XEnumeration__NameAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getXEnumerationAccess().getNameIDTerminalRuleCall_1_0()); }
+		RULE_ID
+		{ after(grammarAccess.getXEnumerationAccess().getNameIDTerminalRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumeration__LiteralsAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getXEnumerationAccess().getLiteralsXEnumLiteralParserRuleCall_3_0()); }
+		ruleXEnumLiteral
+		{ after(grammarAccess.getXEnumerationAccess().getLiteralsXEnumLiteralParserRuleCall_3_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__NameAssignment_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_0_0()); }
+		RULE_ID
+		{ after(grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__ValueAssignment_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getXEnumLiteralAccess().getValueValueParserRuleCall_1_1_0()); }
+		ruleValue
+		{ after(grammarAccess.getXEnumLiteralAccess().getValueValueParserRuleCall_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__XEnumLiteral__CommentAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getXEnumLiteralAccess().getCommentVSL_COMMENTTerminalRuleCall_2_0()); }
+		RULE_VSL_COMMENT
+		{ after(grammarAccess.getXEnumLiteralAccess().getCommentVSL_COMMENTTerminalRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 rule__QualifiedName__PathAssignment_0
 	@init {
 		int stackSize = keepStackSize();
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.tokens b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.tokens
index 31022df..4df0c87 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.tokens
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTML.tokens
@@ -1,14 +1,15 @@
 '*'=20
 ','=19
 '-'=18
-'..'=28
+'..'=29
 ':'=24
-'::'=27
+'::'=28
 ';'=26
-'<Undefined>'=29
+'<Undefined>'=30
 '='=25
 'CommObject'=15
 'DataType'=14
+'Enumeration'=27
 '['=16
 ']'=17
 'attribute'=23
@@ -40,3 +41,4 @@
 T__27=27
 T__28=28
 T__29=29
+T__30=30
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLLexer.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLLexer.java
index 93eeffa..397bfa4 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLLexer.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLLexer.java
@@ -22,6 +22,7 @@
     public static final int T__18=18;
     public static final int T__14=14;
     public static final int EOF=-1;
+    public static final int T__30=30;
     public static final int RULE_ID=4;
     public static final int RULE_WS=12;
     public static final int RULE_ANY_OTHER=13;
@@ -321,10 +322,10 @@
         try {
             int _type = T__27;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:24:7: ( '::' )
-            // InternalDTML.g:24:9: '::'
+            // InternalDTML.g:24:7: ( 'Enumeration' )
+            // InternalDTML.g:24:9: 'Enumeration'
             {
-            match("::"); 
+            match("Enumeration"); 
 
 
             }
@@ -342,10 +343,10 @@
         try {
             int _type = T__28;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:25:7: ( '..' )
-            // InternalDTML.g:25:9: '..'
+            // InternalDTML.g:25:7: ( '::' )
+            // InternalDTML.g:25:9: '::'
             {
-            match(".."); 
+            match("::"); 
 
 
             }
@@ -363,10 +364,10 @@
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:26:7: ( '<Undefined>' )
-            // InternalDTML.g:26:9: '<Undefined>'
+            // InternalDTML.g:26:7: ( '..' )
+            // InternalDTML.g:26:9: '..'
             {
-            match("<Undefined>"); 
+            match(".."); 
 
 
             }
@@ -379,17 +380,38 @@
     }
     // $ANTLR end "T__29"
 
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalDTML.g:27:7: ( '<Undefined>' )
+            // InternalDTML.g:27:9: '<Undefined>'
+            {
+            match("<Undefined>"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
     // $ANTLR start "RULE_VSL_COMMENT"
     public final void mRULE_VSL_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_VSL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1636:18: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalDTML.g:1636:20: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:2037:18: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalDTML.g:2037:20: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalDTML.g:1636:25: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalDTML.g:2037:25: (~ ( ( '\\n' | '\\r' ) ) )*
             loop1:
             do {
                 int alt1=2;
@@ -402,7 +424,7 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // InternalDTML.g:1636:25: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalDTML.g:2037:25: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -422,7 +444,7 @@
                 }
             } while (true);
 
-            // InternalDTML.g:1636:41: ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:2037:41: ( ( '\\r' )? '\\n' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -431,9 +453,9 @@
             }
             switch (alt3) {
                 case 1 :
-                    // InternalDTML.g:1636:42: ( '\\r' )? '\\n'
+                    // InternalDTML.g:2037:42: ( '\\r' )? '\\n'
                     {
-                    // InternalDTML.g:1636:42: ( '\\r' )?
+                    // InternalDTML.g:2037:42: ( '\\r' )?
                     int alt2=2;
                     int LA2_0 = input.LA(1);
 
@@ -442,7 +464,7 @@
                     }
                     switch (alt2) {
                         case 1 :
-                            // InternalDTML.g:1636:42: '\\r'
+                            // InternalDTML.g:2037:42: '\\r'
                             {
                             match('\r'); 
 
@@ -474,10 +496,10 @@
         try {
             int _type = RULE_DOUBLE;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1638:13: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // InternalDTML.g:1638:15: ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // InternalDTML.g:2039:13: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // InternalDTML.g:2039:15: ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // InternalDTML.g:1638:15: ( '0' .. '9' )+
+            // InternalDTML.g:2039:15: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -491,7 +513,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // InternalDTML.g:1638:16: '0' .. '9'
+            	    // InternalDTML.g:2039:16: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -508,7 +530,7 @@
             } while (true);
 
             match('.'); 
-            // InternalDTML.g:1638:31: ( '0' .. '9' )+
+            // InternalDTML.g:2039:31: ( '0' .. '9' )+
             int cnt5=0;
             loop5:
             do {
@@ -522,7 +544,7 @@
 
                 switch (alt5) {
             	case 1 :
-            	    // InternalDTML.g:1638:32: '0' .. '9'
+            	    // InternalDTML.g:2039:32: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -554,10 +576,10 @@
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1640:9: ( ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' ) )
-            // InternalDTML.g:1640:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
+            // InternalDTML.g:2041:9: ( ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' ) )
+            // InternalDTML.g:2041:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
             {
-            // InternalDTML.g:1640:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
+            // InternalDTML.g:2041:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
             int alt8=2;
             int LA8_0 = input.LA(1);
 
@@ -575,7 +597,7 @@
             }
             switch (alt8) {
                 case 1 :
-                    // InternalDTML.g:1640:12: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+                    // InternalDTML.g:2041:12: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
                     {
                     if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                         input.consume();
@@ -586,7 +608,7 @@
                         recover(mse);
                         throw mse;}
 
-                    // InternalDTML.g:1640:36: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+                    // InternalDTML.g:2041:36: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
                     loop6:
                     do {
                         int alt6=2;
@@ -623,10 +645,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:1640:70: '\\'' ( options {greedy=false; } : . )* '\\''
+                    // InternalDTML.g:2041:70: '\\'' ( options {greedy=false; } : . )* '\\''
                     {
                     match('\''); 
-                    // InternalDTML.g:1640:75: ( options {greedy=false; } : . )*
+                    // InternalDTML.g:2041:75: ( options {greedy=false; } : . )*
                     loop7:
                     do {
                         int alt7=2;
@@ -642,7 +664,7 @@
 
                         switch (alt7) {
                     	case 1 :
-                    	    // InternalDTML.g:1640:103: .
+                    	    // InternalDTML.g:2041:103: .
                     	    {
                     	    matchAny(); 
 
@@ -677,11 +699,11 @@
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1642:13: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
-            // InternalDTML.g:1642:15: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+            // InternalDTML.g:2043:13: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
+            // InternalDTML.g:2043:15: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
             {
             match('\"'); 
-            // InternalDTML.g:1642:19: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+            // InternalDTML.g:2043:19: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
             loop9:
             do {
                 int alt9=3;
@@ -697,7 +719,7 @@
 
                 switch (alt9) {
             	case 1 :
-            	    // InternalDTML.g:1642:20: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+            	    // InternalDTML.g:2043:20: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
             	    {
             	    match('\\'); 
             	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
@@ -713,7 +735,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // InternalDTML.g:1642:61: ~ ( ( '\\\\' | '\"' ) )
+            	    // InternalDTML.g:2043:61: ~ ( ( '\\\\' | '\"' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -750,8 +772,8 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1644:17: ( '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/' )
-            // InternalDTML.g:1644:19: '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/'
+            // InternalDTML.g:2045:17: ( '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/' )
+            // InternalDTML.g:2045:19: '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
@@ -764,7 +786,7 @@
                 recover(mse);
                 throw mse;}
 
-            // InternalDTML.g:1644:31: ( options {greedy=false; } : . )*
+            // InternalDTML.g:2045:31: ( options {greedy=false; } : . )*
             loop10:
             do {
                 int alt10=2;
@@ -789,7 +811,7 @@
 
                 switch (alt10) {
             	case 1 :
-            	    // InternalDTML.g:1644:59: .
+            	    // InternalDTML.g:2045:59: .
             	    {
             	    matchAny(); 
 
@@ -819,12 +841,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1646:17: ( '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalDTML.g:1646:19: '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:2047:17: ( '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalDTML.g:2047:19: '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalDTML.g:1646:24: (~ ( ( '\\n' | '\\r' | '@' ) ) )*
+            // InternalDTML.g:2047:24: (~ ( ( '\\n' | '\\r' | '@' ) ) )*
             loop11:
             do {
                 int alt11=2;
@@ -837,7 +859,7 @@
 
                 switch (alt11) {
             	case 1 :
-            	    // InternalDTML.g:1646:24: ~ ( ( '\\n' | '\\r' | '@' ) )
+            	    // InternalDTML.g:2047:24: ~ ( ( '\\n' | '\\r' | '@' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='?')||(input.LA(1)>='A' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -857,7 +879,7 @@
                 }
             } while (true);
 
-            // InternalDTML.g:1646:44: ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:2047:44: ( ( '\\r' )? '\\n' )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -866,9 +888,9 @@
             }
             switch (alt13) {
                 case 1 :
-                    // InternalDTML.g:1646:45: ( '\\r' )? '\\n'
+                    // InternalDTML.g:2047:45: ( '\\r' )? '\\n'
                     {
-                    // InternalDTML.g:1646:45: ( '\\r' )?
+                    // InternalDTML.g:2047:45: ( '\\r' )?
                     int alt12=2;
                     int LA12_0 = input.LA(1);
 
@@ -877,7 +899,7 @@
                     }
                     switch (alt12) {
                         case 1 :
-                            // InternalDTML.g:1646:45: '\\r'
+                            // InternalDTML.g:2047:45: '\\r'
                             {
                             match('\r'); 
 
@@ -909,10 +931,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1648:10: ( ( '0' .. '9' )+ )
-            // InternalDTML.g:1648:12: ( '0' .. '9' )+
+            // InternalDTML.g:2049:10: ( ( '0' .. '9' )+ )
+            // InternalDTML.g:2049:12: ( '0' .. '9' )+
             {
-            // InternalDTML.g:1648:12: ( '0' .. '9' )+
+            // InternalDTML.g:2049:12: ( '0' .. '9' )+
             int cnt14=0;
             loop14:
             do {
@@ -926,7 +948,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // InternalDTML.g:1648:13: '0' .. '9'
+            	    // InternalDTML.g:2049:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -958,10 +980,10 @@
         try {
             int _type = RULE_INTEGER_VALUE;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1650:20: ( ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* ) )
-            // InternalDTML.g:1650:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
+            // InternalDTML.g:2051:20: ( ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* ) )
+            // InternalDTML.g:2051:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
             {
-            // InternalDTML.g:1650:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
+            // InternalDTML.g:2051:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
             int alt27=4;
             int LA27_0 = input.LA(1);
 
@@ -1007,9 +1029,9 @@
             }
             switch (alt27) {
                 case 1 :
-                    // InternalDTML.g:1650:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
+                    // InternalDTML.g:2051:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
                     {
-                    // InternalDTML.g:1650:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
+                    // InternalDTML.g:2051:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
                     int alt17=2;
                     int LA17_0 = input.LA(1);
 
@@ -1027,17 +1049,17 @@
                     }
                     switch (alt17) {
                         case 1 :
-                            // InternalDTML.g:1650:24: '0'
+                            // InternalDTML.g:2051:24: '0'
                             {
                             match('0'); 
 
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:1650:28: '1' .. '9' ( ( '_' )? '0' .. '9' )*
+                            // InternalDTML.g:2051:28: '1' .. '9' ( ( '_' )? '0' .. '9' )*
                             {
                             matchRange('1','9'); 
-                            // InternalDTML.g:1650:37: ( ( '_' )? '0' .. '9' )*
+                            // InternalDTML.g:2051:37: ( ( '_' )? '0' .. '9' )*
                             loop16:
                             do {
                                 int alt16=2;
@@ -1050,9 +1072,9 @@
 
                                 switch (alt16) {
                             	case 1 :
-                            	    // InternalDTML.g:1650:38: ( '_' )? '0' .. '9'
+                            	    // InternalDTML.g:2051:38: ( '_' )? '0' .. '9'
                             	    {
-                            	    // InternalDTML.g:1650:38: ( '_' )?
+                            	    // InternalDTML.g:2051:38: ( '_' )?
                             	    int alt15=2;
                             	    int LA15_0 = input.LA(1);
 
@@ -1061,7 +1083,7 @@
                             	    }
                             	    switch (alt15) {
                             	        case 1 :
-                            	            // InternalDTML.g:1650:38: '_'
+                            	            // InternalDTML.g:2051:38: '_'
                             	            {
                             	            match('_'); 
 
@@ -1090,9 +1112,9 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:1650:55: ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )*
+                    // InternalDTML.g:2051:55: ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )*
                     {
-                    // InternalDTML.g:1650:55: ( '0b' | '0B' )
+                    // InternalDTML.g:2051:55: ( '0b' | '0B' )
                     int alt18=2;
                     int LA18_0 = input.LA(1);
 
@@ -1120,7 +1142,7 @@
                     }
                     switch (alt18) {
                         case 1 :
-                            // InternalDTML.g:1650:56: '0b'
+                            // InternalDTML.g:2051:56: '0b'
                             {
                             match("0b"); 
 
@@ -1128,7 +1150,7 @@
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:1650:61: '0B'
+                            // InternalDTML.g:2051:61: '0B'
                             {
                             match("0B"); 
 
@@ -1139,7 +1161,7 @@
                     }
 
                     matchRange('0','1'); 
-                    // InternalDTML.g:1650:76: ( ( '_' )? '0' .. '1' )*
+                    // InternalDTML.g:2051:76: ( ( '_' )? '0' .. '1' )*
                     loop20:
                     do {
                         int alt20=2;
@@ -1152,9 +1174,9 @@
 
                         switch (alt20) {
                     	case 1 :
-                    	    // InternalDTML.g:1650:77: ( '_' )? '0' .. '1'
+                    	    // InternalDTML.g:2051:77: ( '_' )? '0' .. '1'
                     	    {
-                    	    // InternalDTML.g:1650:77: ( '_' )?
+                    	    // InternalDTML.g:2051:77: ( '_' )?
                     	    int alt19=2;
                     	    int LA19_0 = input.LA(1);
 
@@ -1163,7 +1185,7 @@
                     	    }
                     	    switch (alt19) {
                     	        case 1 :
-                    	            // InternalDTML.g:1650:77: '_'
+                    	            // InternalDTML.g:2051:77: '_'
                     	            {
                     	            match('_'); 
 
@@ -1186,9 +1208,9 @@
                     }
                     break;
                 case 3 :
-                    // InternalDTML.g:1650:93: ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
+                    // InternalDTML.g:2051:93: ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
                     {
-                    // InternalDTML.g:1650:93: ( '0x' | '0X' )
+                    // InternalDTML.g:2051:93: ( '0x' | '0X' )
                     int alt21=2;
                     int LA21_0 = input.LA(1);
 
@@ -1216,7 +1238,7 @@
                     }
                     switch (alt21) {
                         case 1 :
-                            // InternalDTML.g:1650:94: '0x'
+                            // InternalDTML.g:2051:94: '0x'
                             {
                             match("0x"); 
 
@@ -1224,7 +1246,7 @@
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:1650:99: '0X'
+                            // InternalDTML.g:2051:99: '0X'
                             {
                             match("0X"); 
 
@@ -1243,7 +1265,7 @@
                         recover(mse);
                         throw mse;}
 
-                    // InternalDTML.g:1650:134: ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
+                    // InternalDTML.g:2051:134: ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
                     loop23:
                     do {
                         int alt23=2;
@@ -1256,9 +1278,9 @@
 
                         switch (alt23) {
                     	case 1 :
-                    	    // InternalDTML.g:1650:135: ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+                    	    // InternalDTML.g:2051:135: ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
                     	    {
-                    	    // InternalDTML.g:1650:135: ( '_' )?
+                    	    // InternalDTML.g:2051:135: ( '_' )?
                     	    int alt22=2;
                     	    int LA22_0 = input.LA(1);
 
@@ -1267,7 +1289,7 @@
                     	    }
                     	    switch (alt22) {
                     	        case 1 :
-                    	            // InternalDTML.g:1650:135: '_'
+                    	            // InternalDTML.g:2051:135: '_'
                     	            {
                     	            match('_'); 
 
@@ -1298,10 +1320,10 @@
                     }
                     break;
                 case 4 :
-                    // InternalDTML.g:1650:171: '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )*
+                    // InternalDTML.g:2051:171: '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )*
                     {
                     match('0'); 
-                    // InternalDTML.g:1650:175: ( '_' )?
+                    // InternalDTML.g:2051:175: ( '_' )?
                     int alt24=2;
                     int LA24_0 = input.LA(1);
 
@@ -1310,7 +1332,7 @@
                     }
                     switch (alt24) {
                         case 1 :
-                            // InternalDTML.g:1650:175: '_'
+                            // InternalDTML.g:2051:175: '_'
                             {
                             match('_'); 
 
@@ -1320,7 +1342,7 @@
                     }
 
                     matchRange('0','7'); 
-                    // InternalDTML.g:1650:189: ( ( '_' )? '0' .. '7' )*
+                    // InternalDTML.g:2051:189: ( ( '_' )? '0' .. '7' )*
                     loop26:
                     do {
                         int alt26=2;
@@ -1333,9 +1355,9 @@
 
                         switch (alt26) {
                     	case 1 :
-                    	    // InternalDTML.g:1650:190: ( '_' )? '0' .. '7'
+                    	    // InternalDTML.g:2051:190: ( '_' )? '0' .. '7'
                     	    {
-                    	    // InternalDTML.g:1650:190: ( '_' )?
+                    	    // InternalDTML.g:2051:190: ( '_' )?
                     	    int alt25=2;
                     	    int LA25_0 = input.LA(1);
 
@@ -1344,7 +1366,7 @@
                     	    }
                     	    switch (alt25) {
                     	        case 1 :
-                    	            // InternalDTML.g:1650:190: '_'
+                    	            // InternalDTML.g:2051:190: '_'
                     	            {
                     	            match('_'); 
 
@@ -1385,10 +1407,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1652:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalDTML.g:1652:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalDTML.g:2053:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalDTML.g:2053:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalDTML.g:1652:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalDTML.g:2053:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt28=0;
             loop28:
             do {
@@ -1442,8 +1464,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:1654:16: ( . )
-            // InternalDTML.g:1654:18: .
+            // InternalDTML.g:2055:16: ( . )
+            // InternalDTML.g:2055:18: .
             {
             matchAny(); 
 
@@ -1458,8 +1480,8 @@
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalDTML.g:1:8: ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER )
-        int alt29=26;
+        // InternalDTML.g:1:8: ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER )
+        int alt29=27;
         alt29 = dfa29.predict(input);
         switch (alt29) {
             case 1 :
@@ -1575,70 +1597,77 @@
                 }
                 break;
             case 17 :
-                // InternalDTML.g:1:106: RULE_VSL_COMMENT
+                // InternalDTML.g:1:106: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 18 :
+                // InternalDTML.g:1:112: RULE_VSL_COMMENT
                 {
                 mRULE_VSL_COMMENT(); 
 
                 }
                 break;
-            case 18 :
-                // InternalDTML.g:1:123: RULE_DOUBLE
+            case 19 :
+                // InternalDTML.g:1:129: RULE_DOUBLE
                 {
                 mRULE_DOUBLE(); 
 
                 }
                 break;
-            case 19 :
-                // InternalDTML.g:1:135: RULE_ID
+            case 20 :
+                // InternalDTML.g:1:141: RULE_ID
                 {
                 mRULE_ID(); 
 
                 }
                 break;
-            case 20 :
-                // InternalDTML.g:1:143: RULE_STRING
+            case 21 :
+                // InternalDTML.g:1:149: RULE_STRING
                 {
                 mRULE_STRING(); 
 
                 }
                 break;
-            case 21 :
-                // InternalDTML.g:1:155: RULE_ML_COMMENT
+            case 22 :
+                // InternalDTML.g:1:161: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT(); 
 
                 }
                 break;
-            case 22 :
-                // InternalDTML.g:1:171: RULE_SL_COMMENT
+            case 23 :
+                // InternalDTML.g:1:177: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT(); 
 
                 }
                 break;
-            case 23 :
-                // InternalDTML.g:1:187: RULE_INT
+            case 24 :
+                // InternalDTML.g:1:193: RULE_INT
                 {
                 mRULE_INT(); 
 
                 }
                 break;
-            case 24 :
-                // InternalDTML.g:1:196: RULE_INTEGER_VALUE
+            case 25 :
+                // InternalDTML.g:1:202: RULE_INTEGER_VALUE
                 {
                 mRULE_INTEGER_VALUE(); 
 
                 }
                 break;
-            case 25 :
-                // InternalDTML.g:1:215: RULE_WS
+            case 26 :
+                // InternalDTML.g:1:221: RULE_WS
                 {
                 mRULE_WS(); 
 
                 }
                 break;
-            case 26 :
-                // InternalDTML.g:1:223: RULE_ANY_OTHER
+            case 27 :
+                // InternalDTML.g:1:229: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -1652,21 +1681,21 @@
 
     protected DFA29 dfa29 = new DFA29(this);
     static final String DFA29_eotS =
-        "\1\uffff\2\31\7\uffff\1\31\1\44\2\uffff\3\27\1\56\1\uffff\2\27\1\56\2\uffff\1\31\1\uffff\1\31\7\uffff\1\31\6\uffff\1\71\3\uffff\1\56\1\uffff\1\56\1\uffff\1\56\1\uffff\3\31\1\71\3\uffff\1\56\14\31\1\112\2\31\1\uffff\1\31\1\116\1\117\2\uffff";
+        "\1\uffff\2\32\7\uffff\1\32\1\45\2\uffff\1\32\3\30\1\60\1\uffff\2\30\1\60\2\uffff\1\32\1\uffff\1\32\7\uffff\1\32\4\uffff\1\32\2\uffff\1\74\3\uffff\1\60\1\uffff\1\60\1\uffff\1\60\1\uffff\4\32\1\74\3\uffff\1\60\20\32\1\122\3\32\1\uffff\1\32\1\127\1\32\1\131\1\uffff\1\32\1\uffff\1\133\1\uffff";
     static final String DFA29_eofS =
-        "\120\uffff";
+        "\134\uffff";
     static final String DFA29_minS =
-        "\1\0\1\141\1\157\7\uffff\1\164\1\72\2\uffff\1\56\1\125\1\52\1\56\1\uffff\2\0\1\56\2\uffff\1\164\1\uffff\1\155\7\uffff\1\164\6\uffff\1\0\3\uffff\1\56\1\uffff\1\56\1\uffff\1\56\1\uffff\1\141\1\155\1\162\1\0\1\12\2\uffff\1\56\1\124\1\117\1\151\1\171\2\142\1\160\1\152\1\165\2\145\1\164\1\60\1\143\1\145\1\uffff\1\164\2\60\2\uffff";
+        "\1\0\1\141\1\157\7\uffff\1\164\1\72\2\uffff\1\156\1\56\1\125\1\52\1\56\1\uffff\2\0\1\56\2\uffff\1\164\1\uffff\1\155\7\uffff\1\164\4\uffff\1\165\2\uffff\1\0\3\uffff\1\56\1\uffff\1\56\1\uffff\1\56\1\uffff\1\141\1\155\1\162\1\155\1\0\1\12\2\uffff\1\56\1\124\1\117\1\151\1\145\1\171\2\142\1\162\1\160\1\152\1\165\1\141\2\145\2\164\1\60\1\143\1\145\1\151\1\uffff\1\164\1\60\1\157\1\60\1\uffff\1\156\1\uffff\1\60\1\uffff";
     static final String DFA29_maxS =
-        "\1\uffff\1\141\1\157\7\uffff\1\164\1\72\2\uffff\1\56\1\125\1\57\1\170\1\uffff\2\uffff\1\137\2\uffff\1\164\1\uffff\1\155\7\uffff\1\164\6\uffff\1\uffff\3\uffff\1\137\1\uffff\1\71\1\uffff\1\137\1\uffff\1\141\1\155\1\162\1\uffff\1\12\2\uffff\1\137\1\124\1\117\1\151\1\171\2\142\1\160\1\152\1\165\2\145\1\164\1\172\1\143\1\145\1\uffff\1\164\2\172\2\uffff";
+        "\1\uffff\1\141\1\157\7\uffff\1\164\1\72\2\uffff\1\156\1\56\1\125\1\57\1\170\1\uffff\2\uffff\1\137\2\uffff\1\164\1\uffff\1\155\7\uffff\1\164\4\uffff\1\165\2\uffff\1\uffff\3\uffff\1\137\1\uffff\1\71\1\uffff\1\137\1\uffff\1\141\1\155\1\162\1\155\1\uffff\1\12\2\uffff\1\137\1\124\1\117\1\151\1\145\1\171\2\142\1\162\1\160\1\152\1\165\1\141\2\145\2\164\1\172\1\143\1\145\1\151\1\uffff\1\164\1\172\1\157\1\172\1\uffff\1\156\1\uffff\1\172\1\uffff";
     static final String DFA29_acceptS =
-        "\3\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11\2\uffff\1\14\1\15\4\uffff\1\23\3\uffff\1\31\1\32\1\uffff\1\23\1\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\uffff\1\16\1\13\1\14\1\15\1\17\1\20\1\uffff\1\25\1\30\1\22\1\uffff\1\27\1\uffff\1\24\1\uffff\1\31\5\uffff\2\21\20\uffff\1\1\3\uffff\1\12\1\2";
+        "\3\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11\2\uffff\1\14\1\15\5\uffff\1\24\3\uffff\1\32\1\33\1\uffff\1\24\1\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\uffff\1\17\1\13\1\14\1\15\1\uffff\1\20\1\21\1\uffff\1\26\1\31\1\23\1\uffff\1\30\1\uffff\1\25\1\uffff\1\32\6\uffff\2\22\25\uffff\1\1\4\uffff\1\12\1\uffff\1\2\1\uffff\1\16";
     static final String DFA29_specialS =
-        "\1\0\22\uffff\1\3\1\2\24\uffff\1\4\14\uffff\1\1\31\uffff}>";
+        "\1\0\23\uffff\1\4\1\2\25\uffff\1\3\15\uffff\1\1\42\uffff}>";
     static final String[] DFA29_transitionS = {
-            "\11\27\2\26\2\27\1\26\22\27\1\26\1\27\1\24\4\27\1\23\2\27\1\7\1\27\1\6\1\5\1\16\1\20\1\21\11\25\1\13\1\15\1\17\1\14\3\27\2\22\1\2\1\1\26\22\1\3\1\27\1\4\1\27\1\22\1\27\1\12\31\22\1\10\1\27\1\11\uff82\27",
-            "\1\30",
-            "\1\32",
+            "\11\30\2\27\2\30\1\27\22\30\1\27\1\30\1\25\4\30\1\24\2\30\1\7\1\30\1\6\1\5\1\17\1\21\1\22\11\26\1\13\1\15\1\20\1\14\3\30\2\23\1\2\1\1\1\16\25\23\1\3\1\30\1\4\1\30\1\23\1\30\1\12\31\23\1\10\1\30\1\11\uff82\30",
+            "\1\31",
+            "\1\33",
             "",
             "",
             "",
@@ -1674,59 +1703,58 @@
             "",
             "",
             "",
-            "\1\42",
             "\1\43",
+            "\1\44",
             "",
             "",
-            "\1\47",
             "\1\50",
-            "\1\52\4\uffff\1\51",
-            "\1\54\1\uffff\10\55\2\57\10\uffff\1\53\25\uffff\1\53\6\uffff\1\53\2\uffff\1\53\25\uffff\1\53",
+            "\1\51",
+            "\1\52",
+            "\1\54\4\uffff\1\53",
+            "\1\56\1\uffff\10\57\2\61\10\uffff\1\55\25\uffff\1\55\6\uffff\1\55\2\uffff\1\55\25\uffff\1\55",
             "",
-            "\0\31",
-            "\0\60",
-            "\1\54\1\uffff\12\61\45\uffff\1\53",
-            "",
-            "",
-            "\1\63",
-            "",
-            "\1\64",
-            "",
-            "",
-            "",
-            "",
-            "",
+            "\0\32",
+            "\0\62",
+            "\1\56\1\uffff\12\63\45\uffff\1\55",
             "",
             "",
             "\1\65",
             "",
+            "\1\66",
             "",
             "",
             "",
             "",
             "",
-            "\12\66\1\70\2\66\1\67\62\66\1\uffff\uffbf\66",
+            "",
+            "",
+            "\1\67",
             "",
             "",
             "",
-            "\1\54\1\uffff\10\72\2\57\45\uffff\1\53",
             "",
-            "\1\54\1\uffff\12\57",
-            "",
-            "\1\54\1\uffff\12\61\45\uffff\1\53",
-            "",
-            "\1\73",
-            "\1\74",
-            "\1\75",
-            "\12\66\1\70\2\66\1\67\62\66\1\uffff\uffbf\66",
             "\1\70",
             "",
             "",
-            "\1\54\1\uffff\10\72\2\57\45\uffff\1\53",
+            "\12\71\1\73\2\71\1\72\62\71\1\uffff\uffbf\71",
+            "",
+            "",
+            "",
+            "\1\56\1\uffff\10\75\2\61\45\uffff\1\55",
+            "",
+            "\1\56\1\uffff\12\61",
+            "",
+            "\1\56\1\uffff\12\63\45\uffff\1\55",
+            "",
             "\1\76",
             "\1\77",
             "\1\100",
             "\1\101",
+            "\12\71\1\73\2\71\1\72\62\71\1\uffff\uffbf\71",
+            "\1\73",
+            "",
+            "",
+            "\1\56\1\uffff\10\75\2\61\45\uffff\1\55",
             "\1\102",
             "\1\103",
             "\1\104",
@@ -1735,14 +1763,27 @@
             "\1\107",
             "\1\110",
             "\1\111",
-            "\12\31\7\uffff\32\31\4\uffff\1\31\1\uffff\32\31",
+            "\1\112",
             "\1\113",
             "\1\114",
-            "",
             "\1\115",
-            "\12\31\7\uffff\32\31\4\uffff\1\31\1\uffff\32\31",
-            "\12\31\7\uffff\32\31\4\uffff\1\31\1\uffff\32\31",
+            "\1\116",
+            "\1\117",
+            "\1\120",
+            "\1\121",
+            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+            "\1\123",
+            "\1\124",
+            "\1\125",
             "",
+            "\1\126",
+            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+            "\1\130",
+            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+            "",
+            "\1\132",
+            "",
+            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
             ""
     };
 
@@ -1776,7 +1817,7 @@
             this.transition = DFA29_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
@@ -1812,73 +1853,75 @@
 
                         else if ( (LA29_0==';') ) {s = 13;}
 
-                        else if ( (LA29_0=='.') ) {s = 14;}
+                        else if ( (LA29_0=='E') ) {s = 14;}
 
-                        else if ( (LA29_0=='<') ) {s = 15;}
+                        else if ( (LA29_0=='.') ) {s = 15;}
 
-                        else if ( (LA29_0=='/') ) {s = 16;}
+                        else if ( (LA29_0=='<') ) {s = 16;}
 
-                        else if ( (LA29_0=='0') ) {s = 17;}
+                        else if ( (LA29_0=='/') ) {s = 17;}
 
-                        else if ( ((LA29_0>='A' && LA29_0<='B')||(LA29_0>='E' && LA29_0<='Z')||LA29_0=='_'||(LA29_0>='b' && LA29_0<='z')) ) {s = 18;}
+                        else if ( (LA29_0=='0') ) {s = 18;}
 
-                        else if ( (LA29_0=='\'') ) {s = 19;}
+                        else if ( ((LA29_0>='A' && LA29_0<='B')||(LA29_0>='F' && LA29_0<='Z')||LA29_0=='_'||(LA29_0>='b' && LA29_0<='z')) ) {s = 19;}
 
-                        else if ( (LA29_0=='\"') ) {s = 20;}
+                        else if ( (LA29_0=='\'') ) {s = 20;}
 
-                        else if ( ((LA29_0>='1' && LA29_0<='9')) ) {s = 21;}
+                        else if ( (LA29_0=='\"') ) {s = 21;}
 
-                        else if ( ((LA29_0>='\t' && LA29_0<='\n')||LA29_0=='\r'||LA29_0==' ') ) {s = 22;}
+                        else if ( ((LA29_0>='1' && LA29_0<='9')) ) {s = 22;}
 
-                        else if ( ((LA29_0>='\u0000' && LA29_0<='\b')||(LA29_0>='\u000B' && LA29_0<='\f')||(LA29_0>='\u000E' && LA29_0<='\u001F')||LA29_0=='!'||(LA29_0>='#' && LA29_0<='&')||(LA29_0>='(' && LA29_0<=')')||LA29_0=='+'||(LA29_0>='>' && LA29_0<='@')||LA29_0=='\\'||LA29_0=='^'||LA29_0=='`'||LA29_0=='|'||(LA29_0>='~' && LA29_0<='\uFFFF')) ) {s = 23;}
+                        else if ( ((LA29_0>='\t' && LA29_0<='\n')||LA29_0=='\r'||LA29_0==' ') ) {s = 23;}
+
+                        else if ( ((LA29_0>='\u0000' && LA29_0<='\b')||(LA29_0>='\u000B' && LA29_0<='\f')||(LA29_0>='\u000E' && LA29_0<='\u001F')||LA29_0=='!'||(LA29_0>='#' && LA29_0<='&')||(LA29_0>='(' && LA29_0<=')')||LA29_0=='+'||(LA29_0>='>' && LA29_0<='@')||LA29_0=='\\'||LA29_0=='^'||LA29_0=='`'||LA29_0=='|'||(LA29_0>='~' && LA29_0<='\uFFFF')) ) {s = 24;}
 
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA29_54 = input.LA(1);
+                        int LA29_57 = input.LA(1);
 
                         s = -1;
-                        if ( (LA29_54=='\r') ) {s = 55;}
+                        if ( (LA29_57=='\r') ) {s = 58;}
 
-                        else if ( (LA29_54=='\n') ) {s = 56;}
+                        else if ( (LA29_57=='\n') ) {s = 59;}
 
-                        else if ( ((LA29_54>='\u0000' && LA29_54<='\t')||(LA29_54>='\u000B' && LA29_54<='\f')||(LA29_54>='\u000E' && LA29_54<='?')||(LA29_54>='A' && LA29_54<='\uFFFF')) ) {s = 54;}
+                        else if ( ((LA29_57>='\u0000' && LA29_57<='\t')||(LA29_57>='\u000B' && LA29_57<='\f')||(LA29_57>='\u000E' && LA29_57<='?')||(LA29_57>='A' && LA29_57<='\uFFFF')) ) {s = 57;}
 
-                        else s = 57;
+                        else s = 60;
 
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA29_20 = input.LA(1);
+                        int LA29_21 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA29_20>='\u0000' && LA29_20<='\uFFFF')) ) {s = 48;}
+                        if ( ((LA29_21>='\u0000' && LA29_21<='\uFFFF')) ) {s = 50;}
 
-                        else s = 23;
+                        else s = 24;
 
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA29_19 = input.LA(1);
+                        int LA29_43 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA29_19>='\u0000' && LA29_19<='\uFFFF')) ) {s = 25;}
+                        if ( ((LA29_43>='\u0000' && LA29_43<='\t')||(LA29_43>='\u000B' && LA29_43<='\f')||(LA29_43>='\u000E' && LA29_43<='?')||(LA29_43>='A' && LA29_43<='\uFFFF')) ) {s = 57;}
 
-                        else s = 23;
+                        else if ( (LA29_43=='\r') ) {s = 58;}
+
+                        else if ( (LA29_43=='\n') ) {s = 59;}
+
+                        else s = 60;
 
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA29_41 = input.LA(1);
+                        int LA29_20 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA29_41>='\u0000' && LA29_41<='\t')||(LA29_41>='\u000B' && LA29_41<='\f')||(LA29_41>='\u000E' && LA29_41<='?')||(LA29_41>='A' && LA29_41<='\uFFFF')) ) {s = 54;}
+                        if ( ((LA29_20>='\u0000' && LA29_20<='\uFFFF')) ) {s = 26;}
 
-                        else if ( (LA29_41=='\r') ) {s = 55;}
-
-                        else if ( (LA29_41=='\n') ) {s = 56;}
-
-                        else s = 57;
+                        else s = 24;
 
                         if ( s>=0 ) return s;
                         break;
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLParser.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLParser.java
index 6ea650b..2f22362 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLParser.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ide/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ide/contentassist/antlr/internal/InternalDTMLParser.java
@@ -22,7 +22,7 @@
 @SuppressWarnings("all")
 public class InternalDTMLParser extends AbstractInternalContentAssistParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_DOUBLE", "RULE_VSL_COMMENT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_INTEGER_VALUE", "RULE_WS", "RULE_ANY_OTHER", "'DataType'", "'CommObject'", "'['", "']'", "'-'", "','", "'*'", "'{'", "'}'", "'attribute'", "':'", "'='", "';'", "'::'", "'..'", "'<Undefined>'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_DOUBLE", "RULE_VSL_COMMENT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_INTEGER_VALUE", "RULE_WS", "RULE_ANY_OTHER", "'DataType'", "'CommObject'", "'['", "']'", "'-'", "','", "'*'", "'{'", "'}'", "'attribute'", "':'", "'='", "';'", "'Enumeration'", "'::'", "'..'", "'<Undefined>'"
     };
     public static final int RULE_STRING=8;
     public static final int RULE_SL_COMMENT=10;
@@ -34,6 +34,7 @@
     public static final int T__18=18;
     public static final int T__14=14;
     public static final int EOF=-1;
+    public static final int T__30=30;
     public static final int RULE_ID=4;
     public static final int RULE_WS=12;
     public static final int RULE_ANY_OTHER=13;
@@ -164,20 +165,20 @@
     // $ANTLR end "ruleModel"
 
 
-    // $ANTLR start "entryRuleDTModel"
-    // InternalDTML.g:78:1: entryRuleDTModel : ruleDTModel EOF ;
-    public final void entryRuleDTModel() throws RecognitionException {
+    // $ANTLR start "entryRuleXDataType"
+    // InternalDTML.g:78:1: entryRuleXDataType : ruleXDataType EOF ;
+    public final void entryRuleXDataType() throws RecognitionException {
         try {
-            // InternalDTML.g:79:1: ( ruleDTModel EOF )
-            // InternalDTML.g:80:1: ruleDTModel EOF
+            // InternalDTML.g:79:1: ( ruleXDataType EOF )
+            // InternalDTML.g:80:1: ruleXDataType EOF
             {
-             before(grammarAccess.getDTModelRule()); 
+             before(grammarAccess.getXDataTypeRule()); 
             pushFollow(FOLLOW_1);
-            ruleDTModel();
+            ruleXDataType();
 
             state._fsp--;
 
-             after(grammarAccess.getDTModelRule()); 
+             after(grammarAccess.getXDataTypeRule()); 
             match(input,EOF,FOLLOW_2); 
 
             }
@@ -191,35 +192,35 @@
         }
         return ;
     }
-    // $ANTLR end "entryRuleDTModel"
+    // $ANTLR end "entryRuleXDataType"
 
 
-    // $ANTLR start "ruleDTModel"
-    // InternalDTML.g:87:1: ruleDTModel : ( ( rule__DTModel__Group__0 ) ) ;
-    public final void ruleDTModel() throws RecognitionException {
+    // $ANTLR start "ruleXDataType"
+    // InternalDTML.g:87:1: ruleXDataType : ( ( rule__XDataType__Group__0 ) ) ;
+    public final void ruleXDataType() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:91:2: ( ( ( rule__DTModel__Group__0 ) ) )
-            // InternalDTML.g:92:2: ( ( rule__DTModel__Group__0 ) )
+            // InternalDTML.g:91:2: ( ( ( rule__XDataType__Group__0 ) ) )
+            // InternalDTML.g:92:2: ( ( rule__XDataType__Group__0 ) )
             {
-            // InternalDTML.g:92:2: ( ( rule__DTModel__Group__0 ) )
-            // InternalDTML.g:93:3: ( rule__DTModel__Group__0 )
+            // InternalDTML.g:92:2: ( ( rule__XDataType__Group__0 ) )
+            // InternalDTML.g:93:3: ( rule__XDataType__Group__0 )
             {
-             before(grammarAccess.getDTModelAccess().getGroup()); 
-            // InternalDTML.g:94:3: ( rule__DTModel__Group__0 )
-            // InternalDTML.g:94:4: rule__DTModel__Group__0
+             before(grammarAccess.getXDataTypeAccess().getGroup()); 
+            // InternalDTML.g:94:3: ( rule__XDataType__Group__0 )
+            // InternalDTML.g:94:4: rule__XDataType__Group__0
             {
             pushFollow(FOLLOW_2);
-            rule__DTModel__Group__0();
+            rule__XDataType__Group__0();
 
             state._fsp--;
 
 
             }
 
-             after(grammarAccess.getDTModelAccess().getGroup()); 
+             after(grammarAccess.getXDataTypeAccess().getGroup()); 
 
             }
 
@@ -238,7 +239,7 @@
         }
         return ;
     }
-    // $ANTLR end "ruleDTModel"
+    // $ANTLR end "ruleXDataType"
 
 
     // $ANTLR start "entryRuleDTKey"
@@ -395,20 +396,20 @@
     // $ANTLR end "ruleProperty"
 
 
-    // $ANTLR start "entryRuleAssignment"
-    // InternalDTML.g:153:1: entryRuleAssignment : ruleAssignment EOF ;
-    public final void entryRuleAssignment() throws RecognitionException {
+    // $ANTLR start "entryRuleXAssignment"
+    // InternalDTML.g:153:1: entryRuleXAssignment : ruleXAssignment EOF ;
+    public final void entryRuleXAssignment() throws RecognitionException {
         try {
-            // InternalDTML.g:154:1: ( ruleAssignment EOF )
-            // InternalDTML.g:155:1: ruleAssignment EOF
+            // InternalDTML.g:154:1: ( ruleXAssignment EOF )
+            // InternalDTML.g:155:1: ruleXAssignment EOF
             {
-             before(grammarAccess.getAssignmentRule()); 
+             before(grammarAccess.getXAssignmentRule()); 
             pushFollow(FOLLOW_1);
-            ruleAssignment();
+            ruleXAssignment();
 
             state._fsp--;
 
-             after(grammarAccess.getAssignmentRule()); 
+             after(grammarAccess.getXAssignmentRule()); 
             match(input,EOF,FOLLOW_2); 
 
             }
@@ -422,35 +423,35 @@
         }
         return ;
     }
-    // $ANTLR end "entryRuleAssignment"
+    // $ANTLR end "entryRuleXAssignment"
 
 
-    // $ANTLR start "ruleAssignment"
-    // InternalDTML.g:162:1: ruleAssignment : ( ( rule__Assignment__Group__0 ) ) ;
-    public final void ruleAssignment() throws RecognitionException {
+    // $ANTLR start "ruleXAssignment"
+    // InternalDTML.g:162:1: ruleXAssignment : ( ( rule__XAssignment__Group__0 ) ) ;
+    public final void ruleXAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:166:2: ( ( ( rule__Assignment__Group__0 ) ) )
-            // InternalDTML.g:167:2: ( ( rule__Assignment__Group__0 ) )
+            // InternalDTML.g:166:2: ( ( ( rule__XAssignment__Group__0 ) ) )
+            // InternalDTML.g:167:2: ( ( rule__XAssignment__Group__0 ) )
             {
-            // InternalDTML.g:167:2: ( ( rule__Assignment__Group__0 ) )
-            // InternalDTML.g:168:3: ( rule__Assignment__Group__0 )
+            // InternalDTML.g:167:2: ( ( rule__XAssignment__Group__0 ) )
+            // InternalDTML.g:168:3: ( rule__XAssignment__Group__0 )
             {
-             before(grammarAccess.getAssignmentAccess().getGroup()); 
-            // InternalDTML.g:169:3: ( rule__Assignment__Group__0 )
-            // InternalDTML.g:169:4: rule__Assignment__Group__0
+             before(grammarAccess.getXAssignmentAccess().getGroup()); 
+            // InternalDTML.g:169:3: ( rule__XAssignment__Group__0 )
+            // InternalDTML.g:169:4: rule__XAssignment__Group__0
             {
             pushFollow(FOLLOW_2);
-            rule__Assignment__Group__0();
+            rule__XAssignment__Group__0();
 
             state._fsp--;
 
 
             }
 
-             after(grammarAccess.getAssignmentAccess().getGroup()); 
+             after(grammarAccess.getXAssignmentAccess().getGroup()); 
 
             }
 
@@ -469,7 +470,7 @@
         }
         return ;
     }
-    // $ANTLR end "ruleAssignment"
+    // $ANTLR end "ruleXAssignment"
 
 
     // $ANTLR start "entryRuleExpressionString"
@@ -644,12 +645,166 @@
     // $ANTLR end "ruleValue"
 
 
+    // $ANTLR start "entryRuleXEnumeration"
+    // InternalDTML.g:228:1: entryRuleXEnumeration : ruleXEnumeration EOF ;
+    public final void entryRuleXEnumeration() throws RecognitionException {
+        try {
+            // InternalDTML.g:229:1: ( ruleXEnumeration EOF )
+            // InternalDTML.g:230:1: ruleXEnumeration EOF
+            {
+             before(grammarAccess.getXEnumerationRule()); 
+            pushFollow(FOLLOW_1);
+            ruleXEnumeration();
+
+            state._fsp--;
+
+             after(grammarAccess.getXEnumerationRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleXEnumeration"
+
+
+    // $ANTLR start "ruleXEnumeration"
+    // InternalDTML.g:237:1: ruleXEnumeration : ( ( rule__XEnumeration__Group__0 ) ) ;
+    public final void ruleXEnumeration() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:241:2: ( ( ( rule__XEnumeration__Group__0 ) ) )
+            // InternalDTML.g:242:2: ( ( rule__XEnumeration__Group__0 ) )
+            {
+            // InternalDTML.g:242:2: ( ( rule__XEnumeration__Group__0 ) )
+            // InternalDTML.g:243:3: ( rule__XEnumeration__Group__0 )
+            {
+             before(grammarAccess.getXEnumerationAccess().getGroup()); 
+            // InternalDTML.g:244:3: ( rule__XEnumeration__Group__0 )
+            // InternalDTML.g:244:4: rule__XEnumeration__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getXEnumerationAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleXEnumeration"
+
+
+    // $ANTLR start "entryRuleXEnumLiteral"
+    // InternalDTML.g:253:1: entryRuleXEnumLiteral : ruleXEnumLiteral EOF ;
+    public final void entryRuleXEnumLiteral() throws RecognitionException {
+        try {
+            // InternalDTML.g:254:1: ( ruleXEnumLiteral EOF )
+            // InternalDTML.g:255:1: ruleXEnumLiteral EOF
+            {
+             before(grammarAccess.getXEnumLiteralRule()); 
+            pushFollow(FOLLOW_1);
+            ruleXEnumLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getXEnumLiteralRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleXEnumLiteral"
+
+
+    // $ANTLR start "ruleXEnumLiteral"
+    // InternalDTML.g:262:1: ruleXEnumLiteral : ( ( rule__XEnumLiteral__Group__0 ) ) ;
+    public final void ruleXEnumLiteral() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:266:2: ( ( ( rule__XEnumLiteral__Group__0 ) ) )
+            // InternalDTML.g:267:2: ( ( rule__XEnumLiteral__Group__0 ) )
+            {
+            // InternalDTML.g:267:2: ( ( rule__XEnumLiteral__Group__0 ) )
+            // InternalDTML.g:268:3: ( rule__XEnumLiteral__Group__0 )
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getGroup()); 
+            // InternalDTML.g:269:3: ( rule__XEnumLiteral__Group__0 )
+            // InternalDTML.g:269:4: rule__XEnumLiteral__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getXEnumLiteralAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleXEnumLiteral"
+
+
     // $ANTLR start "entryRuleQualifiedName"
-    // InternalDTML.g:228:1: entryRuleQualifiedName : ruleQualifiedName EOF ;
+    // InternalDTML.g:278:1: entryRuleQualifiedName : ruleQualifiedName EOF ;
     public final void entryRuleQualifiedName() throws RecognitionException {
         try {
-            // InternalDTML.g:229:1: ( ruleQualifiedName EOF )
-            // InternalDTML.g:230:1: ruleQualifiedName EOF
+            // InternalDTML.g:279:1: ( ruleQualifiedName EOF )
+            // InternalDTML.g:280:1: ruleQualifiedName EOF
             {
              before(grammarAccess.getQualifiedNameRule()); 
             pushFollow(FOLLOW_1);
@@ -675,21 +830,21 @@
 
 
     // $ANTLR start "ruleQualifiedName"
-    // InternalDTML.g:237:1: ruleQualifiedName : ( ( rule__QualifiedName__Group__0 ) ) ;
+    // InternalDTML.g:287:1: ruleQualifiedName : ( ( rule__QualifiedName__Group__0 ) ) ;
     public final void ruleQualifiedName() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:241:2: ( ( ( rule__QualifiedName__Group__0 ) ) )
-            // InternalDTML.g:242:2: ( ( rule__QualifiedName__Group__0 ) )
+            // InternalDTML.g:291:2: ( ( ( rule__QualifiedName__Group__0 ) ) )
+            // InternalDTML.g:292:2: ( ( rule__QualifiedName__Group__0 ) )
             {
-            // InternalDTML.g:242:2: ( ( rule__QualifiedName__Group__0 ) )
-            // InternalDTML.g:243:3: ( rule__QualifiedName__Group__0 )
+            // InternalDTML.g:292:2: ( ( rule__QualifiedName__Group__0 ) )
+            // InternalDTML.g:293:3: ( rule__QualifiedName__Group__0 )
             {
              before(grammarAccess.getQualifiedNameAccess().getGroup()); 
-            // InternalDTML.g:244:3: ( rule__QualifiedName__Group__0 )
-            // InternalDTML.g:244:4: rule__QualifiedName__Group__0
+            // InternalDTML.g:294:3: ( rule__QualifiedName__Group__0 )
+            // InternalDTML.g:294:4: rule__QualifiedName__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__QualifiedName__Group__0();
@@ -722,11 +877,11 @@
 
 
     // $ANTLR start "entryRuleTypeRule"
-    // InternalDTML.g:253:1: entryRuleTypeRule : ruleTypeRule EOF ;
+    // InternalDTML.g:303:1: entryRuleTypeRule : ruleTypeRule EOF ;
     public final void entryRuleTypeRule() throws RecognitionException {
         try {
-            // InternalDTML.g:254:1: ( ruleTypeRule EOF )
-            // InternalDTML.g:255:1: ruleTypeRule EOF
+            // InternalDTML.g:304:1: ( ruleTypeRule EOF )
+            // InternalDTML.g:305:1: ruleTypeRule EOF
             {
              before(grammarAccess.getTypeRuleRule()); 
             pushFollow(FOLLOW_1);
@@ -752,21 +907,21 @@
 
 
     // $ANTLR start "ruleTypeRule"
-    // InternalDTML.g:262:1: ruleTypeRule : ( ( rule__TypeRule__Group__0 ) ) ;
+    // InternalDTML.g:312:1: ruleTypeRule : ( ( rule__TypeRule__Group__0 ) ) ;
     public final void ruleTypeRule() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:266:2: ( ( ( rule__TypeRule__Group__0 ) ) )
-            // InternalDTML.g:267:2: ( ( rule__TypeRule__Group__0 ) )
+            // InternalDTML.g:316:2: ( ( ( rule__TypeRule__Group__0 ) ) )
+            // InternalDTML.g:317:2: ( ( rule__TypeRule__Group__0 ) )
             {
-            // InternalDTML.g:267:2: ( ( rule__TypeRule__Group__0 ) )
-            // InternalDTML.g:268:3: ( rule__TypeRule__Group__0 )
+            // InternalDTML.g:317:2: ( ( rule__TypeRule__Group__0 ) )
+            // InternalDTML.g:318:3: ( rule__TypeRule__Group__0 )
             {
              before(grammarAccess.getTypeRuleAccess().getGroup()); 
-            // InternalDTML.g:269:3: ( rule__TypeRule__Group__0 )
-            // InternalDTML.g:269:4: rule__TypeRule__Group__0
+            // InternalDTML.g:319:3: ( rule__TypeRule__Group__0 )
+            // InternalDTML.g:319:4: rule__TypeRule__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__TypeRule__Group__0();
@@ -799,11 +954,11 @@
 
 
     // $ANTLR start "entryRuleMultiplicityRule"
-    // InternalDTML.g:278:1: entryRuleMultiplicityRule : ruleMultiplicityRule EOF ;
+    // InternalDTML.g:328:1: entryRuleMultiplicityRule : ruleMultiplicityRule EOF ;
     public final void entryRuleMultiplicityRule() throws RecognitionException {
         try {
-            // InternalDTML.g:279:1: ( ruleMultiplicityRule EOF )
-            // InternalDTML.g:280:1: ruleMultiplicityRule EOF
+            // InternalDTML.g:329:1: ( ruleMultiplicityRule EOF )
+            // InternalDTML.g:330:1: ruleMultiplicityRule EOF
             {
              before(grammarAccess.getMultiplicityRuleRule()); 
             pushFollow(FOLLOW_1);
@@ -829,21 +984,21 @@
 
 
     // $ANTLR start "ruleMultiplicityRule"
-    // InternalDTML.g:287:1: ruleMultiplicityRule : ( ( rule__MultiplicityRule__Group__0 ) ) ;
+    // InternalDTML.g:337:1: ruleMultiplicityRule : ( ( rule__MultiplicityRule__Group__0 ) ) ;
     public final void ruleMultiplicityRule() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:291:2: ( ( ( rule__MultiplicityRule__Group__0 ) ) )
-            // InternalDTML.g:292:2: ( ( rule__MultiplicityRule__Group__0 ) )
+            // InternalDTML.g:341:2: ( ( ( rule__MultiplicityRule__Group__0 ) ) )
+            // InternalDTML.g:342:2: ( ( rule__MultiplicityRule__Group__0 ) )
             {
-            // InternalDTML.g:292:2: ( ( rule__MultiplicityRule__Group__0 ) )
-            // InternalDTML.g:293:3: ( rule__MultiplicityRule__Group__0 )
+            // InternalDTML.g:342:2: ( ( rule__MultiplicityRule__Group__0 ) )
+            // InternalDTML.g:343:3: ( rule__MultiplicityRule__Group__0 )
             {
              before(grammarAccess.getMultiplicityRuleAccess().getGroup()); 
-            // InternalDTML.g:294:3: ( rule__MultiplicityRule__Group__0 )
-            // InternalDTML.g:294:4: rule__MultiplicityRule__Group__0
+            // InternalDTML.g:344:3: ( rule__MultiplicityRule__Group__0 )
+            // InternalDTML.g:344:4: rule__MultiplicityRule__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__MultiplicityRule__Group__0();
@@ -876,11 +1031,11 @@
 
 
     // $ANTLR start "entryRuleBoundSpecification"
-    // InternalDTML.g:303:1: entryRuleBoundSpecification : ruleBoundSpecification EOF ;
+    // InternalDTML.g:353:1: entryRuleBoundSpecification : ruleBoundSpecification EOF ;
     public final void entryRuleBoundSpecification() throws RecognitionException {
         try {
-            // InternalDTML.g:304:1: ( ruleBoundSpecification EOF )
-            // InternalDTML.g:305:1: ruleBoundSpecification EOF
+            // InternalDTML.g:354:1: ( ruleBoundSpecification EOF )
+            // InternalDTML.g:355:1: ruleBoundSpecification EOF
             {
              before(grammarAccess.getBoundSpecificationRule()); 
             pushFollow(FOLLOW_1);
@@ -906,21 +1061,21 @@
 
 
     // $ANTLR start "ruleBoundSpecification"
-    // InternalDTML.g:312:1: ruleBoundSpecification : ( ( rule__BoundSpecification__ValueAssignment ) ) ;
+    // InternalDTML.g:362:1: ruleBoundSpecification : ( ( rule__BoundSpecification__ValueAssignment ) ) ;
     public final void ruleBoundSpecification() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:316:2: ( ( ( rule__BoundSpecification__ValueAssignment ) ) )
-            // InternalDTML.g:317:2: ( ( rule__BoundSpecification__ValueAssignment ) )
+            // InternalDTML.g:366:2: ( ( ( rule__BoundSpecification__ValueAssignment ) ) )
+            // InternalDTML.g:367:2: ( ( rule__BoundSpecification__ValueAssignment ) )
             {
-            // InternalDTML.g:317:2: ( ( rule__BoundSpecification__ValueAssignment ) )
-            // InternalDTML.g:318:3: ( rule__BoundSpecification__ValueAssignment )
+            // InternalDTML.g:367:2: ( ( rule__BoundSpecification__ValueAssignment ) )
+            // InternalDTML.g:368:3: ( rule__BoundSpecification__ValueAssignment )
             {
              before(grammarAccess.getBoundSpecificationAccess().getValueAssignment()); 
-            // InternalDTML.g:319:3: ( rule__BoundSpecification__ValueAssignment )
-            // InternalDTML.g:319:4: rule__BoundSpecification__ValueAssignment
+            // InternalDTML.g:369:3: ( rule__BoundSpecification__ValueAssignment )
+            // InternalDTML.g:369:4: rule__BoundSpecification__ValueAssignment
             {
             pushFollow(FOLLOW_2);
             rule__BoundSpecification__ValueAssignment();
@@ -953,11 +1108,11 @@
 
 
     // $ANTLR start "entryRuleUnlimitedLiteral"
-    // InternalDTML.g:328:1: entryRuleUnlimitedLiteral : ruleUnlimitedLiteral EOF ;
+    // InternalDTML.g:378:1: entryRuleUnlimitedLiteral : ruleUnlimitedLiteral EOF ;
     public final void entryRuleUnlimitedLiteral() throws RecognitionException {
         try {
-            // InternalDTML.g:329:1: ( ruleUnlimitedLiteral EOF )
-            // InternalDTML.g:330:1: ruleUnlimitedLiteral EOF
+            // InternalDTML.g:379:1: ( ruleUnlimitedLiteral EOF )
+            // InternalDTML.g:380:1: ruleUnlimitedLiteral EOF
             {
              before(grammarAccess.getUnlimitedLiteralRule()); 
             pushFollow(FOLLOW_1);
@@ -983,21 +1138,21 @@
 
 
     // $ANTLR start "ruleUnlimitedLiteral"
-    // InternalDTML.g:337:1: ruleUnlimitedLiteral : ( ( rule__UnlimitedLiteral__Alternatives ) ) ;
+    // InternalDTML.g:387:1: ruleUnlimitedLiteral : ( ( rule__UnlimitedLiteral__Alternatives ) ) ;
     public final void ruleUnlimitedLiteral() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:341:2: ( ( ( rule__UnlimitedLiteral__Alternatives ) ) )
-            // InternalDTML.g:342:2: ( ( rule__UnlimitedLiteral__Alternatives ) )
+            // InternalDTML.g:391:2: ( ( ( rule__UnlimitedLiteral__Alternatives ) ) )
+            // InternalDTML.g:392:2: ( ( rule__UnlimitedLiteral__Alternatives ) )
             {
-            // InternalDTML.g:342:2: ( ( rule__UnlimitedLiteral__Alternatives ) )
-            // InternalDTML.g:343:3: ( rule__UnlimitedLiteral__Alternatives )
+            // InternalDTML.g:392:2: ( ( rule__UnlimitedLiteral__Alternatives ) )
+            // InternalDTML.g:393:3: ( rule__UnlimitedLiteral__Alternatives )
             {
              before(grammarAccess.getUnlimitedLiteralAccess().getAlternatives()); 
-            // InternalDTML.g:344:3: ( rule__UnlimitedLiteral__Alternatives )
-            // InternalDTML.g:344:4: rule__UnlimitedLiteral__Alternatives
+            // InternalDTML.g:394:3: ( rule__UnlimitedLiteral__Alternatives )
+            // InternalDTML.g:394:4: rule__UnlimitedLiteral__Alternatives
             {
             pushFollow(FOLLOW_2);
             rule__UnlimitedLiteral__Alternatives();
@@ -1030,42 +1185,52 @@
 
 
     // $ANTLR start "rule__Model__Alternatives"
-    // InternalDTML.g:352:1: rule__Model__Alternatives : ( ( ruleDTModel ) | ( ruleAssignment ) );
+    // InternalDTML.g:402:1: rule__Model__Alternatives : ( ( ruleXDataType ) | ( ruleXAssignment ) | ( ruleXEnumeration ) );
     public final void rule__Model__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:356:1: ( ( ruleDTModel ) | ( ruleAssignment ) )
-            int alt2=2;
-            int LA2_0 = input.LA(1);
-
-            if ( ((LA2_0>=14 && LA2_0<=15)) ) {
+            // InternalDTML.g:406:1: ( ( ruleXDataType ) | ( ruleXAssignment ) | ( ruleXEnumeration ) )
+            int alt2=3;
+            switch ( input.LA(1) ) {
+            case 14:
+            case 15:
+                {
                 alt2=1;
-            }
-            else if ( (LA2_0==RULE_ID) ) {
+                }
+                break;
+            case RULE_ID:
+                {
                 alt2=2;
-            }
-            else {
+                }
+                break;
+            case 27:
+                {
+                alt2=3;
+                }
+                break;
+            default:
                 NoViableAltException nvae =
                     new NoViableAltException("", 2, 0, input);
 
                 throw nvae;
             }
+
             switch (alt2) {
                 case 1 :
-                    // InternalDTML.g:357:2: ( ruleDTModel )
+                    // InternalDTML.g:407:2: ( ruleXDataType )
                     {
-                    // InternalDTML.g:357:2: ( ruleDTModel )
-                    // InternalDTML.g:358:3: ruleDTModel
+                    // InternalDTML.g:407:2: ( ruleXDataType )
+                    // InternalDTML.g:408:3: ruleXDataType
                     {
-                     before(grammarAccess.getModelAccess().getDTModelParserRuleCall_0()); 
+                     before(grammarAccess.getModelAccess().getXDataTypeParserRuleCall_0()); 
                     pushFollow(FOLLOW_2);
-                    ruleDTModel();
+                    ruleXDataType();
 
                     state._fsp--;
 
-                     after(grammarAccess.getModelAccess().getDTModelParserRuleCall_0()); 
+                     after(grammarAccess.getModelAccess().getXDataTypeParserRuleCall_0()); 
 
                     }
 
@@ -1073,18 +1238,37 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:363:2: ( ruleAssignment )
+                    // InternalDTML.g:413:2: ( ruleXAssignment )
                     {
-                    // InternalDTML.g:363:2: ( ruleAssignment )
-                    // InternalDTML.g:364:3: ruleAssignment
+                    // InternalDTML.g:413:2: ( ruleXAssignment )
+                    // InternalDTML.g:414:3: ruleXAssignment
                     {
-                     before(grammarAccess.getModelAccess().getAssignmentParserRuleCall_1()); 
+                     before(grammarAccess.getModelAccess().getXAssignmentParserRuleCall_1()); 
                     pushFollow(FOLLOW_2);
-                    ruleAssignment();
+                    ruleXAssignment();
 
                     state._fsp--;
 
-                     after(grammarAccess.getModelAccess().getAssignmentParserRuleCall_1()); 
+                     after(grammarAccess.getModelAccess().getXAssignmentParserRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalDTML.g:419:2: ( ruleXEnumeration )
+                    {
+                    // InternalDTML.g:419:2: ( ruleXEnumeration )
+                    // InternalDTML.g:420:3: ruleXEnumeration
+                    {
+                     before(grammarAccess.getModelAccess().getXEnumerationParserRuleCall_2()); 
+                    pushFollow(FOLLOW_2);
+                    ruleXEnumeration();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getModelAccess().getXEnumerationParserRuleCall_2()); 
 
                     }
 
@@ -1109,13 +1293,13 @@
 
 
     // $ANTLR start "rule__DTKey__Alternatives"
-    // InternalDTML.g:373:1: rule__DTKey__Alternatives : ( ( 'DataType' ) | ( 'CommObject' ) );
+    // InternalDTML.g:429:1: rule__DTKey__Alternatives : ( ( 'DataType' ) | ( 'CommObject' ) );
     public final void rule__DTKey__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:377:1: ( ( 'DataType' ) | ( 'CommObject' ) )
+            // InternalDTML.g:433:1: ( ( 'DataType' ) | ( 'CommObject' ) )
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -1133,10 +1317,10 @@
             }
             switch (alt3) {
                 case 1 :
-                    // InternalDTML.g:378:2: ( 'DataType' )
+                    // InternalDTML.g:434:2: ( 'DataType' )
                     {
-                    // InternalDTML.g:378:2: ( 'DataType' )
-                    // InternalDTML.g:379:3: 'DataType'
+                    // InternalDTML.g:434:2: ( 'DataType' )
+                    // InternalDTML.g:435:3: 'DataType'
                     {
                      before(grammarAccess.getDTKeyAccess().getDataTypeKeyword_0()); 
                     match(input,14,FOLLOW_2); 
@@ -1148,10 +1332,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:384:2: ( 'CommObject' )
+                    // InternalDTML.g:440:2: ( 'CommObject' )
                     {
-                    // InternalDTML.g:384:2: ( 'CommObject' )
-                    // InternalDTML.g:385:3: 'CommObject'
+                    // InternalDTML.g:440:2: ( 'CommObject' )
+                    // InternalDTML.g:441:3: 'CommObject'
                     {
                      before(grammarAccess.getDTKeyAccess().getCommObjectKeyword_1()); 
                     match(input,15,FOLLOW_2); 
@@ -1180,20 +1364,20 @@
 
 
     // $ANTLR start "rule__Property__Alternatives_2_1"
-    // InternalDTML.g:394:1: rule__Property__Alternatives_2_1 : ( ( ( rule__Property__TypeAssignment_2_1_0 ) ) | ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) ) );
+    // InternalDTML.g:450:1: rule__Property__Alternatives_2_1 : ( ( ( rule__Property__TypeAssignment_2_1_0 ) ) | ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) ) );
     public final void rule__Property__Alternatives_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:398:1: ( ( ( rule__Property__TypeAssignment_2_1_0 ) ) | ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) ) )
+            // InternalDTML.g:454:1: ( ( ( rule__Property__TypeAssignment_2_1_0 ) ) | ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) ) )
             int alt4=2;
             int LA4_0 = input.LA(1);
 
             if ( (LA4_0==RULE_ID) ) {
                 alt4=1;
             }
-            else if ( (LA4_0==29) ) {
+            else if ( (LA4_0==30) ) {
                 alt4=2;
             }
             else {
@@ -1204,14 +1388,14 @@
             }
             switch (alt4) {
                 case 1 :
-                    // InternalDTML.g:399:2: ( ( rule__Property__TypeAssignment_2_1_0 ) )
+                    // InternalDTML.g:455:2: ( ( rule__Property__TypeAssignment_2_1_0 ) )
                     {
-                    // InternalDTML.g:399:2: ( ( rule__Property__TypeAssignment_2_1_0 ) )
-                    // InternalDTML.g:400:3: ( rule__Property__TypeAssignment_2_1_0 )
+                    // InternalDTML.g:455:2: ( ( rule__Property__TypeAssignment_2_1_0 ) )
+                    // InternalDTML.g:456:3: ( rule__Property__TypeAssignment_2_1_0 )
                     {
                      before(grammarAccess.getPropertyAccess().getTypeAssignment_2_1_0()); 
-                    // InternalDTML.g:401:3: ( rule__Property__TypeAssignment_2_1_0 )
-                    // InternalDTML.g:401:4: rule__Property__TypeAssignment_2_1_0
+                    // InternalDTML.g:457:3: ( rule__Property__TypeAssignment_2_1_0 )
+                    // InternalDTML.g:457:4: rule__Property__TypeAssignment_2_1_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__Property__TypeAssignment_2_1_0();
@@ -1229,14 +1413,14 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:405:2: ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) )
+                    // InternalDTML.g:461:2: ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) )
                     {
-                    // InternalDTML.g:405:2: ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) )
-                    // InternalDTML.g:406:3: ( rule__Property__TypeUndefinedAssignment_2_1_1 )
+                    // InternalDTML.g:461:2: ( ( rule__Property__TypeUndefinedAssignment_2_1_1 ) )
+                    // InternalDTML.g:462:3: ( rule__Property__TypeUndefinedAssignment_2_1_1 )
                     {
                      before(grammarAccess.getPropertyAccess().getTypeUndefinedAssignment_2_1_1()); 
-                    // InternalDTML.g:407:3: ( rule__Property__TypeUndefinedAssignment_2_1_1 )
-                    // InternalDTML.g:407:4: rule__Property__TypeUndefinedAssignment_2_1_1
+                    // InternalDTML.g:463:3: ( rule__Property__TypeUndefinedAssignment_2_1_1 )
+                    // InternalDTML.g:463:4: rule__Property__TypeUndefinedAssignment_2_1_1
                     {
                     pushFollow(FOLLOW_2);
                     rule__Property__TypeUndefinedAssignment_2_1_1();
@@ -1271,13 +1455,13 @@
 
 
     // $ANTLR start "rule__ExpressionString__Alternatives"
-    // InternalDTML.g:415:1: rule__ExpressionString__Alternatives : ( ( RULE_ID ) | ( '[' ) | ( ']' ) | ( '-' ) | ( ',' ) | ( RULE_INT ) | ( RULE_DOUBLE ) );
+    // InternalDTML.g:471:1: rule__ExpressionString__Alternatives : ( ( RULE_ID ) | ( '[' ) | ( ']' ) | ( '-' ) | ( ',' ) | ( RULE_INT ) | ( RULE_DOUBLE ) );
     public final void rule__ExpressionString__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:419:1: ( ( RULE_ID ) | ( '[' ) | ( ']' ) | ( '-' ) | ( ',' ) | ( RULE_INT ) | ( RULE_DOUBLE ) )
+            // InternalDTML.g:475:1: ( ( RULE_ID ) | ( '[' ) | ( ']' ) | ( '-' ) | ( ',' ) | ( RULE_INT ) | ( RULE_DOUBLE ) )
             int alt5=7;
             switch ( input.LA(1) ) {
             case RULE_ID:
@@ -1324,10 +1508,10 @@
 
             switch (alt5) {
                 case 1 :
-                    // InternalDTML.g:420:2: ( RULE_ID )
+                    // InternalDTML.g:476:2: ( RULE_ID )
                     {
-                    // InternalDTML.g:420:2: ( RULE_ID )
-                    // InternalDTML.g:421:3: RULE_ID
+                    // InternalDTML.g:476:2: ( RULE_ID )
+                    // InternalDTML.g:477:3: RULE_ID
                     {
                      before(grammarAccess.getExpressionStringAccess().getIDTerminalRuleCall_0()); 
                     match(input,RULE_ID,FOLLOW_2); 
@@ -1339,10 +1523,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:426:2: ( '[' )
+                    // InternalDTML.g:482:2: ( '[' )
                     {
-                    // InternalDTML.g:426:2: ( '[' )
-                    // InternalDTML.g:427:3: '['
+                    // InternalDTML.g:482:2: ( '[' )
+                    // InternalDTML.g:483:3: '['
                     {
                      before(grammarAccess.getExpressionStringAccess().getLeftSquareBracketKeyword_1()); 
                     match(input,16,FOLLOW_2); 
@@ -1354,10 +1538,10 @@
                     }
                     break;
                 case 3 :
-                    // InternalDTML.g:432:2: ( ']' )
+                    // InternalDTML.g:488:2: ( ']' )
                     {
-                    // InternalDTML.g:432:2: ( ']' )
-                    // InternalDTML.g:433:3: ']'
+                    // InternalDTML.g:488:2: ( ']' )
+                    // InternalDTML.g:489:3: ']'
                     {
                      before(grammarAccess.getExpressionStringAccess().getRightSquareBracketKeyword_2()); 
                     match(input,17,FOLLOW_2); 
@@ -1369,10 +1553,10 @@
                     }
                     break;
                 case 4 :
-                    // InternalDTML.g:438:2: ( '-' )
+                    // InternalDTML.g:494:2: ( '-' )
                     {
-                    // InternalDTML.g:438:2: ( '-' )
-                    // InternalDTML.g:439:3: '-'
+                    // InternalDTML.g:494:2: ( '-' )
+                    // InternalDTML.g:495:3: '-'
                     {
                      before(grammarAccess.getExpressionStringAccess().getHyphenMinusKeyword_3()); 
                     match(input,18,FOLLOW_2); 
@@ -1384,10 +1568,10 @@
                     }
                     break;
                 case 5 :
-                    // InternalDTML.g:444:2: ( ',' )
+                    // InternalDTML.g:500:2: ( ',' )
                     {
-                    // InternalDTML.g:444:2: ( ',' )
-                    // InternalDTML.g:445:3: ','
+                    // InternalDTML.g:500:2: ( ',' )
+                    // InternalDTML.g:501:3: ','
                     {
                      before(grammarAccess.getExpressionStringAccess().getCommaKeyword_4()); 
                     match(input,19,FOLLOW_2); 
@@ -1399,10 +1583,10 @@
                     }
                     break;
                 case 6 :
-                    // InternalDTML.g:450:2: ( RULE_INT )
+                    // InternalDTML.g:506:2: ( RULE_INT )
                     {
-                    // InternalDTML.g:450:2: ( RULE_INT )
-                    // InternalDTML.g:451:3: RULE_INT
+                    // InternalDTML.g:506:2: ( RULE_INT )
+                    // InternalDTML.g:507:3: RULE_INT
                     {
                      before(grammarAccess.getExpressionStringAccess().getINTTerminalRuleCall_5()); 
                     match(input,RULE_INT,FOLLOW_2); 
@@ -1414,10 +1598,10 @@
                     }
                     break;
                 case 7 :
-                    // InternalDTML.g:456:2: ( RULE_DOUBLE )
+                    // InternalDTML.g:512:2: ( RULE_DOUBLE )
                     {
-                    // InternalDTML.g:456:2: ( RULE_DOUBLE )
-                    // InternalDTML.g:457:3: RULE_DOUBLE
+                    // InternalDTML.g:512:2: ( RULE_DOUBLE )
+                    // InternalDTML.g:513:3: RULE_DOUBLE
                     {
                      before(grammarAccess.getExpressionStringAccess().getDOUBLETerminalRuleCall_6()); 
                     match(input,RULE_DOUBLE,FOLLOW_2); 
@@ -1446,13 +1630,13 @@
 
 
     // $ANTLR start "rule__Value__Alternatives"
-    // InternalDTML.g:466:1: rule__Value__Alternatives : ( ( ( rule__Value__StrAssignment_0 ) ) | ( ( rule__Value__IvalAssignment_1 ) ) | ( ( rule__Value__DvalAssignment_2 ) ) );
+    // InternalDTML.g:522:1: rule__Value__Alternatives : ( ( ( rule__Value__StrAssignment_0 ) ) | ( ( rule__Value__IvalAssignment_1 ) ) | ( ( rule__Value__DvalAssignment_2 ) ) );
     public final void rule__Value__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:470:1: ( ( ( rule__Value__StrAssignment_0 ) ) | ( ( rule__Value__IvalAssignment_1 ) ) | ( ( rule__Value__DvalAssignment_2 ) ) )
+            // InternalDTML.g:526:1: ( ( ( rule__Value__StrAssignment_0 ) ) | ( ( rule__Value__IvalAssignment_1 ) ) | ( ( rule__Value__DvalAssignment_2 ) ) )
             int alt6=3;
             switch ( input.LA(1) ) {
             case RULE_STRING:
@@ -1479,14 +1663,14 @@
 
             switch (alt6) {
                 case 1 :
-                    // InternalDTML.g:471:2: ( ( rule__Value__StrAssignment_0 ) )
+                    // InternalDTML.g:527:2: ( ( rule__Value__StrAssignment_0 ) )
                     {
-                    // InternalDTML.g:471:2: ( ( rule__Value__StrAssignment_0 ) )
-                    // InternalDTML.g:472:3: ( rule__Value__StrAssignment_0 )
+                    // InternalDTML.g:527:2: ( ( rule__Value__StrAssignment_0 ) )
+                    // InternalDTML.g:528:3: ( rule__Value__StrAssignment_0 )
                     {
                      before(grammarAccess.getValueAccess().getStrAssignment_0()); 
-                    // InternalDTML.g:473:3: ( rule__Value__StrAssignment_0 )
-                    // InternalDTML.g:473:4: rule__Value__StrAssignment_0
+                    // InternalDTML.g:529:3: ( rule__Value__StrAssignment_0 )
+                    // InternalDTML.g:529:4: rule__Value__StrAssignment_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__Value__StrAssignment_0();
@@ -1504,14 +1688,14 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:477:2: ( ( rule__Value__IvalAssignment_1 ) )
+                    // InternalDTML.g:533:2: ( ( rule__Value__IvalAssignment_1 ) )
                     {
-                    // InternalDTML.g:477:2: ( ( rule__Value__IvalAssignment_1 ) )
-                    // InternalDTML.g:478:3: ( rule__Value__IvalAssignment_1 )
+                    // InternalDTML.g:533:2: ( ( rule__Value__IvalAssignment_1 ) )
+                    // InternalDTML.g:534:3: ( rule__Value__IvalAssignment_1 )
                     {
                      before(grammarAccess.getValueAccess().getIvalAssignment_1()); 
-                    // InternalDTML.g:479:3: ( rule__Value__IvalAssignment_1 )
-                    // InternalDTML.g:479:4: rule__Value__IvalAssignment_1
+                    // InternalDTML.g:535:3: ( rule__Value__IvalAssignment_1 )
+                    // InternalDTML.g:535:4: rule__Value__IvalAssignment_1
                     {
                     pushFollow(FOLLOW_2);
                     rule__Value__IvalAssignment_1();
@@ -1529,14 +1713,14 @@
                     }
                     break;
                 case 3 :
-                    // InternalDTML.g:483:2: ( ( rule__Value__DvalAssignment_2 ) )
+                    // InternalDTML.g:539:2: ( ( rule__Value__DvalAssignment_2 ) )
                     {
-                    // InternalDTML.g:483:2: ( ( rule__Value__DvalAssignment_2 ) )
-                    // InternalDTML.g:484:3: ( rule__Value__DvalAssignment_2 )
+                    // InternalDTML.g:539:2: ( ( rule__Value__DvalAssignment_2 ) )
+                    // InternalDTML.g:540:3: ( rule__Value__DvalAssignment_2 )
                     {
                      before(grammarAccess.getValueAccess().getDvalAssignment_2()); 
-                    // InternalDTML.g:485:3: ( rule__Value__DvalAssignment_2 )
-                    // InternalDTML.g:485:4: rule__Value__DvalAssignment_2
+                    // InternalDTML.g:541:3: ( rule__Value__DvalAssignment_2 )
+                    // InternalDTML.g:541:4: rule__Value__DvalAssignment_2
                     {
                     pushFollow(FOLLOW_2);
                     rule__Value__DvalAssignment_2();
@@ -1571,13 +1755,13 @@
 
 
     // $ANTLR start "rule__UnlimitedLiteral__Alternatives"
-    // InternalDTML.g:493:1: rule__UnlimitedLiteral__Alternatives : ( ( RULE_INT ) | ( '*' ) );
+    // InternalDTML.g:549:1: rule__UnlimitedLiteral__Alternatives : ( ( RULE_INT ) | ( '*' ) );
     public final void rule__UnlimitedLiteral__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:497:1: ( ( RULE_INT ) | ( '*' ) )
+            // InternalDTML.g:553:1: ( ( RULE_INT ) | ( '*' ) )
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1595,10 +1779,10 @@
             }
             switch (alt7) {
                 case 1 :
-                    // InternalDTML.g:498:2: ( RULE_INT )
+                    // InternalDTML.g:554:2: ( RULE_INT )
                     {
-                    // InternalDTML.g:498:2: ( RULE_INT )
-                    // InternalDTML.g:499:3: RULE_INT
+                    // InternalDTML.g:554:2: ( RULE_INT )
+                    // InternalDTML.g:555:3: RULE_INT
                     {
                      before(grammarAccess.getUnlimitedLiteralAccess().getINTTerminalRuleCall_0()); 
                     match(input,RULE_INT,FOLLOW_2); 
@@ -1610,10 +1794,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:504:2: ( '*' )
+                    // InternalDTML.g:560:2: ( '*' )
                     {
-                    // InternalDTML.g:504:2: ( '*' )
-                    // InternalDTML.g:505:3: '*'
+                    // InternalDTML.g:560:2: ( '*' )
+                    // InternalDTML.g:561:3: '*'
                     {
                      before(grammarAccess.getUnlimitedLiteralAccess().getAsteriskKeyword_1()); 
                     match(input,20,FOLLOW_2); 
@@ -1641,23 +1825,23 @@
     // $ANTLR end "rule__UnlimitedLiteral__Alternatives"
 
 
-    // $ANTLR start "rule__DTModel__Group__0"
-    // InternalDTML.g:514:1: rule__DTModel__Group__0 : rule__DTModel__Group__0__Impl rule__DTModel__Group__1 ;
-    public final void rule__DTModel__Group__0() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__0"
+    // InternalDTML.g:570:1: rule__XDataType__Group__0 : rule__XDataType__Group__0__Impl rule__XDataType__Group__1 ;
+    public final void rule__XDataType__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:518:1: ( rule__DTModel__Group__0__Impl rule__DTModel__Group__1 )
-            // InternalDTML.g:519:2: rule__DTModel__Group__0__Impl rule__DTModel__Group__1
+            // InternalDTML.g:574:1: ( rule__XDataType__Group__0__Impl rule__XDataType__Group__1 )
+            // InternalDTML.g:575:2: rule__XDataType__Group__0__Impl rule__XDataType__Group__1
             {
             pushFollow(FOLLOW_4);
-            rule__DTModel__Group__0__Impl();
+            rule__XDataType__Group__0__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__DTModel__Group__1();
+            rule__XDataType__Group__1();
 
             state._fsp--;
 
@@ -1676,29 +1860,29 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__0"
+    // $ANTLR end "rule__XDataType__Group__0"
 
 
-    // $ANTLR start "rule__DTModel__Group__0__Impl"
-    // InternalDTML.g:526:1: rule__DTModel__Group__0__Impl : ( ruleDTKey ) ;
-    public final void rule__DTModel__Group__0__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__0__Impl"
+    // InternalDTML.g:582:1: rule__XDataType__Group__0__Impl : ( ruleDTKey ) ;
+    public final void rule__XDataType__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:530:1: ( ( ruleDTKey ) )
-            // InternalDTML.g:531:1: ( ruleDTKey )
+            // InternalDTML.g:586:1: ( ( ruleDTKey ) )
+            // InternalDTML.g:587:1: ( ruleDTKey )
             {
-            // InternalDTML.g:531:1: ( ruleDTKey )
-            // InternalDTML.g:532:2: ruleDTKey
+            // InternalDTML.g:587:1: ( ruleDTKey )
+            // InternalDTML.g:588:2: ruleDTKey
             {
-             before(grammarAccess.getDTModelAccess().getDTKeyParserRuleCall_0()); 
+             before(grammarAccess.getXDataTypeAccess().getDTKeyParserRuleCall_0()); 
             pushFollow(FOLLOW_2);
             ruleDTKey();
 
             state._fsp--;
 
-             after(grammarAccess.getDTModelAccess().getDTKeyParserRuleCall_0()); 
+             after(grammarAccess.getXDataTypeAccess().getDTKeyParserRuleCall_0()); 
 
             }
 
@@ -1717,26 +1901,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__0__Impl"
+    // $ANTLR end "rule__XDataType__Group__0__Impl"
 
 
-    // $ANTLR start "rule__DTModel__Group__1"
-    // InternalDTML.g:541:1: rule__DTModel__Group__1 : rule__DTModel__Group__1__Impl rule__DTModel__Group__2 ;
-    public final void rule__DTModel__Group__1() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__1"
+    // InternalDTML.g:597:1: rule__XDataType__Group__1 : rule__XDataType__Group__1__Impl rule__XDataType__Group__2 ;
+    public final void rule__XDataType__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:545:1: ( rule__DTModel__Group__1__Impl rule__DTModel__Group__2 )
-            // InternalDTML.g:546:2: rule__DTModel__Group__1__Impl rule__DTModel__Group__2
+            // InternalDTML.g:601:1: ( rule__XDataType__Group__1__Impl rule__XDataType__Group__2 )
+            // InternalDTML.g:602:2: rule__XDataType__Group__1__Impl rule__XDataType__Group__2
             {
             pushFollow(FOLLOW_5);
-            rule__DTModel__Group__1__Impl();
+            rule__XDataType__Group__1__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__DTModel__Group__2();
+            rule__XDataType__Group__2();
 
             state._fsp--;
 
@@ -1755,35 +1939,35 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__1"
+    // $ANTLR end "rule__XDataType__Group__1"
 
 
-    // $ANTLR start "rule__DTModel__Group__1__Impl"
-    // InternalDTML.g:553:1: rule__DTModel__Group__1__Impl : ( ( rule__DTModel__NameAssignment_1 ) ) ;
-    public final void rule__DTModel__Group__1__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__1__Impl"
+    // InternalDTML.g:609:1: rule__XDataType__Group__1__Impl : ( ( rule__XDataType__NameAssignment_1 ) ) ;
+    public final void rule__XDataType__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:557:1: ( ( ( rule__DTModel__NameAssignment_1 ) ) )
-            // InternalDTML.g:558:1: ( ( rule__DTModel__NameAssignment_1 ) )
+            // InternalDTML.g:613:1: ( ( ( rule__XDataType__NameAssignment_1 ) ) )
+            // InternalDTML.g:614:1: ( ( rule__XDataType__NameAssignment_1 ) )
             {
-            // InternalDTML.g:558:1: ( ( rule__DTModel__NameAssignment_1 ) )
-            // InternalDTML.g:559:2: ( rule__DTModel__NameAssignment_1 )
+            // InternalDTML.g:614:1: ( ( rule__XDataType__NameAssignment_1 ) )
+            // InternalDTML.g:615:2: ( rule__XDataType__NameAssignment_1 )
             {
-             before(grammarAccess.getDTModelAccess().getNameAssignment_1()); 
-            // InternalDTML.g:560:2: ( rule__DTModel__NameAssignment_1 )
-            // InternalDTML.g:560:3: rule__DTModel__NameAssignment_1
+             before(grammarAccess.getXDataTypeAccess().getNameAssignment_1()); 
+            // InternalDTML.g:616:2: ( rule__XDataType__NameAssignment_1 )
+            // InternalDTML.g:616:3: rule__XDataType__NameAssignment_1
             {
             pushFollow(FOLLOW_2);
-            rule__DTModel__NameAssignment_1();
+            rule__XDataType__NameAssignment_1();
 
             state._fsp--;
 
 
             }
 
-             after(grammarAccess.getDTModelAccess().getNameAssignment_1()); 
+             after(grammarAccess.getXDataTypeAccess().getNameAssignment_1()); 
 
             }
 
@@ -1802,26 +1986,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__1__Impl"
+    // $ANTLR end "rule__XDataType__Group__1__Impl"
 
 
-    // $ANTLR start "rule__DTModel__Group__2"
-    // InternalDTML.g:568:1: rule__DTModel__Group__2 : rule__DTModel__Group__2__Impl rule__DTModel__Group__3 ;
-    public final void rule__DTModel__Group__2() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__2"
+    // InternalDTML.g:624:1: rule__XDataType__Group__2 : rule__XDataType__Group__2__Impl rule__XDataType__Group__3 ;
+    public final void rule__XDataType__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:572:1: ( rule__DTModel__Group__2__Impl rule__DTModel__Group__3 )
-            // InternalDTML.g:573:2: rule__DTModel__Group__2__Impl rule__DTModel__Group__3
+            // InternalDTML.g:628:1: ( rule__XDataType__Group__2__Impl rule__XDataType__Group__3 )
+            // InternalDTML.g:629:2: rule__XDataType__Group__2__Impl rule__XDataType__Group__3
             {
             pushFollow(FOLLOW_6);
-            rule__DTModel__Group__2__Impl();
+            rule__XDataType__Group__2__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__DTModel__Group__3();
+            rule__XDataType__Group__3();
 
             state._fsp--;
 
@@ -1840,25 +2024,25 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__2"
+    // $ANTLR end "rule__XDataType__Group__2"
 
 
-    // $ANTLR start "rule__DTModel__Group__2__Impl"
-    // InternalDTML.g:580:1: rule__DTModel__Group__2__Impl : ( '{' ) ;
-    public final void rule__DTModel__Group__2__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__2__Impl"
+    // InternalDTML.g:636:1: rule__XDataType__Group__2__Impl : ( '{' ) ;
+    public final void rule__XDataType__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:584:1: ( ( '{' ) )
-            // InternalDTML.g:585:1: ( '{' )
+            // InternalDTML.g:640:1: ( ( '{' ) )
+            // InternalDTML.g:641:1: ( '{' )
             {
-            // InternalDTML.g:585:1: ( '{' )
-            // InternalDTML.g:586:2: '{'
+            // InternalDTML.g:641:1: ( '{' )
+            // InternalDTML.g:642:2: '{'
             {
-             before(grammarAccess.getDTModelAccess().getLeftCurlyBracketKeyword_2()); 
+             before(grammarAccess.getXDataTypeAccess().getLeftCurlyBracketKeyword_2()); 
             match(input,21,FOLLOW_2); 
-             after(grammarAccess.getDTModelAccess().getLeftCurlyBracketKeyword_2()); 
+             after(grammarAccess.getXDataTypeAccess().getLeftCurlyBracketKeyword_2()); 
 
             }
 
@@ -1877,26 +2061,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__2__Impl"
+    // $ANTLR end "rule__XDataType__Group__2__Impl"
 
 
-    // $ANTLR start "rule__DTModel__Group__3"
-    // InternalDTML.g:595:1: rule__DTModel__Group__3 : rule__DTModel__Group__3__Impl rule__DTModel__Group__4 ;
-    public final void rule__DTModel__Group__3() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__3"
+    // InternalDTML.g:651:1: rule__XDataType__Group__3 : rule__XDataType__Group__3__Impl rule__XDataType__Group__4 ;
+    public final void rule__XDataType__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:599:1: ( rule__DTModel__Group__3__Impl rule__DTModel__Group__4 )
-            // InternalDTML.g:600:2: rule__DTModel__Group__3__Impl rule__DTModel__Group__4
+            // InternalDTML.g:655:1: ( rule__XDataType__Group__3__Impl rule__XDataType__Group__4 )
+            // InternalDTML.g:656:2: rule__XDataType__Group__3__Impl rule__XDataType__Group__4
             {
             pushFollow(FOLLOW_6);
-            rule__DTModel__Group__3__Impl();
+            rule__XDataType__Group__3__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__DTModel__Group__4();
+            rule__XDataType__Group__4();
 
             state._fsp--;
 
@@ -1915,24 +2099,24 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__3"
+    // $ANTLR end "rule__XDataType__Group__3"
 
 
-    // $ANTLR start "rule__DTModel__Group__3__Impl"
-    // InternalDTML.g:607:1: rule__DTModel__Group__3__Impl : ( ( rule__DTModel__AttributesAssignment_3 )* ) ;
-    public final void rule__DTModel__Group__3__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__3__Impl"
+    // InternalDTML.g:663:1: rule__XDataType__Group__3__Impl : ( ( rule__XDataType__AttributesAssignment_3 )* ) ;
+    public final void rule__XDataType__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:611:1: ( ( ( rule__DTModel__AttributesAssignment_3 )* ) )
-            // InternalDTML.g:612:1: ( ( rule__DTModel__AttributesAssignment_3 )* )
+            // InternalDTML.g:667:1: ( ( ( rule__XDataType__AttributesAssignment_3 )* ) )
+            // InternalDTML.g:668:1: ( ( rule__XDataType__AttributesAssignment_3 )* )
             {
-            // InternalDTML.g:612:1: ( ( rule__DTModel__AttributesAssignment_3 )* )
-            // InternalDTML.g:613:2: ( rule__DTModel__AttributesAssignment_3 )*
+            // InternalDTML.g:668:1: ( ( rule__XDataType__AttributesAssignment_3 )* )
+            // InternalDTML.g:669:2: ( rule__XDataType__AttributesAssignment_3 )*
             {
-             before(grammarAccess.getDTModelAccess().getAttributesAssignment_3()); 
-            // InternalDTML.g:614:2: ( rule__DTModel__AttributesAssignment_3 )*
+             before(grammarAccess.getXDataTypeAccess().getAttributesAssignment_3()); 
+            // InternalDTML.g:670:2: ( rule__XDataType__AttributesAssignment_3 )*
             loop8:
             do {
                 int alt8=2;
@@ -1945,10 +2129,10 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // InternalDTML.g:614:3: rule__DTModel__AttributesAssignment_3
+            	    // InternalDTML.g:670:3: rule__XDataType__AttributesAssignment_3
             	    {
             	    pushFollow(FOLLOW_7);
-            	    rule__DTModel__AttributesAssignment_3();
+            	    rule__XDataType__AttributesAssignment_3();
 
             	    state._fsp--;
 
@@ -1961,7 +2145,7 @@
                 }
             } while (true);
 
-             after(grammarAccess.getDTModelAccess().getAttributesAssignment_3()); 
+             after(grammarAccess.getXDataTypeAccess().getAttributesAssignment_3()); 
 
             }
 
@@ -1980,21 +2164,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__3__Impl"
+    // $ANTLR end "rule__XDataType__Group__3__Impl"
 
 
-    // $ANTLR start "rule__DTModel__Group__4"
-    // InternalDTML.g:622:1: rule__DTModel__Group__4 : rule__DTModel__Group__4__Impl ;
-    public final void rule__DTModel__Group__4() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__4"
+    // InternalDTML.g:678:1: rule__XDataType__Group__4 : rule__XDataType__Group__4__Impl ;
+    public final void rule__XDataType__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:626:1: ( rule__DTModel__Group__4__Impl )
-            // InternalDTML.g:627:2: rule__DTModel__Group__4__Impl
+            // InternalDTML.g:682:1: ( rule__XDataType__Group__4__Impl )
+            // InternalDTML.g:683:2: rule__XDataType__Group__4__Impl
             {
             pushFollow(FOLLOW_2);
-            rule__DTModel__Group__4__Impl();
+            rule__XDataType__Group__4__Impl();
 
             state._fsp--;
 
@@ -2013,25 +2197,25 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__4"
+    // $ANTLR end "rule__XDataType__Group__4"
 
 
-    // $ANTLR start "rule__DTModel__Group__4__Impl"
-    // InternalDTML.g:633:1: rule__DTModel__Group__4__Impl : ( '}' ) ;
-    public final void rule__DTModel__Group__4__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__Group__4__Impl"
+    // InternalDTML.g:689:1: rule__XDataType__Group__4__Impl : ( '}' ) ;
+    public final void rule__XDataType__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:637:1: ( ( '}' ) )
-            // InternalDTML.g:638:1: ( '}' )
+            // InternalDTML.g:693:1: ( ( '}' ) )
+            // InternalDTML.g:694:1: ( '}' )
             {
-            // InternalDTML.g:638:1: ( '}' )
-            // InternalDTML.g:639:2: '}'
+            // InternalDTML.g:694:1: ( '}' )
+            // InternalDTML.g:695:2: '}'
             {
-             before(grammarAccess.getDTModelAccess().getRightCurlyBracketKeyword_4()); 
+             before(grammarAccess.getXDataTypeAccess().getRightCurlyBracketKeyword_4()); 
             match(input,22,FOLLOW_2); 
-             after(grammarAccess.getDTModelAccess().getRightCurlyBracketKeyword_4()); 
+             after(grammarAccess.getXDataTypeAccess().getRightCurlyBracketKeyword_4()); 
 
             }
 
@@ -2050,18 +2234,18 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__Group__4__Impl"
+    // $ANTLR end "rule__XDataType__Group__4__Impl"
 
 
     // $ANTLR start "rule__Property__Group__0"
-    // InternalDTML.g:649:1: rule__Property__Group__0 : rule__Property__Group__0__Impl rule__Property__Group__1 ;
+    // InternalDTML.g:705:1: rule__Property__Group__0 : rule__Property__Group__0__Impl rule__Property__Group__1 ;
     public final void rule__Property__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:653:1: ( rule__Property__Group__0__Impl rule__Property__Group__1 )
-            // InternalDTML.g:654:2: rule__Property__Group__0__Impl rule__Property__Group__1
+            // InternalDTML.g:709:1: ( rule__Property__Group__0__Impl rule__Property__Group__1 )
+            // InternalDTML.g:710:2: rule__Property__Group__0__Impl rule__Property__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__Property__Group__0__Impl();
@@ -2092,17 +2276,17 @@
 
 
     // $ANTLR start "rule__Property__Group__0__Impl"
-    // InternalDTML.g:661:1: rule__Property__Group__0__Impl : ( 'attribute' ) ;
+    // InternalDTML.g:717:1: rule__Property__Group__0__Impl : ( 'attribute' ) ;
     public final void rule__Property__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:665:1: ( ( 'attribute' ) )
-            // InternalDTML.g:666:1: ( 'attribute' )
+            // InternalDTML.g:721:1: ( ( 'attribute' ) )
+            // InternalDTML.g:722:1: ( 'attribute' )
             {
-            // InternalDTML.g:666:1: ( 'attribute' )
-            // InternalDTML.g:667:2: 'attribute'
+            // InternalDTML.g:722:1: ( 'attribute' )
+            // InternalDTML.g:723:2: 'attribute'
             {
              before(grammarAccess.getPropertyAccess().getAttributeKeyword_0()); 
             match(input,23,FOLLOW_2); 
@@ -2129,14 +2313,14 @@
 
 
     // $ANTLR start "rule__Property__Group__1"
-    // InternalDTML.g:676:1: rule__Property__Group__1 : rule__Property__Group__1__Impl rule__Property__Group__2 ;
+    // InternalDTML.g:732:1: rule__Property__Group__1 : rule__Property__Group__1__Impl rule__Property__Group__2 ;
     public final void rule__Property__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:680:1: ( rule__Property__Group__1__Impl rule__Property__Group__2 )
-            // InternalDTML.g:681:2: rule__Property__Group__1__Impl rule__Property__Group__2
+            // InternalDTML.g:736:1: ( rule__Property__Group__1__Impl rule__Property__Group__2 )
+            // InternalDTML.g:737:2: rule__Property__Group__1__Impl rule__Property__Group__2
             {
             pushFollow(FOLLOW_8);
             rule__Property__Group__1__Impl();
@@ -2167,21 +2351,21 @@
 
 
     // $ANTLR start "rule__Property__Group__1__Impl"
-    // InternalDTML.g:688:1: rule__Property__Group__1__Impl : ( ( rule__Property__NameAssignment_1 ) ) ;
+    // InternalDTML.g:744:1: rule__Property__Group__1__Impl : ( ( rule__Property__NameAssignment_1 ) ) ;
     public final void rule__Property__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:692:1: ( ( ( rule__Property__NameAssignment_1 ) ) )
-            // InternalDTML.g:693:1: ( ( rule__Property__NameAssignment_1 ) )
+            // InternalDTML.g:748:1: ( ( ( rule__Property__NameAssignment_1 ) ) )
+            // InternalDTML.g:749:1: ( ( rule__Property__NameAssignment_1 ) )
             {
-            // InternalDTML.g:693:1: ( ( rule__Property__NameAssignment_1 ) )
-            // InternalDTML.g:694:2: ( rule__Property__NameAssignment_1 )
+            // InternalDTML.g:749:1: ( ( rule__Property__NameAssignment_1 ) )
+            // InternalDTML.g:750:2: ( rule__Property__NameAssignment_1 )
             {
              before(grammarAccess.getPropertyAccess().getNameAssignment_1()); 
-            // InternalDTML.g:695:2: ( rule__Property__NameAssignment_1 )
-            // InternalDTML.g:695:3: rule__Property__NameAssignment_1
+            // InternalDTML.g:751:2: ( rule__Property__NameAssignment_1 )
+            // InternalDTML.g:751:3: rule__Property__NameAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__Property__NameAssignment_1();
@@ -2214,14 +2398,14 @@
 
 
     // $ANTLR start "rule__Property__Group__2"
-    // InternalDTML.g:703:1: rule__Property__Group__2 : rule__Property__Group__2__Impl rule__Property__Group__3 ;
+    // InternalDTML.g:759:1: rule__Property__Group__2 : rule__Property__Group__2__Impl rule__Property__Group__3 ;
     public final void rule__Property__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:707:1: ( rule__Property__Group__2__Impl rule__Property__Group__3 )
-            // InternalDTML.g:708:2: rule__Property__Group__2__Impl rule__Property__Group__3
+            // InternalDTML.g:763:1: ( rule__Property__Group__2__Impl rule__Property__Group__3 )
+            // InternalDTML.g:764:2: rule__Property__Group__2__Impl rule__Property__Group__3
             {
             pushFollow(FOLLOW_8);
             rule__Property__Group__2__Impl();
@@ -2252,20 +2436,20 @@
 
 
     // $ANTLR start "rule__Property__Group__2__Impl"
-    // InternalDTML.g:715:1: rule__Property__Group__2__Impl : ( ( rule__Property__Group_2__0 )? ) ;
+    // InternalDTML.g:771:1: rule__Property__Group__2__Impl : ( ( rule__Property__Group_2__0 )? ) ;
     public final void rule__Property__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:719:1: ( ( ( rule__Property__Group_2__0 )? ) )
-            // InternalDTML.g:720:1: ( ( rule__Property__Group_2__0 )? )
+            // InternalDTML.g:775:1: ( ( ( rule__Property__Group_2__0 )? ) )
+            // InternalDTML.g:776:1: ( ( rule__Property__Group_2__0 )? )
             {
-            // InternalDTML.g:720:1: ( ( rule__Property__Group_2__0 )? )
-            // InternalDTML.g:721:2: ( rule__Property__Group_2__0 )?
+            // InternalDTML.g:776:1: ( ( rule__Property__Group_2__0 )? )
+            // InternalDTML.g:777:2: ( rule__Property__Group_2__0 )?
             {
              before(grammarAccess.getPropertyAccess().getGroup_2()); 
-            // InternalDTML.g:722:2: ( rule__Property__Group_2__0 )?
+            // InternalDTML.g:778:2: ( rule__Property__Group_2__0 )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -2274,7 +2458,7 @@
             }
             switch (alt9) {
                 case 1 :
-                    // InternalDTML.g:722:3: rule__Property__Group_2__0
+                    // InternalDTML.g:778:3: rule__Property__Group_2__0
                     {
                     pushFollow(FOLLOW_2);
                     rule__Property__Group_2__0();
@@ -2310,14 +2494,14 @@
 
 
     // $ANTLR start "rule__Property__Group__3"
-    // InternalDTML.g:730:1: rule__Property__Group__3 : rule__Property__Group__3__Impl rule__Property__Group__4 ;
+    // InternalDTML.g:786:1: rule__Property__Group__3 : rule__Property__Group__3__Impl rule__Property__Group__4 ;
     public final void rule__Property__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:734:1: ( rule__Property__Group__3__Impl rule__Property__Group__4 )
-            // InternalDTML.g:735:2: rule__Property__Group__3__Impl rule__Property__Group__4
+            // InternalDTML.g:790:1: ( rule__Property__Group__3__Impl rule__Property__Group__4 )
+            // InternalDTML.g:791:2: rule__Property__Group__3__Impl rule__Property__Group__4
             {
             pushFollow(FOLLOW_8);
             rule__Property__Group__3__Impl();
@@ -2348,20 +2532,20 @@
 
 
     // $ANTLR start "rule__Property__Group__3__Impl"
-    // InternalDTML.g:742:1: rule__Property__Group__3__Impl : ( ( rule__Property__MultiplicityAssignment_3 )? ) ;
+    // InternalDTML.g:798:1: rule__Property__Group__3__Impl : ( ( rule__Property__MultiplicityAssignment_3 )? ) ;
     public final void rule__Property__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:746:1: ( ( ( rule__Property__MultiplicityAssignment_3 )? ) )
-            // InternalDTML.g:747:1: ( ( rule__Property__MultiplicityAssignment_3 )? )
+            // InternalDTML.g:802:1: ( ( ( rule__Property__MultiplicityAssignment_3 )? ) )
+            // InternalDTML.g:803:1: ( ( rule__Property__MultiplicityAssignment_3 )? )
             {
-            // InternalDTML.g:747:1: ( ( rule__Property__MultiplicityAssignment_3 )? )
-            // InternalDTML.g:748:2: ( rule__Property__MultiplicityAssignment_3 )?
+            // InternalDTML.g:803:1: ( ( rule__Property__MultiplicityAssignment_3 )? )
+            // InternalDTML.g:804:2: ( rule__Property__MultiplicityAssignment_3 )?
             {
              before(grammarAccess.getPropertyAccess().getMultiplicityAssignment_3()); 
-            // InternalDTML.g:749:2: ( rule__Property__MultiplicityAssignment_3 )?
+            // InternalDTML.g:805:2: ( rule__Property__MultiplicityAssignment_3 )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -2370,7 +2554,7 @@
             }
             switch (alt10) {
                 case 1 :
-                    // InternalDTML.g:749:3: rule__Property__MultiplicityAssignment_3
+                    // InternalDTML.g:805:3: rule__Property__MultiplicityAssignment_3
                     {
                     pushFollow(FOLLOW_2);
                     rule__Property__MultiplicityAssignment_3();
@@ -2406,14 +2590,14 @@
 
 
     // $ANTLR start "rule__Property__Group__4"
-    // InternalDTML.g:757:1: rule__Property__Group__4 : rule__Property__Group__4__Impl rule__Property__Group__5 ;
+    // InternalDTML.g:813:1: rule__Property__Group__4 : rule__Property__Group__4__Impl rule__Property__Group__5 ;
     public final void rule__Property__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:761:1: ( rule__Property__Group__4__Impl rule__Property__Group__5 )
-            // InternalDTML.g:762:2: rule__Property__Group__4__Impl rule__Property__Group__5
+            // InternalDTML.g:817:1: ( rule__Property__Group__4__Impl rule__Property__Group__5 )
+            // InternalDTML.g:818:2: rule__Property__Group__4__Impl rule__Property__Group__5
             {
             pushFollow(FOLLOW_8);
             rule__Property__Group__4__Impl();
@@ -2444,20 +2628,20 @@
 
 
     // $ANTLR start "rule__Property__Group__4__Impl"
-    // InternalDTML.g:769:1: rule__Property__Group__4__Impl : ( ( rule__Property__Group_4__0 )? ) ;
+    // InternalDTML.g:825:1: rule__Property__Group__4__Impl : ( ( rule__Property__Group_4__0 )? ) ;
     public final void rule__Property__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:773:1: ( ( ( rule__Property__Group_4__0 )? ) )
-            // InternalDTML.g:774:1: ( ( rule__Property__Group_4__0 )? )
+            // InternalDTML.g:829:1: ( ( ( rule__Property__Group_4__0 )? ) )
+            // InternalDTML.g:830:1: ( ( rule__Property__Group_4__0 )? )
             {
-            // InternalDTML.g:774:1: ( ( rule__Property__Group_4__0 )? )
-            // InternalDTML.g:775:2: ( rule__Property__Group_4__0 )?
+            // InternalDTML.g:830:1: ( ( rule__Property__Group_4__0 )? )
+            // InternalDTML.g:831:2: ( rule__Property__Group_4__0 )?
             {
              before(grammarAccess.getPropertyAccess().getGroup_4()); 
-            // InternalDTML.g:776:2: ( rule__Property__Group_4__0 )?
+            // InternalDTML.g:832:2: ( rule__Property__Group_4__0 )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -2466,7 +2650,7 @@
             }
             switch (alt11) {
                 case 1 :
-                    // InternalDTML.g:776:3: rule__Property__Group_4__0
+                    // InternalDTML.g:832:3: rule__Property__Group_4__0
                     {
                     pushFollow(FOLLOW_2);
                     rule__Property__Group_4__0();
@@ -2502,14 +2686,14 @@
 
 
     // $ANTLR start "rule__Property__Group__5"
-    // InternalDTML.g:784:1: rule__Property__Group__5 : rule__Property__Group__5__Impl ;
+    // InternalDTML.g:840:1: rule__Property__Group__5 : rule__Property__Group__5__Impl ;
     public final void rule__Property__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:788:1: ( rule__Property__Group__5__Impl )
-            // InternalDTML.g:789:2: rule__Property__Group__5__Impl
+            // InternalDTML.g:844:1: ( rule__Property__Group__5__Impl )
+            // InternalDTML.g:845:2: rule__Property__Group__5__Impl
             {
             pushFollow(FOLLOW_2);
             rule__Property__Group__5__Impl();
@@ -2535,20 +2719,20 @@
 
 
     // $ANTLR start "rule__Property__Group__5__Impl"
-    // InternalDTML.g:795:1: rule__Property__Group__5__Impl : ( ( rule__Property__CommentAssignment_5 )? ) ;
+    // InternalDTML.g:851:1: rule__Property__Group__5__Impl : ( ( rule__Property__CommentAssignment_5 )? ) ;
     public final void rule__Property__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:799:1: ( ( ( rule__Property__CommentAssignment_5 )? ) )
-            // InternalDTML.g:800:1: ( ( rule__Property__CommentAssignment_5 )? )
+            // InternalDTML.g:855:1: ( ( ( rule__Property__CommentAssignment_5 )? ) )
+            // InternalDTML.g:856:1: ( ( rule__Property__CommentAssignment_5 )? )
             {
-            // InternalDTML.g:800:1: ( ( rule__Property__CommentAssignment_5 )? )
-            // InternalDTML.g:801:2: ( rule__Property__CommentAssignment_5 )?
+            // InternalDTML.g:856:1: ( ( rule__Property__CommentAssignment_5 )? )
+            // InternalDTML.g:857:2: ( rule__Property__CommentAssignment_5 )?
             {
              before(grammarAccess.getPropertyAccess().getCommentAssignment_5()); 
-            // InternalDTML.g:802:2: ( rule__Property__CommentAssignment_5 )?
+            // InternalDTML.g:858:2: ( rule__Property__CommentAssignment_5 )?
             int alt12=2;
             int LA12_0 = input.LA(1);
 
@@ -2557,7 +2741,7 @@
             }
             switch (alt12) {
                 case 1 :
-                    // InternalDTML.g:802:3: rule__Property__CommentAssignment_5
+                    // InternalDTML.g:858:3: rule__Property__CommentAssignment_5
                     {
                     pushFollow(FOLLOW_2);
                     rule__Property__CommentAssignment_5();
@@ -2593,14 +2777,14 @@
 
 
     // $ANTLR start "rule__Property__Group_2__0"
-    // InternalDTML.g:811:1: rule__Property__Group_2__0 : rule__Property__Group_2__0__Impl rule__Property__Group_2__1 ;
+    // InternalDTML.g:867:1: rule__Property__Group_2__0 : rule__Property__Group_2__0__Impl rule__Property__Group_2__1 ;
     public final void rule__Property__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:815:1: ( rule__Property__Group_2__0__Impl rule__Property__Group_2__1 )
-            // InternalDTML.g:816:2: rule__Property__Group_2__0__Impl rule__Property__Group_2__1
+            // InternalDTML.g:871:1: ( rule__Property__Group_2__0__Impl rule__Property__Group_2__1 )
+            // InternalDTML.g:872:2: rule__Property__Group_2__0__Impl rule__Property__Group_2__1
             {
             pushFollow(FOLLOW_9);
             rule__Property__Group_2__0__Impl();
@@ -2631,17 +2815,17 @@
 
 
     // $ANTLR start "rule__Property__Group_2__0__Impl"
-    // InternalDTML.g:823:1: rule__Property__Group_2__0__Impl : ( ':' ) ;
+    // InternalDTML.g:879:1: rule__Property__Group_2__0__Impl : ( ':' ) ;
     public final void rule__Property__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:827:1: ( ( ':' ) )
-            // InternalDTML.g:828:1: ( ':' )
+            // InternalDTML.g:883:1: ( ( ':' ) )
+            // InternalDTML.g:884:1: ( ':' )
             {
-            // InternalDTML.g:828:1: ( ':' )
-            // InternalDTML.g:829:2: ':'
+            // InternalDTML.g:884:1: ( ':' )
+            // InternalDTML.g:885:2: ':'
             {
              before(grammarAccess.getPropertyAccess().getColonKeyword_2_0()); 
             match(input,24,FOLLOW_2); 
@@ -2668,14 +2852,14 @@
 
 
     // $ANTLR start "rule__Property__Group_2__1"
-    // InternalDTML.g:838:1: rule__Property__Group_2__1 : rule__Property__Group_2__1__Impl ;
+    // InternalDTML.g:894:1: rule__Property__Group_2__1 : rule__Property__Group_2__1__Impl ;
     public final void rule__Property__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:842:1: ( rule__Property__Group_2__1__Impl )
-            // InternalDTML.g:843:2: rule__Property__Group_2__1__Impl
+            // InternalDTML.g:898:1: ( rule__Property__Group_2__1__Impl )
+            // InternalDTML.g:899:2: rule__Property__Group_2__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__Property__Group_2__1__Impl();
@@ -2701,21 +2885,21 @@
 
 
     // $ANTLR start "rule__Property__Group_2__1__Impl"
-    // InternalDTML.g:849:1: rule__Property__Group_2__1__Impl : ( ( rule__Property__Alternatives_2_1 ) ) ;
+    // InternalDTML.g:905:1: rule__Property__Group_2__1__Impl : ( ( rule__Property__Alternatives_2_1 ) ) ;
     public final void rule__Property__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:853:1: ( ( ( rule__Property__Alternatives_2_1 ) ) )
-            // InternalDTML.g:854:1: ( ( rule__Property__Alternatives_2_1 ) )
+            // InternalDTML.g:909:1: ( ( ( rule__Property__Alternatives_2_1 ) ) )
+            // InternalDTML.g:910:1: ( ( rule__Property__Alternatives_2_1 ) )
             {
-            // InternalDTML.g:854:1: ( ( rule__Property__Alternatives_2_1 ) )
-            // InternalDTML.g:855:2: ( rule__Property__Alternatives_2_1 )
+            // InternalDTML.g:910:1: ( ( rule__Property__Alternatives_2_1 ) )
+            // InternalDTML.g:911:2: ( rule__Property__Alternatives_2_1 )
             {
              before(grammarAccess.getPropertyAccess().getAlternatives_2_1()); 
-            // InternalDTML.g:856:2: ( rule__Property__Alternatives_2_1 )
-            // InternalDTML.g:856:3: rule__Property__Alternatives_2_1
+            // InternalDTML.g:912:2: ( rule__Property__Alternatives_2_1 )
+            // InternalDTML.g:912:3: rule__Property__Alternatives_2_1
             {
             pushFollow(FOLLOW_2);
             rule__Property__Alternatives_2_1();
@@ -2748,14 +2932,14 @@
 
 
     // $ANTLR start "rule__Property__Group_4__0"
-    // InternalDTML.g:865:1: rule__Property__Group_4__0 : rule__Property__Group_4__0__Impl rule__Property__Group_4__1 ;
+    // InternalDTML.g:921:1: rule__Property__Group_4__0 : rule__Property__Group_4__0__Impl rule__Property__Group_4__1 ;
     public final void rule__Property__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:869:1: ( rule__Property__Group_4__0__Impl rule__Property__Group_4__1 )
-            // InternalDTML.g:870:2: rule__Property__Group_4__0__Impl rule__Property__Group_4__1
+            // InternalDTML.g:925:1: ( rule__Property__Group_4__0__Impl rule__Property__Group_4__1 )
+            // InternalDTML.g:926:2: rule__Property__Group_4__0__Impl rule__Property__Group_4__1
             {
             pushFollow(FOLLOW_10);
             rule__Property__Group_4__0__Impl();
@@ -2786,17 +2970,17 @@
 
 
     // $ANTLR start "rule__Property__Group_4__0__Impl"
-    // InternalDTML.g:877:1: rule__Property__Group_4__0__Impl : ( '=' ) ;
+    // InternalDTML.g:933:1: rule__Property__Group_4__0__Impl : ( '=' ) ;
     public final void rule__Property__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:881:1: ( ( '=' ) )
-            // InternalDTML.g:882:1: ( '=' )
+            // InternalDTML.g:937:1: ( ( '=' ) )
+            // InternalDTML.g:938:1: ( '=' )
             {
-            // InternalDTML.g:882:1: ( '=' )
-            // InternalDTML.g:883:2: '='
+            // InternalDTML.g:938:1: ( '=' )
+            // InternalDTML.g:939:2: '='
             {
              before(grammarAccess.getPropertyAccess().getEqualsSignKeyword_4_0()); 
             match(input,25,FOLLOW_2); 
@@ -2823,14 +3007,14 @@
 
 
     // $ANTLR start "rule__Property__Group_4__1"
-    // InternalDTML.g:892:1: rule__Property__Group_4__1 : rule__Property__Group_4__1__Impl ;
+    // InternalDTML.g:948:1: rule__Property__Group_4__1 : rule__Property__Group_4__1__Impl ;
     public final void rule__Property__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:896:1: ( rule__Property__Group_4__1__Impl )
-            // InternalDTML.g:897:2: rule__Property__Group_4__1__Impl
+            // InternalDTML.g:952:1: ( rule__Property__Group_4__1__Impl )
+            // InternalDTML.g:953:2: rule__Property__Group_4__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__Property__Group_4__1__Impl();
@@ -2856,21 +3040,21 @@
 
 
     // $ANTLR start "rule__Property__Group_4__1__Impl"
-    // InternalDTML.g:903:1: rule__Property__Group_4__1__Impl : ( ( rule__Property__ValueAssignment_4_1 ) ) ;
+    // InternalDTML.g:959:1: rule__Property__Group_4__1__Impl : ( ( rule__Property__ValueAssignment_4_1 ) ) ;
     public final void rule__Property__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:907:1: ( ( ( rule__Property__ValueAssignment_4_1 ) ) )
-            // InternalDTML.g:908:1: ( ( rule__Property__ValueAssignment_4_1 ) )
+            // InternalDTML.g:963:1: ( ( ( rule__Property__ValueAssignment_4_1 ) ) )
+            // InternalDTML.g:964:1: ( ( rule__Property__ValueAssignment_4_1 ) )
             {
-            // InternalDTML.g:908:1: ( ( rule__Property__ValueAssignment_4_1 ) )
-            // InternalDTML.g:909:2: ( rule__Property__ValueAssignment_4_1 )
+            // InternalDTML.g:964:1: ( ( rule__Property__ValueAssignment_4_1 ) )
+            // InternalDTML.g:965:2: ( rule__Property__ValueAssignment_4_1 )
             {
              before(grammarAccess.getPropertyAccess().getValueAssignment_4_1()); 
-            // InternalDTML.g:910:2: ( rule__Property__ValueAssignment_4_1 )
-            // InternalDTML.g:910:3: rule__Property__ValueAssignment_4_1
+            // InternalDTML.g:966:2: ( rule__Property__ValueAssignment_4_1 )
+            // InternalDTML.g:966:3: rule__Property__ValueAssignment_4_1
             {
             pushFollow(FOLLOW_2);
             rule__Property__ValueAssignment_4_1();
@@ -2902,23 +3086,23 @@
     // $ANTLR end "rule__Property__Group_4__1__Impl"
 
 
-    // $ANTLR start "rule__Assignment__Group__0"
-    // InternalDTML.g:919:1: rule__Assignment__Group__0 : rule__Assignment__Group__0__Impl rule__Assignment__Group__1 ;
-    public final void rule__Assignment__Group__0() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__0"
+    // InternalDTML.g:975:1: rule__XAssignment__Group__0 : rule__XAssignment__Group__0__Impl rule__XAssignment__Group__1 ;
+    public final void rule__XAssignment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:923:1: ( rule__Assignment__Group__0__Impl rule__Assignment__Group__1 )
-            // InternalDTML.g:924:2: rule__Assignment__Group__0__Impl rule__Assignment__Group__1
+            // InternalDTML.g:979:1: ( rule__XAssignment__Group__0__Impl rule__XAssignment__Group__1 )
+            // InternalDTML.g:980:2: rule__XAssignment__Group__0__Impl rule__XAssignment__Group__1
             {
             pushFollow(FOLLOW_11);
-            rule__Assignment__Group__0__Impl();
+            rule__XAssignment__Group__0__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__Assignment__Group__1();
+            rule__XAssignment__Group__1();
 
             state._fsp--;
 
@@ -2937,35 +3121,35 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__0"
+    // $ANTLR end "rule__XAssignment__Group__0"
 
 
-    // $ANTLR start "rule__Assignment__Group__0__Impl"
-    // InternalDTML.g:931:1: rule__Assignment__Group__0__Impl : ( ( rule__Assignment__NameAssignment_0 ) ) ;
-    public final void rule__Assignment__Group__0__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__0__Impl"
+    // InternalDTML.g:987:1: rule__XAssignment__Group__0__Impl : ( ( rule__XAssignment__NameAssignment_0 ) ) ;
+    public final void rule__XAssignment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:935:1: ( ( ( rule__Assignment__NameAssignment_0 ) ) )
-            // InternalDTML.g:936:1: ( ( rule__Assignment__NameAssignment_0 ) )
+            // InternalDTML.g:991:1: ( ( ( rule__XAssignment__NameAssignment_0 ) ) )
+            // InternalDTML.g:992:1: ( ( rule__XAssignment__NameAssignment_0 ) )
             {
-            // InternalDTML.g:936:1: ( ( rule__Assignment__NameAssignment_0 ) )
-            // InternalDTML.g:937:2: ( rule__Assignment__NameAssignment_0 )
+            // InternalDTML.g:992:1: ( ( rule__XAssignment__NameAssignment_0 ) )
+            // InternalDTML.g:993:2: ( rule__XAssignment__NameAssignment_0 )
             {
-             before(grammarAccess.getAssignmentAccess().getNameAssignment_0()); 
-            // InternalDTML.g:938:2: ( rule__Assignment__NameAssignment_0 )
-            // InternalDTML.g:938:3: rule__Assignment__NameAssignment_0
+             before(grammarAccess.getXAssignmentAccess().getNameAssignment_0()); 
+            // InternalDTML.g:994:2: ( rule__XAssignment__NameAssignment_0 )
+            // InternalDTML.g:994:3: rule__XAssignment__NameAssignment_0
             {
             pushFollow(FOLLOW_2);
-            rule__Assignment__NameAssignment_0();
+            rule__XAssignment__NameAssignment_0();
 
             state._fsp--;
 
 
             }
 
-             after(grammarAccess.getAssignmentAccess().getNameAssignment_0()); 
+             after(grammarAccess.getXAssignmentAccess().getNameAssignment_0()); 
 
             }
 
@@ -2984,26 +3168,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__0__Impl"
+    // $ANTLR end "rule__XAssignment__Group__0__Impl"
 
 
-    // $ANTLR start "rule__Assignment__Group__1"
-    // InternalDTML.g:946:1: rule__Assignment__Group__1 : rule__Assignment__Group__1__Impl rule__Assignment__Group__2 ;
-    public final void rule__Assignment__Group__1() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__1"
+    // InternalDTML.g:1002:1: rule__XAssignment__Group__1 : rule__XAssignment__Group__1__Impl rule__XAssignment__Group__2 ;
+    public final void rule__XAssignment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:950:1: ( rule__Assignment__Group__1__Impl rule__Assignment__Group__2 )
-            // InternalDTML.g:951:2: rule__Assignment__Group__1__Impl rule__Assignment__Group__2
+            // InternalDTML.g:1006:1: ( rule__XAssignment__Group__1__Impl rule__XAssignment__Group__2 )
+            // InternalDTML.g:1007:2: rule__XAssignment__Group__1__Impl rule__XAssignment__Group__2
             {
             pushFollow(FOLLOW_12);
-            rule__Assignment__Group__1__Impl();
+            rule__XAssignment__Group__1__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__Assignment__Group__2();
+            rule__XAssignment__Group__2();
 
             state._fsp--;
 
@@ -3022,25 +3206,25 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__1"
+    // $ANTLR end "rule__XAssignment__Group__1"
 
 
-    // $ANTLR start "rule__Assignment__Group__1__Impl"
-    // InternalDTML.g:958:1: rule__Assignment__Group__1__Impl : ( '=' ) ;
-    public final void rule__Assignment__Group__1__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__1__Impl"
+    // InternalDTML.g:1014:1: rule__XAssignment__Group__1__Impl : ( '=' ) ;
+    public final void rule__XAssignment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:962:1: ( ( '=' ) )
-            // InternalDTML.g:963:1: ( '=' )
+            // InternalDTML.g:1018:1: ( ( '=' ) )
+            // InternalDTML.g:1019:1: ( '=' )
             {
-            // InternalDTML.g:963:1: ( '=' )
-            // InternalDTML.g:964:2: '='
+            // InternalDTML.g:1019:1: ( '=' )
+            // InternalDTML.g:1020:2: '='
             {
-             before(grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1()); 
+             before(grammarAccess.getXAssignmentAccess().getEqualsSignKeyword_1()); 
             match(input,25,FOLLOW_2); 
-             after(grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1()); 
+             after(grammarAccess.getXAssignmentAccess().getEqualsSignKeyword_1()); 
 
             }
 
@@ -3059,26 +3243,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__1__Impl"
+    // $ANTLR end "rule__XAssignment__Group__1__Impl"
 
 
-    // $ANTLR start "rule__Assignment__Group__2"
-    // InternalDTML.g:973:1: rule__Assignment__Group__2 : rule__Assignment__Group__2__Impl rule__Assignment__Group__3 ;
-    public final void rule__Assignment__Group__2() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__2"
+    // InternalDTML.g:1029:1: rule__XAssignment__Group__2 : rule__XAssignment__Group__2__Impl rule__XAssignment__Group__3 ;
+    public final void rule__XAssignment__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:977:1: ( rule__Assignment__Group__2__Impl rule__Assignment__Group__3 )
-            // InternalDTML.g:978:2: rule__Assignment__Group__2__Impl rule__Assignment__Group__3
+            // InternalDTML.g:1033:1: ( rule__XAssignment__Group__2__Impl rule__XAssignment__Group__3 )
+            // InternalDTML.g:1034:2: rule__XAssignment__Group__2__Impl rule__XAssignment__Group__3
             {
             pushFollow(FOLLOW_13);
-            rule__Assignment__Group__2__Impl();
+            rule__XAssignment__Group__2__Impl();
 
             state._fsp--;
 
             pushFollow(FOLLOW_2);
-            rule__Assignment__Group__3();
+            rule__XAssignment__Group__3();
 
             state._fsp--;
 
@@ -3097,35 +3281,35 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__2"
+    // $ANTLR end "rule__XAssignment__Group__2"
 
 
-    // $ANTLR start "rule__Assignment__Group__2__Impl"
-    // InternalDTML.g:985:1: rule__Assignment__Group__2__Impl : ( ( rule__Assignment__ExpressionAssignment_2 ) ) ;
-    public final void rule__Assignment__Group__2__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__2__Impl"
+    // InternalDTML.g:1041:1: rule__XAssignment__Group__2__Impl : ( ( rule__XAssignment__ExpressionAssignment_2 ) ) ;
+    public final void rule__XAssignment__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:989:1: ( ( ( rule__Assignment__ExpressionAssignment_2 ) ) )
-            // InternalDTML.g:990:1: ( ( rule__Assignment__ExpressionAssignment_2 ) )
+            // InternalDTML.g:1045:1: ( ( ( rule__XAssignment__ExpressionAssignment_2 ) ) )
+            // InternalDTML.g:1046:1: ( ( rule__XAssignment__ExpressionAssignment_2 ) )
             {
-            // InternalDTML.g:990:1: ( ( rule__Assignment__ExpressionAssignment_2 ) )
-            // InternalDTML.g:991:2: ( rule__Assignment__ExpressionAssignment_2 )
+            // InternalDTML.g:1046:1: ( ( rule__XAssignment__ExpressionAssignment_2 ) )
+            // InternalDTML.g:1047:2: ( rule__XAssignment__ExpressionAssignment_2 )
             {
-             before(grammarAccess.getAssignmentAccess().getExpressionAssignment_2()); 
-            // InternalDTML.g:992:2: ( rule__Assignment__ExpressionAssignment_2 )
-            // InternalDTML.g:992:3: rule__Assignment__ExpressionAssignment_2
+             before(grammarAccess.getXAssignmentAccess().getExpressionAssignment_2()); 
+            // InternalDTML.g:1048:2: ( rule__XAssignment__ExpressionAssignment_2 )
+            // InternalDTML.g:1048:3: rule__XAssignment__ExpressionAssignment_2
             {
             pushFollow(FOLLOW_2);
-            rule__Assignment__ExpressionAssignment_2();
+            rule__XAssignment__ExpressionAssignment_2();
 
             state._fsp--;
 
 
             }
 
-             after(grammarAccess.getAssignmentAccess().getExpressionAssignment_2()); 
+             after(grammarAccess.getXAssignmentAccess().getExpressionAssignment_2()); 
 
             }
 
@@ -3144,21 +3328,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__2__Impl"
+    // $ANTLR end "rule__XAssignment__Group__2__Impl"
 
 
-    // $ANTLR start "rule__Assignment__Group__3"
-    // InternalDTML.g:1000:1: rule__Assignment__Group__3 : rule__Assignment__Group__3__Impl ;
-    public final void rule__Assignment__Group__3() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__3"
+    // InternalDTML.g:1056:1: rule__XAssignment__Group__3 : rule__XAssignment__Group__3__Impl ;
+    public final void rule__XAssignment__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1004:1: ( rule__Assignment__Group__3__Impl )
-            // InternalDTML.g:1005:2: rule__Assignment__Group__3__Impl
+            // InternalDTML.g:1060:1: ( rule__XAssignment__Group__3__Impl )
+            // InternalDTML.g:1061:2: rule__XAssignment__Group__3__Impl
             {
             pushFollow(FOLLOW_2);
-            rule__Assignment__Group__3__Impl();
+            rule__XAssignment__Group__3__Impl();
 
             state._fsp--;
 
@@ -3177,25 +3361,25 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__3"
+    // $ANTLR end "rule__XAssignment__Group__3"
 
 
-    // $ANTLR start "rule__Assignment__Group__3__Impl"
-    // InternalDTML.g:1011:1: rule__Assignment__Group__3__Impl : ( ';' ) ;
-    public final void rule__Assignment__Group__3__Impl() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__Group__3__Impl"
+    // InternalDTML.g:1067:1: rule__XAssignment__Group__3__Impl : ( ';' ) ;
+    public final void rule__XAssignment__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1015:1: ( ( ';' ) )
-            // InternalDTML.g:1016:1: ( ';' )
+            // InternalDTML.g:1071:1: ( ( ';' ) )
+            // InternalDTML.g:1072:1: ( ';' )
             {
-            // InternalDTML.g:1016:1: ( ';' )
-            // InternalDTML.g:1017:2: ';'
+            // InternalDTML.g:1072:1: ( ';' )
+            // InternalDTML.g:1073:2: ';'
             {
-             before(grammarAccess.getAssignmentAccess().getSemicolonKeyword_3()); 
+             before(grammarAccess.getXAssignmentAccess().getSemicolonKeyword_3()); 
             match(input,26,FOLLOW_2); 
-             after(grammarAccess.getAssignmentAccess().getSemicolonKeyword_3()); 
+             after(grammarAccess.getXAssignmentAccess().getSemicolonKeyword_3()); 
 
             }
 
@@ -3214,20 +3398,855 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__Group__3__Impl"
+    // $ANTLR end "rule__XAssignment__Group__3__Impl"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__0"
+    // InternalDTML.g:1083:1: rule__XEnumeration__Group__0 : rule__XEnumeration__Group__0__Impl rule__XEnumeration__Group__1 ;
+    public final void rule__XEnumeration__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1087:1: ( rule__XEnumeration__Group__0__Impl rule__XEnumeration__Group__1 )
+            // InternalDTML.g:1088:2: rule__XEnumeration__Group__0__Impl rule__XEnumeration__Group__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__XEnumeration__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__0"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__0__Impl"
+    // InternalDTML.g:1095:1: rule__XEnumeration__Group__0__Impl : ( 'Enumeration' ) ;
+    public final void rule__XEnumeration__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1099:1: ( ( 'Enumeration' ) )
+            // InternalDTML.g:1100:1: ( 'Enumeration' )
+            {
+            // InternalDTML.g:1100:1: ( 'Enumeration' )
+            // InternalDTML.g:1101:2: 'Enumeration'
+            {
+             before(grammarAccess.getXEnumerationAccess().getEnumerationKeyword_0()); 
+            match(input,27,FOLLOW_2); 
+             after(grammarAccess.getXEnumerationAccess().getEnumerationKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__0__Impl"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__1"
+    // InternalDTML.g:1110:1: rule__XEnumeration__Group__1 : rule__XEnumeration__Group__1__Impl rule__XEnumeration__Group__2 ;
+    public final void rule__XEnumeration__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1114:1: ( rule__XEnumeration__Group__1__Impl rule__XEnumeration__Group__2 )
+            // InternalDTML.g:1115:2: rule__XEnumeration__Group__1__Impl rule__XEnumeration__Group__2
+            {
+            pushFollow(FOLLOW_5);
+            rule__XEnumeration__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__1"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__1__Impl"
+    // InternalDTML.g:1122:1: rule__XEnumeration__Group__1__Impl : ( ( rule__XEnumeration__NameAssignment_1 ) ) ;
+    public final void rule__XEnumeration__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1126:1: ( ( ( rule__XEnumeration__NameAssignment_1 ) ) )
+            // InternalDTML.g:1127:1: ( ( rule__XEnumeration__NameAssignment_1 ) )
+            {
+            // InternalDTML.g:1127:1: ( ( rule__XEnumeration__NameAssignment_1 ) )
+            // InternalDTML.g:1128:2: ( rule__XEnumeration__NameAssignment_1 )
+            {
+             before(grammarAccess.getXEnumerationAccess().getNameAssignment_1()); 
+            // InternalDTML.g:1129:2: ( rule__XEnumeration__NameAssignment_1 )
+            // InternalDTML.g:1129:3: rule__XEnumeration__NameAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__NameAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getXEnumerationAccess().getNameAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__1__Impl"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__2"
+    // InternalDTML.g:1137:1: rule__XEnumeration__Group__2 : rule__XEnumeration__Group__2__Impl rule__XEnumeration__Group__3 ;
+    public final void rule__XEnumeration__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1141:1: ( rule__XEnumeration__Group__2__Impl rule__XEnumeration__Group__3 )
+            // InternalDTML.g:1142:2: rule__XEnumeration__Group__2__Impl rule__XEnumeration__Group__3
+            {
+            pushFollow(FOLLOW_14);
+            rule__XEnumeration__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__2"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__2__Impl"
+    // InternalDTML.g:1149:1: rule__XEnumeration__Group__2__Impl : ( '{' ) ;
+    public final void rule__XEnumeration__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1153:1: ( ( '{' ) )
+            // InternalDTML.g:1154:1: ( '{' )
+            {
+            // InternalDTML.g:1154:1: ( '{' )
+            // InternalDTML.g:1155:2: '{'
+            {
+             before(grammarAccess.getXEnumerationAccess().getLeftCurlyBracketKeyword_2()); 
+            match(input,21,FOLLOW_2); 
+             after(grammarAccess.getXEnumerationAccess().getLeftCurlyBracketKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__2__Impl"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__3"
+    // InternalDTML.g:1164:1: rule__XEnumeration__Group__3 : rule__XEnumeration__Group__3__Impl rule__XEnumeration__Group__4 ;
+    public final void rule__XEnumeration__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1168:1: ( rule__XEnumeration__Group__3__Impl rule__XEnumeration__Group__4 )
+            // InternalDTML.g:1169:2: rule__XEnumeration__Group__3__Impl rule__XEnumeration__Group__4
+            {
+            pushFollow(FOLLOW_14);
+            rule__XEnumeration__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__3"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__3__Impl"
+    // InternalDTML.g:1176:1: rule__XEnumeration__Group__3__Impl : ( ( rule__XEnumeration__LiteralsAssignment_3 )* ) ;
+    public final void rule__XEnumeration__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1180:1: ( ( ( rule__XEnumeration__LiteralsAssignment_3 )* ) )
+            // InternalDTML.g:1181:1: ( ( rule__XEnumeration__LiteralsAssignment_3 )* )
+            {
+            // InternalDTML.g:1181:1: ( ( rule__XEnumeration__LiteralsAssignment_3 )* )
+            // InternalDTML.g:1182:2: ( rule__XEnumeration__LiteralsAssignment_3 )*
+            {
+             before(grammarAccess.getXEnumerationAccess().getLiteralsAssignment_3()); 
+            // InternalDTML.g:1183:2: ( rule__XEnumeration__LiteralsAssignment_3 )*
+            loop13:
+            do {
+                int alt13=2;
+                int LA13_0 = input.LA(1);
+
+                if ( (LA13_0==RULE_ID) ) {
+                    alt13=1;
+                }
+
+
+                switch (alt13) {
+            	case 1 :
+            	    // InternalDTML.g:1183:3: rule__XEnumeration__LiteralsAssignment_3
+            	    {
+            	    pushFollow(FOLLOW_15);
+            	    rule__XEnumeration__LiteralsAssignment_3();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop13;
+                }
+            } while (true);
+
+             after(grammarAccess.getXEnumerationAccess().getLiteralsAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__3__Impl"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__4"
+    // InternalDTML.g:1191:1: rule__XEnumeration__Group__4 : rule__XEnumeration__Group__4__Impl ;
+    public final void rule__XEnumeration__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1195:1: ( rule__XEnumeration__Group__4__Impl )
+            // InternalDTML.g:1196:2: rule__XEnumeration__Group__4__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumeration__Group__4__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__4"
+
+
+    // $ANTLR start "rule__XEnumeration__Group__4__Impl"
+    // InternalDTML.g:1202:1: rule__XEnumeration__Group__4__Impl : ( '}' ) ;
+    public final void rule__XEnumeration__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1206:1: ( ( '}' ) )
+            // InternalDTML.g:1207:1: ( '}' )
+            {
+            // InternalDTML.g:1207:1: ( '}' )
+            // InternalDTML.g:1208:2: '}'
+            {
+             before(grammarAccess.getXEnumerationAccess().getRightCurlyBracketKeyword_4()); 
+            match(input,22,FOLLOW_2); 
+             after(grammarAccess.getXEnumerationAccess().getRightCurlyBracketKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__Group__4__Impl"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group__0"
+    // InternalDTML.g:1218:1: rule__XEnumLiteral__Group__0 : rule__XEnumLiteral__Group__0__Impl rule__XEnumLiteral__Group__1 ;
+    public final void rule__XEnumLiteral__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1222:1: ( rule__XEnumLiteral__Group__0__Impl rule__XEnumLiteral__Group__1 )
+            // InternalDTML.g:1223:2: rule__XEnumLiteral__Group__0__Impl rule__XEnumLiteral__Group__1
+            {
+            pushFollow(FOLLOW_16);
+            rule__XEnumLiteral__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group__0"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group__0__Impl"
+    // InternalDTML.g:1230:1: rule__XEnumLiteral__Group__0__Impl : ( ( rule__XEnumLiteral__NameAssignment_0 ) ) ;
+    public final void rule__XEnumLiteral__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1234:1: ( ( ( rule__XEnumLiteral__NameAssignment_0 ) ) )
+            // InternalDTML.g:1235:1: ( ( rule__XEnumLiteral__NameAssignment_0 ) )
+            {
+            // InternalDTML.g:1235:1: ( ( rule__XEnumLiteral__NameAssignment_0 ) )
+            // InternalDTML.g:1236:2: ( rule__XEnumLiteral__NameAssignment_0 )
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getNameAssignment_0()); 
+            // InternalDTML.g:1237:2: ( rule__XEnumLiteral__NameAssignment_0 )
+            // InternalDTML.g:1237:3: rule__XEnumLiteral__NameAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__NameAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getXEnumLiteralAccess().getNameAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group__0__Impl"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group__1"
+    // InternalDTML.g:1245:1: rule__XEnumLiteral__Group__1 : rule__XEnumLiteral__Group__1__Impl rule__XEnumLiteral__Group__2 ;
+    public final void rule__XEnumLiteral__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1249:1: ( rule__XEnumLiteral__Group__1__Impl rule__XEnumLiteral__Group__2 )
+            // InternalDTML.g:1250:2: rule__XEnumLiteral__Group__1__Impl rule__XEnumLiteral__Group__2
+            {
+            pushFollow(FOLLOW_16);
+            rule__XEnumLiteral__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group__1"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group__1__Impl"
+    // InternalDTML.g:1257:1: rule__XEnumLiteral__Group__1__Impl : ( ( rule__XEnumLiteral__Group_1__0 )? ) ;
+    public final void rule__XEnumLiteral__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1261:1: ( ( ( rule__XEnumLiteral__Group_1__0 )? ) )
+            // InternalDTML.g:1262:1: ( ( rule__XEnumLiteral__Group_1__0 )? )
+            {
+            // InternalDTML.g:1262:1: ( ( rule__XEnumLiteral__Group_1__0 )? )
+            // InternalDTML.g:1263:2: ( rule__XEnumLiteral__Group_1__0 )?
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getGroup_1()); 
+            // InternalDTML.g:1264:2: ( rule__XEnumLiteral__Group_1__0 )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==25) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // InternalDTML.g:1264:3: rule__XEnumLiteral__Group_1__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__XEnumLiteral__Group_1__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getXEnumLiteralAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group__1__Impl"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group__2"
+    // InternalDTML.g:1272:1: rule__XEnumLiteral__Group__2 : rule__XEnumLiteral__Group__2__Impl ;
+    public final void rule__XEnumLiteral__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1276:1: ( rule__XEnumLiteral__Group__2__Impl )
+            // InternalDTML.g:1277:2: rule__XEnumLiteral__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group__2"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group__2__Impl"
+    // InternalDTML.g:1283:1: rule__XEnumLiteral__Group__2__Impl : ( ( rule__XEnumLiteral__CommentAssignment_2 )? ) ;
+    public final void rule__XEnumLiteral__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1287:1: ( ( ( rule__XEnumLiteral__CommentAssignment_2 )? ) )
+            // InternalDTML.g:1288:1: ( ( rule__XEnumLiteral__CommentAssignment_2 )? )
+            {
+            // InternalDTML.g:1288:1: ( ( rule__XEnumLiteral__CommentAssignment_2 )? )
+            // InternalDTML.g:1289:2: ( rule__XEnumLiteral__CommentAssignment_2 )?
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getCommentAssignment_2()); 
+            // InternalDTML.g:1290:2: ( rule__XEnumLiteral__CommentAssignment_2 )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==RULE_VSL_COMMENT) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // InternalDTML.g:1290:3: rule__XEnumLiteral__CommentAssignment_2
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__XEnumLiteral__CommentAssignment_2();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getXEnumLiteralAccess().getCommentAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group__2__Impl"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group_1__0"
+    // InternalDTML.g:1299:1: rule__XEnumLiteral__Group_1__0 : rule__XEnumLiteral__Group_1__0__Impl rule__XEnumLiteral__Group_1__1 ;
+    public final void rule__XEnumLiteral__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1303:1: ( rule__XEnumLiteral__Group_1__0__Impl rule__XEnumLiteral__Group_1__1 )
+            // InternalDTML.g:1304:2: rule__XEnumLiteral__Group_1__0__Impl rule__XEnumLiteral__Group_1__1
+            {
+            pushFollow(FOLLOW_10);
+            rule__XEnumLiteral__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group_1__0"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group_1__0__Impl"
+    // InternalDTML.g:1311:1: rule__XEnumLiteral__Group_1__0__Impl : ( '=' ) ;
+    public final void rule__XEnumLiteral__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1315:1: ( ( '=' ) )
+            // InternalDTML.g:1316:1: ( '=' )
+            {
+            // InternalDTML.g:1316:1: ( '=' )
+            // InternalDTML.g:1317:2: '='
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_1_0()); 
+            match(input,25,FOLLOW_2); 
+             after(grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group_1__1"
+    // InternalDTML.g:1326:1: rule__XEnumLiteral__Group_1__1 : rule__XEnumLiteral__Group_1__1__Impl ;
+    public final void rule__XEnumLiteral__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1330:1: ( rule__XEnumLiteral__Group_1__1__Impl )
+            // InternalDTML.g:1331:2: rule__XEnumLiteral__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__Group_1__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group_1__1"
+
+
+    // $ANTLR start "rule__XEnumLiteral__Group_1__1__Impl"
+    // InternalDTML.g:1337:1: rule__XEnumLiteral__Group_1__1__Impl : ( ( rule__XEnumLiteral__ValueAssignment_1_1 ) ) ;
+    public final void rule__XEnumLiteral__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1341:1: ( ( ( rule__XEnumLiteral__ValueAssignment_1_1 ) ) )
+            // InternalDTML.g:1342:1: ( ( rule__XEnumLiteral__ValueAssignment_1_1 ) )
+            {
+            // InternalDTML.g:1342:1: ( ( rule__XEnumLiteral__ValueAssignment_1_1 ) )
+            // InternalDTML.g:1343:2: ( rule__XEnumLiteral__ValueAssignment_1_1 )
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getValueAssignment_1_1()); 
+            // InternalDTML.g:1344:2: ( rule__XEnumLiteral__ValueAssignment_1_1 )
+            // InternalDTML.g:1344:3: rule__XEnumLiteral__ValueAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__XEnumLiteral__ValueAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getXEnumLiteralAccess().getValueAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__Group_1__1__Impl"
 
 
     // $ANTLR start "rule__QualifiedName__Group__0"
-    // InternalDTML.g:1027:1: rule__QualifiedName__Group__0 : rule__QualifiedName__Group__0__Impl rule__QualifiedName__Group__1 ;
+    // InternalDTML.g:1353:1: rule__QualifiedName__Group__0 : rule__QualifiedName__Group__0__Impl rule__QualifiedName__Group__1 ;
     public final void rule__QualifiedName__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1031:1: ( rule__QualifiedName__Group__0__Impl rule__QualifiedName__Group__1 )
-            // InternalDTML.g:1032:2: rule__QualifiedName__Group__0__Impl rule__QualifiedName__Group__1
+            // InternalDTML.g:1357:1: ( rule__QualifiedName__Group__0__Impl rule__QualifiedName__Group__1 )
+            // InternalDTML.g:1358:2: rule__QualifiedName__Group__0__Impl rule__QualifiedName__Group__1
             {
-            pushFollow(FOLLOW_14);
+            pushFollow(FOLLOW_17);
             rule__QualifiedName__Group__0__Impl();
 
             state._fsp--;
@@ -3256,21 +4275,21 @@
 
 
     // $ANTLR start "rule__QualifiedName__Group__0__Impl"
-    // InternalDTML.g:1039:1: rule__QualifiedName__Group__0__Impl : ( ( rule__QualifiedName__PathAssignment_0 ) ) ;
+    // InternalDTML.g:1365:1: rule__QualifiedName__Group__0__Impl : ( ( rule__QualifiedName__PathAssignment_0 ) ) ;
     public final void rule__QualifiedName__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1043:1: ( ( ( rule__QualifiedName__PathAssignment_0 ) ) )
-            // InternalDTML.g:1044:1: ( ( rule__QualifiedName__PathAssignment_0 ) )
+            // InternalDTML.g:1369:1: ( ( ( rule__QualifiedName__PathAssignment_0 ) ) )
+            // InternalDTML.g:1370:1: ( ( rule__QualifiedName__PathAssignment_0 ) )
             {
-            // InternalDTML.g:1044:1: ( ( rule__QualifiedName__PathAssignment_0 ) )
-            // InternalDTML.g:1045:2: ( rule__QualifiedName__PathAssignment_0 )
+            // InternalDTML.g:1370:1: ( ( rule__QualifiedName__PathAssignment_0 ) )
+            // InternalDTML.g:1371:2: ( rule__QualifiedName__PathAssignment_0 )
             {
              before(grammarAccess.getQualifiedNameAccess().getPathAssignment_0()); 
-            // InternalDTML.g:1046:2: ( rule__QualifiedName__PathAssignment_0 )
-            // InternalDTML.g:1046:3: rule__QualifiedName__PathAssignment_0
+            // InternalDTML.g:1372:2: ( rule__QualifiedName__PathAssignment_0 )
+            // InternalDTML.g:1372:3: rule__QualifiedName__PathAssignment_0
             {
             pushFollow(FOLLOW_2);
             rule__QualifiedName__PathAssignment_0();
@@ -3303,14 +4322,14 @@
 
 
     // $ANTLR start "rule__QualifiedName__Group__1"
-    // InternalDTML.g:1054:1: rule__QualifiedName__Group__1 : rule__QualifiedName__Group__1__Impl rule__QualifiedName__Group__2 ;
+    // InternalDTML.g:1380:1: rule__QualifiedName__Group__1 : rule__QualifiedName__Group__1__Impl rule__QualifiedName__Group__2 ;
     public final void rule__QualifiedName__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1058:1: ( rule__QualifiedName__Group__1__Impl rule__QualifiedName__Group__2 )
-            // InternalDTML.g:1059:2: rule__QualifiedName__Group__1__Impl rule__QualifiedName__Group__2
+            // InternalDTML.g:1384:1: ( rule__QualifiedName__Group__1__Impl rule__QualifiedName__Group__2 )
+            // InternalDTML.g:1385:2: rule__QualifiedName__Group__1__Impl rule__QualifiedName__Group__2
             {
             pushFollow(FOLLOW_4);
             rule__QualifiedName__Group__1__Impl();
@@ -3341,20 +4360,20 @@
 
 
     // $ANTLR start "rule__QualifiedName__Group__1__Impl"
-    // InternalDTML.g:1066:1: rule__QualifiedName__Group__1__Impl : ( '::' ) ;
+    // InternalDTML.g:1392:1: rule__QualifiedName__Group__1__Impl : ( '::' ) ;
     public final void rule__QualifiedName__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1070:1: ( ( '::' ) )
-            // InternalDTML.g:1071:1: ( '::' )
+            // InternalDTML.g:1396:1: ( ( '::' ) )
+            // InternalDTML.g:1397:1: ( '::' )
             {
-            // InternalDTML.g:1071:1: ( '::' )
-            // InternalDTML.g:1072:2: '::'
+            // InternalDTML.g:1397:1: ( '::' )
+            // InternalDTML.g:1398:2: '::'
             {
              before(grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1()); 
-            match(input,27,FOLLOW_2); 
+            match(input,28,FOLLOW_2); 
              after(grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1()); 
 
             }
@@ -3378,14 +4397,14 @@
 
 
     // $ANTLR start "rule__QualifiedName__Group__2"
-    // InternalDTML.g:1081:1: rule__QualifiedName__Group__2 : rule__QualifiedName__Group__2__Impl ;
+    // InternalDTML.g:1407:1: rule__QualifiedName__Group__2 : rule__QualifiedName__Group__2__Impl ;
     public final void rule__QualifiedName__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1085:1: ( rule__QualifiedName__Group__2__Impl )
-            // InternalDTML.g:1086:2: rule__QualifiedName__Group__2__Impl
+            // InternalDTML.g:1411:1: ( rule__QualifiedName__Group__2__Impl )
+            // InternalDTML.g:1412:2: rule__QualifiedName__Group__2__Impl
             {
             pushFollow(FOLLOW_2);
             rule__QualifiedName__Group__2__Impl();
@@ -3411,33 +4430,33 @@
 
 
     // $ANTLR start "rule__QualifiedName__Group__2__Impl"
-    // InternalDTML.g:1092:1: rule__QualifiedName__Group__2__Impl : ( ( rule__QualifiedName__RemainingAssignment_2 )? ) ;
+    // InternalDTML.g:1418:1: rule__QualifiedName__Group__2__Impl : ( ( rule__QualifiedName__RemainingAssignment_2 )? ) ;
     public final void rule__QualifiedName__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1096:1: ( ( ( rule__QualifiedName__RemainingAssignment_2 )? ) )
-            // InternalDTML.g:1097:1: ( ( rule__QualifiedName__RemainingAssignment_2 )? )
+            // InternalDTML.g:1422:1: ( ( ( rule__QualifiedName__RemainingAssignment_2 )? ) )
+            // InternalDTML.g:1423:1: ( ( rule__QualifiedName__RemainingAssignment_2 )? )
             {
-            // InternalDTML.g:1097:1: ( ( rule__QualifiedName__RemainingAssignment_2 )? )
-            // InternalDTML.g:1098:2: ( rule__QualifiedName__RemainingAssignment_2 )?
+            // InternalDTML.g:1423:1: ( ( rule__QualifiedName__RemainingAssignment_2 )? )
+            // InternalDTML.g:1424:2: ( rule__QualifiedName__RemainingAssignment_2 )?
             {
              before(grammarAccess.getQualifiedNameAccess().getRemainingAssignment_2()); 
-            // InternalDTML.g:1099:2: ( rule__QualifiedName__RemainingAssignment_2 )?
-            int alt13=2;
-            int LA13_0 = input.LA(1);
+            // InternalDTML.g:1425:2: ( rule__QualifiedName__RemainingAssignment_2 )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
 
-            if ( (LA13_0==RULE_ID) ) {
-                int LA13_1 = input.LA(2);
+            if ( (LA16_0==RULE_ID) ) {
+                int LA16_1 = input.LA(2);
 
-                if ( (LA13_1==27) ) {
-                    alt13=1;
+                if ( (LA16_1==28) ) {
+                    alt16=1;
                 }
             }
-            switch (alt13) {
+            switch (alt16) {
                 case 1 :
-                    // InternalDTML.g:1099:3: rule__QualifiedName__RemainingAssignment_2
+                    // InternalDTML.g:1425:3: rule__QualifiedName__RemainingAssignment_2
                     {
                     pushFollow(FOLLOW_2);
                     rule__QualifiedName__RemainingAssignment_2();
@@ -3473,14 +4492,14 @@
 
 
     // $ANTLR start "rule__TypeRule__Group__0"
-    // InternalDTML.g:1108:1: rule__TypeRule__Group__0 : rule__TypeRule__Group__0__Impl rule__TypeRule__Group__1 ;
+    // InternalDTML.g:1434:1: rule__TypeRule__Group__0 : rule__TypeRule__Group__0__Impl rule__TypeRule__Group__1 ;
     public final void rule__TypeRule__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1112:1: ( rule__TypeRule__Group__0__Impl rule__TypeRule__Group__1 )
-            // InternalDTML.g:1113:2: rule__TypeRule__Group__0__Impl rule__TypeRule__Group__1
+            // InternalDTML.g:1438:1: ( rule__TypeRule__Group__0__Impl rule__TypeRule__Group__1 )
+            // InternalDTML.g:1439:2: rule__TypeRule__Group__0__Impl rule__TypeRule__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__TypeRule__Group__0__Impl();
@@ -3511,33 +4530,33 @@
 
 
     // $ANTLR start "rule__TypeRule__Group__0__Impl"
-    // InternalDTML.g:1120:1: rule__TypeRule__Group__0__Impl : ( ( rule__TypeRule__PathAssignment_0 )? ) ;
+    // InternalDTML.g:1446:1: rule__TypeRule__Group__0__Impl : ( ( rule__TypeRule__PathAssignment_0 )? ) ;
     public final void rule__TypeRule__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1124:1: ( ( ( rule__TypeRule__PathAssignment_0 )? ) )
-            // InternalDTML.g:1125:1: ( ( rule__TypeRule__PathAssignment_0 )? )
+            // InternalDTML.g:1450:1: ( ( ( rule__TypeRule__PathAssignment_0 )? ) )
+            // InternalDTML.g:1451:1: ( ( rule__TypeRule__PathAssignment_0 )? )
             {
-            // InternalDTML.g:1125:1: ( ( rule__TypeRule__PathAssignment_0 )? )
-            // InternalDTML.g:1126:2: ( rule__TypeRule__PathAssignment_0 )?
+            // InternalDTML.g:1451:1: ( ( rule__TypeRule__PathAssignment_0 )? )
+            // InternalDTML.g:1452:2: ( rule__TypeRule__PathAssignment_0 )?
             {
              before(grammarAccess.getTypeRuleAccess().getPathAssignment_0()); 
-            // InternalDTML.g:1127:2: ( rule__TypeRule__PathAssignment_0 )?
-            int alt14=2;
-            int LA14_0 = input.LA(1);
+            // InternalDTML.g:1453:2: ( rule__TypeRule__PathAssignment_0 )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
 
-            if ( (LA14_0==RULE_ID) ) {
-                int LA14_1 = input.LA(2);
+            if ( (LA17_0==RULE_ID) ) {
+                int LA17_1 = input.LA(2);
 
-                if ( (LA14_1==27) ) {
-                    alt14=1;
+                if ( (LA17_1==28) ) {
+                    alt17=1;
                 }
             }
-            switch (alt14) {
+            switch (alt17) {
                 case 1 :
-                    // InternalDTML.g:1127:3: rule__TypeRule__PathAssignment_0
+                    // InternalDTML.g:1453:3: rule__TypeRule__PathAssignment_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__TypeRule__PathAssignment_0();
@@ -3573,14 +4592,14 @@
 
 
     // $ANTLR start "rule__TypeRule__Group__1"
-    // InternalDTML.g:1135:1: rule__TypeRule__Group__1 : rule__TypeRule__Group__1__Impl ;
+    // InternalDTML.g:1461:1: rule__TypeRule__Group__1 : rule__TypeRule__Group__1__Impl ;
     public final void rule__TypeRule__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1139:1: ( rule__TypeRule__Group__1__Impl )
-            // InternalDTML.g:1140:2: rule__TypeRule__Group__1__Impl
+            // InternalDTML.g:1465:1: ( rule__TypeRule__Group__1__Impl )
+            // InternalDTML.g:1466:2: rule__TypeRule__Group__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__TypeRule__Group__1__Impl();
@@ -3606,21 +4625,21 @@
 
 
     // $ANTLR start "rule__TypeRule__Group__1__Impl"
-    // InternalDTML.g:1146:1: rule__TypeRule__Group__1__Impl : ( ( rule__TypeRule__TypeAssignment_1 ) ) ;
+    // InternalDTML.g:1472:1: rule__TypeRule__Group__1__Impl : ( ( rule__TypeRule__TypeAssignment_1 ) ) ;
     public final void rule__TypeRule__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1150:1: ( ( ( rule__TypeRule__TypeAssignment_1 ) ) )
-            // InternalDTML.g:1151:1: ( ( rule__TypeRule__TypeAssignment_1 ) )
+            // InternalDTML.g:1476:1: ( ( ( rule__TypeRule__TypeAssignment_1 ) ) )
+            // InternalDTML.g:1477:1: ( ( rule__TypeRule__TypeAssignment_1 ) )
             {
-            // InternalDTML.g:1151:1: ( ( rule__TypeRule__TypeAssignment_1 ) )
-            // InternalDTML.g:1152:2: ( rule__TypeRule__TypeAssignment_1 )
+            // InternalDTML.g:1477:1: ( ( rule__TypeRule__TypeAssignment_1 ) )
+            // InternalDTML.g:1478:2: ( rule__TypeRule__TypeAssignment_1 )
             {
              before(grammarAccess.getTypeRuleAccess().getTypeAssignment_1()); 
-            // InternalDTML.g:1153:2: ( rule__TypeRule__TypeAssignment_1 )
-            // InternalDTML.g:1153:3: rule__TypeRule__TypeAssignment_1
+            // InternalDTML.g:1479:2: ( rule__TypeRule__TypeAssignment_1 )
+            // InternalDTML.g:1479:3: rule__TypeRule__TypeAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__TypeRule__TypeAssignment_1();
@@ -3653,16 +4672,16 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__0"
-    // InternalDTML.g:1162:1: rule__MultiplicityRule__Group__0 : rule__MultiplicityRule__Group__0__Impl rule__MultiplicityRule__Group__1 ;
+    // InternalDTML.g:1488:1: rule__MultiplicityRule__Group__0 : rule__MultiplicityRule__Group__0__Impl rule__MultiplicityRule__Group__1 ;
     public final void rule__MultiplicityRule__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1166:1: ( rule__MultiplicityRule__Group__0__Impl rule__MultiplicityRule__Group__1 )
-            // InternalDTML.g:1167:2: rule__MultiplicityRule__Group__0__Impl rule__MultiplicityRule__Group__1
+            // InternalDTML.g:1492:1: ( rule__MultiplicityRule__Group__0__Impl rule__MultiplicityRule__Group__1 )
+            // InternalDTML.g:1493:2: rule__MultiplicityRule__Group__0__Impl rule__MultiplicityRule__Group__1
             {
-            pushFollow(FOLLOW_15);
+            pushFollow(FOLLOW_18);
             rule__MultiplicityRule__Group__0__Impl();
 
             state._fsp--;
@@ -3691,17 +4710,17 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__0__Impl"
-    // InternalDTML.g:1174:1: rule__MultiplicityRule__Group__0__Impl : ( '[' ) ;
+    // InternalDTML.g:1500:1: rule__MultiplicityRule__Group__0__Impl : ( '[' ) ;
     public final void rule__MultiplicityRule__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1178:1: ( ( '[' ) )
-            // InternalDTML.g:1179:1: ( '[' )
+            // InternalDTML.g:1504:1: ( ( '[' ) )
+            // InternalDTML.g:1505:1: ( '[' )
             {
-            // InternalDTML.g:1179:1: ( '[' )
-            // InternalDTML.g:1180:2: '['
+            // InternalDTML.g:1505:1: ( '[' )
+            // InternalDTML.g:1506:2: '['
             {
              before(grammarAccess.getMultiplicityRuleAccess().getLeftSquareBracketKeyword_0()); 
             match(input,16,FOLLOW_2); 
@@ -3728,16 +4747,16 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__1"
-    // InternalDTML.g:1189:1: rule__MultiplicityRule__Group__1 : rule__MultiplicityRule__Group__1__Impl rule__MultiplicityRule__Group__2 ;
+    // InternalDTML.g:1515:1: rule__MultiplicityRule__Group__1 : rule__MultiplicityRule__Group__1__Impl rule__MultiplicityRule__Group__2 ;
     public final void rule__MultiplicityRule__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1193:1: ( rule__MultiplicityRule__Group__1__Impl rule__MultiplicityRule__Group__2 )
-            // InternalDTML.g:1194:2: rule__MultiplicityRule__Group__1__Impl rule__MultiplicityRule__Group__2
+            // InternalDTML.g:1519:1: ( rule__MultiplicityRule__Group__1__Impl rule__MultiplicityRule__Group__2 )
+            // InternalDTML.g:1520:2: rule__MultiplicityRule__Group__1__Impl rule__MultiplicityRule__Group__2
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_19);
             rule__MultiplicityRule__Group__1__Impl();
 
             state._fsp--;
@@ -3766,21 +4785,21 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__1__Impl"
-    // InternalDTML.g:1201:1: rule__MultiplicityRule__Group__1__Impl : ( ( rule__MultiplicityRule__BoundsAssignment_1 ) ) ;
+    // InternalDTML.g:1527:1: rule__MultiplicityRule__Group__1__Impl : ( ( rule__MultiplicityRule__BoundsAssignment_1 ) ) ;
     public final void rule__MultiplicityRule__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1205:1: ( ( ( rule__MultiplicityRule__BoundsAssignment_1 ) ) )
-            // InternalDTML.g:1206:1: ( ( rule__MultiplicityRule__BoundsAssignment_1 ) )
+            // InternalDTML.g:1531:1: ( ( ( rule__MultiplicityRule__BoundsAssignment_1 ) ) )
+            // InternalDTML.g:1532:1: ( ( rule__MultiplicityRule__BoundsAssignment_1 ) )
             {
-            // InternalDTML.g:1206:1: ( ( rule__MultiplicityRule__BoundsAssignment_1 ) )
-            // InternalDTML.g:1207:2: ( rule__MultiplicityRule__BoundsAssignment_1 )
+            // InternalDTML.g:1532:1: ( ( rule__MultiplicityRule__BoundsAssignment_1 ) )
+            // InternalDTML.g:1533:2: ( rule__MultiplicityRule__BoundsAssignment_1 )
             {
              before(grammarAccess.getMultiplicityRuleAccess().getBoundsAssignment_1()); 
-            // InternalDTML.g:1208:2: ( rule__MultiplicityRule__BoundsAssignment_1 )
-            // InternalDTML.g:1208:3: rule__MultiplicityRule__BoundsAssignment_1
+            // InternalDTML.g:1534:2: ( rule__MultiplicityRule__BoundsAssignment_1 )
+            // InternalDTML.g:1534:3: rule__MultiplicityRule__BoundsAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__MultiplicityRule__BoundsAssignment_1();
@@ -3813,16 +4832,16 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__2"
-    // InternalDTML.g:1216:1: rule__MultiplicityRule__Group__2 : rule__MultiplicityRule__Group__2__Impl rule__MultiplicityRule__Group__3 ;
+    // InternalDTML.g:1542:1: rule__MultiplicityRule__Group__2 : rule__MultiplicityRule__Group__2__Impl rule__MultiplicityRule__Group__3 ;
     public final void rule__MultiplicityRule__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1220:1: ( rule__MultiplicityRule__Group__2__Impl rule__MultiplicityRule__Group__3 )
-            // InternalDTML.g:1221:2: rule__MultiplicityRule__Group__2__Impl rule__MultiplicityRule__Group__3
+            // InternalDTML.g:1546:1: ( rule__MultiplicityRule__Group__2__Impl rule__MultiplicityRule__Group__3 )
+            // InternalDTML.g:1547:2: rule__MultiplicityRule__Group__2__Impl rule__MultiplicityRule__Group__3
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_19);
             rule__MultiplicityRule__Group__2__Impl();
 
             state._fsp--;
@@ -3851,29 +4870,29 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__2__Impl"
-    // InternalDTML.g:1228:1: rule__MultiplicityRule__Group__2__Impl : ( ( rule__MultiplicityRule__Group_2__0 )? ) ;
+    // InternalDTML.g:1554:1: rule__MultiplicityRule__Group__2__Impl : ( ( rule__MultiplicityRule__Group_2__0 )? ) ;
     public final void rule__MultiplicityRule__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1232:1: ( ( ( rule__MultiplicityRule__Group_2__0 )? ) )
-            // InternalDTML.g:1233:1: ( ( rule__MultiplicityRule__Group_2__0 )? )
+            // InternalDTML.g:1558:1: ( ( ( rule__MultiplicityRule__Group_2__0 )? ) )
+            // InternalDTML.g:1559:1: ( ( rule__MultiplicityRule__Group_2__0 )? )
             {
-            // InternalDTML.g:1233:1: ( ( rule__MultiplicityRule__Group_2__0 )? )
-            // InternalDTML.g:1234:2: ( rule__MultiplicityRule__Group_2__0 )?
+            // InternalDTML.g:1559:1: ( ( rule__MultiplicityRule__Group_2__0 )? )
+            // InternalDTML.g:1560:2: ( rule__MultiplicityRule__Group_2__0 )?
             {
              before(grammarAccess.getMultiplicityRuleAccess().getGroup_2()); 
-            // InternalDTML.g:1235:2: ( rule__MultiplicityRule__Group_2__0 )?
-            int alt15=2;
-            int LA15_0 = input.LA(1);
+            // InternalDTML.g:1561:2: ( rule__MultiplicityRule__Group_2__0 )?
+            int alt18=2;
+            int LA18_0 = input.LA(1);
 
-            if ( (LA15_0==28) ) {
-                alt15=1;
+            if ( (LA18_0==29) ) {
+                alt18=1;
             }
-            switch (alt15) {
+            switch (alt18) {
                 case 1 :
-                    // InternalDTML.g:1235:3: rule__MultiplicityRule__Group_2__0
+                    // InternalDTML.g:1561:3: rule__MultiplicityRule__Group_2__0
                     {
                     pushFollow(FOLLOW_2);
                     rule__MultiplicityRule__Group_2__0();
@@ -3909,14 +4928,14 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__3"
-    // InternalDTML.g:1243:1: rule__MultiplicityRule__Group__3 : rule__MultiplicityRule__Group__3__Impl ;
+    // InternalDTML.g:1569:1: rule__MultiplicityRule__Group__3 : rule__MultiplicityRule__Group__3__Impl ;
     public final void rule__MultiplicityRule__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1247:1: ( rule__MultiplicityRule__Group__3__Impl )
-            // InternalDTML.g:1248:2: rule__MultiplicityRule__Group__3__Impl
+            // InternalDTML.g:1573:1: ( rule__MultiplicityRule__Group__3__Impl )
+            // InternalDTML.g:1574:2: rule__MultiplicityRule__Group__3__Impl
             {
             pushFollow(FOLLOW_2);
             rule__MultiplicityRule__Group__3__Impl();
@@ -3942,17 +4961,17 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group__3__Impl"
-    // InternalDTML.g:1254:1: rule__MultiplicityRule__Group__3__Impl : ( ']' ) ;
+    // InternalDTML.g:1580:1: rule__MultiplicityRule__Group__3__Impl : ( ']' ) ;
     public final void rule__MultiplicityRule__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1258:1: ( ( ']' ) )
-            // InternalDTML.g:1259:1: ( ']' )
+            // InternalDTML.g:1584:1: ( ( ']' ) )
+            // InternalDTML.g:1585:1: ( ']' )
             {
-            // InternalDTML.g:1259:1: ( ']' )
-            // InternalDTML.g:1260:2: ']'
+            // InternalDTML.g:1585:1: ( ']' )
+            // InternalDTML.g:1586:2: ']'
             {
              before(grammarAccess.getMultiplicityRuleAccess().getRightSquareBracketKeyword_3()); 
             match(input,17,FOLLOW_2); 
@@ -3979,16 +4998,16 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group_2__0"
-    // InternalDTML.g:1270:1: rule__MultiplicityRule__Group_2__0 : rule__MultiplicityRule__Group_2__0__Impl rule__MultiplicityRule__Group_2__1 ;
+    // InternalDTML.g:1596:1: rule__MultiplicityRule__Group_2__0 : rule__MultiplicityRule__Group_2__0__Impl rule__MultiplicityRule__Group_2__1 ;
     public final void rule__MultiplicityRule__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1274:1: ( rule__MultiplicityRule__Group_2__0__Impl rule__MultiplicityRule__Group_2__1 )
-            // InternalDTML.g:1275:2: rule__MultiplicityRule__Group_2__0__Impl rule__MultiplicityRule__Group_2__1
+            // InternalDTML.g:1600:1: ( rule__MultiplicityRule__Group_2__0__Impl rule__MultiplicityRule__Group_2__1 )
+            // InternalDTML.g:1601:2: rule__MultiplicityRule__Group_2__0__Impl rule__MultiplicityRule__Group_2__1
             {
-            pushFollow(FOLLOW_15);
+            pushFollow(FOLLOW_18);
             rule__MultiplicityRule__Group_2__0__Impl();
 
             state._fsp--;
@@ -4017,20 +5036,20 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group_2__0__Impl"
-    // InternalDTML.g:1282:1: rule__MultiplicityRule__Group_2__0__Impl : ( '..' ) ;
+    // InternalDTML.g:1608:1: rule__MultiplicityRule__Group_2__0__Impl : ( '..' ) ;
     public final void rule__MultiplicityRule__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1286:1: ( ( '..' ) )
-            // InternalDTML.g:1287:1: ( '..' )
+            // InternalDTML.g:1612:1: ( ( '..' ) )
+            // InternalDTML.g:1613:1: ( '..' )
             {
-            // InternalDTML.g:1287:1: ( '..' )
-            // InternalDTML.g:1288:2: '..'
+            // InternalDTML.g:1613:1: ( '..' )
+            // InternalDTML.g:1614:2: '..'
             {
              before(grammarAccess.getMultiplicityRuleAccess().getFullStopFullStopKeyword_2_0()); 
-            match(input,28,FOLLOW_2); 
+            match(input,29,FOLLOW_2); 
              after(grammarAccess.getMultiplicityRuleAccess().getFullStopFullStopKeyword_2_0()); 
 
             }
@@ -4054,14 +5073,14 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group_2__1"
-    // InternalDTML.g:1297:1: rule__MultiplicityRule__Group_2__1 : rule__MultiplicityRule__Group_2__1__Impl ;
+    // InternalDTML.g:1623:1: rule__MultiplicityRule__Group_2__1 : rule__MultiplicityRule__Group_2__1__Impl ;
     public final void rule__MultiplicityRule__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1301:1: ( rule__MultiplicityRule__Group_2__1__Impl )
-            // InternalDTML.g:1302:2: rule__MultiplicityRule__Group_2__1__Impl
+            // InternalDTML.g:1627:1: ( rule__MultiplicityRule__Group_2__1__Impl )
+            // InternalDTML.g:1628:2: rule__MultiplicityRule__Group_2__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__MultiplicityRule__Group_2__1__Impl();
@@ -4087,21 +5106,21 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__Group_2__1__Impl"
-    // InternalDTML.g:1308:1: rule__MultiplicityRule__Group_2__1__Impl : ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) ) ;
+    // InternalDTML.g:1634:1: rule__MultiplicityRule__Group_2__1__Impl : ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) ) ;
     public final void rule__MultiplicityRule__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1312:1: ( ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) ) )
-            // InternalDTML.g:1313:1: ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) )
+            // InternalDTML.g:1638:1: ( ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) ) )
+            // InternalDTML.g:1639:1: ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) )
             {
-            // InternalDTML.g:1313:1: ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) )
-            // InternalDTML.g:1314:2: ( rule__MultiplicityRule__BoundsAssignment_2_1 )
+            // InternalDTML.g:1639:1: ( ( rule__MultiplicityRule__BoundsAssignment_2_1 ) )
+            // InternalDTML.g:1640:2: ( rule__MultiplicityRule__BoundsAssignment_2_1 )
             {
              before(grammarAccess.getMultiplicityRuleAccess().getBoundsAssignment_2_1()); 
-            // InternalDTML.g:1315:2: ( rule__MultiplicityRule__BoundsAssignment_2_1 )
-            // InternalDTML.g:1315:3: rule__MultiplicityRule__BoundsAssignment_2_1
+            // InternalDTML.g:1641:2: ( rule__MultiplicityRule__BoundsAssignment_2_1 )
+            // InternalDTML.g:1641:3: rule__MultiplicityRule__BoundsAssignment_2_1
             {
             pushFollow(FOLLOW_2);
             rule__MultiplicityRule__BoundsAssignment_2_1();
@@ -4133,22 +5152,22 @@
     // $ANTLR end "rule__MultiplicityRule__Group_2__1__Impl"
 
 
-    // $ANTLR start "rule__DTModel__NameAssignment_1"
-    // InternalDTML.g:1324:1: rule__DTModel__NameAssignment_1 : ( RULE_ID ) ;
-    public final void rule__DTModel__NameAssignment_1() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__NameAssignment_1"
+    // InternalDTML.g:1650:1: rule__XDataType__NameAssignment_1 : ( RULE_ID ) ;
+    public final void rule__XDataType__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1328:1: ( ( RULE_ID ) )
-            // InternalDTML.g:1329:2: ( RULE_ID )
+            // InternalDTML.g:1654:1: ( ( RULE_ID ) )
+            // InternalDTML.g:1655:2: ( RULE_ID )
             {
-            // InternalDTML.g:1329:2: ( RULE_ID )
-            // InternalDTML.g:1330:3: RULE_ID
+            // InternalDTML.g:1655:2: ( RULE_ID )
+            // InternalDTML.g:1656:3: RULE_ID
             {
-             before(grammarAccess.getDTModelAccess().getNameIDTerminalRuleCall_1_0()); 
+             before(grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_1_0()); 
             match(input,RULE_ID,FOLLOW_2); 
-             after(grammarAccess.getDTModelAccess().getNameIDTerminalRuleCall_1_0()); 
+             after(grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_1_0()); 
 
             }
 
@@ -4167,29 +5186,29 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__NameAssignment_1"
+    // $ANTLR end "rule__XDataType__NameAssignment_1"
 
 
-    // $ANTLR start "rule__DTModel__AttributesAssignment_3"
-    // InternalDTML.g:1339:1: rule__DTModel__AttributesAssignment_3 : ( ruleProperty ) ;
-    public final void rule__DTModel__AttributesAssignment_3() throws RecognitionException {
+    // $ANTLR start "rule__XDataType__AttributesAssignment_3"
+    // InternalDTML.g:1665:1: rule__XDataType__AttributesAssignment_3 : ( ruleProperty ) ;
+    public final void rule__XDataType__AttributesAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1343:1: ( ( ruleProperty ) )
-            // InternalDTML.g:1344:2: ( ruleProperty )
+            // InternalDTML.g:1669:1: ( ( ruleProperty ) )
+            // InternalDTML.g:1670:2: ( ruleProperty )
             {
-            // InternalDTML.g:1344:2: ( ruleProperty )
-            // InternalDTML.g:1345:3: ruleProperty
+            // InternalDTML.g:1670:2: ( ruleProperty )
+            // InternalDTML.g:1671:3: ruleProperty
             {
-             before(grammarAccess.getDTModelAccess().getAttributesPropertyParserRuleCall_3_0()); 
+             before(grammarAccess.getXDataTypeAccess().getAttributesPropertyParserRuleCall_3_0()); 
             pushFollow(FOLLOW_2);
             ruleProperty();
 
             state._fsp--;
 
-             after(grammarAccess.getDTModelAccess().getAttributesPropertyParserRuleCall_3_0()); 
+             after(grammarAccess.getXDataTypeAccess().getAttributesPropertyParserRuleCall_3_0()); 
 
             }
 
@@ -4208,21 +5227,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__DTModel__AttributesAssignment_3"
+    // $ANTLR end "rule__XDataType__AttributesAssignment_3"
 
 
     // $ANTLR start "rule__Property__NameAssignment_1"
-    // InternalDTML.g:1354:1: rule__Property__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalDTML.g:1680:1: rule__Property__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__Property__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1358:1: ( ( RULE_ID ) )
-            // InternalDTML.g:1359:2: ( RULE_ID )
+            // InternalDTML.g:1684:1: ( ( RULE_ID ) )
+            // InternalDTML.g:1685:2: ( RULE_ID )
             {
-            // InternalDTML.g:1359:2: ( RULE_ID )
-            // InternalDTML.g:1360:3: RULE_ID
+            // InternalDTML.g:1685:2: ( RULE_ID )
+            // InternalDTML.g:1686:3: RULE_ID
             {
              before(grammarAccess.getPropertyAccess().getNameIDTerminalRuleCall_1_0()); 
             match(input,RULE_ID,FOLLOW_2); 
@@ -4249,17 +5268,17 @@
 
 
     // $ANTLR start "rule__Property__TypeAssignment_2_1_0"
-    // InternalDTML.g:1369:1: rule__Property__TypeAssignment_2_1_0 : ( ruleTypeRule ) ;
+    // InternalDTML.g:1695:1: rule__Property__TypeAssignment_2_1_0 : ( ruleTypeRule ) ;
     public final void rule__Property__TypeAssignment_2_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1373:1: ( ( ruleTypeRule ) )
-            // InternalDTML.g:1374:2: ( ruleTypeRule )
+            // InternalDTML.g:1699:1: ( ( ruleTypeRule ) )
+            // InternalDTML.g:1700:2: ( ruleTypeRule )
             {
-            // InternalDTML.g:1374:2: ( ruleTypeRule )
-            // InternalDTML.g:1375:3: ruleTypeRule
+            // InternalDTML.g:1700:2: ( ruleTypeRule )
+            // InternalDTML.g:1701:3: ruleTypeRule
             {
              before(grammarAccess.getPropertyAccess().getTypeTypeRuleParserRuleCall_2_1_0_0()); 
             pushFollow(FOLLOW_2);
@@ -4290,24 +5309,24 @@
 
 
     // $ANTLR start "rule__Property__TypeUndefinedAssignment_2_1_1"
-    // InternalDTML.g:1384:1: rule__Property__TypeUndefinedAssignment_2_1_1 : ( ( '<Undefined>' ) ) ;
+    // InternalDTML.g:1710:1: rule__Property__TypeUndefinedAssignment_2_1_1 : ( ( '<Undefined>' ) ) ;
     public final void rule__Property__TypeUndefinedAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1388:1: ( ( ( '<Undefined>' ) ) )
-            // InternalDTML.g:1389:2: ( ( '<Undefined>' ) )
+            // InternalDTML.g:1714:1: ( ( ( '<Undefined>' ) ) )
+            // InternalDTML.g:1715:2: ( ( '<Undefined>' ) )
             {
-            // InternalDTML.g:1389:2: ( ( '<Undefined>' ) )
-            // InternalDTML.g:1390:3: ( '<Undefined>' )
+            // InternalDTML.g:1715:2: ( ( '<Undefined>' ) )
+            // InternalDTML.g:1716:3: ( '<Undefined>' )
             {
              before(grammarAccess.getPropertyAccess().getTypeUndefinedUndefinedKeyword_2_1_1_0()); 
-            // InternalDTML.g:1391:3: ( '<Undefined>' )
-            // InternalDTML.g:1392:4: '<Undefined>'
+            // InternalDTML.g:1717:3: ( '<Undefined>' )
+            // InternalDTML.g:1718:4: '<Undefined>'
             {
              before(grammarAccess.getPropertyAccess().getTypeUndefinedUndefinedKeyword_2_1_1_0()); 
-            match(input,29,FOLLOW_2); 
+            match(input,30,FOLLOW_2); 
              after(grammarAccess.getPropertyAccess().getTypeUndefinedUndefinedKeyword_2_1_1_0()); 
 
             }
@@ -4335,17 +5354,17 @@
 
 
     // $ANTLR start "rule__Property__MultiplicityAssignment_3"
-    // InternalDTML.g:1403:1: rule__Property__MultiplicityAssignment_3 : ( ruleMultiplicityRule ) ;
+    // InternalDTML.g:1729:1: rule__Property__MultiplicityAssignment_3 : ( ruleMultiplicityRule ) ;
     public final void rule__Property__MultiplicityAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1407:1: ( ( ruleMultiplicityRule ) )
-            // InternalDTML.g:1408:2: ( ruleMultiplicityRule )
+            // InternalDTML.g:1733:1: ( ( ruleMultiplicityRule ) )
+            // InternalDTML.g:1734:2: ( ruleMultiplicityRule )
             {
-            // InternalDTML.g:1408:2: ( ruleMultiplicityRule )
-            // InternalDTML.g:1409:3: ruleMultiplicityRule
+            // InternalDTML.g:1734:2: ( ruleMultiplicityRule )
+            // InternalDTML.g:1735:3: ruleMultiplicityRule
             {
              before(grammarAccess.getPropertyAccess().getMultiplicityMultiplicityRuleParserRuleCall_3_0()); 
             pushFollow(FOLLOW_2);
@@ -4376,17 +5395,17 @@
 
 
     // $ANTLR start "rule__Property__ValueAssignment_4_1"
-    // InternalDTML.g:1418:1: rule__Property__ValueAssignment_4_1 : ( ruleValue ) ;
+    // InternalDTML.g:1744:1: rule__Property__ValueAssignment_4_1 : ( ruleValue ) ;
     public final void rule__Property__ValueAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1422:1: ( ( ruleValue ) )
-            // InternalDTML.g:1423:2: ( ruleValue )
+            // InternalDTML.g:1748:1: ( ( ruleValue ) )
+            // InternalDTML.g:1749:2: ( ruleValue )
             {
-            // InternalDTML.g:1423:2: ( ruleValue )
-            // InternalDTML.g:1424:3: ruleValue
+            // InternalDTML.g:1749:2: ( ruleValue )
+            // InternalDTML.g:1750:3: ruleValue
             {
              before(grammarAccess.getPropertyAccess().getValueValueParserRuleCall_4_1_0()); 
             pushFollow(FOLLOW_2);
@@ -4417,17 +5436,17 @@
 
 
     // $ANTLR start "rule__Property__CommentAssignment_5"
-    // InternalDTML.g:1433:1: rule__Property__CommentAssignment_5 : ( RULE_VSL_COMMENT ) ;
+    // InternalDTML.g:1759:1: rule__Property__CommentAssignment_5 : ( RULE_VSL_COMMENT ) ;
     public final void rule__Property__CommentAssignment_5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1437:1: ( ( RULE_VSL_COMMENT ) )
-            // InternalDTML.g:1438:2: ( RULE_VSL_COMMENT )
+            // InternalDTML.g:1763:1: ( ( RULE_VSL_COMMENT ) )
+            // InternalDTML.g:1764:2: ( RULE_VSL_COMMENT )
             {
-            // InternalDTML.g:1438:2: ( RULE_VSL_COMMENT )
-            // InternalDTML.g:1439:3: RULE_VSL_COMMENT
+            // InternalDTML.g:1764:2: ( RULE_VSL_COMMENT )
+            // InternalDTML.g:1765:3: RULE_VSL_COMMENT
             {
              before(grammarAccess.getPropertyAccess().getCommentVSL_COMMENTTerminalRuleCall_5_0()); 
             match(input,RULE_VSL_COMMENT,FOLLOW_2); 
@@ -4453,22 +5472,22 @@
     // $ANTLR end "rule__Property__CommentAssignment_5"
 
 
-    // $ANTLR start "rule__Assignment__NameAssignment_0"
-    // InternalDTML.g:1448:1: rule__Assignment__NameAssignment_0 : ( RULE_ID ) ;
-    public final void rule__Assignment__NameAssignment_0() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__NameAssignment_0"
+    // InternalDTML.g:1774:1: rule__XAssignment__NameAssignment_0 : ( RULE_ID ) ;
+    public final void rule__XAssignment__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1452:1: ( ( RULE_ID ) )
-            // InternalDTML.g:1453:2: ( RULE_ID )
+            // InternalDTML.g:1778:1: ( ( RULE_ID ) )
+            // InternalDTML.g:1779:2: ( RULE_ID )
             {
-            // InternalDTML.g:1453:2: ( RULE_ID )
-            // InternalDTML.g:1454:3: RULE_ID
+            // InternalDTML.g:1779:2: ( RULE_ID )
+            // InternalDTML.g:1780:3: RULE_ID
             {
-             before(grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0()); 
+             before(grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0()); 
             match(input,RULE_ID,FOLLOW_2); 
-             after(grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0()); 
+             after(grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0()); 
 
             }
 
@@ -4487,29 +5506,29 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__NameAssignment_0"
+    // $ANTLR end "rule__XAssignment__NameAssignment_0"
 
 
-    // $ANTLR start "rule__Assignment__ExpressionAssignment_2"
-    // InternalDTML.g:1463:1: rule__Assignment__ExpressionAssignment_2 : ( ruleExpressionString ) ;
-    public final void rule__Assignment__ExpressionAssignment_2() throws RecognitionException {
+    // $ANTLR start "rule__XAssignment__ExpressionAssignment_2"
+    // InternalDTML.g:1789:1: rule__XAssignment__ExpressionAssignment_2 : ( ruleExpressionString ) ;
+    public final void rule__XAssignment__ExpressionAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1467:1: ( ( ruleExpressionString ) )
-            // InternalDTML.g:1468:2: ( ruleExpressionString )
+            // InternalDTML.g:1793:1: ( ( ruleExpressionString ) )
+            // InternalDTML.g:1794:2: ( ruleExpressionString )
             {
-            // InternalDTML.g:1468:2: ( ruleExpressionString )
-            // InternalDTML.g:1469:3: ruleExpressionString
+            // InternalDTML.g:1794:2: ( ruleExpressionString )
+            // InternalDTML.g:1795:3: ruleExpressionString
             {
-             before(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); 
+             before(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); 
             pushFollow(FOLLOW_2);
             ruleExpressionString();
 
             state._fsp--;
 
-             after(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); 
+             after(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0()); 
 
             }
 
@@ -4528,21 +5547,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__Assignment__ExpressionAssignment_2"
+    // $ANTLR end "rule__XAssignment__ExpressionAssignment_2"
 
 
     // $ANTLR start "rule__Value__StrAssignment_0"
-    // InternalDTML.g:1478:1: rule__Value__StrAssignment_0 : ( RULE_STRING ) ;
+    // InternalDTML.g:1804:1: rule__Value__StrAssignment_0 : ( RULE_STRING ) ;
     public final void rule__Value__StrAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1482:1: ( ( RULE_STRING ) )
-            // InternalDTML.g:1483:2: ( RULE_STRING )
+            // InternalDTML.g:1808:1: ( ( RULE_STRING ) )
+            // InternalDTML.g:1809:2: ( RULE_STRING )
             {
-            // InternalDTML.g:1483:2: ( RULE_STRING )
-            // InternalDTML.g:1484:3: RULE_STRING
+            // InternalDTML.g:1809:2: ( RULE_STRING )
+            // InternalDTML.g:1810:3: RULE_STRING
             {
              before(grammarAccess.getValueAccess().getStrSTRINGTerminalRuleCall_0_0()); 
             match(input,RULE_STRING,FOLLOW_2); 
@@ -4569,17 +5588,17 @@
 
 
     // $ANTLR start "rule__Value__IvalAssignment_1"
-    // InternalDTML.g:1493:1: rule__Value__IvalAssignment_1 : ( RULE_INT ) ;
+    // InternalDTML.g:1819:1: rule__Value__IvalAssignment_1 : ( RULE_INT ) ;
     public final void rule__Value__IvalAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1497:1: ( ( RULE_INT ) )
-            // InternalDTML.g:1498:2: ( RULE_INT )
+            // InternalDTML.g:1823:1: ( ( RULE_INT ) )
+            // InternalDTML.g:1824:2: ( RULE_INT )
             {
-            // InternalDTML.g:1498:2: ( RULE_INT )
-            // InternalDTML.g:1499:3: RULE_INT
+            // InternalDTML.g:1824:2: ( RULE_INT )
+            // InternalDTML.g:1825:3: RULE_INT
             {
              before(grammarAccess.getValueAccess().getIvalINTTerminalRuleCall_1_0()); 
             match(input,RULE_INT,FOLLOW_2); 
@@ -4606,17 +5625,17 @@
 
 
     // $ANTLR start "rule__Value__DvalAssignment_2"
-    // InternalDTML.g:1508:1: rule__Value__DvalAssignment_2 : ( RULE_DOUBLE ) ;
+    // InternalDTML.g:1834:1: rule__Value__DvalAssignment_2 : ( RULE_DOUBLE ) ;
     public final void rule__Value__DvalAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1512:1: ( ( RULE_DOUBLE ) )
-            // InternalDTML.g:1513:2: ( RULE_DOUBLE )
+            // InternalDTML.g:1838:1: ( ( RULE_DOUBLE ) )
+            // InternalDTML.g:1839:2: ( RULE_DOUBLE )
             {
-            // InternalDTML.g:1513:2: ( RULE_DOUBLE )
-            // InternalDTML.g:1514:3: RULE_DOUBLE
+            // InternalDTML.g:1839:2: ( RULE_DOUBLE )
+            // InternalDTML.g:1840:3: RULE_DOUBLE
             {
              before(grammarAccess.getValueAccess().getDvalDOUBLETerminalRuleCall_2_0()); 
             match(input,RULE_DOUBLE,FOLLOW_2); 
@@ -4642,22 +5661,215 @@
     // $ANTLR end "rule__Value__DvalAssignment_2"
 
 
+    // $ANTLR start "rule__XEnumeration__NameAssignment_1"
+    // InternalDTML.g:1849:1: rule__XEnumeration__NameAssignment_1 : ( RULE_ID ) ;
+    public final void rule__XEnumeration__NameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1853:1: ( ( RULE_ID ) )
+            // InternalDTML.g:1854:2: ( RULE_ID )
+            {
+            // InternalDTML.g:1854:2: ( RULE_ID )
+            // InternalDTML.g:1855:3: RULE_ID
+            {
+             before(grammarAccess.getXEnumerationAccess().getNameIDTerminalRuleCall_1_0()); 
+            match(input,RULE_ID,FOLLOW_2); 
+             after(grammarAccess.getXEnumerationAccess().getNameIDTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__NameAssignment_1"
+
+
+    // $ANTLR start "rule__XEnumeration__LiteralsAssignment_3"
+    // InternalDTML.g:1864:1: rule__XEnumeration__LiteralsAssignment_3 : ( ruleXEnumLiteral ) ;
+    public final void rule__XEnumeration__LiteralsAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1868:1: ( ( ruleXEnumLiteral ) )
+            // InternalDTML.g:1869:2: ( ruleXEnumLiteral )
+            {
+            // InternalDTML.g:1869:2: ( ruleXEnumLiteral )
+            // InternalDTML.g:1870:3: ruleXEnumLiteral
+            {
+             before(grammarAccess.getXEnumerationAccess().getLiteralsXEnumLiteralParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_2);
+            ruleXEnumLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getXEnumerationAccess().getLiteralsXEnumLiteralParserRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumeration__LiteralsAssignment_3"
+
+
+    // $ANTLR start "rule__XEnumLiteral__NameAssignment_0"
+    // InternalDTML.g:1879:1: rule__XEnumLiteral__NameAssignment_0 : ( RULE_ID ) ;
+    public final void rule__XEnumLiteral__NameAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1883:1: ( ( RULE_ID ) )
+            // InternalDTML.g:1884:2: ( RULE_ID )
+            {
+            // InternalDTML.g:1884:2: ( RULE_ID )
+            // InternalDTML.g:1885:3: RULE_ID
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_0_0()); 
+            match(input,RULE_ID,FOLLOW_2); 
+             after(grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__NameAssignment_0"
+
+
+    // $ANTLR start "rule__XEnumLiteral__ValueAssignment_1_1"
+    // InternalDTML.g:1894:1: rule__XEnumLiteral__ValueAssignment_1_1 : ( ruleValue ) ;
+    public final void rule__XEnumLiteral__ValueAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1898:1: ( ( ruleValue ) )
+            // InternalDTML.g:1899:2: ( ruleValue )
+            {
+            // InternalDTML.g:1899:2: ( ruleValue )
+            // InternalDTML.g:1900:3: ruleValue
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getValueValueParserRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleValue();
+
+            state._fsp--;
+
+             after(grammarAccess.getXEnumLiteralAccess().getValueValueParserRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__ValueAssignment_1_1"
+
+
+    // $ANTLR start "rule__XEnumLiteral__CommentAssignment_2"
+    // InternalDTML.g:1909:1: rule__XEnumLiteral__CommentAssignment_2 : ( RULE_VSL_COMMENT ) ;
+    public final void rule__XEnumLiteral__CommentAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalDTML.g:1913:1: ( ( RULE_VSL_COMMENT ) )
+            // InternalDTML.g:1914:2: ( RULE_VSL_COMMENT )
+            {
+            // InternalDTML.g:1914:2: ( RULE_VSL_COMMENT )
+            // InternalDTML.g:1915:3: RULE_VSL_COMMENT
+            {
+             before(grammarAccess.getXEnumLiteralAccess().getCommentVSL_COMMENTTerminalRuleCall_2_0()); 
+            match(input,RULE_VSL_COMMENT,FOLLOW_2); 
+             after(grammarAccess.getXEnumLiteralAccess().getCommentVSL_COMMENTTerminalRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__XEnumLiteral__CommentAssignment_2"
+
+
     // $ANTLR start "rule__QualifiedName__PathAssignment_0"
-    // InternalDTML.g:1523:1: rule__QualifiedName__PathAssignment_0 : ( ( RULE_ID ) ) ;
+    // InternalDTML.g:1924:1: rule__QualifiedName__PathAssignment_0 : ( ( RULE_ID ) ) ;
     public final void rule__QualifiedName__PathAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1527:1: ( ( ( RULE_ID ) ) )
-            // InternalDTML.g:1528:2: ( ( RULE_ID ) )
+            // InternalDTML.g:1928:1: ( ( ( RULE_ID ) ) )
+            // InternalDTML.g:1929:2: ( ( RULE_ID ) )
             {
-            // InternalDTML.g:1528:2: ( ( RULE_ID ) )
-            // InternalDTML.g:1529:3: ( RULE_ID )
+            // InternalDTML.g:1929:2: ( ( RULE_ID ) )
+            // InternalDTML.g:1930:3: ( RULE_ID )
             {
              before(grammarAccess.getQualifiedNameAccess().getPathNamespaceCrossReference_0_0()); 
-            // InternalDTML.g:1530:3: ( RULE_ID )
-            // InternalDTML.g:1531:4: RULE_ID
+            // InternalDTML.g:1931:3: ( RULE_ID )
+            // InternalDTML.g:1932:4: RULE_ID
             {
              before(grammarAccess.getQualifiedNameAccess().getPathNamespaceIDTerminalRuleCall_0_0_1()); 
             match(input,RULE_ID,FOLLOW_2); 
@@ -4688,17 +5900,17 @@
 
 
     // $ANTLR start "rule__QualifiedName__RemainingAssignment_2"
-    // InternalDTML.g:1542:1: rule__QualifiedName__RemainingAssignment_2 : ( ruleQualifiedName ) ;
+    // InternalDTML.g:1943:1: rule__QualifiedName__RemainingAssignment_2 : ( ruleQualifiedName ) ;
     public final void rule__QualifiedName__RemainingAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1546:1: ( ( ruleQualifiedName ) )
-            // InternalDTML.g:1547:2: ( ruleQualifiedName )
+            // InternalDTML.g:1947:1: ( ( ruleQualifiedName ) )
+            // InternalDTML.g:1948:2: ( ruleQualifiedName )
             {
-            // InternalDTML.g:1547:2: ( ruleQualifiedName )
-            // InternalDTML.g:1548:3: ruleQualifiedName
+            // InternalDTML.g:1948:2: ( ruleQualifiedName )
+            // InternalDTML.g:1949:3: ruleQualifiedName
             {
              before(grammarAccess.getQualifiedNameAccess().getRemainingQualifiedNameParserRuleCall_2_0()); 
             pushFollow(FOLLOW_2);
@@ -4729,17 +5941,17 @@
 
 
     // $ANTLR start "rule__TypeRule__PathAssignment_0"
-    // InternalDTML.g:1557:1: rule__TypeRule__PathAssignment_0 : ( ruleQualifiedName ) ;
+    // InternalDTML.g:1958:1: rule__TypeRule__PathAssignment_0 : ( ruleQualifiedName ) ;
     public final void rule__TypeRule__PathAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1561:1: ( ( ruleQualifiedName ) )
-            // InternalDTML.g:1562:2: ( ruleQualifiedName )
+            // InternalDTML.g:1962:1: ( ( ruleQualifiedName ) )
+            // InternalDTML.g:1963:2: ( ruleQualifiedName )
             {
-            // InternalDTML.g:1562:2: ( ruleQualifiedName )
-            // InternalDTML.g:1563:3: ruleQualifiedName
+            // InternalDTML.g:1963:2: ( ruleQualifiedName )
+            // InternalDTML.g:1964:3: ruleQualifiedName
             {
              before(grammarAccess.getTypeRuleAccess().getPathQualifiedNameParserRuleCall_0_0()); 
             pushFollow(FOLLOW_2);
@@ -4770,21 +5982,21 @@
 
 
     // $ANTLR start "rule__TypeRule__TypeAssignment_1"
-    // InternalDTML.g:1572:1: rule__TypeRule__TypeAssignment_1 : ( ( RULE_ID ) ) ;
+    // InternalDTML.g:1973:1: rule__TypeRule__TypeAssignment_1 : ( ( RULE_ID ) ) ;
     public final void rule__TypeRule__TypeAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1576:1: ( ( ( RULE_ID ) ) )
-            // InternalDTML.g:1577:2: ( ( RULE_ID ) )
+            // InternalDTML.g:1977:1: ( ( ( RULE_ID ) ) )
+            // InternalDTML.g:1978:2: ( ( RULE_ID ) )
             {
-            // InternalDTML.g:1577:2: ( ( RULE_ID ) )
-            // InternalDTML.g:1578:3: ( RULE_ID )
+            // InternalDTML.g:1978:2: ( ( RULE_ID ) )
+            // InternalDTML.g:1979:3: ( RULE_ID )
             {
              before(grammarAccess.getTypeRuleAccess().getTypeTypeCrossReference_1_0()); 
-            // InternalDTML.g:1579:3: ( RULE_ID )
-            // InternalDTML.g:1580:4: RULE_ID
+            // InternalDTML.g:1980:3: ( RULE_ID )
+            // InternalDTML.g:1981:4: RULE_ID
             {
              before(grammarAccess.getTypeRuleAccess().getTypeTypeIDTerminalRuleCall_1_0_1()); 
             match(input,RULE_ID,FOLLOW_2); 
@@ -4815,17 +6027,17 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__BoundsAssignment_1"
-    // InternalDTML.g:1591:1: rule__MultiplicityRule__BoundsAssignment_1 : ( ruleBoundSpecification ) ;
+    // InternalDTML.g:1992:1: rule__MultiplicityRule__BoundsAssignment_1 : ( ruleBoundSpecification ) ;
     public final void rule__MultiplicityRule__BoundsAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1595:1: ( ( ruleBoundSpecification ) )
-            // InternalDTML.g:1596:2: ( ruleBoundSpecification )
+            // InternalDTML.g:1996:1: ( ( ruleBoundSpecification ) )
+            // InternalDTML.g:1997:2: ( ruleBoundSpecification )
             {
-            // InternalDTML.g:1596:2: ( ruleBoundSpecification )
-            // InternalDTML.g:1597:3: ruleBoundSpecification
+            // InternalDTML.g:1997:2: ( ruleBoundSpecification )
+            // InternalDTML.g:1998:3: ruleBoundSpecification
             {
              before(grammarAccess.getMultiplicityRuleAccess().getBoundsBoundSpecificationParserRuleCall_1_0()); 
             pushFollow(FOLLOW_2);
@@ -4856,17 +6068,17 @@
 
 
     // $ANTLR start "rule__MultiplicityRule__BoundsAssignment_2_1"
-    // InternalDTML.g:1606:1: rule__MultiplicityRule__BoundsAssignment_2_1 : ( ruleBoundSpecification ) ;
+    // InternalDTML.g:2007:1: rule__MultiplicityRule__BoundsAssignment_2_1 : ( ruleBoundSpecification ) ;
     public final void rule__MultiplicityRule__BoundsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1610:1: ( ( ruleBoundSpecification ) )
-            // InternalDTML.g:1611:2: ( ruleBoundSpecification )
+            // InternalDTML.g:2011:1: ( ( ruleBoundSpecification ) )
+            // InternalDTML.g:2012:2: ( ruleBoundSpecification )
             {
-            // InternalDTML.g:1611:2: ( ruleBoundSpecification )
-            // InternalDTML.g:1612:3: ruleBoundSpecification
+            // InternalDTML.g:2012:2: ( ruleBoundSpecification )
+            // InternalDTML.g:2013:3: ruleBoundSpecification
             {
              before(grammarAccess.getMultiplicityRuleAccess().getBoundsBoundSpecificationParserRuleCall_2_1_0()); 
             pushFollow(FOLLOW_2);
@@ -4897,17 +6109,17 @@
 
 
     // $ANTLR start "rule__BoundSpecification__ValueAssignment"
-    // InternalDTML.g:1621:1: rule__BoundSpecification__ValueAssignment : ( ruleUnlimitedLiteral ) ;
+    // InternalDTML.g:2022:1: rule__BoundSpecification__ValueAssignment : ( ruleUnlimitedLiteral ) ;
     public final void rule__BoundSpecification__ValueAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalDTML.g:1625:1: ( ( ruleUnlimitedLiteral ) )
-            // InternalDTML.g:1626:2: ( ruleUnlimitedLiteral )
+            // InternalDTML.g:2026:1: ( ( ruleUnlimitedLiteral ) )
+            // InternalDTML.g:2027:2: ( ruleUnlimitedLiteral )
             {
-            // InternalDTML.g:1626:2: ( ruleUnlimitedLiteral )
-            // InternalDTML.g:1627:3: ruleUnlimitedLiteral
+            // InternalDTML.g:2027:2: ( ruleUnlimitedLiteral )
+            // InternalDTML.g:2028:3: ruleUnlimitedLiteral
             {
              before(grammarAccess.getBoundSpecificationAccess().getValueUnlimitedLiteralParserRuleCall_0()); 
             pushFollow(FOLLOW_2);
@@ -4949,13 +6161,16 @@
     public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000C00000L});
     public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000800002L});
     public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000003010080L});
-    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000020000010L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000040000010L});
     public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000000160L});
     public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000002000000L});
     public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x00000000000F0070L});
     public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000100020L});
-    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000010020000L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000400010L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000000012L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000002000080L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000000100020L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000020020000L});
 
 }
\ No newline at end of file
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/plugin.xml b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/plugin.xml
index 1c18b75..3b68cc2 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/plugin.xml
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/plugin.xml
@@ -27,6 +27,19 @@
 	</extension>
 	<extension point="org.eclipse.papyrus.infra.gmfdiag.extensionpoints.editors.DirectEditor">
 		<DirectEditor
+				language="Enum editor"
+				objectToEdit="org.eclipse.uml2.uml.Enumeration"
+				additionalConstraint="org.eclipse.papyrus.robotics.xtext.datatypes.ui.EnumEditorConstraint">
+			<popupeditor
+				editorConfiguration="org.eclipse.papyrus.robotics.xtext.datatypes.ui.contribution.EnumerationEditorConfigurationContribution">
+			</popupeditor>
+			<Priority
+				name="Medium">
+			</Priority>
+		</DirectEditor>
+	</extension>
+	<extension point="org.eclipse.papyrus.infra.gmfdiag.extensionpoints.editors.DirectEditor">
+		<DirectEditor
 				language="PARAM editor"
 				objectToEdit="org.eclipse.uml2.uml.ValueSpecificationAction"
 				additionalConstraint="org.eclipse.papyrus.robotics.xtext.datatypes.ui.ParameterEditorConstraint">
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contentassist/AbstractDTMLProposalProvider.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contentassist/AbstractDTMLProposalProvider.java
index 5d534e2..e3bb37d 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contentassist/AbstractDTMLProposalProvider.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contentassist/AbstractDTMLProposalProvider.java
@@ -17,10 +17,10 @@
  */
 public abstract class AbstractDTMLProposalProvider extends UmlCommonProposalProvider {
 
-	public void completeDTModel_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeXDataType_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeDTModel_Attributes(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeXDataType_Attributes(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completeProperty_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -41,10 +41,10 @@
 	public void completeProperty_Comment(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeAssignment_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeXAssignment_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeAssignment_Expression(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeXAssignment_Expression(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completeValue_Str(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -56,11 +56,26 @@
 	public void completeValue_Dval(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeXEnumeration_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeXEnumeration_Literals(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeXEnumLiteral_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeXEnumLiteral_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeXEnumLiteral_Comment(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
 
 	public void complete_Model(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_DTModel(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_XDataType(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void complete_DTKey(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -72,7 +87,7 @@
 	public void complete_Property(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_Assignment(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_XAssignment(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void complete_ExpressionString(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -84,4 +99,10 @@
 	public void complete_DOUBLE(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_XEnumeration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_XEnumLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 }
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/EnumEditorConstraint.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/EnumEditorConstraint.java
new file mode 100644
index 0000000..e7b6b00
--- /dev/null
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/EnumEditorConstraint.java
@@ -0,0 +1,36 @@
+package org.eclipse.papyrus.robotics.xtext.datatypes.ui;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.gmfdiag.extensionpoints.editors.configuration.IDirectEditorConstraint;
+import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
+import org.eclipse.uml2.uml.DataType;
+
+public class EnumEditorConstraint implements IDirectEditorConstraint {
+
+	/**
+	 * @see org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConstraint#getLabel()
+	 *
+	 * @return label
+	 */
+	public String getLabel() {
+		return "Enumeration"; //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConstraint#appliesTo(java.lang.Object)
+	 *
+	 * @param selection
+	 * @return true, if selection is commObject or DataType
+	 */
+	public boolean appliesTo(Object selection) {
+		EObject resolvedEObject = EMFHelper.getEObject(selection);
+		if (resolvedEObject instanceof DataType) {
+			DataType dt = (DataType) resolvedEObject;
+			if (StereotypeUtil.isApplied(dt, org.eclipse.papyrus.robotics.profile.robotics.commobject.Enumeration.class)) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/DataTypeEditorConfigurationContribution.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/DataTypeEditorConfigurationContribution.java
index b7f6536..a56df18 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/DataTypeEditorConfigurationContribution.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/DataTypeEditorConfigurationContribution.java
@@ -30,8 +30,8 @@
 import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
 import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils;
 import org.eclipse.papyrus.robotics.profile.robotics.commobject.DataAttribute;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Property;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType;
 import org.eclipse.papyrus.robotics.xtext.datatypes.ui.internal.DatatypesActivator;
 import org.eclipse.papyrus.robotics.xtext.util.TrackNames;
 import org.eclipse.papyrus.robotics.xtext.util.UpdateContextAdapter;
@@ -55,20 +55,20 @@
 	protected class UpdateDataTypeCommand extends AbstractTransactionalCommand {
 
 		private DataType dt;
-		private DTModel dtModel;
+		private XDataType xDT;
 
-		public UpdateDataTypeCommand(TransactionalEditingDomain domain, DataType dt, DTModel dtModel) {
+		public UpdateDataTypeCommand(TransactionalEditingDomain domain, DataType dt, XDataType xDT) {
 			super(domain, "Update datatype", getWorkspaceFiles(dt)); //$NON-NLS-1$
 			this.dt = dt;
-			this.dtModel = dtModel;
+			this.xDT = xDT;
 		}
 
 		@Override
 		protected CommandResult doExecuteWithResult(IProgressMonitor arg0, IAdaptable arg1) throws ExecutionException {
-			dt.setName(dtModel.getName());
+			dt.setName(xDT.getName());
 			// remove all elements (those that are retained are added later again).
 			dt.getOwnedAttributes().clear();
-			for (Property dtAttribute : dtModel.getAttributes()) {
+			for (Property dtAttribute : xDT.getAttributes()) {
 				TypeRule typeRule = dtAttribute.getType();
 				MultiplicityRule mRule = dtAttribute.getMultiplicity();
 				org.eclipse.uml2.uml.Property umlAttribute = lastAttributes.get(dtAttribute.getName());
@@ -145,7 +145,7 @@
 
 			@Override
 			public void updateLastNames() {
-				DTModel dtm = (DTModel) xtextResource.getContents().get(0);
+				XDataType dtm = (XDataType) xtextResource.getContents().get(0);
 
 				List<String> attrNameList = new ArrayList<String>();
 				for (Property dtAttribute : dtm.getAttributes()) {
@@ -174,7 +174,7 @@
 		TransactionalEditingDomain dom = TransactionUtil.getEditingDomain(umlObject);
 		if (umlObject instanceof DataType) {
 			DataType dt = (DataType) umlObject;
-			if (xtextObject instanceof DTModel) {
+			if (xtextObject instanceof XDataType) {
 				CompositeCommand cc = new CompositeCommand("Update data type"); //$NON-NLS-1$
 				// use "proper" destroy commands (calling element.destroy in the recording command leads to
 				// artefacts in the diagram)
@@ -186,7 +186,7 @@
 						cc.add(destroyCmd);
 					}
 				}
-				UpdateDataTypeCommand updateCommand = new UpdateDataTypeCommand(dom, dt, (DTModel) xtextObject);
+				UpdateDataTypeCommand updateCommand = new UpdateDataTypeCommand(dom, dt, (XDataType) xtextObject);
 				cc.add(updateCommand);
 				return cc;
 			}
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/EnumerationEditorConfigurationContribution.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/EnumerationEditorConfigurationContribution.java
new file mode 100644
index 0000000..b1b9baa
--- /dev/null
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/EnumerationEditorConfigurationContribution.java
@@ -0,0 +1,196 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Ansgar Radermacher (CEA LIST) <ansgar.radermache@cea.fr> - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.robotics.xtext.datatypes.ui.contribution;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration;
+import org.eclipse.papyrus.robotics.xtext.datatypes.ui.internal.DatatypesActivator;
+import org.eclipse.papyrus.robotics.xtext.util.TrackNames;
+import org.eclipse.papyrus.robotics.xtext.util.UpdateContextAdapter;
+import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
+import org.eclipse.papyrus.uml.xtext.integration.AbstractXtextDirectEditorConfiguration;
+import org.eclipse.papyrus.uml.xtext.integration.InvalidStringUtil;
+import org.eclipse.papyrus.uml.xtext.integration.core.ContextElementAdapter.IContextElementProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.uml2.uml.Enumeration;
+import org.eclipse.uml2.uml.EnumerationLiteral;
+import org.eclipse.uml2.uml.LiteralInteger;
+import org.eclipse.uml2.uml.UMLFactory;
+import org.eclipse.uml2.uml.ValueSpecification;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Injector;
+
+public class EnumerationEditorConfigurationContribution extends AbstractXtextDirectEditorConfiguration {
+
+	TrackNames<org.eclipse.uml2.uml.EnumerationLiteral> lastEnumLiterals;
+
+	protected class UpdateEnumerationCommand extends AbstractTransactionalCommand {
+
+		private Enumeration enumeration;
+		private XEnumeration xEnum;
+
+		public UpdateEnumerationCommand(TransactionalEditingDomain domain, Enumeration enumeration, XEnumeration xEnum) {
+			super(domain, "Update enumeration", getWorkspaceFiles(enumeration)); //$NON-NLS-1$
+			this.enumeration = enumeration;
+			this.xEnum = xEnum;
+		}
+
+		@Override
+		protected CommandResult doExecuteWithResult(IProgressMonitor arg0, IAdaptable arg1) throws ExecutionException {
+			enumeration.setName(xEnum.getName());
+			// remove all elements (those that are retained are added later again).
+			enumeration.getOwnedLiterals().clear();
+			for (XEnumLiteral xEnumLiteral : xEnum.getLiterals()) {
+				EnumerationLiteral enumLiteral = lastEnumLiterals.get(xEnumLiteral.getName());
+				if (enumLiteral == null) {
+					// does not exist, create
+					enumLiteral = UMLFactory.eINSTANCE.createEnumerationLiteral();
+				}
+				enumLiteral.setName(xEnumLiteral.getName());
+				// add it to literal list, once named and typed
+				enumeration.getOwnedLiterals().add(enumLiteral);
+				org.eclipse.papyrus.robotics.profile.robotics.commobject.EnumerationLiteral stEnumLiteral = StereotypeUtil.applyApp(enumLiteral, org.eclipse.papyrus.robotics.profile.robotics.commobject.EnumerationLiteral.class);
+
+				String comment = xEnumLiteral.getComment();
+				if (stEnumLiteral != null && comment != null) {
+					comment = comment.substring(2).trim();
+					stEnumLiteral.setDescription(comment);
+				}
+				if (xEnumLiteral.getValue() != null) {
+					int value = xEnumLiteral.getValue().getIval();
+					ValueSpecification vs = enumLiteral.getSpecification();
+					if (vs instanceof LiteralInteger) {
+						((LiteralInteger) vs).setValue(value);
+					} else {
+						if (vs != null) {
+							vs.destroy();
+						}
+						LiteralInteger li = UMLFactory.eINSTANCE.createLiteralInteger();
+						li.setValue(value);
+						enumLiteral.setSpecification(li);
+					}
+				} else {
+					ValueSpecification vs = enumLiteral.getSpecification();
+					if (vs != null) {
+						vs.destroy();
+					}
+				}
+			}
+			return CommandResult.newOKCommandResult(enumeration);
+		}
+	}
+
+	/**
+	 * From enumeration to an Xtext expression
+	 */
+	@Override
+	public String getTextToEdit(Object editedObject) {
+		if (editedObject instanceof Enumeration) {
+			Enumeration umlEnum = (Enumeration) editedObject;
+			String invalidStr = InvalidStringUtil.getTextualRepresentation(umlEnum);
+			if (invalidStr != null) {
+				return invalidStr;
+			}
+			return UnparseDT.getEnumText(umlEnum).toString();
+		}
+		return UnparseDT.WRONG_OBJECT;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * Initialize lastNames map
+	 */
+	@Override
+	public Object preEditAction(Object objectToEdit) {
+		if (objectToEdit instanceof Enumeration) {
+			// fill map with existing attribute and port names
+			Enumeration umlEnum = (Enumeration) objectToEdit;
+			// fill attribute map
+			lastEnumLiterals = new TrackNames<org.eclipse.uml2.uml.EnumerationLiteral>(umlEnum.getOwnedLiterals());
+		}
+		return super.preEditAction(objectToEdit);
+	}
+
+	@Override
+	public IContextElementProvider getContextProvider() {
+		return new UpdateContextAdapter(objectToEdit) {
+
+			@Override
+			public void updateLastNames() {
+				XEnumeration xEnum = (XEnumeration) xtextResource.getContents().get(0);
+
+				List<String> attrNameList = new ArrayList<String>();
+				for (XEnumLiteral xEnumLiteral : xEnum.getLiterals()) {
+					attrNameList.add(xEnumLiteral.getName());
+				}
+				lastEnumLiterals.update(attrNameList);
+			}
+		};
+	}
+
+	@Override
+	public int getStyle() {
+		return SWT.MULTI | SWT.WRAP;
+	}
+
+	@Override
+	public Injector getInjector() {
+		return DatatypesActivator.getInstance().getInjector(DatatypesActivator.ORG_ECLIPSE_PAPYRUS_ROBOTICS_XTEXT_DATATYPES_DTML);
+	}
+
+	/**
+	 * From Xtext expression to LiteralString (ValueSpecificationAction's defaultValue)
+	 */
+	@Override
+	public ICommand getParseCommand(EObject umlObject, EObject xtextObject) {
+		TransactionalEditingDomain dom = TransactionUtil.getEditingDomain(umlObject);
+		if (umlObject instanceof Enumeration) {
+			Enumeration enumeration = (Enumeration) umlObject;
+			if (xtextObject instanceof XEnumeration) {
+				CompositeCommand cc = new CompositeCommand("Update enumeration"); //$NON-NLS-1$
+				// use "proper" destroy commands (calling element.destroy in the recording command leads to
+				// artefacts in the diagram)
+				for (org.eclipse.uml2.uml.EnumerationLiteral umlEnumLiteral : Lists.newArrayList(enumeration.getOwnedLiterals())) {
+					if (!lastEnumLiterals.containsValue(umlEnumLiteral)) {
+						// dt.getOwnedAttributes().remove(umlAttribute);
+						DestroyElementRequest destroyReq = new DestroyElementRequest(umlEnumLiteral, false);
+						ICommand destroyCmd = ElementEditServiceUtils.getCommandProvider(enumeration).getEditCommand(destroyReq);
+						cc.add(destroyCmd);
+					}
+				}
+				UpdateEnumerationCommand updateCommand = new UpdateEnumerationCommand(dom, enumeration, (XEnumeration) xtextObject);
+				cc.add(updateCommand);
+				return cc;
+			}
+		}
+		return null;
+	}
+}
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/ParameterEditorConfigurationContribution.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/ParameterEditorConfigurationContribution.java
index 2297bb8..c34ed15 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/ParameterEditorConfigurationContribution.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/ParameterEditorConfigurationContribution.java
@@ -23,7 +23,7 @@
 import org.eclipse.gmf.runtime.common.core.command.CommandResult;
 import org.eclipse.gmf.runtime.common.core.command.ICommand;
 import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment;
 import org.eclipse.papyrus.robotics.xtext.datatypes.ui.internal.DatatypesActivator;
 import org.eclipse.papyrus.uml.xtext.integration.AbstractXtextDirectEditorConfiguration;
 import org.eclipse.papyrus.uml.xtext.integration.InvalidStringUtil;
@@ -39,9 +39,9 @@
 	protected static class UpdateValueSpecificationCommand extends AbstractTransactionalCommand {
 
 		private ValueSpecificationAction action;
-		private Assignment assign;
+		private XAssignment assign;
 
-		public UpdateValueSpecificationCommand(TransactionalEditingDomain domain, ValueSpecificationAction action, Assignment assign) {
+		public UpdateValueSpecificationCommand(TransactionalEditingDomain domain, ValueSpecificationAction action, XAssignment assign) {
 			super(domain, "Assign LiteralString to UML::ValueSpecificationAction", getWorkspaceFiles(action)); //$NON-NLS-1$
 			this.action = action;
 			this.assign = assign;
@@ -107,8 +107,8 @@
 		TransactionalEditingDomain dom = TransactionUtil.getEditingDomain(umlObject);
 		if (umlObject instanceof ValueSpecificationAction) {
 			ValueSpecificationAction vsa = (ValueSpecificationAction) umlObject;
-			if (xtextObject instanceof Assignment) {
-				UpdateValueSpecificationCommand updateCommand = new UpdateValueSpecificationCommand(dom, vsa, (Assignment) xtextObject);
+			if (xtextObject instanceof XAssignment) {
+				UpdateValueSpecificationCommand updateCommand = new UpdateValueSpecificationCommand(dom, vsa, (XAssignment) xtextObject);
 				return updateCommand;
 			}
 		}
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/UnparseDT.xtend b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/UnparseDT.xtend
index d199c59..de6efa9 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/UnparseDT.xtend
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes.ui/src/org/eclipse/papyrus/robotics/xtext/datatypes/ui/contribution/UnparseDT.xtend
@@ -21,6 +21,10 @@
 import org.eclipse.uml2.uml.Property
 import org.eclipse.papyrus.robotics.bpc.profile.bpc.Entity
 import org.eclipse.uml2.uml.util.UMLUtil
+import org.eclipse.uml2.uml.Enumeration
+import org.eclipse.uml2.uml.Element
+import org.eclipse.uml2.uml.EnumerationLiteral
+import org.eclipse.uml2.uml.ValueSpecification
 
 /**
  * Provide textual representation of a data-type
@@ -36,18 +40,32 @@
 		}
 	'''
 
+	def static getEnumText(Enumeration enumeration) '''
+		Enumeration «enumeration.name» {
+			«FOR literal : enumeration.ownedLiterals»
+				«literal.name»«literal.defaultValue»«literal.comment»
+			«ENDFOR»
+		}
+	'''
+
+	def static defaultValue(EnumerationLiteral literal) {
+		if (literal.specification instanceof ValueSpecification) {
+			return " = " + literal.specification.stringValue
+		}
+		return ""
+	}
+
 	def static getMultiplicity(Property attribute) {
 		if (attribute.upper == -1) {
 			return " [*]"
-		}
-		else if (attribute.upper != 1) {
+		} else if (attribute.upper != 1) {
 			return ''' [«attribute.upper»]'''
 		}
 		return ""
 	}
 
-	def static getComment(Property attribute) {
-		val entity = UMLUtil.getStereotypeApplication(attribute, Entity);
+	def static getComment(Element element) {
+		val entity = UMLUtil.getStereotypeApplication(element, Entity);
 		if (entity !== null && entity.description !== null) {
 			return '''	// «entity.description»'''
 		}
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.ecore b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.ecore
index 6236add..aac1f50 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.ecore
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.ecore
@@ -5,7 +5,7 @@
   <eClassifiers xsi:type="ecore:EClass" name="Model">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="DTModel" eSuperTypes="#//Model">
+  <eClassifiers xsi:type="ecore:EClass" name="XDataType" eSuperTypes="#//Model">
     <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" upperBound="-1"
         eType="#//Property" containment="true"/>
   </eClassifiers>
@@ -20,7 +20,7 @@
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Assignment" eSuperTypes="#//Model">
+  <eClassifiers xsi:type="ecore:EClass" name="XAssignment" eSuperTypes="#//Model">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="expression" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Value">
@@ -28,4 +28,14 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="ival" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="dval" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XEnumeration" eSuperTypes="#//Model">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="literals" upperBound="-1"
+        eType="#//XEnumLiteral" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XEnumLiteral">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Value"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
 </ecore:EPackage>
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.genmodel b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.genmodel
index 232c179..15bc426 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.genmodel
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/model/generated/DTML.genmodel
@@ -9,8 +9,8 @@
     <genClasses ecoreClass="DTML.ecore#//Model">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Model/name"/>
     </genClasses>
-    <genClasses ecoreClass="DTML.ecore#//DTModel">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DTML.ecore#//DTModel/attributes"/>
+    <genClasses ecoreClass="DTML.ecore#//XDataType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DTML.ecore#//XDataType/attributes"/>
     </genClasses>
     <genClasses ecoreClass="DTML.ecore#//Property">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Property/name"/>
@@ -20,13 +20,21 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DTML.ecore#//Property/value"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Property/comment"/>
     </genClasses>
-    <genClasses ecoreClass="DTML.ecore#//Assignment">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Assignment/expression"/>
+    <genClasses ecoreClass="DTML.ecore#//XAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//XAssignment/expression"/>
     </genClasses>
     <genClasses ecoreClass="DTML.ecore#//Value">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Value/str"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Value/ival"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//Value/dval"/>
     </genClasses>
+    <genClasses ecoreClass="DTML.ecore#//XEnumeration">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DTML.ecore#//XEnumeration/literals"/>
+    </genClasses>
+    <genClasses ecoreClass="DTML.ecore#//XEnumLiteral">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//XEnumLiteral/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DTML.ecore#//XEnumLiteral/value"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DTML.ecore#//XEnumLiteral/comment"/>
+    </genClasses>
   </genPackages>
 </genmodel:GenModel>
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtextbin b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtextbin
index 3bea7dc..ce9f73f 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtextbin
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtextbin
Binary files differ
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLFactory.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLFactory.java
index f1626cc..8ad7a1c 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLFactory.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLFactory.java
@@ -33,13 +33,13 @@
   Model createModel();
 
   /**
-   * Returns a new object of class '<em>DT Model</em>'.
+   * Returns a new object of class '<em>XData Type</em>'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return a new object of class '<em>DT Model</em>'.
+   * @return a new object of class '<em>XData Type</em>'.
    * @generated
    */
-  DTModel createDTModel();
+  XDataType createXDataType();
 
   /**
    * Returns a new object of class '<em>Property</em>'.
@@ -51,13 +51,13 @@
   Property createProperty();
 
   /**
-   * Returns a new object of class '<em>Assignment</em>'.
+   * Returns a new object of class '<em>XAssignment</em>'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return a new object of class '<em>Assignment</em>'.
+   * @return a new object of class '<em>XAssignment</em>'.
    * @generated
    */
-  Assignment createAssignment();
+  XAssignment createXAssignment();
 
   /**
    * Returns a new object of class '<em>Value</em>'.
@@ -69,6 +69,24 @@
   Value createValue();
 
   /**
+   * Returns a new object of class '<em>XEnumeration</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>XEnumeration</em>'.
+   * @generated
+   */
+  XEnumeration createXEnumeration();
+
+  /**
+   * Returns a new object of class '<em>XEnum Literal</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>XEnum Literal</em>'.
+   * @generated
+   */
+  XEnumLiteral createXEnumLiteral();
+
+  /**
    * Returns the package supported by this factory.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLPackage.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLPackage.java
index 55ad857..8e4ffc7 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLPackage.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTMLPackage.java
@@ -86,14 +86,14 @@
   int MODEL_FEATURE_COUNT = 1;
 
   /**
-   * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTModelImpl <em>DT Model</em>}' class.
+   * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XDataTypeImpl <em>XData Type</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTModelImpl
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getDTModel()
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XDataTypeImpl
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXDataType()
    * @generated
    */
-  int DT_MODEL = 1;
+  int XDATA_TYPE = 1;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -102,7 +102,7 @@
    * @generated
    * @ordered
    */
-  int DT_MODEL__NAME = MODEL__NAME;
+  int XDATA_TYPE__NAME = MODEL__NAME;
 
   /**
    * The feature id for the '<em><b>Attributes</b></em>' containment reference list.
@@ -111,16 +111,16 @@
    * @generated
    * @ordered
    */
-  int DT_MODEL__ATTRIBUTES = MODEL_FEATURE_COUNT + 0;
+  int XDATA_TYPE__ATTRIBUTES = MODEL_FEATURE_COUNT + 0;
 
   /**
-   * The number of structural features of the '<em>DT Model</em>' class.
+   * The number of structural features of the '<em>XData Type</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int DT_MODEL_FEATURE_COUNT = MODEL_FEATURE_COUNT + 1;
+  int XDATA_TYPE_FEATURE_COUNT = MODEL_FEATURE_COUNT + 1;
 
   /**
    * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.PropertyImpl <em>Property</em>}' class.
@@ -196,14 +196,14 @@
   int PROPERTY_FEATURE_COUNT = 6;
 
   /**
-   * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.AssignmentImpl <em>Assignment</em>}' class.
+   * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XAssignmentImpl <em>XAssignment</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.AssignmentImpl
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getAssignment()
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XAssignmentImpl
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXAssignment()
    * @generated
    */
-  int ASSIGNMENT = 3;
+  int XASSIGNMENT = 3;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -212,7 +212,7 @@
    * @generated
    * @ordered
    */
-  int ASSIGNMENT__NAME = MODEL__NAME;
+  int XASSIGNMENT__NAME = MODEL__NAME;
 
   /**
    * The feature id for the '<em><b>Expression</b></em>' attribute.
@@ -221,16 +221,16 @@
    * @generated
    * @ordered
    */
-  int ASSIGNMENT__EXPRESSION = MODEL_FEATURE_COUNT + 0;
+  int XASSIGNMENT__EXPRESSION = MODEL_FEATURE_COUNT + 0;
 
   /**
-   * The number of structural features of the '<em>Assignment</em>' class.
+   * The number of structural features of the '<em>XAssignment</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int ASSIGNMENT_FEATURE_COUNT = MODEL_FEATURE_COUNT + 1;
+  int XASSIGNMENT_FEATURE_COUNT = MODEL_FEATURE_COUNT + 1;
 
   /**
    * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.ValueImpl <em>Value</em>}' class.
@@ -278,6 +278,89 @@
    */
   int VALUE_FEATURE_COUNT = 3;
 
+  /**
+   * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumerationImpl <em>XEnumeration</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumerationImpl
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXEnumeration()
+   * @generated
+   */
+  int XENUMERATION = 5;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUMERATION__NAME = MODEL__NAME;
+
+  /**
+   * The feature id for the '<em><b>Literals</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUMERATION__LITERALS = MODEL_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>XEnumeration</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUMERATION_FEATURE_COUNT = MODEL_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl <em>XEnum Literal</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXEnumLiteral()
+   * @generated
+   */
+  int XENUM_LITERAL = 6;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUM_LITERAL__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUM_LITERAL__VALUE = 1;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUM_LITERAL__COMMENT = 2;
+
+  /**
+   * The number of structural features of the '<em>XEnum Literal</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int XENUM_LITERAL_FEATURE_COUNT = 3;
+
 
   /**
    * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Model <em>Model</em>}'.
@@ -301,25 +384,25 @@
   EAttribute getModel_Name();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel <em>DT Model</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType <em>XData Type</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>DT Model</em>'.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel
+   * @return the meta object for class '<em>XData Type</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType
    * @generated
    */
-  EClass getDTModel();
+  EClass getXDataType();
 
   /**
-   * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel#getAttributes <em>Attributes</em>}'.
+   * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType#getAttributes <em>Attributes</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @return the meta object for the containment reference list '<em>Attributes</em>'.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel#getAttributes()
-   * @see #getDTModel()
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType#getAttributes()
+   * @see #getXDataType()
    * @generated
    */
-  EReference getDTModel_Attributes();
+  EReference getXDataType_Attributes();
 
   /**
    * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Property <em>Property</em>}'.
@@ -398,25 +481,25 @@
   EAttribute getProperty_Comment();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment <em>Assignment</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment <em>XAssignment</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Assignment</em>'.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment
+   * @return the meta object for class '<em>XAssignment</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment
    * @generated
    */
-  EClass getAssignment();
+  EClass getXAssignment();
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment#getExpression <em>Expression</em>}'.
+   * Returns the meta object for the attribute '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment#getExpression <em>Expression</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @return the meta object for the attribute '<em>Expression</em>'.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment#getExpression()
-   * @see #getAssignment()
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment#getExpression()
+   * @see #getXAssignment()
    * @generated
    */
-  EAttribute getAssignment_Expression();
+  EAttribute getXAssignment_Expression();
 
   /**
    * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Value <em>Value</em>}'.
@@ -462,6 +545,70 @@
   EAttribute getValue_Dval();
 
   /**
+   * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration <em>XEnumeration</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>XEnumeration</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration
+   * @generated
+   */
+  EClass getXEnumeration();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration#getLiterals <em>Literals</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Literals</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration#getLiterals()
+   * @see #getXEnumeration()
+   * @generated
+   */
+  EReference getXEnumeration_Literals();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral <em>XEnum Literal</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>XEnum Literal</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral
+   * @generated
+   */
+  EClass getXEnumLiteral();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getName()
+   * @see #getXEnumLiteral()
+   * @generated
+   */
+  EAttribute getXEnumLiteral_Name();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Value</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getValue()
+   * @see #getXEnumLiteral()
+   * @generated
+   */
+  EReference getXEnumLiteral_Value();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Comment</em>'.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getComment()
+   * @see #getXEnumLiteral()
+   * @generated
+   */
+  EAttribute getXEnumLiteral_Comment();
+
+  /**
    * Returns the factory that creates the instances of the model.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -503,14 +650,14 @@
     EAttribute MODEL__NAME = eINSTANCE.getModel_Name();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTModelImpl <em>DT Model</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XDataTypeImpl <em>XData Type</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTModelImpl
-     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getDTModel()
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XDataTypeImpl
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXDataType()
      * @generated
      */
-    EClass DT_MODEL = eINSTANCE.getDTModel();
+    EClass XDATA_TYPE = eINSTANCE.getXDataType();
 
     /**
      * The meta object literal for the '<em><b>Attributes</b></em>' containment reference list feature.
@@ -518,7 +665,7 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference DT_MODEL__ATTRIBUTES = eINSTANCE.getDTModel_Attributes();
+    EReference XDATA_TYPE__ATTRIBUTES = eINSTANCE.getXDataType_Attributes();
 
     /**
      * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.PropertyImpl <em>Property</em>}' class.
@@ -579,14 +726,14 @@
     EAttribute PROPERTY__COMMENT = eINSTANCE.getProperty_Comment();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.AssignmentImpl <em>Assignment</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XAssignmentImpl <em>XAssignment</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.AssignmentImpl
-     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getAssignment()
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XAssignmentImpl
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXAssignment()
      * @generated
      */
-    EClass ASSIGNMENT = eINSTANCE.getAssignment();
+    EClass XASSIGNMENT = eINSTANCE.getXAssignment();
 
     /**
      * The meta object literal for the '<em><b>Expression</b></em>' attribute feature.
@@ -594,7 +741,7 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    EAttribute ASSIGNMENT__EXPRESSION = eINSTANCE.getAssignment_Expression();
+    EAttribute XASSIGNMENT__EXPRESSION = eINSTANCE.getXAssignment_Expression();
 
     /**
      * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.ValueImpl <em>Value</em>}' class.
@@ -630,6 +777,58 @@
      */
     EAttribute VALUE__DVAL = eINSTANCE.getValue_Dval();
 
+    /**
+     * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumerationImpl <em>XEnumeration</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumerationImpl
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXEnumeration()
+     * @generated
+     */
+    EClass XENUMERATION = eINSTANCE.getXEnumeration();
+
+    /**
+     * The meta object literal for the '<em><b>Literals</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference XENUMERATION__LITERALS = eINSTANCE.getXEnumeration_Literals();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl <em>XEnum Literal</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl
+     * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTMLPackageImpl#getXEnumLiteral()
+     * @generated
+     */
+    EClass XENUM_LITERAL = eINSTANCE.getXEnumLiteral();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute XENUM_LITERAL__NAME = eINSTANCE.getXEnumLiteral_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference XENUM_LITERAL__VALUE = eINSTANCE.getXEnumLiteral_Value();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute XENUM_LITERAL__COMMENT = eINSTANCE.getXEnumLiteral_Comment();
+
   }
 
 } //DTMLPackage
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/Assignment.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XAssignment.java
similarity index 76%
rename from plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/Assignment.java
rename to plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XAssignment.java
index d1b53df..703e851 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/Assignment.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XAssignment.java
@@ -6,21 +6,21 @@
 
 /**
  * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Assignment</b></em>'.
+ * A representation of the model object '<em><b>XAssignment</b></em>'.
  * <!-- end-user-doc -->
  *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment#getExpression <em>Expression</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment#getExpression <em>Expression</em>}</li>
  * </ul>
  *
- * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getAssignment()
+ * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXAssignment()
  * @model
  * @generated
  */
-public interface Assignment extends Model
+public interface XAssignment extends Model
 {
   /**
    * Returns the value of the '<em><b>Expression</b></em>' attribute.
@@ -28,14 +28,14 @@
    * <!-- end-user-doc -->
    * @return the value of the '<em>Expression</em>' attribute.
    * @see #setExpression(String)
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getAssignment_Expression()
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXAssignment_Expression()
    * @model
    * @generated
    */
   String getExpression();
 
   /**
-   * Sets the value of the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment#getExpression <em>Expression</em>}' attribute.
+   * Sets the value of the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment#getExpression <em>Expression</em>}' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @param value the new value of the '<em>Expression</em>' attribute.
@@ -44,4 +44,4 @@
    */
   void setExpression(String value);
 
-} // Assignment
+} // XAssignment
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTModel.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XDataType.java
similarity index 79%
rename from plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTModel.java
rename to plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XDataType.java
index 5e8cc7a..820f056 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/DTModel.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XDataType.java
@@ -7,21 +7,21 @@
 
 /**
  * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>DT Model</b></em>'.
+ * A representation of the model object '<em><b>XData Type</b></em>'.
  * <!-- end-user-doc -->
  *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType#getAttributes <em>Attributes</em>}</li>
  * </ul>
  *
- * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getDTModel()
+ * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXDataType()
  * @model
  * @generated
  */
-public interface DTModel extends Model
+public interface XDataType extends Model
 {
   /**
    * Returns the value of the '<em><b>Attributes</b></em>' containment reference list.
@@ -29,10 +29,10 @@
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @return the value of the '<em>Attributes</em>' containment reference list.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getDTModel_Attributes()
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXDataType_Attributes()
    * @model containment="true"
    * @generated
    */
   EList<Property> getAttributes();
 
-} // DTModel
+} // XDataType
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XEnumLiteral.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XEnumLiteral.java
new file mode 100644
index 0000000..8234161
--- /dev/null
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XEnumLiteral.java
@@ -0,0 +1,94 @@
+/**
+ * generated by Xtext 2.22.0
+ */
+package org.eclipse.papyrus.robotics.xtext.datatypes.dTML;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>XEnum Literal</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getComment <em>Comment</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXEnumLiteral()
+ * @model
+ * @generated
+ */
+public interface XEnumLiteral extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXEnumLiteral_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Value</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Value</em>' containment reference.
+   * @see #setValue(Value)
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXEnumLiteral_Value()
+   * @model containment="true"
+   * @generated
+   */
+  Value getValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getValue <em>Value</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Value</em>' containment reference.
+   * @see #getValue()
+   * @generated
+   */
+  void setValue(Value value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Comment</em>' attribute.
+   * @see #setComment(String)
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXEnumLiteral_Comment()
+   * @model
+   * @generated
+   */
+  String getComment();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral#getComment <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' attribute.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(String value);
+
+} // XEnumLiteral
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XEnumeration.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XEnumeration.java
new file mode 100644
index 0000000..e8b4b38
--- /dev/null
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/XEnumeration.java
@@ -0,0 +1,38 @@
+/**
+ * generated by Xtext 2.22.0
+ */
+package org.eclipse.papyrus.robotics.xtext.datatypes.dTML;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>XEnumeration</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration#getLiterals <em>Literals</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXEnumeration()
+ * @model
+ * @generated
+ */
+public interface XEnumeration extends Model
+{
+  /**
+   * Returns the value of the '<em><b>Literals</b></em>' containment reference list.
+   * The list contents are of type {@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral}.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Literals</em>' containment reference list.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage#getXEnumeration_Literals()
+   * @model containment="true"
+   * @generated
+   */
+  EList<XEnumLiteral> getLiterals();
+
+} // XEnumeration
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLFactoryImpl.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLFactoryImpl.java
index ba9ebe4..1a79961 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLFactoryImpl.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLFactoryImpl.java
@@ -66,10 +66,12 @@
     switch (eClass.getClassifierID())
     {
       case DTMLPackage.MODEL: return createModel();
-      case DTMLPackage.DT_MODEL: return createDTModel();
+      case DTMLPackage.XDATA_TYPE: return createXDataType();
       case DTMLPackage.PROPERTY: return createProperty();
-      case DTMLPackage.ASSIGNMENT: return createAssignment();
+      case DTMLPackage.XASSIGNMENT: return createXAssignment();
       case DTMLPackage.VALUE: return createValue();
+      case DTMLPackage.XENUMERATION: return createXEnumeration();
+      case DTMLPackage.XENUM_LITERAL: return createXEnumLiteral();
       default:
         throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
     }
@@ -93,10 +95,10 @@
    * @generated
    */
   @Override
-  public DTModel createDTModel()
+  public XDataType createXDataType()
   {
-    DTModelImpl dtModel = new DTModelImpl();
-    return dtModel;
+    XDataTypeImpl xDataType = new XDataTypeImpl();
+    return xDataType;
   }
 
   /**
@@ -117,10 +119,10 @@
    * @generated
    */
   @Override
-  public Assignment createAssignment()
+  public XAssignment createXAssignment()
   {
-    AssignmentImpl assignment = new AssignmentImpl();
-    return assignment;
+    XAssignmentImpl xAssignment = new XAssignmentImpl();
+    return xAssignment;
   }
 
   /**
@@ -141,6 +143,30 @@
    * @generated
    */
   @Override
+  public XEnumeration createXEnumeration()
+  {
+    XEnumerationImpl xEnumeration = new XEnumerationImpl();
+    return xEnumeration;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public XEnumLiteral createXEnumLiteral()
+  {
+    XEnumLiteralImpl xEnumLiteral = new XEnumLiteralImpl();
+    return xEnumLiteral;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
   public DTMLPackage getDTMLPackage()
   {
     return (DTMLPackage)getEPackage();
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLPackageImpl.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLPackageImpl.java
index 7e6652e..b3e94e7 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLPackageImpl.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTMLPackageImpl.java
@@ -11,13 +11,15 @@
 
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLFactory;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Model;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Property;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Value;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration;
 
 import org.eclipse.papyrus.uml.textedit.common.xtext.umlCommon.UmlCommonPackage;
 
@@ -45,7 +47,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass dtModelEClass = null;
+  private EClass xDataTypeEClass = null;
 
   /**
    * <!-- begin-user-doc -->
@@ -59,7 +61,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass assignmentEClass = null;
+  private EClass xAssignmentEClass = null;
 
   /**
    * <!-- begin-user-doc -->
@@ -69,6 +71,20 @@
   private EClass valueEClass = null;
 
   /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass xEnumerationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass xEnumLiteralEClass = null;
+
+  /**
    * Creates an instance of the model <b>Package</b>, registered with
    * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
    * package URI value.
@@ -165,9 +181,9 @@
    * @generated
    */
   @Override
-  public EClass getDTModel()
+  public EClass getXDataType()
   {
-    return dtModelEClass;
+    return xDataTypeEClass;
   }
 
   /**
@@ -176,9 +192,9 @@
    * @generated
    */
   @Override
-  public EReference getDTModel_Attributes()
+  public EReference getXDataType_Attributes()
   {
-    return (EReference)dtModelEClass.getEStructuralFeatures().get(0);
+    return (EReference)xDataTypeEClass.getEStructuralFeatures().get(0);
   }
 
   /**
@@ -264,9 +280,9 @@
    * @generated
    */
   @Override
-  public EClass getAssignment()
+  public EClass getXAssignment()
   {
-    return assignmentEClass;
+    return xAssignmentEClass;
   }
 
   /**
@@ -275,9 +291,9 @@
    * @generated
    */
   @Override
-  public EAttribute getAssignment_Expression()
+  public EAttribute getXAssignment_Expression()
   {
-    return (EAttribute)assignmentEClass.getEStructuralFeatures().get(0);
+    return (EAttribute)xAssignmentEClass.getEStructuralFeatures().get(0);
   }
 
   /**
@@ -330,6 +346,72 @@
    * @generated
    */
   @Override
+  public EClass getXEnumeration()
+  {
+    return xEnumerationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EReference getXEnumeration_Literals()
+  {
+    return (EReference)xEnumerationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EClass getXEnumLiteral()
+  {
+    return xEnumLiteralEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EAttribute getXEnumLiteral_Name()
+  {
+    return (EAttribute)xEnumLiteralEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EReference getXEnumLiteral_Value()
+  {
+    return (EReference)xEnumLiteralEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EAttribute getXEnumLiteral_Comment()
+  {
+    return (EAttribute)xEnumLiteralEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
   public DTMLFactory getDTMLFactory()
   {
     return (DTMLFactory)getEFactoryInstance();
@@ -358,8 +440,8 @@
     modelEClass = createEClass(MODEL);
     createEAttribute(modelEClass, MODEL__NAME);
 
-    dtModelEClass = createEClass(DT_MODEL);
-    createEReference(dtModelEClass, DT_MODEL__ATTRIBUTES);
+    xDataTypeEClass = createEClass(XDATA_TYPE);
+    createEReference(xDataTypeEClass, XDATA_TYPE__ATTRIBUTES);
 
     propertyEClass = createEClass(PROPERTY);
     createEAttribute(propertyEClass, PROPERTY__NAME);
@@ -369,13 +451,21 @@
     createEReference(propertyEClass, PROPERTY__VALUE);
     createEAttribute(propertyEClass, PROPERTY__COMMENT);
 
-    assignmentEClass = createEClass(ASSIGNMENT);
-    createEAttribute(assignmentEClass, ASSIGNMENT__EXPRESSION);
+    xAssignmentEClass = createEClass(XASSIGNMENT);
+    createEAttribute(xAssignmentEClass, XASSIGNMENT__EXPRESSION);
 
     valueEClass = createEClass(VALUE);
     createEAttribute(valueEClass, VALUE__STR);
     createEAttribute(valueEClass, VALUE__IVAL);
     createEAttribute(valueEClass, VALUE__DVAL);
+
+    xEnumerationEClass = createEClass(XENUMERATION);
+    createEReference(xEnumerationEClass, XENUMERATION__LITERALS);
+
+    xEnumLiteralEClass = createEClass(XENUM_LITERAL);
+    createEAttribute(xEnumLiteralEClass, XENUM_LITERAL__NAME);
+    createEReference(xEnumLiteralEClass, XENUM_LITERAL__VALUE);
+    createEAttribute(xEnumLiteralEClass, XENUM_LITERAL__COMMENT);
   }
 
   /**
@@ -411,15 +501,16 @@
     // Set bounds for type parameters
 
     // Add supertypes to classes
-    dtModelEClass.getESuperTypes().add(this.getModel());
-    assignmentEClass.getESuperTypes().add(this.getModel());
+    xDataTypeEClass.getESuperTypes().add(this.getModel());
+    xAssignmentEClass.getESuperTypes().add(this.getModel());
+    xEnumerationEClass.getESuperTypes().add(this.getModel());
 
     // Initialize classes and features; add operations and parameters
     initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getModel_Name(), theEcorePackage.getEString(), "name", null, 0, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-    initEClass(dtModelEClass, DTModel.class, "DTModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEReference(getDTModel_Attributes(), this.getProperty(), null, "attributes", null, 0, -1, DTModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEClass(xDataTypeEClass, XDataType.class, "XDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getXDataType_Attributes(), this.getProperty(), null, "attributes", null, 0, -1, XDataType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(propertyEClass, Property.class, "Property", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getProperty_Name(), theEcorePackage.getEString(), "name", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -429,14 +520,22 @@
     initEReference(getProperty_Value(), this.getValue(), null, "value", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEAttribute(getProperty_Comment(), theEcorePackage.getEString(), "comment", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-    initEClass(assignmentEClass, Assignment.class, "Assignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEAttribute(getAssignment_Expression(), theEcorePackage.getEString(), "expression", null, 0, 1, Assignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEClass(xAssignmentEClass, XAssignment.class, "XAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getXAssignment_Expression(), theEcorePackage.getEString(), "expression", null, 0, 1, XAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(valueEClass, Value.class, "Value", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getValue_Str(), theEcorePackage.getEString(), "str", null, 0, 1, Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEAttribute(getValue_Ival(), theEcorePackage.getEInt(), "ival", null, 0, 1, Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEAttribute(getValue_Dval(), theEcorePackage.getEDouble(), "dval", null, 0, 1, Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+    initEClass(xEnumerationEClass, XEnumeration.class, "XEnumeration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getXEnumeration_Literals(), this.getXEnumLiteral(), null, "literals", null, 0, -1, XEnumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(xEnumLiteralEClass, XEnumLiteral.class, "XEnumLiteral", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getXEnumLiteral_Name(), theEcorePackage.getEString(), "name", null, 0, 1, XEnumLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getXEnumLiteral_Value(), this.getValue(), null, "value", null, 0, 1, XEnumLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getXEnumLiteral_Comment(), theEcorePackage.getEString(), "comment", null, 0, 1, XEnumLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
     // Create resource
     createResource(eNS_URI);
   }
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/AssignmentImpl.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XAssignmentImpl.java
similarity index 84%
rename from plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/AssignmentImpl.java
rename to plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XAssignmentImpl.java
index 4705278..70d05ab 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/AssignmentImpl.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XAssignmentImpl.java
@@ -9,23 +9,23 @@
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment;
 
 /**
  * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Assignment</b></em>'.
+ * An implementation of the model object '<em><b>XAssignment</b></em>'.
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.AssignmentImpl#getExpression <em>Expression</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XAssignmentImpl#getExpression <em>Expression</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class AssignmentImpl extends ModelImpl implements Assignment
+public class XAssignmentImpl extends ModelImpl implements XAssignment
 {
   /**
    * The default value of the '{@link #getExpression() <em>Expression</em>}' attribute.
@@ -52,7 +52,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
-  protected AssignmentImpl()
+  protected XAssignmentImpl()
   {
     super();
   }
@@ -65,7 +65,7 @@
   @Override
   protected EClass eStaticClass()
   {
-    return DTMLPackage.Literals.ASSIGNMENT;
+    return DTMLPackage.Literals.XASSIGNMENT;
   }
 
   /**
@@ -90,7 +90,7 @@
     String oldExpression = expression;
     expression = newExpression;
     if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, DTMLPackage.ASSIGNMENT__EXPRESSION, oldExpression, expression));
+      eNotify(new ENotificationImpl(this, Notification.SET, DTMLPackage.XASSIGNMENT__EXPRESSION, oldExpression, expression));
   }
 
   /**
@@ -103,7 +103,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.ASSIGNMENT__EXPRESSION:
+      case DTMLPackage.XASSIGNMENT__EXPRESSION:
         return getExpression();
     }
     return super.eGet(featureID, resolve, coreType);
@@ -119,7 +119,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.ASSIGNMENT__EXPRESSION:
+      case DTMLPackage.XASSIGNMENT__EXPRESSION:
         setExpression((String)newValue);
         return;
     }
@@ -136,7 +136,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.ASSIGNMENT__EXPRESSION:
+      case DTMLPackage.XASSIGNMENT__EXPRESSION:
         setExpression(EXPRESSION_EDEFAULT);
         return;
     }
@@ -153,7 +153,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.ASSIGNMENT__EXPRESSION:
+      case DTMLPackage.XASSIGNMENT__EXPRESSION:
         return EXPRESSION_EDEFAULT == null ? expression != null : !EXPRESSION_EDEFAULT.equals(expression);
     }
     return super.eIsSet(featureID);
@@ -176,4 +176,4 @@
     return result.toString();
   }
 
-} //AssignmentImpl
+} //XAssignmentImpl
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTModelImpl.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XDataTypeImpl.java
similarity index 83%
rename from plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTModelImpl.java
rename to plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XDataTypeImpl.java
index 9d31d3d..5aa4ee0 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTModelImpl.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XDataTypeImpl.java
@@ -16,23 +16,23 @@
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Property;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType;
 
 /**
  * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>DT Model</b></em>'.
+ * An implementation of the model object '<em><b>XData Type</b></em>'.
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTModelImpl#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XDataTypeImpl#getAttributes <em>Attributes</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class DTModelImpl extends ModelImpl implements DTModel
+public class XDataTypeImpl extends ModelImpl implements XDataType
 {
   /**
    * The cached value of the '{@link #getAttributes() <em>Attributes</em>}' containment reference list.
@@ -49,7 +49,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
-  protected DTModelImpl()
+  protected XDataTypeImpl()
   {
     super();
   }
@@ -62,7 +62,7 @@
   @Override
   protected EClass eStaticClass()
   {
-    return DTMLPackage.Literals.DT_MODEL;
+    return DTMLPackage.Literals.XDATA_TYPE;
   }
 
   /**
@@ -75,7 +75,7 @@
   {
     if (attributes == null)
     {
-      attributes = new EObjectContainmentEList<Property>(Property.class, this, DTMLPackage.DT_MODEL__ATTRIBUTES);
+      attributes = new EObjectContainmentEList<Property>(Property.class, this, DTMLPackage.XDATA_TYPE__ATTRIBUTES);
     }
     return attributes;
   }
@@ -90,7 +90,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
+      case DTMLPackage.XDATA_TYPE__ATTRIBUTES:
         return ((InternalEList<?>)getAttributes()).basicRemove(otherEnd, msgs);
     }
     return super.eInverseRemove(otherEnd, featureID, msgs);
@@ -106,7 +106,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
+      case DTMLPackage.XDATA_TYPE__ATTRIBUTES:
         return getAttributes();
     }
     return super.eGet(featureID, resolve, coreType);
@@ -123,7 +123,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
+      case DTMLPackage.XDATA_TYPE__ATTRIBUTES:
         getAttributes().clear();
         getAttributes().addAll((Collection<? extends Property>)newValue);
         return;
@@ -141,7 +141,7 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
+      case DTMLPackage.XDATA_TYPE__ATTRIBUTES:
         getAttributes().clear();
         return;
     }
@@ -158,10 +158,10 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
+      case DTMLPackage.XDATA_TYPE__ATTRIBUTES:
         return attributes != null && !attributes.isEmpty();
     }
     return super.eIsSet(featureID);
   }
 
-} //DTModelImpl
+} //XDataTypeImpl
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XEnumLiteralImpl.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XEnumLiteralImpl.java
new file mode 100644
index 0000000..23d1ffe
--- /dev/null
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XEnumLiteralImpl.java
@@ -0,0 +1,328 @@
+/**
+ * generated by Xtext 2.22.0
+ */
+package org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Value;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>XEnum Literal</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumLiteralImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class XEnumLiteralImpl extends MinimalEObjectImpl.Container implements XEnumLiteral
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected Value value;
+
+  /**
+   * The default value of the '{@link #getComment() <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected static final String COMMENT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected String comment = COMMENT_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected XEnumLiteralImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return DTMLPackage.Literals.XENUM_LITERAL;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DTMLPackage.XENUM_LITERAL__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Value getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetValue(Value newValue, NotificationChain msgs)
+  {
+    Value oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DTMLPackage.XENUM_LITERAL__VALUE, oldValue, newValue);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void setValue(Value newValue)
+  {
+    if (newValue != value)
+    {
+      NotificationChain msgs = null;
+      if (value != null)
+        msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DTMLPackage.XENUM_LITERAL__VALUE, null, msgs);
+      if (newValue != null)
+        msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DTMLPackage.XENUM_LITERAL__VALUE, null, msgs);
+      msgs = basicSetValue(newValue, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DTMLPackage.XENUM_LITERAL__VALUE, newValue, newValue));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void setComment(String newComment)
+  {
+    String oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DTMLPackage.XENUM_LITERAL__COMMENT, oldComment, comment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case DTMLPackage.XENUM_LITERAL__VALUE:
+        return basicSetValue(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case DTMLPackage.XENUM_LITERAL__NAME:
+        return getName();
+      case DTMLPackage.XENUM_LITERAL__VALUE:
+        return getValue();
+      case DTMLPackage.XENUM_LITERAL__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case DTMLPackage.XENUM_LITERAL__NAME:
+        setName((String)newValue);
+        return;
+      case DTMLPackage.XENUM_LITERAL__VALUE:
+        setValue((Value)newValue);
+        return;
+      case DTMLPackage.XENUM_LITERAL__COMMENT:
+        setComment((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case DTMLPackage.XENUM_LITERAL__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case DTMLPackage.XENUM_LITERAL__VALUE:
+        setValue((Value)null);
+        return;
+      case DTMLPackage.XENUM_LITERAL__COMMENT:
+        setComment(COMMENT_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case DTMLPackage.XENUM_LITERAL__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case DTMLPackage.XENUM_LITERAL__VALUE:
+        return value != null;
+      case DTMLPackage.XENUM_LITERAL__COMMENT:
+        return COMMENT_EDEFAULT == null ? comment != null : !COMMENT_EDEFAULT.equals(comment);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuilder result = new StringBuilder(super.toString());
+    result.append(" (name: ");
+    result.append(name);
+    result.append(", comment: ");
+    result.append(comment);
+    result.append(')');
+    return result.toString();
+  }
+
+} //XEnumLiteralImpl
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTModelImpl.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XEnumerationImpl.java
similarity index 64%
copy from plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTModelImpl.java
copy to plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XEnumerationImpl.java
index 9d31d3d..462cd62 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/DTModelImpl.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/impl/XEnumerationImpl.java
@@ -16,40 +16,40 @@
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Property;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration;
 
 /**
  * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>DT Model</b></em>'.
+ * An implementation of the model object '<em><b>XEnumeration</b></em>'.
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.DTModelImpl#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.impl.XEnumerationImpl#getLiterals <em>Literals</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class DTModelImpl extends ModelImpl implements DTModel
+public class XEnumerationImpl extends ModelImpl implements XEnumeration
 {
   /**
-   * The cached value of the '{@link #getAttributes() <em>Attributes</em>}' containment reference list.
+   * The cached value of the '{@link #getLiterals() <em>Literals</em>}' containment reference list.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see #getAttributes()
+   * @see #getLiterals()
    * @generated
    * @ordered
    */
-  protected EList<Property> attributes;
+  protected EList<XEnumLiteral> literals;
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  protected DTModelImpl()
+  protected XEnumerationImpl()
   {
     super();
   }
@@ -62,7 +62,7 @@
   @Override
   protected EClass eStaticClass()
   {
-    return DTMLPackage.Literals.DT_MODEL;
+    return DTMLPackage.Literals.XENUMERATION;
   }
 
   /**
@@ -71,13 +71,13 @@
    * @generated
    */
   @Override
-  public EList<Property> getAttributes()
+  public EList<XEnumLiteral> getLiterals()
   {
-    if (attributes == null)
+    if (literals == null)
     {
-      attributes = new EObjectContainmentEList<Property>(Property.class, this, DTMLPackage.DT_MODEL__ATTRIBUTES);
+      literals = new EObjectContainmentEList<XEnumLiteral>(XEnumLiteral.class, this, DTMLPackage.XENUMERATION__LITERALS);
     }
-    return attributes;
+    return literals;
   }
 
   /**
@@ -90,8 +90,8 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
-        return ((InternalEList<?>)getAttributes()).basicRemove(otherEnd, msgs);
+      case DTMLPackage.XENUMERATION__LITERALS:
+        return ((InternalEList<?>)getLiterals()).basicRemove(otherEnd, msgs);
     }
     return super.eInverseRemove(otherEnd, featureID, msgs);
   }
@@ -106,8 +106,8 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
-        return getAttributes();
+      case DTMLPackage.XENUMERATION__LITERALS:
+        return getLiterals();
     }
     return super.eGet(featureID, resolve, coreType);
   }
@@ -123,9 +123,9 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
-        getAttributes().clear();
-        getAttributes().addAll((Collection<? extends Property>)newValue);
+      case DTMLPackage.XENUMERATION__LITERALS:
+        getLiterals().clear();
+        getLiterals().addAll((Collection<? extends XEnumLiteral>)newValue);
         return;
     }
     super.eSet(featureID, newValue);
@@ -141,8 +141,8 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
-        getAttributes().clear();
+      case DTMLPackage.XENUMERATION__LITERALS:
+        getLiterals().clear();
         return;
     }
     super.eUnset(featureID);
@@ -158,10 +158,10 @@
   {
     switch (featureID)
     {
-      case DTMLPackage.DT_MODEL__ATTRIBUTES:
-        return attributes != null && !attributes.isEmpty();
+      case DTMLPackage.XENUMERATION__LITERALS:
+        return literals != null && !literals.isEmpty();
     }
     return super.eIsSet(featureID);
   }
 
-} //DTModelImpl
+} //XEnumerationImpl
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLAdapterFactory.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLAdapterFactory.java
index 7022ac6..cd0db07 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLAdapterFactory.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLAdapterFactory.java
@@ -81,9 +81,9 @@
         return createModelAdapter();
       }
       @Override
-      public Adapter caseDTModel(DTModel object)
+      public Adapter caseXDataType(XDataType object)
       {
-        return createDTModelAdapter();
+        return createXDataTypeAdapter();
       }
       @Override
       public Adapter caseProperty(Property object)
@@ -91,9 +91,9 @@
         return createPropertyAdapter();
       }
       @Override
-      public Adapter caseAssignment(Assignment object)
+      public Adapter caseXAssignment(XAssignment object)
       {
-        return createAssignmentAdapter();
+        return createXAssignmentAdapter();
       }
       @Override
       public Adapter caseValue(Value object)
@@ -101,6 +101,16 @@
         return createValueAdapter();
       }
       @Override
+      public Adapter caseXEnumeration(XEnumeration object)
+      {
+        return createXEnumerationAdapter();
+      }
+      @Override
+      public Adapter caseXEnumLiteral(XEnumLiteral object)
+      {
+        return createXEnumLiteralAdapter();
+      }
+      @Override
       public Adapter defaultCase(EObject object)
       {
         return createEObjectAdapter();
@@ -138,16 +148,16 @@
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel <em>DT Model</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType <em>XData Type</em>}'.
    * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
    * it's useful to ignore a case when inheritance will catch all the cases anyway.
    * <!-- end-user-doc -->
    * @return the new adapter.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType
    * @generated
    */
-  public Adapter createDTModelAdapter()
+  public Adapter createXDataTypeAdapter()
   {
     return null;
   }
@@ -168,16 +178,16 @@
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment <em>Assignment</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment <em>XAssignment</em>}'.
    * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
    * it's useful to ignore a case when inheritance will catch all the cases anyway.
    * <!-- end-user-doc -->
    * @return the new adapter.
-   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment
    * @generated
    */
-  public Adapter createAssignmentAdapter()
+  public Adapter createXAssignmentAdapter()
   {
     return null;
   }
@@ -198,6 +208,36 @@
   }
 
   /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration <em>XEnumeration</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration
+   * @generated
+   */
+  public Adapter createXEnumerationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral <em>XEnum Literal</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral
+   * @generated
+   */
+  public Adapter createXEnumLiteralAdapter()
+  {
+    return null;
+  }
+
+  /**
    * Creates a new adapter for the default case.
    * <!-- begin-user-doc -->
    * This default implementation returns null.
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLSwitch.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLSwitch.java
index 8550dba..7acc104 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLSwitch.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/dTML/util/DTMLSwitch.java
@@ -80,11 +80,11 @@
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case DTMLPackage.DT_MODEL:
+      case DTMLPackage.XDATA_TYPE:
       {
-        DTModel dtModel = (DTModel)theEObject;
-        T result = caseDTModel(dtModel);
-        if (result == null) result = caseModel(dtModel);
+        XDataType xDataType = (XDataType)theEObject;
+        T result = caseXDataType(xDataType);
+        if (result == null) result = caseModel(xDataType);
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
@@ -95,11 +95,11 @@
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case DTMLPackage.ASSIGNMENT:
+      case DTMLPackage.XASSIGNMENT:
       {
-        Assignment assignment = (Assignment)theEObject;
-        T result = caseAssignment(assignment);
-        if (result == null) result = caseModel(assignment);
+        XAssignment xAssignment = (XAssignment)theEObject;
+        T result = caseXAssignment(xAssignment);
+        if (result == null) result = caseModel(xAssignment);
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
@@ -110,6 +110,21 @@
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
+      case DTMLPackage.XENUMERATION:
+      {
+        XEnumeration xEnumeration = (XEnumeration)theEObject;
+        T result = caseXEnumeration(xEnumeration);
+        if (result == null) result = caseModel(xEnumeration);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case DTMLPackage.XENUM_LITERAL:
+      {
+        XEnumLiteral xEnumLiteral = (XEnumLiteral)theEObject;
+        T result = caseXEnumLiteral(xEnumLiteral);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
       default: return defaultCase(theEObject);
     }
   }
@@ -131,17 +146,17 @@
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>DT Model</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>XData Type</em>'.
    * <!-- begin-user-doc -->
    * This implementation returns null;
    * returning a non-null result will terminate the switch.
    * <!-- end-user-doc -->
    * @param object the target of the switch.
-   * @return the result of interpreting the object as an instance of '<em>DT Model</em>'.
+   * @return the result of interpreting the object as an instance of '<em>XData Type</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseDTModel(DTModel object)
+  public T caseXDataType(XDataType object)
   {
     return null;
   }
@@ -163,17 +178,17 @@
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Assignment</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>XAssignment</em>'.
    * <!-- begin-user-doc -->
    * This implementation returns null;
    * returning a non-null result will terminate the switch.
    * <!-- end-user-doc -->
    * @param object the target of the switch.
-   * @return the result of interpreting the object as an instance of '<em>Assignment</em>'.
+   * @return the result of interpreting the object as an instance of '<em>XAssignment</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseAssignment(Assignment object)
+  public T caseXAssignment(XAssignment object)
   {
     return null;
   }
@@ -195,6 +210,38 @@
   }
 
   /**
+   * Returns the result of interpreting the object as an instance of '<em>XEnumeration</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>XEnumeration</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseXEnumeration(XEnumeration object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>XEnum Literal</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>XEnum Literal</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseXEnumLiteral(XEnumLiteral object)
+  {
+    return null;
+  }
+
+  /**
    * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
    * <!-- begin-user-doc -->
    * This implementation returns null;
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.g b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.g
index 4a6abde..bba0aa7 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.g
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.g
@@ -78,34 +78,43 @@
 }:
 	(
 		{
-			newCompositeNode(grammarAccess.getModelAccess().getDTModelParserRuleCall_0());
+			newCompositeNode(grammarAccess.getModelAccess().getXDataTypeParserRuleCall_0());
 		}
-		this_DTModel_0=ruleDTModel
+		this_XDataType_0=ruleXDataType
 		{
-			$current = $this_DTModel_0.current;
+			$current = $this_XDataType_0.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
 		{
-			newCompositeNode(grammarAccess.getModelAccess().getAssignmentParserRuleCall_1());
+			newCompositeNode(grammarAccess.getModelAccess().getXAssignmentParserRuleCall_1());
 		}
-		this_Assignment_1=ruleAssignment
+		this_XAssignment_1=ruleXAssignment
 		{
-			$current = $this_Assignment_1.current;
+			$current = $this_XAssignment_1.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			newCompositeNode(grammarAccess.getModelAccess().getXEnumerationParserRuleCall_2());
+		}
+		this_XEnumeration_2=ruleXEnumeration
+		{
+			$current = $this_XEnumeration_2.current;
 			afterParserOrEnumRuleCall();
 		}
 	)
 ;
 
-// Entry rule entryRuleDTModel
-entryRuleDTModel returns [EObject current=null]:
-	{ newCompositeNode(grammarAccess.getDTModelRule()); }
-	iv_ruleDTModel=ruleDTModel
-	{ $current=$iv_ruleDTModel.current; }
+// Entry rule entryRuleXDataType
+entryRuleXDataType returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getXDataTypeRule()); }
+	iv_ruleXDataType=ruleXDataType
+	{ $current=$iv_ruleXDataType.current; }
 	EOF;
 
-// Rule DTModel
-ruleDTModel returns [EObject current=null]
+// Rule XDataType
+ruleXDataType returns [EObject current=null]
 @init {
 	enterRule();
 }
@@ -114,7 +123,7 @@
 }:
 	(
 		{
-			newCompositeNode(grammarAccess.getDTModelAccess().getDTKeyParserRuleCall_0());
+			newCompositeNode(grammarAccess.getXDataTypeAccess().getDTKeyParserRuleCall_0());
 		}
 		ruleDTKey
 		{
@@ -124,11 +133,11 @@
 			(
 				lv_name_1_0=RULE_ID
 				{
-					newLeafNode(lv_name_1_0, grammarAccess.getDTModelAccess().getNameIDTerminalRuleCall_1_0());
+					newLeafNode(lv_name_1_0, grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_1_0());
 				}
 				{
 					if ($current==null) {
-						$current = createModelElement(grammarAccess.getDTModelRule());
+						$current = createModelElement(grammarAccess.getXDataTypeRule());
 					}
 					setWithLastConsumed(
 						$current,
@@ -140,17 +149,17 @@
 		)
 		otherlv_2='{'
 		{
-			newLeafNode(otherlv_2, grammarAccess.getDTModelAccess().getLeftCurlyBracketKeyword_2());
+			newLeafNode(otherlv_2, grammarAccess.getXDataTypeAccess().getLeftCurlyBracketKeyword_2());
 		}
 		(
 			(
 				{
-					newCompositeNode(grammarAccess.getDTModelAccess().getAttributesPropertyParserRuleCall_3_0());
+					newCompositeNode(grammarAccess.getXDataTypeAccess().getAttributesPropertyParserRuleCall_3_0());
 				}
 				lv_attributes_3_0=ruleProperty
 				{
 					if ($current==null) {
-						$current = createModelElementForParent(grammarAccess.getDTModelRule());
+						$current = createModelElementForParent(grammarAccess.getXDataTypeRule());
 					}
 					add(
 						$current,
@@ -163,7 +172,7 @@
 		)*
 		otherlv_4='}'
 		{
-			newLeafNode(otherlv_4, grammarAccess.getDTModelAccess().getRightCurlyBracketKeyword_4());
+			newLeafNode(otherlv_4, grammarAccess.getXDataTypeAccess().getRightCurlyBracketKeyword_4());
 		}
 	)
 ;
@@ -343,15 +352,15 @@
 	)
 ;
 
-// Entry rule entryRuleAssignment
-entryRuleAssignment returns [EObject current=null]:
-	{ newCompositeNode(grammarAccess.getAssignmentRule()); }
-	iv_ruleAssignment=ruleAssignment
-	{ $current=$iv_ruleAssignment.current; }
+// Entry rule entryRuleXAssignment
+entryRuleXAssignment returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getXAssignmentRule()); }
+	iv_ruleXAssignment=ruleXAssignment
+	{ $current=$iv_ruleXAssignment.current; }
 	EOF;
 
-// Rule Assignment
-ruleAssignment returns [EObject current=null]
+// Rule XAssignment
+ruleXAssignment returns [EObject current=null]
 @init {
 	enterRule();
 }
@@ -363,11 +372,11 @@
 			(
 				lv_name_0_0=RULE_ID
 				{
-					newLeafNode(lv_name_0_0, grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0());
+					newLeafNode(lv_name_0_0, grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0());
 				}
 				{
 					if ($current==null) {
-						$current = createModelElement(grammarAccess.getAssignmentRule());
+						$current = createModelElement(grammarAccess.getXAssignmentRule());
 					}
 					setWithLastConsumed(
 						$current,
@@ -379,17 +388,17 @@
 		)
 		otherlv_1='='
 		{
-			newLeafNode(otherlv_1, grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1());
+			newLeafNode(otherlv_1, grammarAccess.getXAssignmentAccess().getEqualsSignKeyword_1());
 		}
 		(
 			(
 				{
-					newCompositeNode(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0());
+					newCompositeNode(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0());
 				}
 				lv_expression_2_0=ruleExpressionString
 				{
 					if ($current==null) {
-						$current = createModelElementForParent(grammarAccess.getAssignmentRule());
+						$current = createModelElementForParent(grammarAccess.getXAssignmentRule());
 					}
 					set(
 						$current,
@@ -402,7 +411,7 @@
 		)
 		otherlv_3=';'
 		{
-			newLeafNode(otherlv_3, grammarAccess.getAssignmentAccess().getSemicolonKeyword_3());
+			newLeafNode(otherlv_3, grammarAccess.getXAssignmentAccess().getSemicolonKeyword_3());
 		}
 	)
 ;
@@ -548,6 +557,154 @@
 	)
 ;
 
+// Entry rule entryRuleXEnumeration
+entryRuleXEnumeration returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getXEnumerationRule()); }
+	iv_ruleXEnumeration=ruleXEnumeration
+	{ $current=$iv_ruleXEnumeration.current; }
+	EOF;
+
+// Rule XEnumeration
+ruleXEnumeration returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		otherlv_0='Enumeration'
+		{
+			newLeafNode(otherlv_0, grammarAccess.getXEnumerationAccess().getEnumerationKeyword_0());
+		}
+		(
+			(
+				lv_name_1_0=RULE_ID
+				{
+					newLeafNode(lv_name_1_0, grammarAccess.getXEnumerationAccess().getNameIDTerminalRuleCall_1_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getXEnumerationRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_1_0,
+						"org.eclipse.papyrus.uml.alf.Common.ID");
+				}
+			)
+		)
+		otherlv_2='{'
+		{
+			newLeafNode(otherlv_2, grammarAccess.getXEnumerationAccess().getLeftCurlyBracketKeyword_2());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getXEnumerationAccess().getLiteralsXEnumLiteralParserRuleCall_3_0());
+				}
+				lv_literals_3_0=ruleXEnumLiteral
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getXEnumerationRule());
+					}
+					add(
+						$current,
+						"literals",
+						lv_literals_3_0,
+						"org.eclipse.papyrus.robotics.xtext.datatypes.DTML.XEnumLiteral");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)*
+		otherlv_4='}'
+		{
+			newLeafNode(otherlv_4, grammarAccess.getXEnumerationAccess().getRightCurlyBracketKeyword_4());
+		}
+	)
+;
+
+// Entry rule entryRuleXEnumLiteral
+entryRuleXEnumLiteral returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getXEnumLiteralRule()); }
+	iv_ruleXEnumLiteral=ruleXEnumLiteral
+	{ $current=$iv_ruleXEnumLiteral.current; }
+	EOF;
+
+// Rule XEnumLiteral
+ruleXEnumLiteral returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			(
+				lv_name_0_0=RULE_ID
+				{
+					newLeafNode(lv_name_0_0, grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_0_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getXEnumLiteralRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_0_0,
+						"org.eclipse.papyrus.uml.alf.Common.ID");
+				}
+			)
+		)
+		(
+			otherlv_1='='
+			{
+				newLeafNode(otherlv_1, grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_1_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getXEnumLiteralAccess().getValueValueParserRuleCall_1_1_0());
+					}
+					lv_value_2_0=ruleValue
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getXEnumLiteralRule());
+						}
+						set(
+							$current,
+							"value",
+							lv_value_2_0,
+							"org.eclipse.papyrus.robotics.xtext.datatypes.DTML.Value");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+		(
+			(
+				lv_comment_3_0=RULE_VSL_COMMENT
+				{
+					newLeafNode(lv_comment_3_0, grammarAccess.getXEnumLiteralAccess().getCommentVSL_COMMENTTerminalRuleCall_2_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getXEnumLiteralRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"comment",
+						lv_comment_3_0,
+						"org.eclipse.papyrus.robotics.xtext.datatypes.DTML.VSL_COMMENT");
+				}
+			)
+		)?
+	)
+;
+
 // Entry rule entryRuleQualifiedName
 entryRuleQualifiedName returns [EObject current=null]:
 	{ newCompositeNode(grammarAccess.getQualifiedNameRule()); }
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.tokens b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.tokens
index 48746de..8bf53b8 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.tokens
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTML.tokens
@@ -1,14 +1,15 @@
-'*'=29
+'*'=30
 ','=26
 '-'=25
-'..'=28
+'..'=29
 ':'=19
-'::'=27
+'::'=28
 ';'=22
 '<Undefined>'=20
 '='=21
 'CommObject'=17
 'DataType'=16
+'Enumeration'=27
 '['=23
 ']'=24
 'attribute'=18
@@ -40,3 +41,4 @@
 T__27=27
 T__28=28
 T__29=29
+T__30=30
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLLexer.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLLexer.java
index 6669c7e..7dff2f7 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLLexer.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLLexer.java
@@ -22,6 +22,7 @@
     public static final int T__18=18;
     public static final int T__14=14;
     public static final int EOF=-1;
+    public static final int T__30=30;
     public static final int RULE_ID=4;
     public static final int RULE_WS=12;
     public static final int RULE_ANY_OTHER=13;
@@ -322,10 +323,10 @@
         try {
             int _type = T__27;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:24:7: ( '::' )
-            // InternalDTML.g:24:9: '::'
+            // InternalDTML.g:24:7: ( 'Enumeration' )
+            // InternalDTML.g:24:9: 'Enumeration'
             {
-            match("::"); 
+            match("Enumeration"); 
 
 
             }
@@ -343,10 +344,10 @@
         try {
             int _type = T__28;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:25:7: ( '..' )
-            // InternalDTML.g:25:9: '..'
+            // InternalDTML.g:25:7: ( '::' )
+            // InternalDTML.g:25:9: '::'
             {
-            match(".."); 
+            match("::"); 
 
 
             }
@@ -364,10 +365,11 @@
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:26:7: ( '*' )
-            // InternalDTML.g:26:9: '*'
+            // InternalDTML.g:26:7: ( '..' )
+            // InternalDTML.g:26:9: '..'
             {
-            match('*'); 
+            match(".."); 
+
 
             }
 
@@ -379,17 +381,37 @@
     }
     // $ANTLR end "T__29"
 
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalDTML.g:27:7: ( '*' )
+            // InternalDTML.g:27:9: '*'
+            {
+            match('*'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
     // $ANTLR start "RULE_VSL_COMMENT"
     public final void mRULE_VSL_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_VSL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:796:18: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalDTML.g:796:20: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:953:18: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalDTML.g:953:20: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalDTML.g:796:25: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalDTML.g:953:25: (~ ( ( '\\n' | '\\r' ) ) )*
             loop1:
             do {
                 int alt1=2;
@@ -402,7 +424,7 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // InternalDTML.g:796:25: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalDTML.g:953:25: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -422,7 +444,7 @@
                 }
             } while (true);
 
-            // InternalDTML.g:796:41: ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:953:41: ( ( '\\r' )? '\\n' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -431,9 +453,9 @@
             }
             switch (alt3) {
                 case 1 :
-                    // InternalDTML.g:796:42: ( '\\r' )? '\\n'
+                    // InternalDTML.g:953:42: ( '\\r' )? '\\n'
                     {
-                    // InternalDTML.g:796:42: ( '\\r' )?
+                    // InternalDTML.g:953:42: ( '\\r' )?
                     int alt2=2;
                     int LA2_0 = input.LA(1);
 
@@ -442,7 +464,7 @@
                     }
                     switch (alt2) {
                         case 1 :
-                            // InternalDTML.g:796:42: '\\r'
+                            // InternalDTML.g:953:42: '\\r'
                             {
                             match('\r'); 
 
@@ -474,10 +496,10 @@
         try {
             int _type = RULE_DOUBLE;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:798:13: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // InternalDTML.g:798:15: ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // InternalDTML.g:955:13: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // InternalDTML.g:955:15: ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // InternalDTML.g:798:15: ( '0' .. '9' )+
+            // InternalDTML.g:955:15: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -491,7 +513,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // InternalDTML.g:798:16: '0' .. '9'
+            	    // InternalDTML.g:955:16: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -508,7 +530,7 @@
             } while (true);
 
             match('.'); 
-            // InternalDTML.g:798:31: ( '0' .. '9' )+
+            // InternalDTML.g:955:31: ( '0' .. '9' )+
             int cnt5=0;
             loop5:
             do {
@@ -522,7 +544,7 @@
 
                 switch (alt5) {
             	case 1 :
-            	    // InternalDTML.g:798:32: '0' .. '9'
+            	    // InternalDTML.g:955:32: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -554,10 +576,10 @@
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:800:9: ( ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' ) )
-            // InternalDTML.g:800:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
+            // InternalDTML.g:957:9: ( ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' ) )
+            // InternalDTML.g:957:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
             {
-            // InternalDTML.g:800:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
+            // InternalDTML.g:957:11: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* | '\\'' ( options {greedy=false; } : . )* '\\'' )
             int alt8=2;
             int LA8_0 = input.LA(1);
 
@@ -575,7 +597,7 @@
             }
             switch (alt8) {
                 case 1 :
-                    // InternalDTML.g:800:12: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+                    // InternalDTML.g:957:12: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
                     {
                     if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                         input.consume();
@@ -586,7 +608,7 @@
                         recover(mse);
                         throw mse;}
 
-                    // InternalDTML.g:800:36: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+                    // InternalDTML.g:957:36: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
                     loop6:
                     do {
                         int alt6=2;
@@ -623,10 +645,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:800:70: '\\'' ( options {greedy=false; } : . )* '\\''
+                    // InternalDTML.g:957:70: '\\'' ( options {greedy=false; } : . )* '\\''
                     {
                     match('\''); 
-                    // InternalDTML.g:800:75: ( options {greedy=false; } : . )*
+                    // InternalDTML.g:957:75: ( options {greedy=false; } : . )*
                     loop7:
                     do {
                         int alt7=2;
@@ -642,7 +664,7 @@
 
                         switch (alt7) {
                     	case 1 :
-                    	    // InternalDTML.g:800:103: .
+                    	    // InternalDTML.g:957:103: .
                     	    {
                     	    matchAny(); 
 
@@ -677,11 +699,11 @@
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:802:13: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
-            // InternalDTML.g:802:15: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+            // InternalDTML.g:959:13: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
+            // InternalDTML.g:959:15: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
             {
             match('\"'); 
-            // InternalDTML.g:802:19: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+            // InternalDTML.g:959:19: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
             loop9:
             do {
                 int alt9=3;
@@ -697,7 +719,7 @@
 
                 switch (alt9) {
             	case 1 :
-            	    // InternalDTML.g:802:20: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+            	    // InternalDTML.g:959:20: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
             	    {
             	    match('\\'); 
             	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
@@ -713,7 +735,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // InternalDTML.g:802:61: ~ ( ( '\\\\' | '\"' ) )
+            	    // InternalDTML.g:959:61: ~ ( ( '\\\\' | '\"' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -750,8 +772,8 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:804:17: ( '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/' )
-            // InternalDTML.g:804:19: '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/'
+            // InternalDTML.g:961:17: ( '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/' )
+            // InternalDTML.g:961:19: '/*' ~ ( '@' ) ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
@@ -764,7 +786,7 @@
                 recover(mse);
                 throw mse;}
 
-            // InternalDTML.g:804:31: ( options {greedy=false; } : . )*
+            // InternalDTML.g:961:31: ( options {greedy=false; } : . )*
             loop10:
             do {
                 int alt10=2;
@@ -789,7 +811,7 @@
 
                 switch (alt10) {
             	case 1 :
-            	    // InternalDTML.g:804:59: .
+            	    // InternalDTML.g:961:59: .
             	    {
             	    matchAny(); 
 
@@ -819,12 +841,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:806:17: ( '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalDTML.g:806:19: '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:963:17: ( '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalDTML.g:963:19: '//' (~ ( ( '\\n' | '\\r' | '@' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalDTML.g:806:24: (~ ( ( '\\n' | '\\r' | '@' ) ) )*
+            // InternalDTML.g:963:24: (~ ( ( '\\n' | '\\r' | '@' ) ) )*
             loop11:
             do {
                 int alt11=2;
@@ -837,7 +859,7 @@
 
                 switch (alt11) {
             	case 1 :
-            	    // InternalDTML.g:806:24: ~ ( ( '\\n' | '\\r' | '@' ) )
+            	    // InternalDTML.g:963:24: ~ ( ( '\\n' | '\\r' | '@' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='?')||(input.LA(1)>='A' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -857,7 +879,7 @@
                 }
             } while (true);
 
-            // InternalDTML.g:806:44: ( ( '\\r' )? '\\n' )?
+            // InternalDTML.g:963:44: ( ( '\\r' )? '\\n' )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -866,9 +888,9 @@
             }
             switch (alt13) {
                 case 1 :
-                    // InternalDTML.g:806:45: ( '\\r' )? '\\n'
+                    // InternalDTML.g:963:45: ( '\\r' )? '\\n'
                     {
-                    // InternalDTML.g:806:45: ( '\\r' )?
+                    // InternalDTML.g:963:45: ( '\\r' )?
                     int alt12=2;
                     int LA12_0 = input.LA(1);
 
@@ -877,7 +899,7 @@
                     }
                     switch (alt12) {
                         case 1 :
-                            // InternalDTML.g:806:45: '\\r'
+                            // InternalDTML.g:963:45: '\\r'
                             {
                             match('\r'); 
 
@@ -909,10 +931,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:808:10: ( ( '0' .. '9' )+ )
-            // InternalDTML.g:808:12: ( '0' .. '9' )+
+            // InternalDTML.g:965:10: ( ( '0' .. '9' )+ )
+            // InternalDTML.g:965:12: ( '0' .. '9' )+
             {
-            // InternalDTML.g:808:12: ( '0' .. '9' )+
+            // InternalDTML.g:965:12: ( '0' .. '9' )+
             int cnt14=0;
             loop14:
             do {
@@ -926,7 +948,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // InternalDTML.g:808:13: '0' .. '9'
+            	    // InternalDTML.g:965:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -958,10 +980,10 @@
         try {
             int _type = RULE_INTEGER_VALUE;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:810:20: ( ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* ) )
-            // InternalDTML.g:810:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
+            // InternalDTML.g:967:20: ( ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* ) )
+            // InternalDTML.g:967:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
             {
-            // InternalDTML.g:810:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
+            // InternalDTML.g:967:22: ( ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* ) | ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )* | ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )* | '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )* )
             int alt27=4;
             int LA27_0 = input.LA(1);
 
@@ -1007,9 +1029,9 @@
             }
             switch (alt27) {
                 case 1 :
-                    // InternalDTML.g:810:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
+                    // InternalDTML.g:967:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
                     {
-                    // InternalDTML.g:810:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
+                    // InternalDTML.g:967:23: ( '0' | '1' .. '9' ( ( '_' )? '0' .. '9' )* )
                     int alt17=2;
                     int LA17_0 = input.LA(1);
 
@@ -1027,17 +1049,17 @@
                     }
                     switch (alt17) {
                         case 1 :
-                            // InternalDTML.g:810:24: '0'
+                            // InternalDTML.g:967:24: '0'
                             {
                             match('0'); 
 
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:810:28: '1' .. '9' ( ( '_' )? '0' .. '9' )*
+                            // InternalDTML.g:967:28: '1' .. '9' ( ( '_' )? '0' .. '9' )*
                             {
                             matchRange('1','9'); 
-                            // InternalDTML.g:810:37: ( ( '_' )? '0' .. '9' )*
+                            // InternalDTML.g:967:37: ( ( '_' )? '0' .. '9' )*
                             loop16:
                             do {
                                 int alt16=2;
@@ -1050,9 +1072,9 @@
 
                                 switch (alt16) {
                             	case 1 :
-                            	    // InternalDTML.g:810:38: ( '_' )? '0' .. '9'
+                            	    // InternalDTML.g:967:38: ( '_' )? '0' .. '9'
                             	    {
-                            	    // InternalDTML.g:810:38: ( '_' )?
+                            	    // InternalDTML.g:967:38: ( '_' )?
                             	    int alt15=2;
                             	    int LA15_0 = input.LA(1);
 
@@ -1061,7 +1083,7 @@
                             	    }
                             	    switch (alt15) {
                             	        case 1 :
-                            	            // InternalDTML.g:810:38: '_'
+                            	            // InternalDTML.g:967:38: '_'
                             	            {
                             	            match('_'); 
 
@@ -1090,9 +1112,9 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:810:55: ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )*
+                    // InternalDTML.g:967:55: ( '0b' | '0B' ) '0' .. '1' ( ( '_' )? '0' .. '1' )*
                     {
-                    // InternalDTML.g:810:55: ( '0b' | '0B' )
+                    // InternalDTML.g:967:55: ( '0b' | '0B' )
                     int alt18=2;
                     int LA18_0 = input.LA(1);
 
@@ -1120,7 +1142,7 @@
                     }
                     switch (alt18) {
                         case 1 :
-                            // InternalDTML.g:810:56: '0b'
+                            // InternalDTML.g:967:56: '0b'
                             {
                             match("0b"); 
 
@@ -1128,7 +1150,7 @@
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:810:61: '0B'
+                            // InternalDTML.g:967:61: '0B'
                             {
                             match("0B"); 
 
@@ -1139,7 +1161,7 @@
                     }
 
                     matchRange('0','1'); 
-                    // InternalDTML.g:810:76: ( ( '_' )? '0' .. '1' )*
+                    // InternalDTML.g:967:76: ( ( '_' )? '0' .. '1' )*
                     loop20:
                     do {
                         int alt20=2;
@@ -1152,9 +1174,9 @@
 
                         switch (alt20) {
                     	case 1 :
-                    	    // InternalDTML.g:810:77: ( '_' )? '0' .. '1'
+                    	    // InternalDTML.g:967:77: ( '_' )? '0' .. '1'
                     	    {
-                    	    // InternalDTML.g:810:77: ( '_' )?
+                    	    // InternalDTML.g:967:77: ( '_' )?
                     	    int alt19=2;
                     	    int LA19_0 = input.LA(1);
 
@@ -1163,7 +1185,7 @@
                     	    }
                     	    switch (alt19) {
                     	        case 1 :
-                    	            // InternalDTML.g:810:77: '_'
+                    	            // InternalDTML.g:967:77: '_'
                     	            {
                     	            match('_'); 
 
@@ -1186,9 +1208,9 @@
                     }
                     break;
                 case 3 :
-                    // InternalDTML.g:810:93: ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
+                    // InternalDTML.g:967:93: ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
                     {
-                    // InternalDTML.g:810:93: ( '0x' | '0X' )
+                    // InternalDTML.g:967:93: ( '0x' | '0X' )
                     int alt21=2;
                     int LA21_0 = input.LA(1);
 
@@ -1216,7 +1238,7 @@
                     }
                     switch (alt21) {
                         case 1 :
-                            // InternalDTML.g:810:94: '0x'
+                            // InternalDTML.g:967:94: '0x'
                             {
                             match("0x"); 
 
@@ -1224,7 +1246,7 @@
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:810:99: '0X'
+                            // InternalDTML.g:967:99: '0X'
                             {
                             match("0X"); 
 
@@ -1243,7 +1265,7 @@
                         recover(mse);
                         throw mse;}
 
-                    // InternalDTML.g:810:134: ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
+                    // InternalDTML.g:967:134: ( ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )*
                     loop23:
                     do {
                         int alt23=2;
@@ -1256,9 +1278,9 @@
 
                         switch (alt23) {
                     	case 1 :
-                    	    // InternalDTML.g:810:135: ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+                    	    // InternalDTML.g:967:135: ( '_' )? ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
                     	    {
-                    	    // InternalDTML.g:810:135: ( '_' )?
+                    	    // InternalDTML.g:967:135: ( '_' )?
                     	    int alt22=2;
                     	    int LA22_0 = input.LA(1);
 
@@ -1267,7 +1289,7 @@
                     	    }
                     	    switch (alt22) {
                     	        case 1 :
-                    	            // InternalDTML.g:810:135: '_'
+                    	            // InternalDTML.g:967:135: '_'
                     	            {
                     	            match('_'); 
 
@@ -1298,10 +1320,10 @@
                     }
                     break;
                 case 4 :
-                    // InternalDTML.g:810:171: '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )*
+                    // InternalDTML.g:967:171: '0' ( '_' )? '0' .. '7' ( ( '_' )? '0' .. '7' )*
                     {
                     match('0'); 
-                    // InternalDTML.g:810:175: ( '_' )?
+                    // InternalDTML.g:967:175: ( '_' )?
                     int alt24=2;
                     int LA24_0 = input.LA(1);
 
@@ -1310,7 +1332,7 @@
                     }
                     switch (alt24) {
                         case 1 :
-                            // InternalDTML.g:810:175: '_'
+                            // InternalDTML.g:967:175: '_'
                             {
                             match('_'); 
 
@@ -1320,7 +1342,7 @@
                     }
 
                     matchRange('0','7'); 
-                    // InternalDTML.g:810:189: ( ( '_' )? '0' .. '7' )*
+                    // InternalDTML.g:967:189: ( ( '_' )? '0' .. '7' )*
                     loop26:
                     do {
                         int alt26=2;
@@ -1333,9 +1355,9 @@
 
                         switch (alt26) {
                     	case 1 :
-                    	    // InternalDTML.g:810:190: ( '_' )? '0' .. '7'
+                    	    // InternalDTML.g:967:190: ( '_' )? '0' .. '7'
                     	    {
-                    	    // InternalDTML.g:810:190: ( '_' )?
+                    	    // InternalDTML.g:967:190: ( '_' )?
                     	    int alt25=2;
                     	    int LA25_0 = input.LA(1);
 
@@ -1344,7 +1366,7 @@
                     	    }
                     	    switch (alt25) {
                     	        case 1 :
-                    	            // InternalDTML.g:810:190: '_'
+                    	            // InternalDTML.g:967:190: '_'
                     	            {
                     	            match('_'); 
 
@@ -1385,10 +1407,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:812:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalDTML.g:812:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalDTML.g:969:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalDTML.g:969:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalDTML.g:812:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalDTML.g:969:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt28=0;
             loop28:
             do {
@@ -1442,8 +1464,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDTML.g:814:16: ( . )
-            // InternalDTML.g:814:18: .
+            // InternalDTML.g:971:16: ( . )
+            // InternalDTML.g:971:18: .
             {
             matchAny(); 
 
@@ -1458,8 +1480,8 @@
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalDTML.g:1:8: ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER )
-        int alt29=26;
+        // InternalDTML.g:1:8: ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER )
+        int alt29=27;
         alt29 = dfa29.predict(input);
         switch (alt29) {
             case 1 :
@@ -1575,70 +1597,77 @@
                 }
                 break;
             case 17 :
-                // InternalDTML.g:1:106: RULE_VSL_COMMENT
+                // InternalDTML.g:1:106: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 18 :
+                // InternalDTML.g:1:112: RULE_VSL_COMMENT
                 {
                 mRULE_VSL_COMMENT(); 
 
                 }
                 break;
-            case 18 :
-                // InternalDTML.g:1:123: RULE_DOUBLE
+            case 19 :
+                // InternalDTML.g:1:129: RULE_DOUBLE
                 {
                 mRULE_DOUBLE(); 
 
                 }
                 break;
-            case 19 :
-                // InternalDTML.g:1:135: RULE_ID
+            case 20 :
+                // InternalDTML.g:1:141: RULE_ID
                 {
                 mRULE_ID(); 
 
                 }
                 break;
-            case 20 :
-                // InternalDTML.g:1:143: RULE_STRING
+            case 21 :
+                // InternalDTML.g:1:149: RULE_STRING
                 {
                 mRULE_STRING(); 
 
                 }
                 break;
-            case 21 :
-                // InternalDTML.g:1:155: RULE_ML_COMMENT
+            case 22 :
+                // InternalDTML.g:1:161: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT(); 
 
                 }
                 break;
-            case 22 :
-                // InternalDTML.g:1:171: RULE_SL_COMMENT
+            case 23 :
+                // InternalDTML.g:1:177: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT(); 
 
                 }
                 break;
-            case 23 :
-                // InternalDTML.g:1:187: RULE_INT
+            case 24 :
+                // InternalDTML.g:1:193: RULE_INT
                 {
                 mRULE_INT(); 
 
                 }
                 break;
-            case 24 :
-                // InternalDTML.g:1:196: RULE_INTEGER_VALUE
+            case 25 :
+                // InternalDTML.g:1:202: RULE_INTEGER_VALUE
                 {
                 mRULE_INTEGER_VALUE(); 
 
                 }
                 break;
-            case 25 :
-                // InternalDTML.g:1:215: RULE_WS
+            case 26 :
+                // InternalDTML.g:1:221: RULE_WS
                 {
                 mRULE_WS(); 
 
                 }
                 break;
-            case 26 :
-                // InternalDTML.g:1:223: RULE_ANY_OTHER
+            case 27 :
+                // InternalDTML.g:1:229: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -1652,49 +1681,49 @@
 
     protected DFA29 dfa29 = new DFA29(this);
     static final String DFA29_eotS =
-        "\3\uffff\3\33\1\37\1\27\6\uffff\1\27\1\uffff\1\27\1\56\1\uffff\2\27\1\56\4\uffff\1\33\1\uffff\2\33\13\uffff\1\71\3\uffff\1\56\1\uffff\1\56\1\uffff\1\56\1\uffff\3\33\1\71\3\uffff\1\56\14\33\1\112\2\33\1\uffff\1\33\1\116\1\117\2\uffff";
+        "\3\uffff\3\34\1\40\1\30\6\uffff\1\34\1\30\1\uffff\1\30\1\60\1\uffff\2\30\1\60\4\uffff\1\34\1\uffff\2\34\11\uffff\1\34\2\uffff\1\74\3\uffff\1\60\1\uffff\1\60\1\uffff\1\60\1\uffff\4\34\1\74\3\uffff\1\60\20\34\1\122\3\34\1\uffff\1\34\1\127\1\34\1\131\1\uffff\1\34\1\uffff\1\133\1\uffff";
     static final String DFA29_eofS =
-        "\120\uffff";
+        "\134\uffff";
     static final String DFA29_minS =
-        "\1\0\2\uffff\1\141\1\157\1\164\1\72\1\125\6\uffff\1\56\1\uffff\1\52\1\56\1\uffff\2\0\1\56\4\uffff\1\164\1\uffff\1\155\1\164\13\uffff\1\0\3\uffff\1\56\1\uffff\1\56\1\uffff\1\56\1\uffff\1\141\1\155\1\162\1\0\1\12\2\uffff\1\56\1\124\1\117\1\151\1\171\2\142\1\160\1\152\1\165\2\145\1\164\1\60\1\143\1\145\1\uffff\1\164\2\60\2\uffff";
+        "\1\0\2\uffff\1\141\1\157\1\164\1\72\1\125\6\uffff\1\156\1\56\1\uffff\1\52\1\56\1\uffff\2\0\1\56\4\uffff\1\164\1\uffff\1\155\1\164\11\uffff\1\165\2\uffff\1\0\3\uffff\1\56\1\uffff\1\56\1\uffff\1\56\1\uffff\1\141\1\155\1\162\1\155\1\0\1\12\2\uffff\1\56\1\124\1\117\1\151\1\145\1\171\2\142\1\162\1\160\1\152\1\165\1\141\2\145\2\164\1\60\1\143\1\145\1\151\1\uffff\1\164\1\60\1\157\1\60\1\uffff\1\156\1\uffff\1\60\1\uffff";
     static final String DFA29_maxS =
-        "\1\uffff\2\uffff\1\141\1\157\1\164\1\72\1\125\6\uffff\1\56\1\uffff\1\57\1\170\1\uffff\2\uffff\1\137\4\uffff\1\164\1\uffff\1\155\1\164\13\uffff\1\uffff\3\uffff\1\137\1\uffff\1\71\1\uffff\1\137\1\uffff\1\141\1\155\1\162\1\uffff\1\12\2\uffff\1\137\1\124\1\117\1\151\1\171\2\142\1\160\1\152\1\165\2\145\1\164\1\172\1\143\1\145\1\uffff\1\164\2\172\2\uffff";
+        "\1\uffff\2\uffff\1\141\1\157\1\164\1\72\1\125\6\uffff\1\156\1\56\1\uffff\1\57\1\170\1\uffff\2\uffff\1\137\4\uffff\1\164\1\uffff\1\155\1\164\11\uffff\1\165\2\uffff\1\uffff\3\uffff\1\137\1\uffff\1\71\1\uffff\1\137\1\uffff\1\141\1\155\1\162\1\155\1\uffff\1\12\2\uffff\1\137\1\124\1\117\1\151\1\145\1\171\2\142\1\162\1\160\1\152\1\165\1\141\2\145\2\164\1\172\1\143\1\145\1\151\1\uffff\1\164\1\172\1\157\1\172\1\uffff\1\156\1\uffff\1\172\1\uffff";
     static final String DFA29_acceptS =
-        "\1\uffff\1\1\1\2\5\uffff\1\10\1\11\1\12\1\13\1\14\1\15\1\uffff\1\20\2\uffff\1\23\3\uffff\1\31\1\32\1\1\1\2\1\uffff\1\23\2\uffff\1\16\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\17\1\20\1\uffff\1\25\1\30\1\22\1\uffff\1\27\1\uffff\1\24\1\uffff\1\31\5\uffff\2\21\20\uffff\1\3\3\uffff\1\5\1\4";
+        "\1\uffff\1\1\1\2\5\uffff\1\10\1\11\1\12\1\13\1\14\1\15\2\uffff\1\21\2\uffff\1\24\3\uffff\1\32\1\33\1\1\1\2\1\uffff\1\24\2\uffff\1\17\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\uffff\1\20\1\21\1\uffff\1\26\1\31\1\23\1\uffff\1\30\1\uffff\1\25\1\uffff\1\32\6\uffff\2\22\25\uffff\1\3\4\uffff\1\5\1\uffff\1\4\1\uffff\1\16";
     static final String DFA29_specialS =
-        "\1\2\22\uffff\1\3\1\1\24\uffff\1\4\14\uffff\1\0\31\uffff}>";
+        "\1\3\23\uffff\1\4\1\1\25\uffff\1\2\15\uffff\1\0\42\uffff}>";
     static final String[] DFA29_transitionS = {
-            "\11\27\2\26\2\27\1\26\22\27\1\26\1\27\1\24\4\27\1\23\2\27\1\17\1\27\1\15\1\14\1\16\1\20\1\21\11\25\1\6\1\11\1\7\1\10\3\27\2\22\1\4\1\3\26\22\1\12\1\27\1\13\1\27\1\22\1\27\1\5\31\22\1\1\1\27\1\2\uff82\27",
+            "\11\30\2\27\2\30\1\27\22\30\1\27\1\30\1\25\4\30\1\24\2\30\1\20\1\30\1\15\1\14\1\17\1\21\1\22\11\26\1\6\1\11\1\7\1\10\3\30\2\23\1\4\1\3\1\16\25\23\1\12\1\30\1\13\1\30\1\23\1\30\1\5\31\23\1\1\1\30\1\2\uff82\30",
             "",
             "",
-            "\1\32",
-            "\1\34",
+            "\1\33",
             "\1\35",
             "\1\36",
-            "\1\40",
+            "\1\37",
+            "\1\41",
             "",
             "",
             "",
             "",
             "",
             "",
-            "\1\47",
+            "\1\50",
+            "\1\51",
             "",
-            "\1\52\4\uffff\1\51",
-            "\1\54\1\uffff\10\55\2\57\10\uffff\1\53\25\uffff\1\53\6\uffff\1\53\2\uffff\1\53\25\uffff\1\53",
+            "\1\54\4\uffff\1\53",
+            "\1\56\1\uffff\10\57\2\61\10\uffff\1\55\25\uffff\1\55\6\uffff\1\55\2\uffff\1\55\25\uffff\1\55",
             "",
-            "\0\33",
-            "\0\60",
-            "\1\54\1\uffff\12\61\45\uffff\1\53",
+            "\0\34",
+            "\0\62",
+            "\1\56\1\uffff\12\63\45\uffff\1\55",
             "",
             "",
             "",
             "",
-            "\1\63",
-            "",
-            "\1\64",
             "\1\65",
             "",
+            "\1\66",
+            "\1\67",
             "",
             "",
             "",
@@ -1704,29 +1733,28 @@
             "",
             "",
             "",
-            "",
-            "\12\66\1\70\2\66\1\67\62\66\1\uffff\uffbf\66",
-            "",
-            "",
-            "",
-            "\1\54\1\uffff\10\72\2\57\45\uffff\1\53",
-            "",
-            "\1\54\1\uffff\12\57",
-            "",
-            "\1\54\1\uffff\12\61\45\uffff\1\53",
-            "",
-            "\1\73",
-            "\1\74",
-            "\1\75",
-            "\12\66\1\70\2\66\1\67\62\66\1\uffff\uffbf\66",
             "\1\70",
             "",
             "",
-            "\1\54\1\uffff\10\72\2\57\45\uffff\1\53",
+            "\12\71\1\73\2\71\1\72\62\71\1\uffff\uffbf\71",
+            "",
+            "",
+            "",
+            "\1\56\1\uffff\10\75\2\61\45\uffff\1\55",
+            "",
+            "\1\56\1\uffff\12\61",
+            "",
+            "\1\56\1\uffff\12\63\45\uffff\1\55",
+            "",
             "\1\76",
             "\1\77",
             "\1\100",
             "\1\101",
+            "\12\71\1\73\2\71\1\72\62\71\1\uffff\uffbf\71",
+            "\1\73",
+            "",
+            "",
+            "\1\56\1\uffff\10\75\2\61\45\uffff\1\55",
             "\1\102",
             "\1\103",
             "\1\104",
@@ -1735,14 +1763,27 @@
             "\1\107",
             "\1\110",
             "\1\111",
-            "\12\33\7\uffff\32\33\4\uffff\1\33\1\uffff\32\33",
+            "\1\112",
             "\1\113",
             "\1\114",
-            "",
             "\1\115",
-            "\12\33\7\uffff\32\33\4\uffff\1\33\1\uffff\32\33",
-            "\12\33\7\uffff\32\33\4\uffff\1\33\1\uffff\32\33",
+            "\1\116",
+            "\1\117",
+            "\1\120",
+            "\1\121",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\123",
+            "\1\124",
+            "\1\125",
             "",
+            "\1\126",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\130",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "\1\132",
+            "",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
             ""
     };
 
@@ -1776,37 +1817,51 @@
             this.transition = DFA29_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_VSL_COMMENT | RULE_DOUBLE | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_INT | RULE_INTEGER_VALUE | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA29_54 = input.LA(1);
+                        int LA29_57 = input.LA(1);
 
                         s = -1;
-                        if ( (LA29_54=='\r') ) {s = 55;}
+                        if ( (LA29_57=='\r') ) {s = 58;}
 
-                        else if ( (LA29_54=='\n') ) {s = 56;}
+                        else if ( (LA29_57=='\n') ) {s = 59;}
 
-                        else if ( ((LA29_54>='\u0000' && LA29_54<='\t')||(LA29_54>='\u000B' && LA29_54<='\f')||(LA29_54>='\u000E' && LA29_54<='?')||(LA29_54>='A' && LA29_54<='\uFFFF')) ) {s = 54;}
+                        else if ( ((LA29_57>='\u0000' && LA29_57<='\t')||(LA29_57>='\u000B' && LA29_57<='\f')||(LA29_57>='\u000E' && LA29_57<='?')||(LA29_57>='A' && LA29_57<='\uFFFF')) ) {s = 57;}
 
-                        else s = 57;
+                        else s = 60;
 
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA29_20 = input.LA(1);
+                        int LA29_21 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA29_20>='\u0000' && LA29_20<='\uFFFF')) ) {s = 48;}
+                        if ( ((LA29_21>='\u0000' && LA29_21<='\uFFFF')) ) {s = 50;}
 
-                        else s = 23;
+                        else s = 24;
 
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
+                        int LA29_43 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA29_43>='\u0000' && LA29_43<='\t')||(LA29_43>='\u000B' && LA29_43<='\f')||(LA29_43>='\u000E' && LA29_43<='?')||(LA29_43>='A' && LA29_43<='\uFFFF')) ) {s = 57;}
+
+                        else if ( (LA29_43=='\r') ) {s = 58;}
+
+                        else if ( (LA29_43=='\n') ) {s = 59;}
+
+                        else s = 60;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
                         int LA29_0 = input.LA(1);
 
                         s = -1;
@@ -1836,49 +1891,37 @@
 
                         else if ( (LA29_0==',') ) {s = 13;}
 
-                        else if ( (LA29_0=='.') ) {s = 14;}
+                        else if ( (LA29_0=='E') ) {s = 14;}
 
-                        else if ( (LA29_0=='*') ) {s = 15;}
+                        else if ( (LA29_0=='.') ) {s = 15;}
 
-                        else if ( (LA29_0=='/') ) {s = 16;}
+                        else if ( (LA29_0=='*') ) {s = 16;}
 
-                        else if ( (LA29_0=='0') ) {s = 17;}
+                        else if ( (LA29_0=='/') ) {s = 17;}
 
-                        else if ( ((LA29_0>='A' && LA29_0<='B')||(LA29_0>='E' && LA29_0<='Z')||LA29_0=='_'||(LA29_0>='b' && LA29_0<='z')) ) {s = 18;}
+                        else if ( (LA29_0=='0') ) {s = 18;}
 
-                        else if ( (LA29_0=='\'') ) {s = 19;}
+                        else if ( ((LA29_0>='A' && LA29_0<='B')||(LA29_0>='F' && LA29_0<='Z')||LA29_0=='_'||(LA29_0>='b' && LA29_0<='z')) ) {s = 19;}
 
-                        else if ( (LA29_0=='\"') ) {s = 20;}
+                        else if ( (LA29_0=='\'') ) {s = 20;}
 
-                        else if ( ((LA29_0>='1' && LA29_0<='9')) ) {s = 21;}
+                        else if ( (LA29_0=='\"') ) {s = 21;}
 
-                        else if ( ((LA29_0>='\t' && LA29_0<='\n')||LA29_0=='\r'||LA29_0==' ') ) {s = 22;}
+                        else if ( ((LA29_0>='1' && LA29_0<='9')) ) {s = 22;}
 
-                        else if ( ((LA29_0>='\u0000' && LA29_0<='\b')||(LA29_0>='\u000B' && LA29_0<='\f')||(LA29_0>='\u000E' && LA29_0<='\u001F')||LA29_0=='!'||(LA29_0>='#' && LA29_0<='&')||(LA29_0>='(' && LA29_0<=')')||LA29_0=='+'||(LA29_0>='>' && LA29_0<='@')||LA29_0=='\\'||LA29_0=='^'||LA29_0=='`'||LA29_0=='|'||(LA29_0>='~' && LA29_0<='\uFFFF')) ) {s = 23;}
+                        else if ( ((LA29_0>='\t' && LA29_0<='\n')||LA29_0=='\r'||LA29_0==' ') ) {s = 23;}
 
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA29_19 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA29_19>='\u0000' && LA29_19<='\uFFFF')) ) {s = 27;}
-
-                        else s = 23;
+                        else if ( ((LA29_0>='\u0000' && LA29_0<='\b')||(LA29_0>='\u000B' && LA29_0<='\f')||(LA29_0>='\u000E' && LA29_0<='\u001F')||LA29_0=='!'||(LA29_0>='#' && LA29_0<='&')||(LA29_0>='(' && LA29_0<=')')||LA29_0=='+'||(LA29_0>='>' && LA29_0<='@')||LA29_0=='\\'||LA29_0=='^'||LA29_0=='`'||LA29_0=='|'||(LA29_0>='~' && LA29_0<='\uFFFF')) ) {s = 24;}
 
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA29_41 = input.LA(1);
+                        int LA29_20 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA29_41>='\u0000' && LA29_41<='\t')||(LA29_41>='\u000B' && LA29_41<='\f')||(LA29_41>='\u000E' && LA29_41<='?')||(LA29_41>='A' && LA29_41<='\uFFFF')) ) {s = 54;}
+                        if ( ((LA29_20>='\u0000' && LA29_20<='\uFFFF')) ) {s = 28;}
 
-                        else if ( (LA29_41=='\r') ) {s = 55;}
-
-                        else if ( (LA29_41=='\n') ) {s = 56;}
-
-                        else s = 57;
+                        else s = 24;
 
                         if ( s>=0 ) return s;
                         break;
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLParser.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLParser.java
index a70c25a..d4ba9d0 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLParser.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/parser/antlr/internal/InternalDTMLParser.java
@@ -22,7 +22,7 @@
 @SuppressWarnings("all")
 public class InternalDTMLParser extends AbstractInternalAntlrParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_VSL_COMMENT", "RULE_INT", "RULE_DOUBLE", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_INTEGER_VALUE", "RULE_WS", "RULE_ANY_OTHER", "'{'", "'}'", "'DataType'", "'CommObject'", "'attribute'", "':'", "'<Undefined>'", "'='", "';'", "'['", "']'", "'-'", "','", "'::'", "'..'", "'*'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_VSL_COMMENT", "RULE_INT", "RULE_DOUBLE", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_INTEGER_VALUE", "RULE_WS", "RULE_ANY_OTHER", "'{'", "'}'", "'DataType'", "'CommObject'", "'attribute'", "':'", "'<Undefined>'", "'='", "';'", "'['", "']'", "'-'", "','", "'Enumeration'", "'::'", "'..'", "'*'"
     };
     public static final int RULE_STRING=8;
     public static final int RULE_SL_COMMENT=10;
@@ -34,6 +34,7 @@
     public static final int T__18=18;
     public static final int T__14=14;
     public static final int EOF=-1;
+    public static final int T__30=30;
     public static final int RULE_ID=4;
     public static final int RULE_WS=12;
     public static final int RULE_ANY_OTHER=13;
@@ -128,70 +129,100 @@
 
 
     // $ANTLR start "ruleModel"
-    // InternalDTML.g:72:1: ruleModel returns [EObject current=null] : (this_DTModel_0= ruleDTModel | this_Assignment_1= ruleAssignment ) ;
+    // InternalDTML.g:72:1: ruleModel returns [EObject current=null] : (this_XDataType_0= ruleXDataType | this_XAssignment_1= ruleXAssignment | this_XEnumeration_2= ruleXEnumeration ) ;
     public final EObject ruleModel() throws RecognitionException {
         EObject current = null;
 
-        EObject this_DTModel_0 = null;
+        EObject this_XDataType_0 = null;
 
-        EObject this_Assignment_1 = null;
+        EObject this_XAssignment_1 = null;
+
+        EObject this_XEnumeration_2 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalDTML.g:78:2: ( (this_DTModel_0= ruleDTModel | this_Assignment_1= ruleAssignment ) )
-            // InternalDTML.g:79:2: (this_DTModel_0= ruleDTModel | this_Assignment_1= ruleAssignment )
+            // InternalDTML.g:78:2: ( (this_XDataType_0= ruleXDataType | this_XAssignment_1= ruleXAssignment | this_XEnumeration_2= ruleXEnumeration ) )
+            // InternalDTML.g:79:2: (this_XDataType_0= ruleXDataType | this_XAssignment_1= ruleXAssignment | this_XEnumeration_2= ruleXEnumeration )
             {
-            // InternalDTML.g:79:2: (this_DTModel_0= ruleDTModel | this_Assignment_1= ruleAssignment )
-            int alt1=2;
-            int LA1_0 = input.LA(1);
-
-            if ( ((LA1_0>=16 && LA1_0<=17)) ) {
+            // InternalDTML.g:79:2: (this_XDataType_0= ruleXDataType | this_XAssignment_1= ruleXAssignment | this_XEnumeration_2= ruleXEnumeration )
+            int alt1=3;
+            switch ( input.LA(1) ) {
+            case 16:
+            case 17:
+                {
                 alt1=1;
-            }
-            else if ( (LA1_0==RULE_ID) ) {
+                }
+                break;
+            case RULE_ID:
+                {
                 alt1=2;
-            }
-            else {
+                }
+                break;
+            case 27:
+                {
+                alt1=3;
+                }
+                break;
+            default:
                 NoViableAltException nvae =
                     new NoViableAltException("", 1, 0, input);
 
                 throw nvae;
             }
+
             switch (alt1) {
                 case 1 :
-                    // InternalDTML.g:80:3: this_DTModel_0= ruleDTModel
+                    // InternalDTML.g:80:3: this_XDataType_0= ruleXDataType
                     {
 
-                    			newCompositeNode(grammarAccess.getModelAccess().getDTModelParserRuleCall_0());
+                    			newCompositeNode(grammarAccess.getModelAccess().getXDataTypeParserRuleCall_0());
                     		
                     pushFollow(FOLLOW_2);
-                    this_DTModel_0=ruleDTModel();
+                    this_XDataType_0=ruleXDataType();
 
                     state._fsp--;
 
 
-                    			current = this_DTModel_0;
+                    			current = this_XDataType_0;
                     			afterParserOrEnumRuleCall();
                     		
 
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:89:3: this_Assignment_1= ruleAssignment
+                    // InternalDTML.g:89:3: this_XAssignment_1= ruleXAssignment
                     {
 
-                    			newCompositeNode(grammarAccess.getModelAccess().getAssignmentParserRuleCall_1());
+                    			newCompositeNode(grammarAccess.getModelAccess().getXAssignmentParserRuleCall_1());
                     		
                     pushFollow(FOLLOW_2);
-                    this_Assignment_1=ruleAssignment();
+                    this_XAssignment_1=ruleXAssignment();
 
                     state._fsp--;
 
 
-                    			current = this_Assignment_1;
+                    			current = this_XAssignment_1;
+                    			afterParserOrEnumRuleCall();
+                    		
+
+                    }
+                    break;
+                case 3 :
+                    // InternalDTML.g:98:3: this_XEnumeration_2= ruleXEnumeration
+                    {
+
+                    			newCompositeNode(grammarAccess.getModelAccess().getXEnumerationParserRuleCall_2());
+                    		
+                    pushFollow(FOLLOW_2);
+                    this_XEnumeration_2=ruleXEnumeration();
+
+                    state._fsp--;
+
+
+                    			current = this_XEnumeration_2;
                     			afterParserOrEnumRuleCall();
                     		
 
@@ -219,25 +250,25 @@
     // $ANTLR end "ruleModel"
 
 
-    // $ANTLR start "entryRuleDTModel"
-    // InternalDTML.g:101:1: entryRuleDTModel returns [EObject current=null] : iv_ruleDTModel= ruleDTModel EOF ;
-    public final EObject entryRuleDTModel() throws RecognitionException {
+    // $ANTLR start "entryRuleXDataType"
+    // InternalDTML.g:110:1: entryRuleXDataType returns [EObject current=null] : iv_ruleXDataType= ruleXDataType EOF ;
+    public final EObject entryRuleXDataType() throws RecognitionException {
         EObject current = null;
 
-        EObject iv_ruleDTModel = null;
+        EObject iv_ruleXDataType = null;
 
 
         try {
-            // InternalDTML.g:101:48: (iv_ruleDTModel= ruleDTModel EOF )
-            // InternalDTML.g:102:2: iv_ruleDTModel= ruleDTModel EOF
+            // InternalDTML.g:110:50: (iv_ruleXDataType= ruleXDataType EOF )
+            // InternalDTML.g:111:2: iv_ruleXDataType= ruleXDataType EOF
             {
-             newCompositeNode(grammarAccess.getDTModelRule()); 
+             newCompositeNode(grammarAccess.getXDataTypeRule()); 
             pushFollow(FOLLOW_1);
-            iv_ruleDTModel=ruleDTModel();
+            iv_ruleXDataType=ruleXDataType();
 
             state._fsp--;
 
-             current =iv_ruleDTModel; 
+             current =iv_ruleXDataType; 
             match(input,EOF,FOLLOW_2); 
 
             }
@@ -252,12 +283,12 @@
         }
         return current;
     }
-    // $ANTLR end "entryRuleDTModel"
+    // $ANTLR end "entryRuleXDataType"
 
 
-    // $ANTLR start "ruleDTModel"
-    // InternalDTML.g:108:1: ruleDTModel returns [EObject current=null] : ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' ) ;
-    public final EObject ruleDTModel() throws RecognitionException {
+    // $ANTLR start "ruleXDataType"
+    // InternalDTML.g:117:1: ruleXDataType returns [EObject current=null] : ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' ) ;
+    public final EObject ruleXDataType() throws RecognitionException {
         EObject current = null;
 
         Token lv_name_1_0=null;
@@ -270,14 +301,14 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:114:2: ( ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' ) )
-            // InternalDTML.g:115:2: ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' )
+            // InternalDTML.g:123:2: ( ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' ) )
+            // InternalDTML.g:124:2: ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' )
             {
-            // InternalDTML.g:115:2: ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' )
-            // InternalDTML.g:116:3: ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}'
+            // InternalDTML.g:124:2: ( ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}' )
+            // InternalDTML.g:125:3: ruleDTKey ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_attributes_3_0= ruleProperty ) )* otherlv_4= '}'
             {
 
-            			newCompositeNode(grammarAccess.getDTModelAccess().getDTKeyParserRuleCall_0());
+            			newCompositeNode(grammarAccess.getXDataTypeAccess().getDTKeyParserRuleCall_0());
             		
             pushFollow(FOLLOW_3);
             ruleDTKey();
@@ -287,19 +318,19 @@
 
             			afterParserOrEnumRuleCall();
             		
-            // InternalDTML.g:123:3: ( (lv_name_1_0= RULE_ID ) )
-            // InternalDTML.g:124:4: (lv_name_1_0= RULE_ID )
+            // InternalDTML.g:132:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalDTML.g:133:4: (lv_name_1_0= RULE_ID )
             {
-            // InternalDTML.g:124:4: (lv_name_1_0= RULE_ID )
-            // InternalDTML.g:125:5: lv_name_1_0= RULE_ID
+            // InternalDTML.g:133:4: (lv_name_1_0= RULE_ID )
+            // InternalDTML.g:134:5: lv_name_1_0= RULE_ID
             {
             lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_4); 
 
-            					newLeafNode(lv_name_1_0, grammarAccess.getDTModelAccess().getNameIDTerminalRuleCall_1_0());
+            					newLeafNode(lv_name_1_0, grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_1_0());
             				
 
             					if (current==null) {
-            						current = createModelElement(grammarAccess.getDTModelRule());
+            						current = createModelElement(grammarAccess.getXDataTypeRule());
             					}
             					setWithLastConsumed(
             						current,
@@ -315,9 +346,9 @@
 
             otherlv_2=(Token)match(input,14,FOLLOW_5); 
 
-            			newLeafNode(otherlv_2, grammarAccess.getDTModelAccess().getLeftCurlyBracketKeyword_2());
+            			newLeafNode(otherlv_2, grammarAccess.getXDataTypeAccess().getLeftCurlyBracketKeyword_2());
             		
-            // InternalDTML.g:145:3: ( (lv_attributes_3_0= ruleProperty ) )*
+            // InternalDTML.g:154:3: ( (lv_attributes_3_0= ruleProperty ) )*
             loop2:
             do {
                 int alt2=2;
@@ -330,13 +361,13 @@
 
                 switch (alt2) {
             	case 1 :
-            	    // InternalDTML.g:146:4: (lv_attributes_3_0= ruleProperty )
+            	    // InternalDTML.g:155:4: (lv_attributes_3_0= ruleProperty )
             	    {
-            	    // InternalDTML.g:146:4: (lv_attributes_3_0= ruleProperty )
-            	    // InternalDTML.g:147:5: lv_attributes_3_0= ruleProperty
+            	    // InternalDTML.g:155:4: (lv_attributes_3_0= ruleProperty )
+            	    // InternalDTML.g:156:5: lv_attributes_3_0= ruleProperty
             	    {
 
-            	    					newCompositeNode(grammarAccess.getDTModelAccess().getAttributesPropertyParserRuleCall_3_0());
+            	    					newCompositeNode(grammarAccess.getXDataTypeAccess().getAttributesPropertyParserRuleCall_3_0());
             	    				
             	    pushFollow(FOLLOW_5);
             	    lv_attributes_3_0=ruleProperty();
@@ -345,7 +376,7 @@
 
 
             	    					if (current==null) {
-            	    						current = createModelElementForParent(grammarAccess.getDTModelRule());
+            	    						current = createModelElementForParent(grammarAccess.getXDataTypeRule());
             	    					}
             	    					add(
             	    						current,
@@ -368,7 +399,7 @@
 
             otherlv_4=(Token)match(input,15,FOLLOW_2); 
 
-            			newLeafNode(otherlv_4, grammarAccess.getDTModelAccess().getRightCurlyBracketKeyword_4());
+            			newLeafNode(otherlv_4, grammarAccess.getXDataTypeAccess().getRightCurlyBracketKeyword_4());
             		
 
             }
@@ -389,11 +420,11 @@
         }
         return current;
     }
-    // $ANTLR end "ruleDTModel"
+    // $ANTLR end "ruleXDataType"
 
 
     // $ANTLR start "entryRuleDTKey"
-    // InternalDTML.g:172:1: entryRuleDTKey returns [String current=null] : iv_ruleDTKey= ruleDTKey EOF ;
+    // InternalDTML.g:181:1: entryRuleDTKey returns [String current=null] : iv_ruleDTKey= ruleDTKey EOF ;
     public final String entryRuleDTKey() throws RecognitionException {
         String current = null;
 
@@ -401,8 +432,8 @@
 
 
         try {
-            // InternalDTML.g:172:45: (iv_ruleDTKey= ruleDTKey EOF )
-            // InternalDTML.g:173:2: iv_ruleDTKey= ruleDTKey EOF
+            // InternalDTML.g:181:45: (iv_ruleDTKey= ruleDTKey EOF )
+            // InternalDTML.g:182:2: iv_ruleDTKey= ruleDTKey EOF
             {
              newCompositeNode(grammarAccess.getDTKeyRule()); 
             pushFollow(FOLLOW_1);
@@ -429,7 +460,7 @@
 
 
     // $ANTLR start "ruleDTKey"
-    // InternalDTML.g:179:1: ruleDTKey returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'DataType' | kw= 'CommObject' ) ;
+    // InternalDTML.g:188:1: ruleDTKey returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'DataType' | kw= 'CommObject' ) ;
     public final AntlrDatatypeRuleToken ruleDTKey() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -439,10 +470,10 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:185:2: ( (kw= 'DataType' | kw= 'CommObject' ) )
-            // InternalDTML.g:186:2: (kw= 'DataType' | kw= 'CommObject' )
+            // InternalDTML.g:194:2: ( (kw= 'DataType' | kw= 'CommObject' ) )
+            // InternalDTML.g:195:2: (kw= 'DataType' | kw= 'CommObject' )
             {
-            // InternalDTML.g:186:2: (kw= 'DataType' | kw= 'CommObject' )
+            // InternalDTML.g:195:2: (kw= 'DataType' | kw= 'CommObject' )
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -460,7 +491,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // InternalDTML.g:187:3: kw= 'DataType'
+                    // InternalDTML.g:196:3: kw= 'DataType'
                     {
                     kw=(Token)match(input,16,FOLLOW_2); 
 
@@ -471,7 +502,7 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:193:3: kw= 'CommObject'
+                    // InternalDTML.g:202:3: kw= 'CommObject'
                     {
                     kw=(Token)match(input,17,FOLLOW_2); 
 
@@ -504,7 +535,7 @@
 
 
     // $ANTLR start "entryRuleProperty"
-    // InternalDTML.g:202:1: entryRuleProperty returns [EObject current=null] : iv_ruleProperty= ruleProperty EOF ;
+    // InternalDTML.g:211:1: entryRuleProperty returns [EObject current=null] : iv_ruleProperty= ruleProperty EOF ;
     public final EObject entryRuleProperty() throws RecognitionException {
         EObject current = null;
 
@@ -512,8 +543,8 @@
 
 
         try {
-            // InternalDTML.g:202:49: (iv_ruleProperty= ruleProperty EOF )
-            // InternalDTML.g:203:2: iv_ruleProperty= ruleProperty EOF
+            // InternalDTML.g:211:49: (iv_ruleProperty= ruleProperty EOF )
+            // InternalDTML.g:212:2: iv_ruleProperty= ruleProperty EOF
             {
              newCompositeNode(grammarAccess.getPropertyRule()); 
             pushFollow(FOLLOW_1);
@@ -540,7 +571,7 @@
 
 
     // $ANTLR start "ruleProperty"
-    // InternalDTML.g:209:1: ruleProperty returns [EObject current=null] : (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? ) ;
+    // InternalDTML.g:218:1: ruleProperty returns [EObject current=null] : (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? ) ;
     public final EObject ruleProperty() throws RecognitionException {
         EObject current = null;
 
@@ -561,21 +592,21 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:215:2: ( (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? ) )
-            // InternalDTML.g:216:2: (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? )
+            // InternalDTML.g:224:2: ( (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? ) )
+            // InternalDTML.g:225:2: (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? )
             {
-            // InternalDTML.g:216:2: (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? )
-            // InternalDTML.g:217:3: otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )?
+            // InternalDTML.g:225:2: (otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )? )
+            // InternalDTML.g:226:3: otherlv_0= 'attribute' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )? ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )? (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )? ( (lv_comment_8_0= RULE_VSL_COMMENT ) )?
             {
             otherlv_0=(Token)match(input,18,FOLLOW_3); 
 
             			newLeafNode(otherlv_0, grammarAccess.getPropertyAccess().getAttributeKeyword_0());
             		
-            // InternalDTML.g:221:3: ( (lv_name_1_0= RULE_ID ) )
-            // InternalDTML.g:222:4: (lv_name_1_0= RULE_ID )
+            // InternalDTML.g:230:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalDTML.g:231:4: (lv_name_1_0= RULE_ID )
             {
-            // InternalDTML.g:222:4: (lv_name_1_0= RULE_ID )
-            // InternalDTML.g:223:5: lv_name_1_0= RULE_ID
+            // InternalDTML.g:231:4: (lv_name_1_0= RULE_ID )
+            // InternalDTML.g:232:5: lv_name_1_0= RULE_ID
             {
             lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_6); 
 
@@ -597,7 +628,7 @@
 
             }
 
-            // InternalDTML.g:239:3: (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )?
+            // InternalDTML.g:248:3: (otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) ) )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -606,13 +637,13 @@
             }
             switch (alt5) {
                 case 1 :
-                    // InternalDTML.g:240:4: otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) )
+                    // InternalDTML.g:249:4: otherlv_2= ':' ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) )
                     {
                     otherlv_2=(Token)match(input,19,FOLLOW_7); 
 
                     				newLeafNode(otherlv_2, grammarAccess.getPropertyAccess().getColonKeyword_2_0());
                     			
-                    // InternalDTML.g:244:4: ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) )
+                    // InternalDTML.g:253:4: ( ( (lv_type_3_0= ruleTypeRule ) ) | ( (lv_typeUndefined_4_0= '<Undefined>' ) ) )
                     int alt4=2;
                     int LA4_0 = input.LA(1);
 
@@ -630,13 +661,13 @@
                     }
                     switch (alt4) {
                         case 1 :
-                            // InternalDTML.g:245:5: ( (lv_type_3_0= ruleTypeRule ) )
+                            // InternalDTML.g:254:5: ( (lv_type_3_0= ruleTypeRule ) )
                             {
-                            // InternalDTML.g:245:5: ( (lv_type_3_0= ruleTypeRule ) )
-                            // InternalDTML.g:246:6: (lv_type_3_0= ruleTypeRule )
+                            // InternalDTML.g:254:5: ( (lv_type_3_0= ruleTypeRule ) )
+                            // InternalDTML.g:255:6: (lv_type_3_0= ruleTypeRule )
                             {
-                            // InternalDTML.g:246:6: (lv_type_3_0= ruleTypeRule )
-                            // InternalDTML.g:247:7: lv_type_3_0= ruleTypeRule
+                            // InternalDTML.g:255:6: (lv_type_3_0= ruleTypeRule )
+                            // InternalDTML.g:256:7: lv_type_3_0= ruleTypeRule
                             {
 
                             							newCompositeNode(grammarAccess.getPropertyAccess().getTypeTypeRuleParserRuleCall_2_1_0_0());
@@ -667,13 +698,13 @@
                             }
                             break;
                         case 2 :
-                            // InternalDTML.g:265:5: ( (lv_typeUndefined_4_0= '<Undefined>' ) )
+                            // InternalDTML.g:274:5: ( (lv_typeUndefined_4_0= '<Undefined>' ) )
                             {
-                            // InternalDTML.g:265:5: ( (lv_typeUndefined_4_0= '<Undefined>' ) )
-                            // InternalDTML.g:266:6: (lv_typeUndefined_4_0= '<Undefined>' )
+                            // InternalDTML.g:274:5: ( (lv_typeUndefined_4_0= '<Undefined>' ) )
+                            // InternalDTML.g:275:6: (lv_typeUndefined_4_0= '<Undefined>' )
                             {
-                            // InternalDTML.g:266:6: (lv_typeUndefined_4_0= '<Undefined>' )
-                            // InternalDTML.g:267:7: lv_typeUndefined_4_0= '<Undefined>'
+                            // InternalDTML.g:275:6: (lv_typeUndefined_4_0= '<Undefined>' )
+                            // InternalDTML.g:276:7: lv_typeUndefined_4_0= '<Undefined>'
                             {
                             lv_typeUndefined_4_0=(Token)match(input,20,FOLLOW_8); 
 
@@ -703,7 +734,7 @@
 
             }
 
-            // InternalDTML.g:281:3: ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )?
+            // InternalDTML.g:290:3: ( (lv_multiplicity_5_0= ruleMultiplicityRule ) )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -712,10 +743,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // InternalDTML.g:282:4: (lv_multiplicity_5_0= ruleMultiplicityRule )
+                    // InternalDTML.g:291:4: (lv_multiplicity_5_0= ruleMultiplicityRule )
                     {
-                    // InternalDTML.g:282:4: (lv_multiplicity_5_0= ruleMultiplicityRule )
-                    // InternalDTML.g:283:5: lv_multiplicity_5_0= ruleMultiplicityRule
+                    // InternalDTML.g:291:4: (lv_multiplicity_5_0= ruleMultiplicityRule )
+                    // InternalDTML.g:292:5: lv_multiplicity_5_0= ruleMultiplicityRule
                     {
 
                     					newCompositeNode(grammarAccess.getPropertyAccess().getMultiplicityMultiplicityRuleParserRuleCall_3_0());
@@ -745,7 +776,7 @@
 
             }
 
-            // InternalDTML.g:300:3: (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )?
+            // InternalDTML.g:309:3: (otherlv_6= '=' ( (lv_value_7_0= ruleValue ) ) )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -754,17 +785,17 @@
             }
             switch (alt7) {
                 case 1 :
-                    // InternalDTML.g:301:4: otherlv_6= '=' ( (lv_value_7_0= ruleValue ) )
+                    // InternalDTML.g:310:4: otherlv_6= '=' ( (lv_value_7_0= ruleValue ) )
                     {
                     otherlv_6=(Token)match(input,21,FOLLOW_10); 
 
                     				newLeafNode(otherlv_6, grammarAccess.getPropertyAccess().getEqualsSignKeyword_4_0());
                     			
-                    // InternalDTML.g:305:4: ( (lv_value_7_0= ruleValue ) )
-                    // InternalDTML.g:306:5: (lv_value_7_0= ruleValue )
+                    // InternalDTML.g:314:4: ( (lv_value_7_0= ruleValue ) )
+                    // InternalDTML.g:315:5: (lv_value_7_0= ruleValue )
                     {
-                    // InternalDTML.g:306:5: (lv_value_7_0= ruleValue )
-                    // InternalDTML.g:307:6: lv_value_7_0= ruleValue
+                    // InternalDTML.g:315:5: (lv_value_7_0= ruleValue )
+                    // InternalDTML.g:316:6: lv_value_7_0= ruleValue
                     {
 
                     						newCompositeNode(grammarAccess.getPropertyAccess().getValueValueParserRuleCall_4_1_0());
@@ -797,7 +828,7 @@
 
             }
 
-            // InternalDTML.g:325:3: ( (lv_comment_8_0= RULE_VSL_COMMENT ) )?
+            // InternalDTML.g:334:3: ( (lv_comment_8_0= RULE_VSL_COMMENT ) )?
             int alt8=2;
             int LA8_0 = input.LA(1);
 
@@ -806,10 +837,10 @@
             }
             switch (alt8) {
                 case 1 :
-                    // InternalDTML.g:326:4: (lv_comment_8_0= RULE_VSL_COMMENT )
+                    // InternalDTML.g:335:4: (lv_comment_8_0= RULE_VSL_COMMENT )
                     {
-                    // InternalDTML.g:326:4: (lv_comment_8_0= RULE_VSL_COMMENT )
-                    // InternalDTML.g:327:5: lv_comment_8_0= RULE_VSL_COMMENT
+                    // InternalDTML.g:335:4: (lv_comment_8_0= RULE_VSL_COMMENT )
+                    // InternalDTML.g:336:5: lv_comment_8_0= RULE_VSL_COMMENT
                     {
                     lv_comment_8_0=(Token)match(input,RULE_VSL_COMMENT,FOLLOW_2); 
 
@@ -856,25 +887,25 @@
     // $ANTLR end "ruleProperty"
 
 
-    // $ANTLR start "entryRuleAssignment"
-    // InternalDTML.g:347:1: entryRuleAssignment returns [EObject current=null] : iv_ruleAssignment= ruleAssignment EOF ;
-    public final EObject entryRuleAssignment() throws RecognitionException {
+    // $ANTLR start "entryRuleXAssignment"
+    // InternalDTML.g:356:1: entryRuleXAssignment returns [EObject current=null] : iv_ruleXAssignment= ruleXAssignment EOF ;
+    public final EObject entryRuleXAssignment() throws RecognitionException {
         EObject current = null;
 
-        EObject iv_ruleAssignment = null;
+        EObject iv_ruleXAssignment = null;
 
 
         try {
-            // InternalDTML.g:347:51: (iv_ruleAssignment= ruleAssignment EOF )
-            // InternalDTML.g:348:2: iv_ruleAssignment= ruleAssignment EOF
+            // InternalDTML.g:356:52: (iv_ruleXAssignment= ruleXAssignment EOF )
+            // InternalDTML.g:357:2: iv_ruleXAssignment= ruleXAssignment EOF
             {
-             newCompositeNode(grammarAccess.getAssignmentRule()); 
+             newCompositeNode(grammarAccess.getXAssignmentRule()); 
             pushFollow(FOLLOW_1);
-            iv_ruleAssignment=ruleAssignment();
+            iv_ruleXAssignment=ruleXAssignment();
 
             state._fsp--;
 
-             current =iv_ruleAssignment; 
+             current =iv_ruleXAssignment; 
             match(input,EOF,FOLLOW_2); 
 
             }
@@ -889,12 +920,12 @@
         }
         return current;
     }
-    // $ANTLR end "entryRuleAssignment"
+    // $ANTLR end "entryRuleXAssignment"
 
 
-    // $ANTLR start "ruleAssignment"
-    // InternalDTML.g:354:1: ruleAssignment returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' ) ;
-    public final EObject ruleAssignment() throws RecognitionException {
+    // $ANTLR start "ruleXAssignment"
+    // InternalDTML.g:363:1: ruleXAssignment returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' ) ;
+    public final EObject ruleXAssignment() throws RecognitionException {
         EObject current = null;
 
         Token lv_name_0_0=null;
@@ -907,25 +938,25 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:360:2: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' ) )
-            // InternalDTML.g:361:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' )
+            // InternalDTML.g:369:2: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' ) )
+            // InternalDTML.g:370:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' )
             {
-            // InternalDTML.g:361:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' )
-            // InternalDTML.g:362:3: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';'
+            // InternalDTML.g:370:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';' )
+            // InternalDTML.g:371:3: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleExpressionString ) ) otherlv_3= ';'
             {
-            // InternalDTML.g:362:3: ( (lv_name_0_0= RULE_ID ) )
-            // InternalDTML.g:363:4: (lv_name_0_0= RULE_ID )
+            // InternalDTML.g:371:3: ( (lv_name_0_0= RULE_ID ) )
+            // InternalDTML.g:372:4: (lv_name_0_0= RULE_ID )
             {
-            // InternalDTML.g:363:4: (lv_name_0_0= RULE_ID )
-            // InternalDTML.g:364:5: lv_name_0_0= RULE_ID
+            // InternalDTML.g:372:4: (lv_name_0_0= RULE_ID )
+            // InternalDTML.g:373:5: lv_name_0_0= RULE_ID
             {
             lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_12); 
 
-            					newLeafNode(lv_name_0_0, grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0());
+            					newLeafNode(lv_name_0_0, grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0());
             				
 
             					if (current==null) {
-            						current = createModelElement(grammarAccess.getAssignmentRule());
+            						current = createModelElement(grammarAccess.getXAssignmentRule());
             					}
             					setWithLastConsumed(
             						current,
@@ -941,16 +972,16 @@
 
             otherlv_1=(Token)match(input,21,FOLLOW_13); 
 
-            			newLeafNode(otherlv_1, grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1());
+            			newLeafNode(otherlv_1, grammarAccess.getXAssignmentAccess().getEqualsSignKeyword_1());
             		
-            // InternalDTML.g:384:3: ( (lv_expression_2_0= ruleExpressionString ) )
-            // InternalDTML.g:385:4: (lv_expression_2_0= ruleExpressionString )
+            // InternalDTML.g:393:3: ( (lv_expression_2_0= ruleExpressionString ) )
+            // InternalDTML.g:394:4: (lv_expression_2_0= ruleExpressionString )
             {
-            // InternalDTML.g:385:4: (lv_expression_2_0= ruleExpressionString )
-            // InternalDTML.g:386:5: lv_expression_2_0= ruleExpressionString
+            // InternalDTML.g:394:4: (lv_expression_2_0= ruleExpressionString )
+            // InternalDTML.g:395:5: lv_expression_2_0= ruleExpressionString
             {
 
-            					newCompositeNode(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0());
+            					newCompositeNode(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0());
             				
             pushFollow(FOLLOW_14);
             lv_expression_2_0=ruleExpressionString();
@@ -959,7 +990,7 @@
 
 
             					if (current==null) {
-            						current = createModelElementForParent(grammarAccess.getAssignmentRule());
+            						current = createModelElementForParent(grammarAccess.getXAssignmentRule());
             					}
             					set(
             						current,
@@ -976,7 +1007,7 @@
 
             otherlv_3=(Token)match(input,22,FOLLOW_2); 
 
-            			newLeafNode(otherlv_3, grammarAccess.getAssignmentAccess().getSemicolonKeyword_3());
+            			newLeafNode(otherlv_3, grammarAccess.getXAssignmentAccess().getSemicolonKeyword_3());
             		
 
             }
@@ -997,11 +1028,11 @@
         }
         return current;
     }
-    // $ANTLR end "ruleAssignment"
+    // $ANTLR end "ruleXAssignment"
 
 
     // $ANTLR start "entryRuleExpressionString"
-    // InternalDTML.g:411:1: entryRuleExpressionString returns [String current=null] : iv_ruleExpressionString= ruleExpressionString EOF ;
+    // InternalDTML.g:420:1: entryRuleExpressionString returns [String current=null] : iv_ruleExpressionString= ruleExpressionString EOF ;
     public final String entryRuleExpressionString() throws RecognitionException {
         String current = null;
 
@@ -1009,8 +1040,8 @@
 
 
         try {
-            // InternalDTML.g:411:56: (iv_ruleExpressionString= ruleExpressionString EOF )
-            // InternalDTML.g:412:2: iv_ruleExpressionString= ruleExpressionString EOF
+            // InternalDTML.g:420:56: (iv_ruleExpressionString= ruleExpressionString EOF )
+            // InternalDTML.g:421:2: iv_ruleExpressionString= ruleExpressionString EOF
             {
              newCompositeNode(grammarAccess.getExpressionStringRule()); 
             pushFollow(FOLLOW_1);
@@ -1037,7 +1068,7 @@
 
 
     // $ANTLR start "ruleExpressionString"
-    // InternalDTML.g:418:1: ruleExpressionString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )* ;
+    // InternalDTML.g:427:1: ruleExpressionString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )* ;
     public final AntlrDatatypeRuleToken ruleExpressionString() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -1050,10 +1081,10 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:424:2: ( (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )* )
-            // InternalDTML.g:425:2: (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )*
+            // InternalDTML.g:433:2: ( (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )* )
+            // InternalDTML.g:434:2: (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )*
             {
-            // InternalDTML.g:425:2: (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )*
+            // InternalDTML.g:434:2: (this_ID_0= RULE_ID | kw= '[' | kw= ']' | kw= '-' | kw= ',' | this_INT_5= RULE_INT | this_DOUBLE_6= RULE_DOUBLE )*
             loop9:
             do {
                 int alt9=8;
@@ -1098,7 +1129,7 @@
 
                 switch (alt9) {
             	case 1 :
-            	    // InternalDTML.g:426:3: this_ID_0= RULE_ID
+            	    // InternalDTML.g:435:3: this_ID_0= RULE_ID
             	    {
             	    this_ID_0=(Token)match(input,RULE_ID,FOLLOW_15); 
 
@@ -1111,7 +1142,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // InternalDTML.g:434:3: kw= '['
+            	    // InternalDTML.g:443:3: kw= '['
             	    {
             	    kw=(Token)match(input,23,FOLLOW_15); 
 
@@ -1122,7 +1153,7 @@
             	    }
             	    break;
             	case 3 :
-            	    // InternalDTML.g:440:3: kw= ']'
+            	    // InternalDTML.g:449:3: kw= ']'
             	    {
             	    kw=(Token)match(input,24,FOLLOW_15); 
 
@@ -1133,7 +1164,7 @@
             	    }
             	    break;
             	case 4 :
-            	    // InternalDTML.g:446:3: kw= '-'
+            	    // InternalDTML.g:455:3: kw= '-'
             	    {
             	    kw=(Token)match(input,25,FOLLOW_15); 
 
@@ -1144,7 +1175,7 @@
             	    }
             	    break;
             	case 5 :
-            	    // InternalDTML.g:452:3: kw= ','
+            	    // InternalDTML.g:461:3: kw= ','
             	    {
             	    kw=(Token)match(input,26,FOLLOW_15); 
 
@@ -1155,7 +1186,7 @@
             	    }
             	    break;
             	case 6 :
-            	    // InternalDTML.g:458:3: this_INT_5= RULE_INT
+            	    // InternalDTML.g:467:3: this_INT_5= RULE_INT
             	    {
             	    this_INT_5=(Token)match(input,RULE_INT,FOLLOW_15); 
 
@@ -1168,7 +1199,7 @@
             	    }
             	    break;
             	case 7 :
-            	    // InternalDTML.g:466:3: this_DOUBLE_6= RULE_DOUBLE
+            	    // InternalDTML.g:475:3: this_DOUBLE_6= RULE_DOUBLE
             	    {
             	    this_DOUBLE_6=(Token)match(input,RULE_DOUBLE,FOLLOW_15); 
 
@@ -1206,7 +1237,7 @@
 
 
     // $ANTLR start "entryRuleValue"
-    // InternalDTML.g:477:1: entryRuleValue returns [EObject current=null] : iv_ruleValue= ruleValue EOF ;
+    // InternalDTML.g:486:1: entryRuleValue returns [EObject current=null] : iv_ruleValue= ruleValue EOF ;
     public final EObject entryRuleValue() throws RecognitionException {
         EObject current = null;
 
@@ -1214,8 +1245,8 @@
 
 
         try {
-            // InternalDTML.g:477:46: (iv_ruleValue= ruleValue EOF )
-            // InternalDTML.g:478:2: iv_ruleValue= ruleValue EOF
+            // InternalDTML.g:486:46: (iv_ruleValue= ruleValue EOF )
+            // InternalDTML.g:487:2: iv_ruleValue= ruleValue EOF
             {
              newCompositeNode(grammarAccess.getValueRule()); 
             pushFollow(FOLLOW_1);
@@ -1242,7 +1273,7 @@
 
 
     // $ANTLR start "ruleValue"
-    // InternalDTML.g:484:1: ruleValue returns [EObject current=null] : ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) ) ;
+    // InternalDTML.g:493:1: ruleValue returns [EObject current=null] : ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) ) ;
     public final EObject ruleValue() throws RecognitionException {
         EObject current = null;
 
@@ -1254,10 +1285,10 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:490:2: ( ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) ) )
-            // InternalDTML.g:491:2: ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) )
+            // InternalDTML.g:499:2: ( ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) ) )
+            // InternalDTML.g:500:2: ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) )
             {
-            // InternalDTML.g:491:2: ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) )
+            // InternalDTML.g:500:2: ( ( (lv_str_0_0= RULE_STRING ) ) | ( (lv_ival_1_0= RULE_INT ) ) | ( (lv_dval_2_0= RULE_DOUBLE ) ) )
             int alt10=3;
             switch ( input.LA(1) ) {
             case RULE_STRING:
@@ -1284,13 +1315,13 @@
 
             switch (alt10) {
                 case 1 :
-                    // InternalDTML.g:492:3: ( (lv_str_0_0= RULE_STRING ) )
+                    // InternalDTML.g:501:3: ( (lv_str_0_0= RULE_STRING ) )
                     {
-                    // InternalDTML.g:492:3: ( (lv_str_0_0= RULE_STRING ) )
-                    // InternalDTML.g:493:4: (lv_str_0_0= RULE_STRING )
+                    // InternalDTML.g:501:3: ( (lv_str_0_0= RULE_STRING ) )
+                    // InternalDTML.g:502:4: (lv_str_0_0= RULE_STRING )
                     {
-                    // InternalDTML.g:493:4: (lv_str_0_0= RULE_STRING )
-                    // InternalDTML.g:494:5: lv_str_0_0= RULE_STRING
+                    // InternalDTML.g:502:4: (lv_str_0_0= RULE_STRING )
+                    // InternalDTML.g:503:5: lv_str_0_0= RULE_STRING
                     {
                     lv_str_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -1316,13 +1347,13 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:511:3: ( (lv_ival_1_0= RULE_INT ) )
+                    // InternalDTML.g:520:3: ( (lv_ival_1_0= RULE_INT ) )
                     {
-                    // InternalDTML.g:511:3: ( (lv_ival_1_0= RULE_INT ) )
-                    // InternalDTML.g:512:4: (lv_ival_1_0= RULE_INT )
+                    // InternalDTML.g:520:3: ( (lv_ival_1_0= RULE_INT ) )
+                    // InternalDTML.g:521:4: (lv_ival_1_0= RULE_INT )
                     {
-                    // InternalDTML.g:512:4: (lv_ival_1_0= RULE_INT )
-                    // InternalDTML.g:513:5: lv_ival_1_0= RULE_INT
+                    // InternalDTML.g:521:4: (lv_ival_1_0= RULE_INT )
+                    // InternalDTML.g:522:5: lv_ival_1_0= RULE_INT
                     {
                     lv_ival_1_0=(Token)match(input,RULE_INT,FOLLOW_2); 
 
@@ -1348,13 +1379,13 @@
                     }
                     break;
                 case 3 :
-                    // InternalDTML.g:530:3: ( (lv_dval_2_0= RULE_DOUBLE ) )
+                    // InternalDTML.g:539:3: ( (lv_dval_2_0= RULE_DOUBLE ) )
                     {
-                    // InternalDTML.g:530:3: ( (lv_dval_2_0= RULE_DOUBLE ) )
-                    // InternalDTML.g:531:4: (lv_dval_2_0= RULE_DOUBLE )
+                    // InternalDTML.g:539:3: ( (lv_dval_2_0= RULE_DOUBLE ) )
+                    // InternalDTML.g:540:4: (lv_dval_2_0= RULE_DOUBLE )
                     {
-                    // InternalDTML.g:531:4: (lv_dval_2_0= RULE_DOUBLE )
-                    // InternalDTML.g:532:5: lv_dval_2_0= RULE_DOUBLE
+                    // InternalDTML.g:540:4: (lv_dval_2_0= RULE_DOUBLE )
+                    // InternalDTML.g:541:5: lv_dval_2_0= RULE_DOUBLE
                     {
                     lv_dval_2_0=(Token)match(input,RULE_DOUBLE,FOLLOW_2); 
 
@@ -1401,8 +1432,369 @@
     // $ANTLR end "ruleValue"
 
 
+    // $ANTLR start "entryRuleXEnumeration"
+    // InternalDTML.g:561:1: entryRuleXEnumeration returns [EObject current=null] : iv_ruleXEnumeration= ruleXEnumeration EOF ;
+    public final EObject entryRuleXEnumeration() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleXEnumeration = null;
+
+
+        try {
+            // InternalDTML.g:561:53: (iv_ruleXEnumeration= ruleXEnumeration EOF )
+            // InternalDTML.g:562:2: iv_ruleXEnumeration= ruleXEnumeration EOF
+            {
+             newCompositeNode(grammarAccess.getXEnumerationRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleXEnumeration=ruleXEnumeration();
+
+            state._fsp--;
+
+             current =iv_ruleXEnumeration; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleXEnumeration"
+
+
+    // $ANTLR start "ruleXEnumeration"
+    // InternalDTML.g:568:1: ruleXEnumeration returns [EObject current=null] : (otherlv_0= 'Enumeration' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_literals_3_0= ruleXEnumLiteral ) )* otherlv_4= '}' ) ;
+    public final EObject ruleXEnumeration() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_name_1_0=null;
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        EObject lv_literals_3_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalDTML.g:574:2: ( (otherlv_0= 'Enumeration' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_literals_3_0= ruleXEnumLiteral ) )* otherlv_4= '}' ) )
+            // InternalDTML.g:575:2: (otherlv_0= 'Enumeration' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_literals_3_0= ruleXEnumLiteral ) )* otherlv_4= '}' )
+            {
+            // InternalDTML.g:575:2: (otherlv_0= 'Enumeration' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_literals_3_0= ruleXEnumLiteral ) )* otherlv_4= '}' )
+            // InternalDTML.g:576:3: otherlv_0= 'Enumeration' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_literals_3_0= ruleXEnumLiteral ) )* otherlv_4= '}'
+            {
+            otherlv_0=(Token)match(input,27,FOLLOW_3); 
+
+            			newLeafNode(otherlv_0, grammarAccess.getXEnumerationAccess().getEnumerationKeyword_0());
+            		
+            // InternalDTML.g:580:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalDTML.g:581:4: (lv_name_1_0= RULE_ID )
+            {
+            // InternalDTML.g:581:4: (lv_name_1_0= RULE_ID )
+            // InternalDTML.g:582:5: lv_name_1_0= RULE_ID
+            {
+            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_4); 
+
+            					newLeafNode(lv_name_1_0, grammarAccess.getXEnumerationAccess().getNameIDTerminalRuleCall_1_0());
+            				
+
+            					if (current==null) {
+            						current = createModelElement(grammarAccess.getXEnumerationRule());
+            					}
+            					setWithLastConsumed(
+            						current,
+            						"name",
+            						lv_name_1_0,
+            						"org.eclipse.papyrus.uml.alf.Common.ID");
+            				
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,14,FOLLOW_16); 
+
+            			newLeafNode(otherlv_2, grammarAccess.getXEnumerationAccess().getLeftCurlyBracketKeyword_2());
+            		
+            // InternalDTML.g:602:3: ( (lv_literals_3_0= ruleXEnumLiteral ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==RULE_ID) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // InternalDTML.g:603:4: (lv_literals_3_0= ruleXEnumLiteral )
+            	    {
+            	    // InternalDTML.g:603:4: (lv_literals_3_0= ruleXEnumLiteral )
+            	    // InternalDTML.g:604:5: lv_literals_3_0= ruleXEnumLiteral
+            	    {
+
+            	    					newCompositeNode(grammarAccess.getXEnumerationAccess().getLiteralsXEnumLiteralParserRuleCall_3_0());
+            	    				
+            	    pushFollow(FOLLOW_16);
+            	    lv_literals_3_0=ruleXEnumLiteral();
+
+            	    state._fsp--;
+
+
+            	    					if (current==null) {
+            	    						current = createModelElementForParent(grammarAccess.getXEnumerationRule());
+            	    					}
+            	    					add(
+            	    						current,
+            	    						"literals",
+            	    						lv_literals_3_0,
+            	    						"org.eclipse.papyrus.robotics.xtext.datatypes.DTML.XEnumLiteral");
+            	    					afterParserOrEnumRuleCall();
+            	    				
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+            otherlv_4=(Token)match(input,15,FOLLOW_2); 
+
+            			newLeafNode(otherlv_4, grammarAccess.getXEnumerationAccess().getRightCurlyBracketKeyword_4());
+            		
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleXEnumeration"
+
+
+    // $ANTLR start "entryRuleXEnumLiteral"
+    // InternalDTML.g:629:1: entryRuleXEnumLiteral returns [EObject current=null] : iv_ruleXEnumLiteral= ruleXEnumLiteral EOF ;
+    public final EObject entryRuleXEnumLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleXEnumLiteral = null;
+
+
+        try {
+            // InternalDTML.g:629:53: (iv_ruleXEnumLiteral= ruleXEnumLiteral EOF )
+            // InternalDTML.g:630:2: iv_ruleXEnumLiteral= ruleXEnumLiteral EOF
+            {
+             newCompositeNode(grammarAccess.getXEnumLiteralRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleXEnumLiteral=ruleXEnumLiteral();
+
+            state._fsp--;
+
+             current =iv_ruleXEnumLiteral; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleXEnumLiteral"
+
+
+    // $ANTLR start "ruleXEnumLiteral"
+    // InternalDTML.g:636:1: ruleXEnumLiteral returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= ruleValue ) ) )? ( (lv_comment_3_0= RULE_VSL_COMMENT ) )? ) ;
+    public final EObject ruleXEnumLiteral() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_0_0=null;
+        Token otherlv_1=null;
+        Token lv_comment_3_0=null;
+        EObject lv_value_2_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalDTML.g:642:2: ( ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= ruleValue ) ) )? ( (lv_comment_3_0= RULE_VSL_COMMENT ) )? ) )
+            // InternalDTML.g:643:2: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= ruleValue ) ) )? ( (lv_comment_3_0= RULE_VSL_COMMENT ) )? )
+            {
+            // InternalDTML.g:643:2: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= ruleValue ) ) )? ( (lv_comment_3_0= RULE_VSL_COMMENT ) )? )
+            // InternalDTML.g:644:3: ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= ruleValue ) ) )? ( (lv_comment_3_0= RULE_VSL_COMMENT ) )?
+            {
+            // InternalDTML.g:644:3: ( (lv_name_0_0= RULE_ID ) )
+            // InternalDTML.g:645:4: (lv_name_0_0= RULE_ID )
+            {
+            // InternalDTML.g:645:4: (lv_name_0_0= RULE_ID )
+            // InternalDTML.g:646:5: lv_name_0_0= RULE_ID
+            {
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_9); 
+
+            					newLeafNode(lv_name_0_0, grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_0_0());
+            				
+
+            					if (current==null) {
+            						current = createModelElement(grammarAccess.getXEnumLiteralRule());
+            					}
+            					setWithLastConsumed(
+            						current,
+            						"name",
+            						lv_name_0_0,
+            						"org.eclipse.papyrus.uml.alf.Common.ID");
+            				
+
+            }
+
+
+            }
+
+            // InternalDTML.g:662:3: (otherlv_1= '=' ( (lv_value_2_0= ruleValue ) ) )?
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==21) ) {
+                alt12=1;
+            }
+            switch (alt12) {
+                case 1 :
+                    // InternalDTML.g:663:4: otherlv_1= '=' ( (lv_value_2_0= ruleValue ) )
+                    {
+                    otherlv_1=(Token)match(input,21,FOLLOW_10); 
+
+                    				newLeafNode(otherlv_1, grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_1_0());
+                    			
+                    // InternalDTML.g:667:4: ( (lv_value_2_0= ruleValue ) )
+                    // InternalDTML.g:668:5: (lv_value_2_0= ruleValue )
+                    {
+                    // InternalDTML.g:668:5: (lv_value_2_0= ruleValue )
+                    // InternalDTML.g:669:6: lv_value_2_0= ruleValue
+                    {
+
+                    						newCompositeNode(grammarAccess.getXEnumLiteralAccess().getValueValueParserRuleCall_1_1_0());
+                    					
+                    pushFollow(FOLLOW_11);
+                    lv_value_2_0=ruleValue();
+
+                    state._fsp--;
+
+
+                    						if (current==null) {
+                    							current = createModelElementForParent(grammarAccess.getXEnumLiteralRule());
+                    						}
+                    						set(
+                    							current,
+                    							"value",
+                    							lv_value_2_0,
+                    							"org.eclipse.papyrus.robotics.xtext.datatypes.DTML.Value");
+                    						afterParserOrEnumRuleCall();
+                    					
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // InternalDTML.g:687:3: ( (lv_comment_3_0= RULE_VSL_COMMENT ) )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==RULE_VSL_COMMENT) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // InternalDTML.g:688:4: (lv_comment_3_0= RULE_VSL_COMMENT )
+                    {
+                    // InternalDTML.g:688:4: (lv_comment_3_0= RULE_VSL_COMMENT )
+                    // InternalDTML.g:689:5: lv_comment_3_0= RULE_VSL_COMMENT
+                    {
+                    lv_comment_3_0=(Token)match(input,RULE_VSL_COMMENT,FOLLOW_2); 
+
+                    					newLeafNode(lv_comment_3_0, grammarAccess.getXEnumLiteralAccess().getCommentVSL_COMMENTTerminalRuleCall_2_0());
+                    				
+
+                    					if (current==null) {
+                    						current = createModelElement(grammarAccess.getXEnumLiteralRule());
+                    					}
+                    					setWithLastConsumed(
+                    						current,
+                    						"comment",
+                    						lv_comment_3_0,
+                    						"org.eclipse.papyrus.robotics.xtext.datatypes.DTML.VSL_COMMENT");
+                    				
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleXEnumLiteral"
+
+
     // $ANTLR start "entryRuleQualifiedName"
-    // InternalDTML.g:552:1: entryRuleQualifiedName returns [EObject current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
+    // InternalDTML.g:709:1: entryRuleQualifiedName returns [EObject current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
     public final EObject entryRuleQualifiedName() throws RecognitionException {
         EObject current = null;
 
@@ -1410,8 +1802,8 @@
 
 
         try {
-            // InternalDTML.g:552:54: (iv_ruleQualifiedName= ruleQualifiedName EOF )
-            // InternalDTML.g:553:2: iv_ruleQualifiedName= ruleQualifiedName EOF
+            // InternalDTML.g:709:54: (iv_ruleQualifiedName= ruleQualifiedName EOF )
+            // InternalDTML.g:710:2: iv_ruleQualifiedName= ruleQualifiedName EOF
             {
              newCompositeNode(grammarAccess.getQualifiedNameRule()); 
             pushFollow(FOLLOW_1);
@@ -1438,7 +1830,7 @@
 
 
     // $ANTLR start "ruleQualifiedName"
-    // InternalDTML.g:559:1: ruleQualifiedName returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? ) ;
+    // InternalDTML.g:716:1: ruleQualifiedName returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? ) ;
     public final EObject ruleQualifiedName() throws RecognitionException {
         EObject current = null;
 
@@ -1451,24 +1843,24 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:565:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? ) )
-            // InternalDTML.g:566:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? )
+            // InternalDTML.g:722:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? ) )
+            // InternalDTML.g:723:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? )
             {
-            // InternalDTML.g:566:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? )
-            // InternalDTML.g:567:3: ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )?
+            // InternalDTML.g:723:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )? )
+            // InternalDTML.g:724:3: ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' ( (lv_remaining_2_0= ruleQualifiedName ) )?
             {
-            // InternalDTML.g:567:3: ( (otherlv_0= RULE_ID ) )
-            // InternalDTML.g:568:4: (otherlv_0= RULE_ID )
+            // InternalDTML.g:724:3: ( (otherlv_0= RULE_ID ) )
+            // InternalDTML.g:725:4: (otherlv_0= RULE_ID )
             {
-            // InternalDTML.g:568:4: (otherlv_0= RULE_ID )
-            // InternalDTML.g:569:5: otherlv_0= RULE_ID
+            // InternalDTML.g:725:4: (otherlv_0= RULE_ID )
+            // InternalDTML.g:726:5: otherlv_0= RULE_ID
             {
 
             					if (current==null) {
             						current = createModelElement(grammarAccess.getQualifiedNameRule());
             					}
             				
-            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_16); 
+            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_17); 
 
             					newLeafNode(otherlv_0, grammarAccess.getQualifiedNameAccess().getPathNamespaceCrossReference_0_0());
             				
@@ -1478,27 +1870,27 @@
 
             }
 
-            otherlv_1=(Token)match(input,27,FOLLOW_17); 
+            otherlv_1=(Token)match(input,28,FOLLOW_18); 
 
             			newLeafNode(otherlv_1, grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1());
             		
-            // InternalDTML.g:584:3: ( (lv_remaining_2_0= ruleQualifiedName ) )?
-            int alt11=2;
-            int LA11_0 = input.LA(1);
+            // InternalDTML.g:741:3: ( (lv_remaining_2_0= ruleQualifiedName ) )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
 
-            if ( (LA11_0==RULE_ID) ) {
-                int LA11_1 = input.LA(2);
+            if ( (LA14_0==RULE_ID) ) {
+                int LA14_1 = input.LA(2);
 
-                if ( (LA11_1==27) ) {
-                    alt11=1;
+                if ( (LA14_1==28) ) {
+                    alt14=1;
                 }
             }
-            switch (alt11) {
+            switch (alt14) {
                 case 1 :
-                    // InternalDTML.g:585:4: (lv_remaining_2_0= ruleQualifiedName )
+                    // InternalDTML.g:742:4: (lv_remaining_2_0= ruleQualifiedName )
                     {
-                    // InternalDTML.g:585:4: (lv_remaining_2_0= ruleQualifiedName )
-                    // InternalDTML.g:586:5: lv_remaining_2_0= ruleQualifiedName
+                    // InternalDTML.g:742:4: (lv_remaining_2_0= ruleQualifiedName )
+                    // InternalDTML.g:743:5: lv_remaining_2_0= ruleQualifiedName
                     {
 
                     					newCompositeNode(grammarAccess.getQualifiedNameAccess().getRemainingQualifiedNameParserRuleCall_2_0());
@@ -1551,7 +1943,7 @@
 
 
     // $ANTLR start "entryRuleTypeRule"
-    // InternalDTML.g:607:1: entryRuleTypeRule returns [EObject current=null] : iv_ruleTypeRule= ruleTypeRule EOF ;
+    // InternalDTML.g:764:1: entryRuleTypeRule returns [EObject current=null] : iv_ruleTypeRule= ruleTypeRule EOF ;
     public final EObject entryRuleTypeRule() throws RecognitionException {
         EObject current = null;
 
@@ -1559,8 +1951,8 @@
 
 
         try {
-            // InternalDTML.g:607:49: (iv_ruleTypeRule= ruleTypeRule EOF )
-            // InternalDTML.g:608:2: iv_ruleTypeRule= ruleTypeRule EOF
+            // InternalDTML.g:764:49: (iv_ruleTypeRule= ruleTypeRule EOF )
+            // InternalDTML.g:765:2: iv_ruleTypeRule= ruleTypeRule EOF
             {
              newCompositeNode(grammarAccess.getTypeRuleRule()); 
             pushFollow(FOLLOW_1);
@@ -1587,7 +1979,7 @@
 
 
     // $ANTLR start "ruleTypeRule"
-    // InternalDTML.g:614:1: ruleTypeRule returns [EObject current=null] : ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) ) ;
+    // InternalDTML.g:771:1: ruleTypeRule returns [EObject current=null] : ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) ) ;
     public final EObject ruleTypeRule() throws RecognitionException {
         EObject current = null;
 
@@ -1599,29 +1991,29 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:620:2: ( ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) ) )
-            // InternalDTML.g:621:2: ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) )
+            // InternalDTML.g:777:2: ( ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) ) )
+            // InternalDTML.g:778:2: ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) )
             {
-            // InternalDTML.g:621:2: ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) )
-            // InternalDTML.g:622:3: ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) )
+            // InternalDTML.g:778:2: ( ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) ) )
+            // InternalDTML.g:779:3: ( (lv_path_0_0= ruleQualifiedName ) )? ( (otherlv_1= RULE_ID ) )
             {
-            // InternalDTML.g:622:3: ( (lv_path_0_0= ruleQualifiedName ) )?
-            int alt12=2;
-            int LA12_0 = input.LA(1);
+            // InternalDTML.g:779:3: ( (lv_path_0_0= ruleQualifiedName ) )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
 
-            if ( (LA12_0==RULE_ID) ) {
-                int LA12_1 = input.LA(2);
+            if ( (LA15_0==RULE_ID) ) {
+                int LA15_1 = input.LA(2);
 
-                if ( (LA12_1==27) ) {
-                    alt12=1;
+                if ( (LA15_1==28) ) {
+                    alt15=1;
                 }
             }
-            switch (alt12) {
+            switch (alt15) {
                 case 1 :
-                    // InternalDTML.g:623:4: (lv_path_0_0= ruleQualifiedName )
+                    // InternalDTML.g:780:4: (lv_path_0_0= ruleQualifiedName )
                     {
-                    // InternalDTML.g:623:4: (lv_path_0_0= ruleQualifiedName )
-                    // InternalDTML.g:624:5: lv_path_0_0= ruleQualifiedName
+                    // InternalDTML.g:780:4: (lv_path_0_0= ruleQualifiedName )
+                    // InternalDTML.g:781:5: lv_path_0_0= ruleQualifiedName
                     {
 
                     					newCompositeNode(grammarAccess.getTypeRuleAccess().getPathQualifiedNameParserRuleCall_0_0());
@@ -1651,11 +2043,11 @@
 
             }
 
-            // InternalDTML.g:641:3: ( (otherlv_1= RULE_ID ) )
-            // InternalDTML.g:642:4: (otherlv_1= RULE_ID )
+            // InternalDTML.g:798:3: ( (otherlv_1= RULE_ID ) )
+            // InternalDTML.g:799:4: (otherlv_1= RULE_ID )
             {
-            // InternalDTML.g:642:4: (otherlv_1= RULE_ID )
-            // InternalDTML.g:643:5: otherlv_1= RULE_ID
+            // InternalDTML.g:799:4: (otherlv_1= RULE_ID )
+            // InternalDTML.g:800:5: otherlv_1= RULE_ID
             {
 
             					if (current==null) {
@@ -1695,7 +2087,7 @@
 
 
     // $ANTLR start "entryRuleMultiplicityRule"
-    // InternalDTML.g:658:1: entryRuleMultiplicityRule returns [EObject current=null] : iv_ruleMultiplicityRule= ruleMultiplicityRule EOF ;
+    // InternalDTML.g:815:1: entryRuleMultiplicityRule returns [EObject current=null] : iv_ruleMultiplicityRule= ruleMultiplicityRule EOF ;
     public final EObject entryRuleMultiplicityRule() throws RecognitionException {
         EObject current = null;
 
@@ -1703,8 +2095,8 @@
 
 
         try {
-            // InternalDTML.g:658:57: (iv_ruleMultiplicityRule= ruleMultiplicityRule EOF )
-            // InternalDTML.g:659:2: iv_ruleMultiplicityRule= ruleMultiplicityRule EOF
+            // InternalDTML.g:815:57: (iv_ruleMultiplicityRule= ruleMultiplicityRule EOF )
+            // InternalDTML.g:816:2: iv_ruleMultiplicityRule= ruleMultiplicityRule EOF
             {
              newCompositeNode(grammarAccess.getMultiplicityRuleRule()); 
             pushFollow(FOLLOW_1);
@@ -1731,7 +2123,7 @@
 
 
     // $ANTLR start "ruleMultiplicityRule"
-    // InternalDTML.g:665:1: ruleMultiplicityRule returns [EObject current=null] : (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' ) ;
+    // InternalDTML.g:822:1: ruleMultiplicityRule returns [EObject current=null] : (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' ) ;
     public final EObject ruleMultiplicityRule() throws RecognitionException {
         EObject current = null;
 
@@ -1747,26 +2139,26 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:671:2: ( (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' ) )
-            // InternalDTML.g:672:2: (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' )
+            // InternalDTML.g:828:2: ( (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' ) )
+            // InternalDTML.g:829:2: (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' )
             {
-            // InternalDTML.g:672:2: (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' )
-            // InternalDTML.g:673:3: otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']'
+            // InternalDTML.g:829:2: (otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']' )
+            // InternalDTML.g:830:3: otherlv_0= '[' ( (lv_bounds_1_0= ruleBoundSpecification ) ) (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )? otherlv_4= ']'
             {
-            otherlv_0=(Token)match(input,23,FOLLOW_18); 
+            otherlv_0=(Token)match(input,23,FOLLOW_19); 
 
             			newLeafNode(otherlv_0, grammarAccess.getMultiplicityRuleAccess().getLeftSquareBracketKeyword_0());
             		
-            // InternalDTML.g:677:3: ( (lv_bounds_1_0= ruleBoundSpecification ) )
-            // InternalDTML.g:678:4: (lv_bounds_1_0= ruleBoundSpecification )
+            // InternalDTML.g:834:3: ( (lv_bounds_1_0= ruleBoundSpecification ) )
+            // InternalDTML.g:835:4: (lv_bounds_1_0= ruleBoundSpecification )
             {
-            // InternalDTML.g:678:4: (lv_bounds_1_0= ruleBoundSpecification )
-            // InternalDTML.g:679:5: lv_bounds_1_0= ruleBoundSpecification
+            // InternalDTML.g:835:4: (lv_bounds_1_0= ruleBoundSpecification )
+            // InternalDTML.g:836:5: lv_bounds_1_0= ruleBoundSpecification
             {
 
             					newCompositeNode(grammarAccess.getMultiplicityRuleAccess().getBoundsBoundSpecificationParserRuleCall_1_0());
             				
-            pushFollow(FOLLOW_19);
+            pushFollow(FOLLOW_20);
             lv_bounds_1_0=ruleBoundSpecification();
 
             state._fsp--;
@@ -1788,31 +2180,31 @@
 
             }
 
-            // InternalDTML.g:696:3: (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )?
-            int alt13=2;
-            int LA13_0 = input.LA(1);
+            // InternalDTML.g:853:3: (otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) ) )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
 
-            if ( (LA13_0==28) ) {
-                alt13=1;
+            if ( (LA16_0==29) ) {
+                alt16=1;
             }
-            switch (alt13) {
+            switch (alt16) {
                 case 1 :
-                    // InternalDTML.g:697:4: otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) )
+                    // InternalDTML.g:854:4: otherlv_2= '..' ( (lv_bounds_3_0= ruleBoundSpecification ) )
                     {
-                    otherlv_2=(Token)match(input,28,FOLLOW_18); 
+                    otherlv_2=(Token)match(input,29,FOLLOW_19); 
 
                     				newLeafNode(otherlv_2, grammarAccess.getMultiplicityRuleAccess().getFullStopFullStopKeyword_2_0());
                     			
-                    // InternalDTML.g:701:4: ( (lv_bounds_3_0= ruleBoundSpecification ) )
-                    // InternalDTML.g:702:5: (lv_bounds_3_0= ruleBoundSpecification )
+                    // InternalDTML.g:858:4: ( (lv_bounds_3_0= ruleBoundSpecification ) )
+                    // InternalDTML.g:859:5: (lv_bounds_3_0= ruleBoundSpecification )
                     {
-                    // InternalDTML.g:702:5: (lv_bounds_3_0= ruleBoundSpecification )
-                    // InternalDTML.g:703:6: lv_bounds_3_0= ruleBoundSpecification
+                    // InternalDTML.g:859:5: (lv_bounds_3_0= ruleBoundSpecification )
+                    // InternalDTML.g:860:6: lv_bounds_3_0= ruleBoundSpecification
                     {
 
                     						newCompositeNode(grammarAccess.getMultiplicityRuleAccess().getBoundsBoundSpecificationParserRuleCall_2_1_0());
                     					
-                    pushFollow(FOLLOW_20);
+                    pushFollow(FOLLOW_21);
                     lv_bounds_3_0=ruleBoundSpecification();
 
                     state._fsp--;
@@ -1867,7 +2259,7 @@
 
 
     // $ANTLR start "entryRuleBoundSpecification"
-    // InternalDTML.g:729:1: entryRuleBoundSpecification returns [EObject current=null] : iv_ruleBoundSpecification= ruleBoundSpecification EOF ;
+    // InternalDTML.g:886:1: entryRuleBoundSpecification returns [EObject current=null] : iv_ruleBoundSpecification= ruleBoundSpecification EOF ;
     public final EObject entryRuleBoundSpecification() throws RecognitionException {
         EObject current = null;
 
@@ -1875,8 +2267,8 @@
 
 
         try {
-            // InternalDTML.g:729:59: (iv_ruleBoundSpecification= ruleBoundSpecification EOF )
-            // InternalDTML.g:730:2: iv_ruleBoundSpecification= ruleBoundSpecification EOF
+            // InternalDTML.g:886:59: (iv_ruleBoundSpecification= ruleBoundSpecification EOF )
+            // InternalDTML.g:887:2: iv_ruleBoundSpecification= ruleBoundSpecification EOF
             {
              newCompositeNode(grammarAccess.getBoundSpecificationRule()); 
             pushFollow(FOLLOW_1);
@@ -1903,7 +2295,7 @@
 
 
     // $ANTLR start "ruleBoundSpecification"
-    // InternalDTML.g:736:1: ruleBoundSpecification returns [EObject current=null] : ( (lv_value_0_0= ruleUnlimitedLiteral ) ) ;
+    // InternalDTML.g:893:1: ruleBoundSpecification returns [EObject current=null] : ( (lv_value_0_0= ruleUnlimitedLiteral ) ) ;
     public final EObject ruleBoundSpecification() throws RecognitionException {
         EObject current = null;
 
@@ -1914,14 +2306,14 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:742:2: ( ( (lv_value_0_0= ruleUnlimitedLiteral ) ) )
-            // InternalDTML.g:743:2: ( (lv_value_0_0= ruleUnlimitedLiteral ) )
+            // InternalDTML.g:899:2: ( ( (lv_value_0_0= ruleUnlimitedLiteral ) ) )
+            // InternalDTML.g:900:2: ( (lv_value_0_0= ruleUnlimitedLiteral ) )
             {
-            // InternalDTML.g:743:2: ( (lv_value_0_0= ruleUnlimitedLiteral ) )
-            // InternalDTML.g:744:3: (lv_value_0_0= ruleUnlimitedLiteral )
+            // InternalDTML.g:900:2: ( (lv_value_0_0= ruleUnlimitedLiteral ) )
+            // InternalDTML.g:901:3: (lv_value_0_0= ruleUnlimitedLiteral )
             {
-            // InternalDTML.g:744:3: (lv_value_0_0= ruleUnlimitedLiteral )
-            // InternalDTML.g:745:4: lv_value_0_0= ruleUnlimitedLiteral
+            // InternalDTML.g:901:3: (lv_value_0_0= ruleUnlimitedLiteral )
+            // InternalDTML.g:902:4: lv_value_0_0= ruleUnlimitedLiteral
             {
 
             				newCompositeNode(grammarAccess.getBoundSpecificationAccess().getValueUnlimitedLiteralParserRuleCall_0());
@@ -1968,7 +2360,7 @@
 
 
     // $ANTLR start "entryRuleUnlimitedLiteral"
-    // InternalDTML.g:765:1: entryRuleUnlimitedLiteral returns [String current=null] : iv_ruleUnlimitedLiteral= ruleUnlimitedLiteral EOF ;
+    // InternalDTML.g:922:1: entryRuleUnlimitedLiteral returns [String current=null] : iv_ruleUnlimitedLiteral= ruleUnlimitedLiteral EOF ;
     public final String entryRuleUnlimitedLiteral() throws RecognitionException {
         String current = null;
 
@@ -1976,8 +2368,8 @@
 
 
         try {
-            // InternalDTML.g:765:56: (iv_ruleUnlimitedLiteral= ruleUnlimitedLiteral EOF )
-            // InternalDTML.g:766:2: iv_ruleUnlimitedLiteral= ruleUnlimitedLiteral EOF
+            // InternalDTML.g:922:56: (iv_ruleUnlimitedLiteral= ruleUnlimitedLiteral EOF )
+            // InternalDTML.g:923:2: iv_ruleUnlimitedLiteral= ruleUnlimitedLiteral EOF
             {
              newCompositeNode(grammarAccess.getUnlimitedLiteralRule()); 
             pushFollow(FOLLOW_1);
@@ -2004,7 +2396,7 @@
 
 
     // $ANTLR start "ruleUnlimitedLiteral"
-    // InternalDTML.g:772:1: ruleUnlimitedLiteral returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_INT_0= RULE_INT | kw= '*' ) ;
+    // InternalDTML.g:929:1: ruleUnlimitedLiteral returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_INT_0= RULE_INT | kw= '*' ) ;
     public final AntlrDatatypeRuleToken ruleUnlimitedLiteral() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -2015,28 +2407,28 @@
         	enterRule();
 
         try {
-            // InternalDTML.g:778:2: ( (this_INT_0= RULE_INT | kw= '*' ) )
-            // InternalDTML.g:779:2: (this_INT_0= RULE_INT | kw= '*' )
+            // InternalDTML.g:935:2: ( (this_INT_0= RULE_INT | kw= '*' ) )
+            // InternalDTML.g:936:2: (this_INT_0= RULE_INT | kw= '*' )
             {
-            // InternalDTML.g:779:2: (this_INT_0= RULE_INT | kw= '*' )
-            int alt14=2;
-            int LA14_0 = input.LA(1);
+            // InternalDTML.g:936:2: (this_INT_0= RULE_INT | kw= '*' )
+            int alt17=2;
+            int LA17_0 = input.LA(1);
 
-            if ( (LA14_0==RULE_INT) ) {
-                alt14=1;
+            if ( (LA17_0==RULE_INT) ) {
+                alt17=1;
             }
-            else if ( (LA14_0==29) ) {
-                alt14=2;
+            else if ( (LA17_0==30) ) {
+                alt17=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 14, 0, input);
+                    new NoViableAltException("", 17, 0, input);
 
                 throw nvae;
             }
-            switch (alt14) {
+            switch (alt17) {
                 case 1 :
-                    // InternalDTML.g:780:3: this_INT_0= RULE_INT
+                    // InternalDTML.g:937:3: this_INT_0= RULE_INT
                     {
                     this_INT_0=(Token)match(input,RULE_INT,FOLLOW_2); 
 
@@ -2049,9 +2441,9 @@
                     }
                     break;
                 case 2 :
-                    // InternalDTML.g:788:3: kw= '*'
+                    // InternalDTML.g:945:3: kw= '*'
                     {
-                    kw=(Token)match(input,29,FOLLOW_2); 
+                    kw=(Token)match(input,30,FOLLOW_2); 
 
                     			current.merge(kw);
                     			newLeafNode(kw, grammarAccess.getUnlimitedLiteralAccess().getAsteriskKeyword_1());
@@ -2100,10 +2492,11 @@
     public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000007C000D0L});
     public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000400000L});
     public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x00000000078000D2L});
-    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000000000012L});
-    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000020000040L});
-    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000011000000L});
-    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000000008010L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000000000012L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000040000040L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000021000000L});
+    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000001000000L});
 
 }
\ No newline at end of file
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/serializer/DTMLSemanticSequencer.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/serializer/DTMLSemanticSequencer.java
index 75fba00..d874044 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/serializer/DTMLSemanticSequencer.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/serializer/DTMLSemanticSequencer.java
@@ -7,11 +7,13 @@
 import java.util.Set;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Assignment;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTMLPackage;
-import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.DTModel;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Property;
 import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.Value;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XAssignment;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XDataType;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumLiteral;
+import org.eclipse.papyrus.robotics.xtext.datatypes.dTML.XEnumeration;
 import org.eclipse.papyrus.robotics.xtext.datatypes.services.DTMLGrammarAccess;
 import org.eclipse.papyrus.uml.textedit.common.xtext.serializer.UmlCommonSemanticSequencer;
 import org.eclipse.papyrus.uml.textedit.common.xtext.umlCommon.BoundSpecification;
@@ -40,18 +42,24 @@
 		Set<Parameter> parameters = context.getEnabledBooleanParameters();
 		if (epackage == DTMLPackage.eINSTANCE)
 			switch (semanticObject.eClass().getClassifierID()) {
-			case DTMLPackage.ASSIGNMENT:
-				sequence_Assignment(context, (Assignment) semanticObject); 
-				return; 
-			case DTMLPackage.DT_MODEL:
-				sequence_DTModel(context, (DTModel) semanticObject); 
-				return; 
 			case DTMLPackage.PROPERTY:
 				sequence_Property(context, (Property) semanticObject); 
 				return; 
 			case DTMLPackage.VALUE:
 				sequence_Value(context, (Value) semanticObject); 
 				return; 
+			case DTMLPackage.XASSIGNMENT:
+				sequence_XAssignment(context, (XAssignment) semanticObject); 
+				return; 
+			case DTMLPackage.XDATA_TYPE:
+				sequence_XDataType(context, (XDataType) semanticObject); 
+				return; 
+			case DTMLPackage.XENUM_LITERAL:
+				sequence_XEnumLiteral(context, (XEnumLiteral) semanticObject); 
+				return; 
+			case DTMLPackage.XENUMERATION:
+				sequence_XEnumeration(context, (XEnumeration) semanticObject); 
+				return; 
 			}
 		else if (epackage == UmlCommonPackage.eINSTANCE)
 			switch (semanticObject.eClass().getClassifierID()) {
@@ -74,41 +82,6 @@
 	
 	/**
 	 * Contexts:
-	 *     Model returns Assignment
-	 *     Assignment returns Assignment
-	 *
-	 * Constraint:
-	 *     (name=ID expression=ExpressionString)
-	 */
-	protected void sequence_Assignment(ISerializationContext context, Assignment semanticObject) {
-		if (errorAcceptor != null) {
-			if (transientValues.isValueTransient(semanticObject, DTMLPackage.Literals.MODEL__NAME) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, DTMLPackage.Literals.MODEL__NAME));
-			if (transientValues.isValueTransient(semanticObject, DTMLPackage.Literals.ASSIGNMENT__EXPRESSION) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, DTMLPackage.Literals.ASSIGNMENT__EXPRESSION));
-		}
-		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
-		feeder.accept(grammarAccess.getAssignmentAccess().getNameIDTerminalRuleCall_0_0(), semanticObject.getName());
-		feeder.accept(grammarAccess.getAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0(), semanticObject.getExpression());
-		feeder.finish();
-	}
-	
-	
-	/**
-	 * Contexts:
-	 *     Model returns DTModel
-	 *     DTModel returns DTModel
-	 *
-	 * Constraint:
-	 *     (name=ID attributes+=Property*)
-	 */
-	protected void sequence_DTModel(ISerializationContext context, DTModel semanticObject) {
-		genericSequencer.createSequence(context, semanticObject);
-	}
-	
-	
-	/**
-	 * Contexts:
 	 *     Property returns Property
 	 *
 	 * Constraint:
@@ -131,4 +104,64 @@
 	}
 	
 	
+	/**
+	 * Contexts:
+	 *     Model returns XAssignment
+	 *     XAssignment returns XAssignment
+	 *
+	 * Constraint:
+	 *     (name=ID expression=ExpressionString)
+	 */
+	protected void sequence_XAssignment(ISerializationContext context, XAssignment semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, DTMLPackage.Literals.MODEL__NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, DTMLPackage.Literals.MODEL__NAME));
+			if (transientValues.isValueTransient(semanticObject, DTMLPackage.Literals.XASSIGNMENT__EXPRESSION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, DTMLPackage.Literals.XASSIGNMENT__EXPRESSION));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getXAssignmentAccess().getNameIDTerminalRuleCall_0_0(), semanticObject.getName());
+		feeder.accept(grammarAccess.getXAssignmentAccess().getExpressionExpressionStringParserRuleCall_2_0(), semanticObject.getExpression());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Model returns XDataType
+	 *     XDataType returns XDataType
+	 *
+	 * Constraint:
+	 *     (name=ID attributes+=Property*)
+	 */
+	protected void sequence_XDataType(ISerializationContext context, XDataType semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     XEnumLiteral returns XEnumLiteral
+	 *
+	 * Constraint:
+	 *     (name=ID value=Value? comment=VSL_COMMENT?)
+	 */
+	protected void sequence_XEnumLiteral(ISerializationContext context, XEnumLiteral semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Model returns XEnumeration
+	 *     XEnumeration returns XEnumeration
+	 *
+	 * Constraint:
+	 *     (name=ID literals+=XEnumLiteral*)
+	 */
+	protected void sequence_XEnumeration(ISerializationContext context, XEnumeration semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
 }
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/services/DTMLGrammarAccess.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/services/DTMLGrammarAccess.java
index a08bb50..00fb49d 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/services/DTMLGrammarAccess.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src-gen/org/eclipse/papyrus/robotics/xtext/datatypes/services/DTMLGrammarAccess.java
@@ -28,24 +28,28 @@
 	public class ModelElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.Model");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
-		private final RuleCall cDTModelParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
-		private final RuleCall cAssignmentParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cXDataTypeParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cXAssignmentParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cXEnumerationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		
 		//Model:
-		//	DTModel | Assignment;
+		//	XDataType | XAssignment | XEnumeration;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//DTModel | Assignment
+		//XDataType | XAssignment | XEnumeration
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//DTModel
-		public RuleCall getDTModelParserRuleCall_0() { return cDTModelParserRuleCall_0; }
+		//XDataType
+		public RuleCall getXDataTypeParserRuleCall_0() { return cXDataTypeParserRuleCall_0; }
 		
-		//Assignment
-		public RuleCall getAssignmentParserRuleCall_1() { return cAssignmentParserRuleCall_1; }
+		//XAssignment
+		public RuleCall getXAssignmentParserRuleCall_1() { return cXAssignmentParserRuleCall_1; }
+		
+		//XEnumeration
+		public RuleCall getXEnumerationParserRuleCall_2() { return cXEnumerationParserRuleCall_2; }
 	}
-	public class DTModelElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.DTModel");
+	public class XDataTypeElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.XDataType");
 		private final Group cGroup = (Group)rule.eContents().get(1);
 		private final RuleCall cDTKeyParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
 		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
@@ -55,7 +59,7 @@
 		private final RuleCall cAttributesPropertyParserRuleCall_3_0 = (RuleCall)cAttributesAssignment_3.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//DTModel:
+		//XDataType:
 		//	DTKey name=ID '{'
 		//	attributes+=Property*
 		//	'}';
@@ -190,8 +194,8 @@
 		//VSL_COMMENT
 		public RuleCall getCommentVSL_COMMENTTerminalRuleCall_5_0() { return cCommentVSL_COMMENTTerminalRuleCall_5_0; }
 	}
-	public class AssignmentElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.Assignment");
+	public class XAssignmentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.XAssignment");
 		private final Group cGroup = (Group)rule.eContents().get(1);
 		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
 		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
@@ -200,7 +204,7 @@
 		private final RuleCall cExpressionExpressionStringParserRuleCall_2_0 = (RuleCall)cExpressionAssignment_2.eContents().get(0);
 		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
 		
-		//Assignment:
+		//XAssignment:
 		//	name=ID '=' expression=ExpressionString ';';
 		@Override public ParserRule getRule() { return rule; }
 		
@@ -299,17 +303,104 @@
 		//DOUBLE
 		public RuleCall getDvalDOUBLETerminalRuleCall_2_0() { return cDvalDOUBLETerminalRuleCall_2_0; }
 	}
+	public class XEnumerationElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.XEnumeration");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cEnumerationKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cLiteralsAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cLiteralsXEnumLiteralParserRuleCall_3_0 = (RuleCall)cLiteralsAssignment_3.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//XEnumeration:
+		//	'Enumeration' name=ID '{'
+		//	literals+=XEnumLiteral*
+		//	'}';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//'Enumeration' name=ID '{' literals+=XEnumLiteral* '}'
+		public Group getGroup() { return cGroup; }
+		
+		//'Enumeration'
+		public Keyword getEnumerationKeyword_0() { return cEnumerationKeyword_0; }
+		
+		//name=ID
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+		
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
+		
+		//'{'
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+		
+		//literals+=XEnumLiteral*
+		public Assignment getLiteralsAssignment_3() { return cLiteralsAssignment_3; }
+		
+		//XEnumLiteral
+		public RuleCall getLiteralsXEnumLiteralParserRuleCall_3_0() { return cLiteralsXEnumLiteralParserRuleCall_3_0; }
+		
+		//'}'
+		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
+	}
+	public class XEnumLiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.XEnumLiteral");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cEqualsSignKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cValueAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cValueValueParserRuleCall_1_1_0 = (RuleCall)cValueAssignment_1_1.eContents().get(0);
+		private final Assignment cCommentAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cCommentVSL_COMMENTTerminalRuleCall_2_0 = (RuleCall)cCommentAssignment_2.eContents().get(0);
+		
+		//XEnumLiteral:
+		//	name=ID ('=' value=Value)?
+		//	comment=VSL_COMMENT?;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//name=ID ('=' value=Value)? comment=VSL_COMMENT?
+		public Group getGroup() { return cGroup; }
+		
+		//name=ID
+		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
+		
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_0_0() { return cNameIDTerminalRuleCall_0_0; }
+		
+		//('=' value=Value)?
+		public Group getGroup_1() { return cGroup_1; }
+		
+		//'='
+		public Keyword getEqualsSignKeyword_1_0() { return cEqualsSignKeyword_1_0; }
+		
+		//value=Value
+		public Assignment getValueAssignment_1_1() { return cValueAssignment_1_1; }
+		
+		//Value
+		public RuleCall getValueValueParserRuleCall_1_1_0() { return cValueValueParserRuleCall_1_1_0; }
+		
+		//comment=VSL_COMMENT?
+		public Assignment getCommentAssignment_2() { return cCommentAssignment_2; }
+		
+		//VSL_COMMENT
+		public RuleCall getCommentVSL_COMMENTTerminalRuleCall_2_0() { return cCommentVSL_COMMENTTerminalRuleCall_2_0; }
+	}
 	
 	
 	private final ModelElements pModel;
-	private final DTModelElements pDTModel;
+	private final XDataTypeElements pXDataType;
 	private final DTKeyElements pDTKey;
 	private final TerminalRule tVSL_COMMENT;
 	private final PropertyElements pProperty;
-	private final AssignmentElements pAssignment;
+	private final XAssignmentElements pXAssignment;
 	private final ExpressionStringElements pExpressionString;
 	private final ValueElements pValue;
 	private final TerminalRule tDOUBLE;
+	private final XEnumerationElements pXEnumeration;
+	private final XEnumLiteralElements pXEnumLiteral;
 	
 	private final Grammar grammar;
 	
@@ -329,14 +420,16 @@
 		this.gaCommon = gaCommon;
 		this.gaTerminals = gaTerminals;
 		this.pModel = new ModelElements();
-		this.pDTModel = new DTModelElements();
+		this.pXDataType = new XDataTypeElements();
 		this.pDTKey = new DTKeyElements();
 		this.tVSL_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.VSL_COMMENT");
 		this.pProperty = new PropertyElements();
-		this.pAssignment = new AssignmentElements();
+		this.pXAssignment = new XAssignmentElements();
 		this.pExpressionString = new ExpressionStringElements();
 		this.pValue = new ValueElements();
 		this.tDOUBLE = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.papyrus.robotics.xtext.datatypes.DTML.DOUBLE");
+		this.pXEnumeration = new XEnumerationElements();
+		this.pXEnumLiteral = new XEnumLiteralElements();
 	}
 	
 	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
@@ -375,7 +468,7 @@
 
 	
 	//Model:
-	//	DTModel | Assignment;
+	//	XDataType | XAssignment | XEnumeration;
 	public ModelElements getModelAccess() {
 		return pModel;
 	}
@@ -384,16 +477,16 @@
 		return getModelAccess().getRule();
 	}
 	
-	//DTModel:
+	//XDataType:
 	//	DTKey name=ID '{'
 	//	attributes+=Property*
 	//	'}';
-	public DTModelElements getDTModelAccess() {
-		return pDTModel;
+	public XDataTypeElements getXDataTypeAccess() {
+		return pXDataType;
 	}
 	
-	public ParserRule getDTModelRule() {
-		return getDTModelAccess().getRule();
+	public ParserRule getXDataTypeRule() {
+		return getXDataTypeAccess().getRule();
 	}
 	
 	//DTKey:
@@ -424,14 +517,14 @@
 		return getPropertyAccess().getRule();
 	}
 	
-	//Assignment:
+	//XAssignment:
 	//	name=ID '=' expression=ExpressionString ';';
-	public AssignmentElements getAssignmentAccess() {
-		return pAssignment;
+	public XAssignmentElements getXAssignmentAccess() {
+		return pXAssignment;
 	}
 	
-	public ParserRule getAssignmentRule() {
-		return getAssignmentAccess().getRule();
+	public ParserRule getXAssignmentRule() {
+		return getXAssignmentAccess().getRule();
 	}
 	
 	//ExpressionString:
@@ -460,6 +553,29 @@
 		return tDOUBLE;
 	}
 	
+	//XEnumeration:
+	//	'Enumeration' name=ID '{'
+	//	literals+=XEnumLiteral*
+	//	'}';
+	public XEnumerationElements getXEnumerationAccess() {
+		return pXEnumeration;
+	}
+	
+	public ParserRule getXEnumerationRule() {
+		return getXEnumerationAccess().getRule();
+	}
+	
+	//XEnumLiteral:
+	//	name=ID ('=' value=Value)?
+	//	comment=VSL_COMMENT?;
+	public XEnumLiteralElements getXEnumLiteralAccess() {
+		return pXEnumLiteral;
+	}
+	
+	public ParserRule getXEnumLiteralRule() {
+		return getXEnumLiteralAccess().getRule();
+	}
+	
 	//QualifiedName:
 	//	path=[uml::Namespace] '::' remaining=QualifiedName?;
 	public UmlCommonGrammarAccess.QualifiedNameElements getQualifiedNameAccess() {
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtext b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtext
index 4134d3f..a8c57ca 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtext
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.datatypes/src/org/eclipse/papyrus/robotics/xtext/datatypes/DTML.xtext
@@ -10,10 +10,10 @@
 generate dTML "http://www.eclipse.org/papyrus/robotics/xtext/datatypes/DTML"
 
 Model:
-	DTModel | Assignment
+	XDataType | XAssignment | XEnumeration
 ;
 
-DTModel:
+XDataType:
 	DTKey name = ID '{'
 		(attributes += Property)*
 	'}'
@@ -24,6 +24,7 @@
 ;
 
 // visible copy of the SL comment (documentation not clear about how to access comments)
+// TODO: causes error during generation - which can apparently be ignored.
 terminal VSL_COMMENT : '//' !('\n'|'\r')* ('\r'? '\n')?;
 
 Property:
@@ -33,7 +34,7 @@
 	(comment = VSL_COMMENT)?
 ;
 
-Assignment:
+XAssignment:
 	name = ID '=' expression = ExpressionString';';
 
 ExpressionString: (ID|'['|']'|'-'|','|INT|DOUBLE)*;
@@ -47,3 +48,15 @@
 terminal DOUBLE returns ecore::EDouble:
 	('0'..'9')+ '.' ('0'..'9')+
 ;
+
+XEnumeration:
+	'Enumeration' name = ID '{'
+		(literals += XEnumLiteral)*
+	'}'
+;
+
+XEnumLiteral:
+	name=ID
+	('=' value = Value)?
+	(comment = VSL_COMMENT)?
+;