diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index f44ebef06765003734f1916d4a6c4ad7e123e257..270c8642e2943cac73627816037c3b047b7ead63 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -98,6 +98,12 @@
       <details key="name" value="Service_._type"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//ACSIServicesKind"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -114,6 +120,12 @@
       <details key="name" value="tAbbreviation"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -162,6 +174,12 @@
       <details key="name" value="tAbstractLNClass"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -283,6 +301,13 @@
       <details key="name" value="tApplicableServiceNS"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="versionAttributeRequired dateAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="versionAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The version attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.version &lt;> null&#xA;}.status"/>
+      <details key="dateAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The date attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.date &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNsUsage" ordered="false"
         upperBound="-1" eType="#//ServiceNsUsage" unsettable="true" containment="true"
         resolveProxies="false" eOpposite="#//ServiceNsUsage/applicableServiceNS">
@@ -352,6 +377,12 @@
       <details key="name" value="tBasicType"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -408,10 +439,11 @@
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
-      <details key="constraints" value="uniqueCDCChild"/>
+      <details key="constraints" value="uniqueCDCChild nameAttributeRequired"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
       <details key="uniqueCDCChild" value="Tuple {&#xA;&#x9;message : String = 'For a CDC, there shall not be two sub-elements (SubDataObject or DataAttribute) with same name.',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;let names : Bag(String) = self.subDataObject.name->union(self.dataAttribute.name) in names->size() = names->asSet()->size()&#xA;}.status"/>
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="subDataObject" ordered="false"
         upperBound="-1" eType="#//SubDataObject" unsettable="true" containment="true"
@@ -513,6 +545,12 @@
       <details key="name" value="tChanges"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="versionAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="versionAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The version attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.version &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="changesID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -567,10 +605,11 @@
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
-      <details key="constraints" value="uniqueSubDataAttribute"/>
+      <details key="constraints" value="uniqueSubDataAttribute nameAttributeRequired"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
       <details key="uniqueSubDataAttribute" value="Tuple {&#xA;&#x9;message : String = 'For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.subDataAttribute->isUnique( s : SubDataAttribute | s.name )&#xA;}.status"/>
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="subDataAttribute" ordered="false"
         upperBound="-1" eType="#//SubDataAttribute" unsettable="true" containment="true"
@@ -665,6 +704,13 @@
       <details key="name" value="tDataAttribute"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired fcAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+      <details key="fcAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The fc attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.fc &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -711,6 +757,13 @@
       <details key="name" value="tDataObject"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired typeAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+      <details key="typeAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The type attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.type &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -749,6 +802,12 @@
       <details key="name" value="tDataSetMemberOf"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="cbAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="cbAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The cb attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.cb &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="cb" eType="#//CBKind" unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
@@ -790,6 +849,12 @@
       <details key="name" value="tDoc"/>
       <details key="kind" value="mixed"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="idAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="idAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The id attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.id &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" unique="false" upperBound="-1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -860,11 +925,12 @@
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
-      <details key="constraints" value="uniqueLiteralName uniqueLiteralVal"/>
+      <details key="constraints" value="uniqueLiteralName uniqueLiteralVal nameAttributeRequired"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
       <details key="uniqueLiteralName" value="Tuple {&#xA;&#x9;message : String = 'For an Enumeration, there shall not be two Literal sub-elements with same name.',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;-- TODO: inherited literals should be taken into account&#xA;&#x9;&#x9;&#x9;-- For this, explicit links have to be created first&#xA;&#x9;&#x9;&#x9;self.literal->isUnique( l : Literal | l.name )&#xA;}.status"/>
       <details key="uniqueLiteralVal" value="Tuple {&#xA;&#x9;message : String = 'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.literal->isUnique( l : Literal | l.literalVal )&#xA;}.status"/>
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="literal" ordered="false"
         upperBound="-1" eType="#//Literal" unsettable="true" containment="true" resolveProxies="false"
@@ -927,6 +993,12 @@
       <details key="name" value="tFunctionalConstraint"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="abbreviationAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="abbreviationAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The abbreviation attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.abbreviation &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServices" ordered="false"
         eType="#//ApplicableServices" unsettable="true" containment="true" resolveProxies="false"
         eOpposite="#//ApplicableServices/functionalConstraint">
@@ -1039,6 +1111,13 @@
       <details key="name" value="tLiteral"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired literalValAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+      <details key="literalValAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The literalVal attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.literalVal &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="literalVal" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1062,6 +1141,12 @@
       <details key="name" value="tLNClass"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="canHaveLOG" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1255,6 +1340,12 @@
       <details key="name" value="tNSDoc"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="langAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="langAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The lang attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.lang &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="doc" ordered="false" upperBound="-1"
         eType="#//Doc" unsettable="true" containment="true" resolveProxies="false"
         eOpposite="#//Doc/nSDoc">
@@ -1277,6 +1368,12 @@
       <details key="name" value="tPresenceCondition"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1411,6 +1508,12 @@
       <details key="name" value="tServiceCDC"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="cdcAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="cdcAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The cdc attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.cdc &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="serviceDataAttribute" ordered="false"
         upperBound="-1" eType="#//ServiceDataAttribute" unsettable="true" containment="true"
         resolveProxies="false" eOpposite="#//ServiceDataAttribute/serviceCDC">
@@ -1496,6 +1599,13 @@
       <details key="name" value="tServiceDataAttribute"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired fcAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+      <details key="fcAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The fc attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.fc &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1605,6 +1715,12 @@
       <details key="name" value="tServiceParameter"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1638,6 +1754,12 @@
       <details key="name" value="tSubDataAttribute"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1657,6 +1779,13 @@
       <details key="name" value="tSubDataObject"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="nameAttributeRequired typeAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="nameAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The name attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.name &lt;> null&#xA;}.status"/>
+      <details key="typeAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The type attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.type &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1690,6 +1819,12 @@
       <details key="name" value="tTitledClass"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="titleIDAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="titleIDAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The titleID attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.titleID &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1727,6 +1862,13 @@
         defaultValueLiteral="false"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="AgNSIdentification" abstract="true">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="idAttributeRequired versionAttributeRequired"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="idAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The id attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.id &lt;> null&#xA;}.status"/>
+      <details key="versionAttributeRequired" value="Tuple {&#xA;&#x9;message : String = 'The version attribute is required',&#xA;&#x9;status : Boolean = &#xA;&#x9;&#x9;&#x9;self.version &lt;> null&#xA;}.status"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="release" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"
         defaultValueLiteral="1" unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java
index 1257c7456265cf326289011e8065dbbc6c6590b3..b41109e3e1b56c216f363be484589d04b2213535 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java
@@ -35,6 +35,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviation()
  * @model extendedMetaData="name='tAbbreviation' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface Abbreviation extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java
index b38ce0e15d5283213a6d6149d7d8bd97b6d06366..24a46768fda4613be601135645fe41a331f2d215 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java
@@ -37,6 +37,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbstractLNClass()
  * @model extendedMetaData="name='tAbstractLNClass' kind='elementOnly'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface AbstractLNClass extends AnyLNClass {
@@ -53,6 +55,7 @@ public interface AbstractLNClass extends AnyLNClass {
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
+    @Override
     String getName();
 
     /**
@@ -106,6 +109,7 @@ public interface AbstractLNClass extends AnyLNClass {
      * @model opposite="abstractLNClass" resolveProxies="false" unsettable="true" ordered="false"
      * @generated
      */
+    @Override
     LNClasses getLNClasses();
 
     /**
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgNSIdentification.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgNSIdentification.java
index 2d18bbe676f96712a9754fc9093aadfa45f1bbd1..6445184f984429189c5bbbee589074bfa7934893 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgNSIdentification.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgNSIdentification.java
@@ -39,6 +39,8 @@ import org.eclipse.emf.ecore.EObject;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAgNSIdentification()
  * @model abstract="true"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='idAttributeRequired versionAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot idAttributeRequired='Tuple {\n\tmessage : String = \'The id attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.id &lt;&gt; null\n}.status' versionAttributeRequired='Tuple {\n\tmessage : String = \'The version attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.version &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface AgNSIdentification extends EObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java
index e5b55ae61ef2feb8222c64ac48b7055820601173..c280ef334dcb7f19605c58d3f098fce0554e8374 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java
@@ -39,6 +39,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServiceNS()
  * @model extendedMetaData="name='tApplicableServiceNS' kind='elementOnly'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='versionAttributeRequired dateAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot versionAttributeRequired='Tuple {\n\tmessage : String = \'The version attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.version &lt;&gt; null\n}.status' dateAttributeRequired='Tuple {\n\tmessage : String = \'The date attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.date &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface ApplicableServiceNS extends Copyrighted {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java
index 07c227392989575730ac8722081de8c1d1a889cf..99bef51bc5ecf70bc5edd3cfb66248dee50ea950 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java
@@ -35,6 +35,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType()
  * @model extendedMetaData="name='tBasicType' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface BasicType extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
index 51e6df9bc22bd4103d5e2f756f42361a416f9549..c69436c4de099d0a96f65040948a542d16e0362a 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
@@ -45,8 +45,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC()
  * @model extendedMetaData="name='tCDC' kind='elementOnly'"
- *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='uniqueCDCChild'"
- *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot uniqueCDCChild='Tuple {\n\tmessage : String = \'For a CDC, there shall not be two sub-elements (SubDataObject or DataAttribute) with same name.\',\n\tstatus : Boolean = \n\t\t\tlet names : Bag(String) = self.subDataObject.name-&gt;union(self.dataAttribute.name) in names-&gt;size() = names-&gt;asSet()-&gt;size()\n}.status'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='uniqueCDCChild nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot uniqueCDCChild='Tuple {\n\tmessage : String = \'For a CDC, there shall not be two sub-elements (SubDataObject or DataAttribute) with same name.\',\n\tstatus : Boolean = \n\t\t\tlet names : Bag(String) = self.subDataObject.name-&gt;union(self.dataAttribute.name) in names-&gt;size() = names-&gt;asSet()-&gt;size()\n}.status' nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface CDC extends TitledClass {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java
index d4d24a5ac706ce1f75609c178247e339b25591d1..4fd10eaeead81c59c7c32d0b6aada9ad94950758 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java
@@ -42,6 +42,8 @@ import javax.xml.datatype.XMLGregorianCalendar;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges()
  * @model extendedMetaData="name='tChanges' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='versionAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot versionAttributeRequired='Tuple {\n\tmessage : String = \'The version attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.version &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface Changes extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java
index 2a778874f6c042518eb20561d25af8b06096863b..a30b56cca0931a1d95a7514601e3218b031ed8c4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java
@@ -38,8 +38,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute()
  * @model extendedMetaData="name='tConstructedAttribute' kind='elementOnly'"
- *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='uniqueSubDataAttribute'"
- *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot uniqueSubDataAttribute='Tuple {\n\tmessage : String = \'For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.subDataAttribute-&gt;isUnique( s : SubDataAttribute | s.name )\n}.status'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='uniqueSubDataAttribute nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot uniqueSubDataAttribute='Tuple {\n\tmessage : String = \'For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.subDataAttribute-&gt;isUnique( s : SubDataAttribute | s.name )\n}.status' nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface ConstructedAttribute extends TitledClass {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
index 811a3256217b2e719e3d2657e6c0a63385461642..b397091faa6ad3bb16c40d73d8a7785cd4dbf49e 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
@@ -45,6 +45,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute()
  * @model extendedMetaData="name='tDataAttribute' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired fcAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status' fcAttributeRequired='Tuple {\n\tmessage : String = \'The fc attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.fc &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface DataAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
index f4b20dbfcacee1bad1848a0774470722091ff8bd..b2f41fabf6d48c849240e31ed5383e2b2abea2c5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
@@ -39,6 +39,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject()
  * @model extendedMetaData="name='tDataObject' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired typeAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status' typeAttributeRequired='Tuple {\n\tmessage : String = \'The type attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.type &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface DataObject
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java
index 138042321e581b68bfce425f2e64bc3fa159a676..a48b778a88bee09d8614bcfdf9bc615c625f5654 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java
@@ -34,6 +34,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataSetMemberOf()
  * @model extendedMetaData="name='tDataSetMemberOf' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='cbAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot cbAttributeRequired='Tuple {\n\tmessage : String = \'The cb attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.cb &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface DataSetMemberOf extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java
index c6a97f48d93456346aae6fe4777dd8837610e7ea..01de3afa137a2468a6cb2a3e93b49e85153fb859 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java
@@ -39,6 +39,8 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDoc()
  * @model extendedMetaData="name='tDoc' kind='mixed'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='idAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot idAttributeRequired='Tuple {\n\tmessage : String = \'The id attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.id &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface Doc extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
index 70c4fc8ffe98123ed0da1f9bb445bed9740cdfc0..cae9b0c5ffeed7e2b5d8d1e615e68fe947f75042 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
@@ -40,8 +40,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration()
  * @model extendedMetaData="name='tEnumeration' kind='elementOnly'"
- *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='uniqueLiteralName uniqueLiteralVal'"
- *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot uniqueLiteralName='Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: inherited literals should be taken into account\n\t\t\t-- For this, explicit links have to be created first\n\t\t\tself.literal-&gt;isUnique( l : Literal | l.name )\n}.status' uniqueLiteralVal='Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.\',\n\tstatus : Boolean = \n\t\t\tself.literal-&gt;isUnique( l : Literal | l.literalVal )\n}.status'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='uniqueLiteralName uniqueLiteralVal nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot uniqueLiteralName='Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: inherited literals should be taken into account\n\t\t\t-- For this, explicit links have to be created first\n\t\t\tself.literal-&gt;isUnique( l : Literal | l.name )\n}.status' uniqueLiteralVal='Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.\',\n\tstatus : Boolean = \n\t\t\tself.literal-&gt;isUnique( l : Literal | l.literalVal )\n}.status' nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface Enumeration extends TitledClass {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
index 1f31a47a3279dccd7e071a0ab0ef1d09a75b87b4..d2947dbc723dfe3805eb63d8c6d35d9dcde2f34a 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
@@ -40,6 +40,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint()
  * @model extendedMetaData="name='tFunctionalConstraint' kind='elementOnly'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='abbreviationAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot abbreviationAttributeRequired='Tuple {\n\tmessage : String = \'The abbreviation attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.abbreviation &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface FunctionalConstraint extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java
index dce00637178c587d985a4d1d9d5df2ddede96672..c4e2fa8dd4d503646b2e7595c744e745a69462e6 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java
@@ -36,6 +36,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClass()
  * @model extendedMetaData="name='tLNClass' kind='elementOnly'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface LNClass extends AnyLNClass {
@@ -154,6 +156,7 @@ public interface LNClass extends AnyLNClass {
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
+    @Override
     String getName();
 
     /**
@@ -207,6 +210,7 @@ public interface LNClass extends AnyLNClass {
      * @model opposite="lNClass" resolveProxies="false" unsettable="true" ordered="false"
      * @generated
      */
+    @Override
     LNClasses getLNClasses();
 
     /**
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java
index 050a7d66cffde8d3f544f94d370da55906a1f9a0..cb44fa57eb10c8ce5989ea80a2e3e3fc2fdfaa76 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java
@@ -35,6 +35,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLiteral()
  * @model extendedMetaData="name='tLiteral' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired literalValAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status' literalValAttributeRequired='Tuple {\n\tmessage : String = \'The literalVal attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.literalVal &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface Literal extends DocumentedClass {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java
index d3e989307bc1fd436ab5197528df53661320d061..db0b927b2b8f0ced83e2831f80d95771a82d0919 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java
@@ -36,6 +36,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDoc()
  * @model extendedMetaData="name='tNSDoc' kind='elementOnly'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='langAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot langAttributeRequired='Tuple {\n\tmessage : String = \'The lang attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.lang &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface NSDoc extends Copyrighted, AgNSIdentification, AgUML {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
index cd38b29dec62d071256f605fa1f4c3f45b7fecef..328d7f5e6ba1132527a730f5ec2c166b253c782d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
@@ -44,6 +44,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition()
  * @model extendedMetaData="name='tPresenceCondition' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface PresenceCondition extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java
index fc4dca8ea1bebf758b45f49a4a346cfabc361d16..37382165b5c4c467660915f5f336d989820fd409 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java
@@ -38,6 +38,8 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDC()
  * @model extendedMetaData="name='tServiceCDC' kind='elementOnly'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='cdcAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot cdcAttributeRequired='Tuple {\n\tmessage : String = \'The cdc attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.cdc &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface ServiceCDC extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java
index ff6f7bea86170c976ef314a606c53e28df20ba6d..9ec2fedfe82459d03754cea5437df571323f84ba 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java
@@ -35,6 +35,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute()
  * @model extendedMetaData="name='tServiceDataAttribute' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired fcAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status' fcAttributeRequired='Tuple {\n\tmessage : String = \'The fc attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.fc &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface ServiceDataAttribute extends DocumentedClass, AgPresenceCondition, AgAttributeType, AgUnderlyingType {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java
index f568ab206940bc7ef0eaaa6c68737c46cb153268..f35130467f8a5f92217d45c74f9e504436409762 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java
@@ -34,6 +34,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter()
  * @model extendedMetaData="name='tServiceParameter' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface ServiceParameter extends DocumentedClass, AgAttributeTypeAndValues {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java
index 027917e6b72b79f9064281be4ef5551bb27555e1..7b190ca7ac98e90c02937be071f75e004852279d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java
@@ -34,6 +34,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceType()
  * @model extendedMetaData="name='Service_._type' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface ServiceType extends NsdObject {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
index d5790f8ddaaf31152e8b787df3c2583073ab09d9..c4307d68c6e0197f7f791e711f260c5739739c50 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
@@ -35,6 +35,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute()
  * @model extendedMetaData="name='tSubDataAttribute' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface SubDataAttribute extends DocumentedClass, AgPresenceCondition, AgArray, AgAttributeTypeAndValues {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
index 17aa9e49a3c5a595e786a0bf0e63efe7e454bc24..0e59653c324c04935a1bb0883ae1ee55a3a8b7ac 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
@@ -39,6 +39,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject()
  * @model extendedMetaData="name='tSubDataObject' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='nameAttributeRequired typeAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot nameAttributeRequired='Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name &lt;&gt; null\n}.status' typeAttributeRequired='Tuple {\n\tmessage : String = \'The type attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.type &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface SubDataObject extends DocumentedClass, AgPresenceCondition, AgArray, AgUnderlyingType {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java
index 5689e87089463d308df1d52d3b61335f2b19fb5e..b1f077d50ffa89ff4a0e91cc0bb56762b0d28fd4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java
@@ -33,6 +33,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getTitledClass()
  * @model extendedMetaData="name='tTitledClass' kind='empty'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='titleIDAttributeRequired'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot titleIDAttributeRequired='Tuple {\n\tmessage : String = \'The titleID attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.titleID &lt;&gt; null\n}.status'"
  * @generated
  */
 public interface TitledClass extends DocumentedClass {
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java
index 21b48d74b16c9d41bc6163f34258c353707fff6f..8e5091c9e50859895ce36da0a8d519a0f322b9de 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java
@@ -5252,22 +5252,53 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 new String[] { "invocationDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
                         "settingDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "validationDelegates",
                         "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot" } );
+        addAnnotation( serviceTypeEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
+        addAnnotation( abbreviationEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
         addAnnotation( abbreviationsEClass, source, new String[] { "constraints", "uniqueAbbreviation" } );
+        addAnnotation( abstractLNClassEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
         addAnnotation( anyLNClassEClass, source, new String[] { "constraints", "uniqueDataObject" } );
+        addAnnotation( applicableServiceNSEClass, source,
+                new String[] { "constraints", "versionAttributeRequired dateAttributeRequired" } );
         addAnnotation( applicableServicesEClass, source,
                 new String[] { "constraints", "uniqueDataSetMemberOf uniqueService" } );
-        addAnnotation( cdcEClass, source, new String[] { "constraints", "uniqueCDCChild" } );
+        addAnnotation( basicTypeEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
+        addAnnotation( cdcEClass, source, new String[] { "constraints", "uniqueCDCChild nameAttributeRequired" } );
         addAnnotation( cdCsEClass, source, new String[] { "constraints", "uniqueCDC" } );
-        addAnnotation( constructedAttributeEClass, source, new String[] { "constraints", "uniqueSubDataAttribute" } );
+        addAnnotation( changesEClass, source, new String[] { "constraints", "versionAttributeRequired" } );
+        addAnnotation( constructedAttributeEClass, source,
+                new String[] { "constraints", "uniqueSubDataAttribute nameAttributeRequired" } );
         addAnnotation( constructedAttributesEClass, source,
                 new String[] { "constraints", "uniqueConstructedAttribute" } );
+        addAnnotation( dataAttributeEClass, source,
+                new String[] { "constraints", "nameAttributeRequired fcAttributeRequired" } );
+        addAnnotation( dataObjectEClass, source,
+                new String[] { "constraints", "nameAttributeRequired typeAttributeRequired" } );
+        addAnnotation( dataSetMemberOfEClass, source, new String[] { "constraints", "cbAttributeRequired" } );
+        addAnnotation( docEClass, source, new String[] { "constraints", "idAttributeRequired" } );
         addAnnotation( enumerationEClass, source,
-                new String[] { "constraints", "uniqueLiteralName uniqueLiteralVal" } );
+                new String[] { "constraints", "uniqueLiteralName uniqueLiteralVal nameAttributeRequired" } );
         addAnnotation( enumerationsEClass, source, new String[] { "constraints", "uniqueEnumeration" } );
+        addAnnotation( functionalConstraintEClass, source,
+                new String[] { "constraints", "abbreviationAttributeRequired" } );
         addAnnotation( functionalConstraintsEClass, source,
                 new String[] { "constraints", "uniqueFunctionalConstraint" } );
+        addAnnotation( literalEClass, source,
+                new String[] { "constraints", "nameAttributeRequired literalValAttributeRequired" } );
+        addAnnotation( lnClassEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
         addAnnotation( lnClassesEClass, source, new String[] { "constraints", "uniqueAbstractLNClass uniqueLNClass" } );
+        addAnnotation( nsDocEClass, source, new String[] { "constraints", "langAttributeRequired" } );
+        addAnnotation( presenceConditionEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
         addAnnotation( presenceConditionsEClass, source, new String[] { "constraints", "uniquePresenceCondition" } );
+        addAnnotation( serviceCDCEClass, source, new String[] { "constraints", "cdcAttributeRequired" } );
+        addAnnotation( serviceDataAttributeEClass, source,
+                new String[] { "constraints", "nameAttributeRequired fcAttributeRequired" } );
+        addAnnotation( serviceParameterEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
+        addAnnotation( subDataAttributeEClass, source, new String[] { "constraints", "nameAttributeRequired" } );
+        addAnnotation( subDataObjectEClass, source,
+                new String[] { "constraints", "nameAttributeRequired typeAttributeRequired" } );
+        addAnnotation( titledClassEClass, source, new String[] { "constraints", "titleIDAttributeRequired" } );
+        addAnnotation( agNSIdentificationEClass, source,
+                new String[] { "constraints", "idAttributeRequired versionAttributeRequired" } );
     }
 
     /**
@@ -5598,36 +5629,100 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      */
     protected void createPivotAnnotations() {
         String source = "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot";
+        addAnnotation( serviceTypeEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
+        addAnnotation( abbreviationEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( abbreviationsEClass, source, new String[] { "uniqueAbbreviation",
                 "Tuple {\n\tmessage : String = \'There shall not be two Abbreviations elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.abbreviation->isUnique( a : Abbreviation | a.name )\n}.status" } );
+        addAnnotation( abstractLNClassEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( anyLNClassEClass, source, new String[] { "uniqueDataObject",
                 "Tuple {\n\tmessage : String = \'For an AnyLNClass, there shall not be two DataObject sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: base AbstractLNClass should be taken into account\n\t\t\t-- For this, explicit links have to be created first\n\t\t\tself.dataObject->isUnique( d : DataObject | d.name )\n}.status" } );
+        addAnnotation( applicableServiceNSEClass, source, new String[] { "versionAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The version attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.version <> null\n}.status",
+                "dateAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The date attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.date <> null\n}.status" } );
         addAnnotation( applicableServicesEClass, source, new String[] { "uniqueDataSetMemberOf",
                 "Tuple {\n\tmessage : String = \'For an ApplicableServices, there shall not be two DataSetMemberOf sub-elements with same cb.\',\n\tstatus : Boolean = \n\t\t\tself.dataSetMemberOf->isUnique( d : DataSetMemberOf | d.cb )\n}.status",
                 "uniqueService",
                 "Tuple {\n\tmessage : String = \'For an ApplicableServices, there shall not be two ServiceType sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.service->isUnique( s : ServiceType | s.name )\n}.status" } );
+        addAnnotation( basicTypeEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( cdcEClass, source, new String[] { "uniqueCDCChild",
-                "Tuple {\n\tmessage : String = \'For a CDC, there shall not be two sub-elements (SubDataObject or DataAttribute) with same name.\',\n\tstatus : Boolean = \n\t\t\tlet names : Bag(String) = self.subDataObject.name->union(self.dataAttribute.name) in names->size() = names->asSet()->size()\n}.status" } );
+                "Tuple {\n\tmessage : String = \'For a CDC, there shall not be two sub-elements (SubDataObject or DataAttribute) with same name.\',\n\tstatus : Boolean = \n\t\t\tlet names : Bag(String) = self.subDataObject.name->union(self.dataAttribute.name) in names->size() = names->asSet()->size()\n}.status",
+                "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( cdCsEClass, source, new String[] { "uniqueCDC",
                 "Tuple {\n\tmessage : String = \'Within an NS, there shall not be two CDC sub-elements with same name and (if defined) variant.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: DependsOn NS should be taken into account ?\n\t\t\t-- For this, explicit links have to be created first\n\t\t\t-- Then, may be this constraint should be in NS and not in Enumerations ?\n\t\t\tself.cDC->select( c : CDC | c.variant = null )->isUnique( c : CDC | c.name )\n\t     or self.cDC->select( c : CDC | c.variant <> null )->forAll( c1, c2 : CDC | c1 <> c2 implies c1.name <> c2.name or c1.variant <> c2.variant )\n}.status" } );
+        addAnnotation( changesEClass, source, new String[] { "versionAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The version attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.version <> null\n}.status" } );
         addAnnotation( constructedAttributeEClass, source, new String[] { "uniqueSubDataAttribute",
-                "Tuple {\n\tmessage : String = \'For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.subDataAttribute->isUnique( s : SubDataAttribute | s.name )\n}.status" } );
+                "Tuple {\n\tmessage : String = \'For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.subDataAttribute->isUnique( s : SubDataAttribute | s.name )\n}.status",
+                "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( constructedAttributesEClass, source, new String[] { "uniqueConstructedAttribute",
                 "Tuple {\n\tmessage : String = \'Within an NS, there shall not be two ConstructedAttribute sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: DependsOn NS should be taken into account ?\n\t\t\t-- For this, explicit links have to be created first\n\t\t\t-- Then, may be this constraint should be in NS and not in Enumerations ?\n\t\t\tself.constructedAttribute->isUnique( c : ConstructedAttribute | c.name )\n}.status" } );
+        addAnnotation( dataAttributeEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status",
+                "fcAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The fc attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.fc <> null\n}.status" } );
+        addAnnotation( dataObjectEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status",
+                "typeAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The type attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.type <> null\n}.status" } );
+        addAnnotation( dataSetMemberOfEClass, source, new String[] { "cbAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The cb attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.cb <> null\n}.status" } );
+        addAnnotation( docEClass, source, new String[] { "idAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The id attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.id <> null\n}.status" } );
         addAnnotation( enumerationEClass, source, new String[] { "uniqueLiteralName",
                 "Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: inherited literals should be taken into account\n\t\t\t-- For this, explicit links have to be created first\n\t\t\tself.literal->isUnique( l : Literal | l.name )\n}.status",
                 "uniqueLiteralVal",
-                "Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.\',\n\tstatus : Boolean = \n\t\t\tself.literal->isUnique( l : Literal | l.literalVal )\n}.status" } );
+                "Tuple {\n\tmessage : String = \'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.\',\n\tstatus : Boolean = \n\t\t\tself.literal->isUnique( l : Literal | l.literalVal )\n}.status",
+                "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( enumerationsEClass, source, new String[] { "uniqueEnumeration",
                 "Tuple {\n\tmessage : String = \'Within an NS, there shall not be two Enumeration sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\t-- TODO: DependsOn NS should be taken into account ?\n\t\t\t-- For this, explicit links have to be created first\n\t\t\t-- Then, may be this constraint should be in NS and not in Enumerations ?\n\t\t\tself.enumeration->isUnique( e : Enumeration | e.name )\n}.status" } );
+        addAnnotation( functionalConstraintEClass, source, new String[] { "abbreviationAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The abbreviation attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.abbreviation <> null\n}.status" } );
         addAnnotation( functionalConstraintsEClass, source, new String[] { "uniqueFunctionalConstraint",
                 "Tuple {\n\tmessage : String = \'There shall not be two FunctionalConstraint elements with same abbreviation.\',\n\tstatus : Boolean = \n\t\t\tself.functionalConstraint->isUnique( f : FunctionalConstraint | f.abbreviation )\n}.status" } );
+        addAnnotation( literalEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status",
+                "literalValAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The literalVal attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.literalVal <> null\n}.status" } );
+        addAnnotation( lnClassEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( lnClassesEClass, source, new String[] { "uniqueAbstractLNClass",
                 "Tuple {\n\tmessage : String = \'Within an NS, there shall not be two AbstractLNClass sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.abstractLNClass->isUnique( c : AbstractLNClass | c.name )\n}.status",
                 "uniqueLNClass",
                 "Tuple {\n\tmessage : String = \'Within an NS, there shall not be two LNClass sub-elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.lNClass->isUnique( c : LNClass | c.name )\n}.status" } );
+        addAnnotation( nsDocEClass, source, new String[] { "langAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The lang attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.lang <> null\n}.status" } );
+        addAnnotation( presenceConditionEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
         addAnnotation( presenceConditionsEClass, source, new String[] { "uniquePresenceCondition",
                 "Tuple {\n\tmessage : String = \'There shall not be two PresenceCondition elements with same name.\',\n\tstatus : Boolean = \n\t\t\tself.presenceCondition->isUnique( p : PresenceCondition | p.name )\n}.status" } );
+        addAnnotation( serviceCDCEClass, source, new String[] { "cdcAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The cdc attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.cdc <> null\n}.status" } );
+        addAnnotation( serviceDataAttributeEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status",
+                "fcAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The fc attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.fc <> null\n}.status" } );
+        addAnnotation( serviceParameterEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
+        addAnnotation( subDataAttributeEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status" } );
+        addAnnotation( subDataObjectEClass, source, new String[] { "nameAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The name attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.name <> null\n}.status",
+                "typeAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The type attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.type <> null\n}.status" } );
+        addAnnotation( titledClassEClass, source, new String[] { "titleIDAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The titleID attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.titleID <> null\n}.status" } );
+        addAnnotation( agNSIdentificationEClass, source, new String[] { "idAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The id attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.id <> null\n}.status",
+                "versionAttributeRequired",
+                "Tuple {\n\tmessage : String = \'The version attribute is required\',\n\tstatus : Boolean = \n\t\t\tself.version <> null\n}.status" } );
     }
 
 } //NsdPackageImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java
index 13993e8d789d1a4026e99e34c76e5f455dff9ba0..1010349c0deac20482d308abfe8cadfb8fe2f4ad 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java
@@ -270,7 +270,25 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateAppliesToType( AppliesToType appliesToType, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( appliesToType, diagnostics, context );
+        if( !validate_NoCircularContainment( appliesToType, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( appliesToType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( appliesToType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( appliesToType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( appliesToType, diagnostics, context );
+        return result;
     }
 
     /**
@@ -280,7 +298,23 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateDependsOn( DependsOn dependsOn, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( dependsOn, diagnostics, context );
+        if( !validate_NoCircularContainment( dependsOn, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( dependsOn, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( dependsOn, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( dependsOn, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( dependsOn, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( dependsOn, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( dependsOn, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( dependsOn, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( dependsOn, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( dependsOn, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( dependsOn, diagnostics, context );
+        return result;
     }
 
     /**
@@ -300,7 +334,44 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateServiceType( ServiceType serviceType, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceType, diagnostics, context );
+        if( !validate_NoCircularContainment( serviceType, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( serviceType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( serviceType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( serviceType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( serviceType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( serviceType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( serviceType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( serviceType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( serviceType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateServiceType_nameAttributeRequired( serviceType, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Service Type</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SERVICE_TYPE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Service Type</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateServiceType_nameAttributeRequired( ServiceType serviceType, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SERVICE_TYPE, serviceType, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                SERVICE_TYPE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -310,7 +381,45 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateAbbreviation( Abbreviation abbreviation, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( abbreviation, diagnostics, context );
+        if( !validate_NoCircularContainment( abbreviation, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( abbreviation, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( abbreviation, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( abbreviation, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( abbreviation, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( abbreviation, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( abbreviation, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( abbreviation, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( abbreviation, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAbbreviation_nameAttributeRequired( abbreviation, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Abbreviation</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String ABBREVIATION__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Abbreviation</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateAbbreviation_nameAttributeRequired( Abbreviation abbreviation, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.ABBREVIATION, abbreviation, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                ABBREVIATION__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -384,11 +493,38 @@ public class NsdValidator extends EObjectValidator {
         if( result || diagnostics != null ) result &= validate_EveryKeyUnique( abstractLNClass, diagnostics, context );
         if( result || diagnostics != null )
             result &= validate_EveryMapEntryUnique( abstractLNClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( abstractLNClass, diagnostics, context );
         if( result || diagnostics != null )
             result &= validateAnyLNClass_uniqueDataObject( abstractLNClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAbstractLNClass_nameAttributeRequired( abstractLNClass, diagnostics, context );
         return result;
     }
 
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Abstract LN Class</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String ABSTRACT_LN_CLASS__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Abstract LN Class</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateAbstractLNClass_nameAttributeRequired( AbstractLNClass abstractLNClass,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.ABSTRACT_LN_CLASS, abstractLNClass, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                ABSTRACT_LN_CLASS__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -408,6 +544,8 @@ public class NsdValidator extends EObjectValidator {
         if( result || diagnostics != null ) result &= validate_UniqueID( anyLNClass, diagnostics, context );
         if( result || diagnostics != null ) result &= validate_EveryKeyUnique( anyLNClass, diagnostics, context );
         if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( anyLNClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( anyLNClass, diagnostics, context );
         if( result || diagnostics != null )
             result &= validateAnyLNClass_uniqueDataObject( anyLNClass, diagnostics, context );
         return result;
@@ -445,7 +583,73 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateApplicableServiceNS( ApplicableServiceNS applicableServiceNS, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( applicableServiceNS, diagnostics, context );
+        if( !validate_NoCircularContainment( applicableServiceNS, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryKeyUnique( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateApplicableServiceNS_versionAttributeRequired( applicableServiceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateApplicableServiceNS_dateAttributeRequired( applicableServiceNS, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the versionAttributeRequired constraint of '<em>Applicable Service NS</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String APPLICABLE_SERVICE_NS__VERSION_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The version attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.version <> null\n" + "}.status";
+
+    /**
+     * Validates the versionAttributeRequired constraint of '<em>Applicable Service NS</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateApplicableServiceNS_versionAttributeRequired( ApplicableServiceNS applicableServiceNS,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.APPLICABLE_SERVICE_NS, applicableServiceNS, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "versionAttributeRequired",
+                APPLICABLE_SERVICE_NS__VERSION_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE,
+                0 );
+    }
+
+    /**
+     * The cached validation expression for the dateAttributeRequired constraint of '<em>Applicable Service NS</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String APPLICABLE_SERVICE_NS__DATE_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The date attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.date <> null\n" + "}.status";
+
+    /**
+     * Validates the dateAttributeRequired constraint of '<em>Applicable Service NS</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateApplicableServiceNS_dateAttributeRequired( ApplicableServiceNS applicableServiceNS,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.APPLICABLE_SERVICE_NS, applicableServiceNS, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "dateAttributeRequired",
+                APPLICABLE_SERVICE_NS__DATE_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -531,7 +735,44 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateBasicType( BasicType basicType, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( basicType, diagnostics, context );
+        if( !validate_NoCircularContainment( basicType, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( basicType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( basicType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( basicType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( basicType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( basicType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( basicType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( basicType, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( basicType, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateBasicType_nameAttributeRequired( basicType, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Basic Type</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String BASIC_TYPE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Basic Type</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateBasicType_nameAttributeRequired( BasicType basicType, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.BASIC_TYPE, basicType, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                BASIC_TYPE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -560,7 +801,10 @@ public class NsdValidator extends EObjectValidator {
         if( result || diagnostics != null ) result &= validate_UniqueID( cdc, diagnostics, context );
         if( result || diagnostics != null ) result &= validate_EveryKeyUnique( cdc, diagnostics, context );
         if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( cdc, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( cdc, diagnostics, context );
         if( result || diagnostics != null ) result &= validateCDC_uniqueCDCChild( cdc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validateCDC_nameAttributeRequired( cdc, diagnostics, context );
         return result;
     }
 
@@ -588,6 +832,29 @@ public class NsdValidator extends EObjectValidator {
                 Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>CDC</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String CDC__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>CDC</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateCDC_nameAttributeRequired( CDC cdc, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.CDC, cdc, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                CDC__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -641,7 +908,43 @@ public class NsdValidator extends EObjectValidator {
      * @generated
      */
     public boolean validateChanges( Changes changes, DiagnosticChain diagnostics, Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( changes, diagnostics, context );
+        if( !validate_NoCircularContainment( changes, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( changes, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryDataValueConforms( changes, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( changes, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( changes, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( changes, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( changes, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( changes, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( changes, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateChanges_versionAttributeRequired( changes, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the versionAttributeRequired constraint of '<em>Changes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String CHANGES__VERSION_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The version attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.version <> null\n" + "}.status";
+
+    /**
+     * Validates the versionAttributeRequired constraint of '<em>Changes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateChanges_versionAttributeRequired( Changes changes, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.CHANGES, changes, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "versionAttributeRequired",
+                CHANGES__VERSION_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -666,8 +969,12 @@ public class NsdValidator extends EObjectValidator {
             result &= validate_EveryKeyUnique( constructedAttribute, diagnostics, context );
         if( result || diagnostics != null )
             result &= validate_EveryMapEntryUnique( constructedAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( constructedAttribute, diagnostics, context );
         if( result || diagnostics != null )
             result &= validateConstructedAttribute_uniqueSubDataAttribute( constructedAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateConstructedAttribute_nameAttributeRequired( constructedAttribute, diagnostics, context );
         return result;
     }
 
@@ -695,6 +1002,29 @@ public class NsdValidator extends EObjectValidator {
                 CONSTRUCTED_ATTRIBUTE__UNIQUE_SUB_DATA_ATTRIBUTE__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Constructed Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String CONSTRUCTED_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Constructed Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateConstructedAttribute_nameAttributeRequired( ConstructedAttribute constructedAttribute,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.CONSTRUCTED_ATTRIBUTE, constructedAttribute, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                CONSTRUCTED_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -777,46 +1107,71 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateDataAttribute( DataAttribute dataAttribute, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( dataAttribute, diagnostics, context );
+        if( !validate_NoCircularContainment( dataAttribute, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateDataAttribute_nameAttributeRequired( dataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateDataAttribute_fcAttributeRequired( dataAttribute, diagnostics, context );
+        return result;
     }
 
     /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Data Attribute</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateDataObject( DataObject dataObject, DiagnosticChain diagnostics,
-            Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( dataObject, diagnostics, context );
-    }
+    protected static final String DATA_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
 
     /**
+     * Validates the nameAttributeRequired constraint of '<em>Data Attribute</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateDataSetMemberOf( DataSetMemberOf dataSetMemberOf, DiagnosticChain diagnostics,
-            Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( dataSetMemberOf, diagnostics, context );
+    public boolean validateDataAttribute_nameAttributeRequired( DataAttribute dataAttribute,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.DATA_ATTRIBUTE, dataAttribute, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                DATA_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
+     * The cached validation expression for the fcAttributeRequired constraint of '<em>Data Attribute</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateDoc( Doc doc, DiagnosticChain diagnostics, Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( doc, diagnostics, context );
-    }
+    protected static final String DATA_ATTRIBUTE__FC_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The fc attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.fc <> null\n" + "}.status";
 
     /**
+     * Validates the fcAttributeRequired constraint of '<em>Data Attribute</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateDocumentedClass( DocumentedClass documentedClass, DiagnosticChain diagnostics,
+    public boolean validateDataAttribute_fcAttributeRequired( DataAttribute dataAttribute, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( documentedClass, diagnostics, context );
+        return validate( NsdPackage.Literals.DATA_ATTRIBUTE, dataAttribute, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "fcAttributeRequired",
+                DATA_ATTRIBUTE__FC_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -824,73 +1179,71 @@ public class NsdValidator extends EObjectValidator {
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateEnumeration( Enumeration enumeration, DiagnosticChain diagnostics,
+    public boolean validateDataObject( DataObject dataObject, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        if( !validate_NoCircularContainment( enumeration, diagnostics, context ) ) return false;
-        boolean result = validate_EveryMultiplicityConforms( enumeration, diagnostics, context );
+        if( !validate_NoCircularContainment( dataObject, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( dataObject, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryDataValueConforms( enumeration, diagnostics, context );
+            result &= validate_EveryDataValueConforms( dataObject, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryReferenceIsContained( enumeration, diagnostics, context );
+            result &= validate_EveryReferenceIsContained( dataObject, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryBidirectionalReferenceIsPaired( enumeration, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( enumeration, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_UniqueID( enumeration, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( enumeration, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( enumeration, diagnostics, context );
+            result &= validate_EveryBidirectionalReferenceIsPaired( dataObject, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( dataObject, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( dataObject, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( dataObject, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( dataObject, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validateEnumeration_uniqueLiteralName( enumeration, diagnostics, context );
+            result &= validateDataObject_nameAttributeRequired( dataObject, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validateEnumeration_uniqueLiteralVal( enumeration, diagnostics, context );
+            result &= validateDataObject_typeAttributeRequired( dataObject, diagnostics, context );
         return result;
     }
 
     /**
-     * The cached validation expression for the uniqueLiteralName constraint of '<em>Enumeration</em>'.
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Data Object</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected static final String ENUMERATION__UNIQUE_LITERAL_NAME__EEXPRESSION = "Tuple {\n"
-            + "\tmessage : String = 'For an Enumeration, there shall not be two Literal sub-elements with same name.',\n"
-            + "\tstatus : Boolean = \n" + "\t\t\t-- TODO: inherited literals should be taken into account\n"
-            + "\t\t\t-- For this, explicit links have to be created first\n"
-            + "\t\t\tself.literal->isUnique( l : Literal | l.name )\n" + "}.status";
+    protected static final String DATA_OBJECT__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
 
     /**
-     * Validates the uniqueLiteralName constraint of '<em>Enumeration</em>'.
+     * Validates the nameAttributeRequired constraint of '<em>Data Object</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateEnumeration_uniqueLiteralName( Enumeration enumeration, DiagnosticChain diagnostics,
+    public boolean validateDataObject_nameAttributeRequired( DataObject dataObject, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate( NsdPackage.Literals.ENUMERATION, enumeration, diagnostics, context,
-                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "uniqueLiteralName",
-                ENUMERATION__UNIQUE_LITERAL_NAME__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+        return validate( NsdPackage.Literals.DATA_OBJECT, dataObject, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                DATA_OBJECT__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
-     * The cached validation expression for the uniqueLiteralVal constraint of '<em>Enumeration</em>'.
+     * The cached validation expression for the typeAttributeRequired constraint of '<em>Data Object</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected static final String ENUMERATION__UNIQUE_LITERAL_VAL__EEXPRESSION = "Tuple {\n"
-            + "\tmessage : String = 'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.',\n"
-            + "\tstatus : Boolean = \n" + "\t\t\tself.literal->isUnique( l : Literal | l.literalVal )\n" + "}.status";
+    protected static final String DATA_OBJECT__TYPE_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The type attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.type <> null\n" + "}.status";
 
     /**
-     * Validates the uniqueLiteralVal constraint of '<em>Enumeration</em>'.
+     * Validates the typeAttributeRequired constraint of '<em>Data Object</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateEnumeration_uniqueLiteralVal( Enumeration enumeration, DiagnosticChain diagnostics,
+    public boolean validateDataObject_typeAttributeRequired( DataObject dataObject, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate( NsdPackage.Literals.ENUMERATION, enumeration, diagnostics, context,
-                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "uniqueLiteralVal",
-                ENUMERATION__UNIQUE_LITERAL_VAL__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+        return validate( NsdPackage.Literals.DATA_OBJECT, dataObject, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "typeAttributeRequired",
+                DATA_OBJECT__TYPE_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -898,50 +1251,253 @@ public class NsdValidator extends EObjectValidator {
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateEnumerations( Enumerations enumerations, DiagnosticChain diagnostics,
+    public boolean validateDataSetMemberOf( DataSetMemberOf dataSetMemberOf, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        if( !validate_NoCircularContainment( enumerations, diagnostics, context ) ) return false;
-        boolean result = validate_EveryMultiplicityConforms( enumerations, diagnostics, context );
+        if( !validate_NoCircularContainment( dataSetMemberOf, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( dataSetMemberOf, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryDataValueConforms( enumerations, diagnostics, context );
+            result &= validate_EveryDataValueConforms( dataSetMemberOf, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryReferenceIsContained( enumerations, diagnostics, context );
+            result &= validate_EveryReferenceIsContained( dataSetMemberOf, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryBidirectionalReferenceIsPaired( enumerations, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( enumerations, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_UniqueID( enumerations, diagnostics, context );
-        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( enumerations, diagnostics, context );
+            result &= validate_EveryBidirectionalReferenceIsPaired( dataSetMemberOf, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validate_EveryMapEntryUnique( enumerations, diagnostics, context );
+            result &= validate_EveryProxyResolves( dataSetMemberOf, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( dataSetMemberOf, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( dataSetMemberOf, diagnostics, context );
         if( result || diagnostics != null )
-            result &= validateEnumerations_uniqueEnumeration( enumerations, diagnostics, context );
+            result &= validate_EveryMapEntryUnique( dataSetMemberOf, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateDataSetMemberOf_cbAttributeRequired( dataSetMemberOf, diagnostics, context );
         return result;
     }
 
     /**
-     * The cached validation expression for the uniqueEnumeration constraint of '<em>Enumerations</em>'.
+     * The cached validation expression for the cbAttributeRequired constraint of '<em>Data Set Member Of</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected static final String ENUMERATIONS__UNIQUE_ENUMERATION__EEXPRESSION = "Tuple {\n"
-            + "\tmessage : String = 'Within an NS, there shall not be two Enumeration sub-elements with same name.',\n"
-            + "\tstatus : Boolean = \n" + "\t\t\t-- TODO: DependsOn NS should be taken into account ?\n"
-            + "\t\t\t-- For this, explicit links have to be created first\n"
-            + "\t\t\t-- Then, may be this constraint should be in NS and not in Enumerations ?\n"
-            + "\t\t\tself.enumeration->isUnique( e : Enumeration | e.name )\n" + "}.status";
+    protected static final String DATA_SET_MEMBER_OF__CB_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The cb attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.cb <> null\n" + "}.status";
 
     /**
-     * Validates the uniqueEnumeration constraint of '<em>Enumerations</em>'.
+     * Validates the cbAttributeRequired constraint of '<em>Data Set Member Of</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateEnumerations_uniqueEnumeration( Enumerations enumerations, DiagnosticChain diagnostics,
-            Map< Object, Object > context ) {
-        return validate( NsdPackage.Literals.ENUMERATIONS, enumerations, diagnostics, context,
-                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "uniqueEnumeration",
-                ENUMERATIONS__UNIQUE_ENUMERATION__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    public boolean validateDataSetMemberOf_cbAttributeRequired( DataSetMemberOf dataSetMemberOf,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.DATA_SET_MEMBER_OF, dataSetMemberOf, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "cbAttributeRequired",
+                DATA_SET_MEMBER_OF__CB_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateDoc( Doc doc, DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        if( !validate_NoCircularContainment( doc, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryDataValueConforms( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryReferenceIsContained( doc, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( doc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validateDoc_idAttributeRequired( doc, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the idAttributeRequired constraint of '<em>Doc</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String DOC__ID_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The id attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.id <> null\n" + "}.status";
+
+    /**
+     * Validates the idAttributeRequired constraint of '<em>Doc</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateDoc_idAttributeRequired( Doc doc, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.DOC, doc, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "idAttributeRequired",
+                DOC__ID_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateDocumentedClass( DocumentedClass documentedClass, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate_EveryDefaultConstraint( documentedClass, diagnostics, context );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateEnumeration( Enumeration enumeration, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        if( !validate_NoCircularContainment( enumeration, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( enumeration, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( enumeration, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( enumeration, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( enumeration, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateEnumeration_uniqueLiteralName( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateEnumeration_uniqueLiteralVal( enumeration, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateEnumeration_nameAttributeRequired( enumeration, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the uniqueLiteralName constraint of '<em>Enumeration</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String ENUMERATION__UNIQUE_LITERAL_NAME__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'For an Enumeration, there shall not be two Literal sub-elements with same name.',\n"
+            + "\tstatus : Boolean = \n" + "\t\t\t-- TODO: inherited literals should be taken into account\n"
+            + "\t\t\t-- For this, explicit links have to be created first\n"
+            + "\t\t\tself.literal->isUnique( l : Literal | l.name )\n" + "}.status";
+
+    /**
+     * Validates the uniqueLiteralName constraint of '<em>Enumeration</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateEnumeration_uniqueLiteralName( Enumeration enumeration, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.ENUMERATION, enumeration, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "uniqueLiteralName",
+                ENUMERATION__UNIQUE_LITERAL_NAME__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * The cached validation expression for the uniqueLiteralVal constraint of '<em>Enumeration</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String ENUMERATION__UNIQUE_LITERAL_VAL__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'For an Enumeration, there shall not be two Literal sub-elements with same literalVal.',\n"
+            + "\tstatus : Boolean = \n" + "\t\t\tself.literal->isUnique( l : Literal | l.literalVal )\n" + "}.status";
+
+    /**
+     * Validates the uniqueLiteralVal constraint of '<em>Enumeration</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateEnumeration_uniqueLiteralVal( Enumeration enumeration, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.ENUMERATION, enumeration, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "uniqueLiteralVal",
+                ENUMERATION__UNIQUE_LITERAL_VAL__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Enumeration</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String ENUMERATION__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Enumeration</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateEnumeration_nameAttributeRequired( Enumeration enumeration, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.ENUMERATION, enumeration, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                ENUMERATION__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateEnumerations( Enumerations enumerations, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        if( !validate_NoCircularContainment( enumerations, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( enumerations, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( enumerations, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( enumerations, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( enumerations, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( enumerations, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( enumerations, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( enumerations, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( enumerations, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateEnumerations_uniqueEnumeration( enumerations, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the uniqueEnumeration constraint of '<em>Enumerations</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String ENUMERATIONS__UNIQUE_ENUMERATION__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'Within an NS, there shall not be two Enumeration sub-elements with same name.',\n"
+            + "\tstatus : Boolean = \n" + "\t\t\t-- TODO: DependsOn NS should be taken into account ?\n"
+            + "\t\t\t-- For this, explicit links have to be created first\n"
+            + "\t\t\t-- Then, may be this constraint should be in NS and not in Enumerations ?\n"
+            + "\t\t\tself.enumeration->isUnique( e : Enumeration | e.name )\n" + "}.status";
+
+    /**
+     * Validates the uniqueEnumeration constraint of '<em>Enumerations</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateEnumerations_uniqueEnumeration( Enumerations enumerations, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.ENUMERATIONS, enumerations, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "uniqueEnumeration",
+                ENUMERATIONS__UNIQUE_ENUMERATION__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -951,7 +1507,49 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateFunctionalConstraint( FunctionalConstraint functionalConstraint, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( functionalConstraint, diagnostics, context );
+        if( !validate_NoCircularContainment( functionalConstraint, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryKeyUnique( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( functionalConstraint, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateFunctionalConstraint_abbreviationAttributeRequired( functionalConstraint, diagnostics,
+                    context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the abbreviationAttributeRequired constraint of '<em>Functional Constraint</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String FUNCTIONAL_CONSTRAINT__ABBREVIATION_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The abbreviation attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.abbreviation <> null\n" + "}.status";
+
+    /**
+     * Validates the abbreviationAttributeRequired constraint of '<em>Functional Constraint</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateFunctionalConstraint_abbreviationAttributeRequired(
+            FunctionalConstraint functionalConstraint, DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.FUNCTIONAL_CONSTRAINT, functionalConstraint, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "abbreviationAttributeRequired",
+                FUNCTIONAL_CONSTRAINT__ABBREVIATION_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR,
+                DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1022,7 +1620,68 @@ public class NsdValidator extends EObjectValidator {
      * @generated
      */
     public boolean validateLiteral( Literal literal, DiagnosticChain diagnostics, Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( literal, diagnostics, context );
+        if( !validate_NoCircularContainment( literal, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( literal, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryDataValueConforms( literal, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( literal, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( literal, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( literal, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( literal, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( literal, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( literal, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateLiteral_nameAttributeRequired( literal, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateLiteral_literalValAttributeRequired( literal, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Literal</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String LITERAL__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Literal</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateLiteral_nameAttributeRequired( Literal literal, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.LITERAL, literal, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                LITERAL__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * The cached validation expression for the literalValAttributeRequired constraint of '<em>Literal</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String LITERAL__LITERAL_VAL_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The literalVal attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.literalVal <> null\n" + "}.status";
+
+    /**
+     * Validates the literalValAttributeRequired constraint of '<em>Literal</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateLiteral_literalValAttributeRequired( Literal literal, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.LITERAL, literal, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "literalValAttributeRequired",
+                LITERAL__LITERAL_VAL_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1042,11 +1701,38 @@ public class NsdValidator extends EObjectValidator {
         if( result || diagnostics != null ) result &= validate_UniqueID( lnClass, diagnostics, context );
         if( result || diagnostics != null ) result &= validate_EveryKeyUnique( lnClass, diagnostics, context );
         if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( lnClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( lnClass, diagnostics, context );
         if( result || diagnostics != null )
             result &= validateAnyLNClass_uniqueDataObject( lnClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateLNClass_nameAttributeRequired( lnClass, diagnostics, context );
         return result;
     }
 
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>LN Class</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String LN_CLASS__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>LN Class</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateLNClass_nameAttributeRequired( LNClass lnClass, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.LN_CLASS, lnClass, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                LN_CLASS__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1135,7 +1821,21 @@ public class NsdValidator extends EObjectValidator {
      * @generated
      */
     public boolean validateNS( NS ns, DiagnosticChain diagnostics, Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( ns, diagnostics, context );
+        if( !validate_NoCircularContainment( ns, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( ns, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryDataValueConforms( ns, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryReferenceIsContained( ns, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( ns, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( ns, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( ns, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( ns, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( ns, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( ns, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( ns, diagnostics, context );
+        return result;
     }
 
     /**
@@ -1144,7 +1844,46 @@ public class NsdValidator extends EObjectValidator {
      * @generated
      */
     public boolean validateNSDoc( NSDoc nsDoc, DiagnosticChain diagnostics, Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( nsDoc, diagnostics, context );
+        if( !validate_NoCircularContainment( nsDoc, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( nsDoc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryDataValueConforms( nsDoc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryReferenceIsContained( nsDoc, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( nsDoc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( nsDoc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( nsDoc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( nsDoc, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( nsDoc, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( nsDoc, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( nsDoc, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateNSDoc_langAttributeRequired( nsDoc, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the langAttributeRequired constraint of '<em>NS Doc</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String NS_DOC__LANG_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The lang attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.lang <> null\n" + "}.status";
+
+    /**
+     * Validates the langAttributeRequired constraint of '<em>NS Doc</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateNSDoc_langAttributeRequired( NSDoc nsDoc, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.NS_DOC, nsDoc, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "langAttributeRequired",
+                NS_DOC__LANG_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1154,7 +1893,47 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validatePresenceCondition( PresenceCondition presenceCondition, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( presenceCondition, diagnostics, context );
+        if( !validate_NoCircularContainment( presenceCondition, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryKeyUnique( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( presenceCondition, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validatePresenceCondition_nameAttributeRequired( presenceCondition, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Presence Condition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String PRESENCE_CONDITION__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Presence Condition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validatePresenceCondition_nameAttributeRequired( PresenceCondition presenceCondition,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.PRESENCE_CONDITION, presenceCondition, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                PRESENCE_CONDITION__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1215,7 +1994,44 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateServiceCDC( ServiceCDC serviceCDC, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceCDC, diagnostics, context );
+        if( !validate_NoCircularContainment( serviceCDC, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( serviceCDC, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateServiceCDC_cdcAttributeRequired( serviceCDC, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the cdcAttributeRequired constraint of '<em>Service CDC</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SERVICE_CDC__CDC_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The cdc attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.cdc <> null\n" + "}.status";
+
+    /**
+     * Validates the cdcAttributeRequired constraint of '<em>Service CDC</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateServiceCDC_cdcAttributeRequired( ServiceCDC serviceCDC, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SERVICE_CDC, serviceCDC, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "cdcAttributeRequired",
+                SERVICE_CDC__CDC_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1251,9 +2067,14 @@ public class NsdValidator extends EObjectValidator {
             result &= validate_EveryKeyUnique( serviceConstructedAttribute, diagnostics, context );
         if( result || diagnostics != null )
             result &= validate_EveryMapEntryUnique( serviceConstructedAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( serviceConstructedAttribute, diagnostics, context );
         if( result || diagnostics != null )
             result &= validateConstructedAttribute_uniqueSubDataAttribute( serviceConstructedAttribute, diagnostics,
                     context );
+        if( result || diagnostics != null )
+            result &= validateConstructedAttribute_nameAttributeRequired( serviceConstructedAttribute, diagnostics,
+                    context );
         return result;
     }
 
@@ -1274,7 +2095,72 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateServiceDataAttribute( ServiceDataAttribute serviceDataAttribute, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceDataAttribute, diagnostics, context );
+        if( !validate_NoCircularContainment( serviceDataAttribute, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryKeyUnique( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateServiceDataAttribute_nameAttributeRequired( serviceDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateServiceDataAttribute_fcAttributeRequired( serviceDataAttribute, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Service Data Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SERVICE_DATA_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Service Data Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateServiceDataAttribute_nameAttributeRequired( ServiceDataAttribute serviceDataAttribute,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SERVICE_DATA_ATTRIBUTE, serviceDataAttribute, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                SERVICE_DATA_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * The cached validation expression for the fcAttributeRequired constraint of '<em>Service Data Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SERVICE_DATA_ATTRIBUTE__FC_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The fc attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.fc <> null\n" + "}.status";
+
+    /**
+     * Validates the fcAttributeRequired constraint of '<em>Service Data Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateServiceDataAttribute_fcAttributeRequired( ServiceDataAttribute serviceDataAttribute,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SERVICE_DATA_ATTRIBUTE, serviceDataAttribute, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "fcAttributeRequired",
+                SERVICE_DATA_ATTRIBUTE__FC_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1284,7 +2170,23 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateServiceNS( ServiceNS serviceNS, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceNS, diagnostics, context );
+        if( !validate_NoCircularContainment( serviceNS, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( serviceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( serviceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( serviceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( serviceNS, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( serviceNS, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( serviceNS, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( serviceNS, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( serviceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( serviceNS, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( serviceNS, diagnostics, context );
+        return result;
     }
 
     /**
@@ -1294,7 +2196,25 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateServiceNsUsage( ServiceNsUsage serviceNsUsage, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceNsUsage, diagnostics, context );
+        if( !validate_NoCircularContainment( serviceNsUsage, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( serviceNsUsage, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( serviceNsUsage, diagnostics, context );
+        return result;
     }
 
     /**
@@ -1304,7 +2224,46 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateServiceParameter( ServiceParameter serviceParameter, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceParameter, diagnostics, context );
+        if( !validate_NoCircularContainment( serviceParameter, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( serviceParameter, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateServiceParameter_nameAttributeRequired( serviceParameter, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Service Parameter</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SERVICE_PARAMETER__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Service Parameter</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateServiceParameter_nameAttributeRequired( ServiceParameter serviceParameter,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SERVICE_PARAMETER, serviceParameter, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                SERVICE_PARAMETER__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1324,7 +2283,46 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateSubDataAttribute( SubDataAttribute subDataAttribute, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( subDataAttribute, diagnostics, context );
+        if( !validate_NoCircularContainment( subDataAttribute, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( subDataAttribute, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateSubDataAttribute_nameAttributeRequired( subDataAttribute, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Sub Data Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SUB_DATA_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Sub Data Attribute</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateSubDataAttribute_nameAttributeRequired( SubDataAttribute subDataAttribute,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SUB_DATA_ATTRIBUTE, subDataAttribute, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                SUB_DATA_ATTRIBUTE__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1334,7 +2332,71 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateSubDataObject( SubDataObject subDataObject, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( subDataObject, diagnostics, context );
+        if( !validate_NoCircularContainment( subDataObject, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( subDataObject, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( subDataObject, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateSubDataObject_nameAttributeRequired( subDataObject, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateSubDataObject_typeAttributeRequired( subDataObject, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the nameAttributeRequired constraint of '<em>Sub Data Object</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SUB_DATA_OBJECT__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The name attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.name <> null\n" + "}.status";
+
+    /**
+     * Validates the nameAttributeRequired constraint of '<em>Sub Data Object</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateSubDataObject_nameAttributeRequired( SubDataObject subDataObject,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SUB_DATA_OBJECT, subDataObject, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "nameAttributeRequired",
+                SUB_DATA_OBJECT__NAME_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * The cached validation expression for the typeAttributeRequired constraint of '<em>Sub Data Object</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String SUB_DATA_OBJECT__TYPE_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The type attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.type <> null\n" + "}.status";
+
+    /**
+     * Validates the typeAttributeRequired constraint of '<em>Sub Data Object</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateSubDataObject_typeAttributeRequired( SubDataObject subDataObject,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.SUB_DATA_OBJECT, subDataObject, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "typeAttributeRequired",
+                SUB_DATA_OBJECT__TYPE_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1344,7 +2406,44 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateTitledClass( TitledClass titledClass, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( titledClass, diagnostics, context );
+        if( !validate_NoCircularContainment( titledClass, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( titledClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( titledClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( titledClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( titledClass, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryProxyResolves( titledClass, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( titledClass, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryKeyUnique( titledClass, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_EveryMapEntryUnique( titledClass, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateTitledClass_titleIDAttributeRequired( titledClass, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the titleIDAttributeRequired constraint of '<em>Titled Class</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String TITLED_CLASS__TITLE_ID_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The titleID attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.titleID <> null\n" + "}.status";
+
+    /**
+     * Validates the titleIDAttributeRequired constraint of '<em>Titled Class</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateTitledClass_titleIDAttributeRequired( TitledClass titledClass, DiagnosticChain diagnostics,
+            Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.TITLED_CLASS, titledClass, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "titleIDAttributeRequired",
+                TITLED_CLASS__TITLE_ID_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**
@@ -1364,7 +2463,72 @@ public class NsdValidator extends EObjectValidator {
      */
     public boolean validateAgNSIdentification( AgNSIdentification agNSIdentification, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( agNSIdentification, diagnostics, context );
+        if( !validate_NoCircularContainment( agNSIdentification, diagnostics, context ) ) return false;
+        boolean result = validate_EveryMultiplicityConforms( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryDataValueConforms( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryReferenceIsContained( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryBidirectionalReferenceIsPaired( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryProxyResolves( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null ) result &= validate_UniqueID( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryKeyUnique( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validate_EveryMapEntryUnique( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_idAttributeRequired( agNSIdentification, diagnostics, context );
+        if( result || diagnostics != null )
+            result &= validateAgNSIdentification_versionAttributeRequired( agNSIdentification, diagnostics, context );
+        return result;
+    }
+
+    /**
+     * The cached validation expression for the idAttributeRequired constraint of '<em>Ag NS Identification</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String AG_NS_IDENTIFICATION__ID_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The id attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.id <> null\n" + "}.status";
+
+    /**
+     * Validates the idAttributeRequired constraint of '<em>Ag NS Identification</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateAgNSIdentification_idAttributeRequired( AgNSIdentification agNSIdentification,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.AG_NS_IDENTIFICATION, agNSIdentification, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "idAttributeRequired",
+                AG_NS_IDENTIFICATION__ID_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
+    }
+
+    /**
+     * The cached validation expression for the versionAttributeRequired constraint of '<em>Ag NS Identification</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static final String AG_NS_IDENTIFICATION__VERSION_ATTRIBUTE_REQUIRED__EEXPRESSION = "Tuple {\n"
+            + "\tmessage : String = 'The version attribute is required',\n" + "\tstatus : Boolean = \n"
+            + "\t\t\tself.version <> null\n" + "}.status";
+
+    /**
+     * Validates the versionAttributeRequired constraint of '<em>Ag NS Identification</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean validateAgNSIdentification_versionAttributeRequired( AgNSIdentification agNSIdentification,
+            DiagnosticChain diagnostics, Map< Object, Object > context ) {
+        return validate( NsdPackage.Literals.AG_NS_IDENTIFICATION, agNSIdentification, diagnostics, context,
+                "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot", "versionAttributeRequired",
+                AG_NS_IDENTIFICATION__VERSION_ATTRIBUTE_REQUIRED__EEXPRESSION, Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0 );
     }
 
     /**