<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.eclipse.gmf.runtime.emf.type.core">
<annotation>
      <appInfo>
         <meta.schema plugin="org.eclipse.gmf.runtime.emf.type.core" id="elementTypes" name="Element Types"/>
      </appInfo>
      <documentation>
         The &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.elementTypes&lt;/code&gt; extension point is used to define application specializations of metamodel types for the following purposes:
&lt;OL&gt;
&lt;LI&gt;extend (but not replace) the basic metamodel editing behaviour for elements that match such  specializations, and&lt;/LI&gt;
&lt;LI&gt; contribute icons and display names for such specializations&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;
The element type specializations may be used for menu or tool palette items for element creation.
&lt;P&gt;
Editing behaviour can be extended by associated an &lt;code&gt;editHelperAdvice&lt;/code&gt; to a specialization, or
by contributing an &lt;code&gt;adviceBinding&lt;/code&gt; that binds an &lt;code&gt;editHelperAdvice&lt;/code&gt; to an element type.  Edit helper advice is applied &apos;before&apos; and/or &apos;after&apos; the behaviour that is provided by the default metamodel editing behaviour.
&lt;P&gt;
Custom element types may be created by declaring an &lt;code&gt;IElementTypeFactory&lt;/code&gt; which is responsible for creating all element types declaring the same &apos;kind&apos; as the factory.  Custom parameters may be associated with element types created this way.
      </documentation>
   </annotation>

   <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>

   <element name="extension">
      <complexType>
         <sequence>
            <element ref="metamodel" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="elementTypeFactory" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="specializationType" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="point" type="string" use="required">
            <annotation>
               <documentation>
                  The extension point name, &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.elementTypes&lt;/code&gt;.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string">
            <annotation>
               <documentation>
                  The extension ID.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  The extension name.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="metamodel">
      <annotation>
         <documentation>
            This element is used to identify the metamodel for which a set of element types and advice bindings are defined.  All eclass and eContainmentFeature values specified in the types must be found within this metamodel.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="metamodelType" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="specializationType" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="adviceBinding" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="nsURI" type="string" use="required">
            <annotation>
               <documentation>
                  The namespace URI of the metamodel.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="elementTypeFactory">
      <annotation>
         <documentation>
            This element is used to contribute a factory that will create element types declaring the same &apos;kind&apos; as the factory.  Custom parameters may be associated with element types created this way.
         </documentation>
      </annotation>
      <complexType>
         <attribute name="factory" type="string" use="required">
            <annotation>
               <documentation>
                  The fully qualified name of a class implementing the &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.IElementTypeFactory&lt;/code&gt;.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.gmf.runtime.emf.type.core.IElementTypeFactory"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="kind" type="string" use="required">
            <annotation>
               <documentation>
                  String identifying the kind of element that will be created by this factory.  Element types will declare the same &apos;kind&apos; string if they want to be created by this factory.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="params" type="string">
            <annotation>
               <documentation>
                  Comma separated list of custom parameters supported by this element type factory. Parameter values will be read from the element type element and passed to the factory when they are created.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="metamodelType">
      <annotation>
         <documentation>
            This element is used to define a new metamodel element type.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="param" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  The unique identifier for this metamodel element type.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="icon" type="string">
            <annotation>
               <documentation>
                  The path of this metamodel element type icon, relative to this plugin location.
               </documentation>
               <appInfo>
                  <meta.attribute kind="resource"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  The I18N display name for this metamodel element type.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="eclass" type="string" use="required">
            <annotation>
               <documentation>
                  The name of an &lt;code&gt;EClass&lt;/code&gt; instance from the metamodel specified in the enclosing metamodel element.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="edithelper" type="string">
            <annotation>
               <documentation>
                  The fully qualified name of a class implementing &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.edit.IEditHelper&lt;/code&gt;.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.gmf.runtime.emf.core.type.IEditHelper"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="kind" type="string">
            <annotation>
               <documentation>
                  The kind of element. Used to identify the &lt;code&gt;IElementTypeFactory&lt;/code&gt; that is used to instantiate the element type.  If it is not specified a default factory will be used to create the element.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="specializationType">
      <annotation>
         <documentation>
            This element is used to define a new specialization element type.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="specializes" minOccurs="1" maxOccurs="unbounded"/>
            <choice minOccurs="0" maxOccurs="1">
               <element ref="matcher"/>
               <element ref="enablement"/>
            </choice>
            <element ref="param" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="eContainer" minOccurs="0" maxOccurs="1"/>
         </sequence>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  The unique specialization edit type identifier.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="icon" type="string">
            <annotation>
               <documentation>
                  The path of this specialization element type icon, relative to this plugin location.
               </documentation>
               <appInfo>
                  <meta.attribute kind="resource"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  The I18N display name for this specialization element type.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="edithelperadvice" type="string">
            <annotation>
               <documentation>
                  The fully qualified name of a class that implements &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.edit.IEditHelperAdvice&lt;/code&gt;.  This attribute is used to specify the class that provides editing advice for elements of this type. Editing advice can be contributed before and/or after the default editing behaviour.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.gmf.runtime.emf.type.core.edithelper.IEditHelperAdvice"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="kind" type="string">
            <annotation>
               <documentation>
                  The kind of element. Used to identify the &lt;code&gt;IElementTypeFactory&lt;/code&gt; that is used to instantiate the element type.  If it is not specified a default factory will be used to create the element.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="adviceBinding">
      <annotation>
         <documentation>
            This element is used to bind an &lt;code&gt;IEditHelperAdvice&lt;/code&gt; with an element type.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <choice minOccurs="0" maxOccurs="1">
               <element ref="matcher"/>
               <element ref="enablement"/>
            </choice>
            <element ref="eContainer" minOccurs="0" maxOccurs="1"/>
         </sequence>
         <attribute name="typeId" type="string" use="required">
            <annotation>
               <documentation>
                  The element type identifier.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  The fully qualified name of a class that implements &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.edit.IEditHelperAdvice&lt;/code&gt;.  This attribute is used to specify the class that provides editing advice for elements of this type. Editing advice can be contributed before and/or after the default editing behaviour.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.gmf.runtime.emf.type.core.edithelper.IEditHelperAdvice"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="inheritance" use="default" value="none">
            <annotation>
               <documentation>
                  Indicates the related element types that should inherite this advice.  Does not apply to specialization types, which always inherit (all).

&lt;UL&gt;
&lt;LI&gt;&lt;b&gt;all&lt;/b&gt; - advice is inherited by all metamodel types whose EClasses are subtypes of the metamodel type to which it was applied, and to all specializations of those metamodel types.&lt;/LI&gt;

&lt;LI&gt;&lt;b&gt;none&lt;/b&gt; - advice is not inherited by related metamodel types.  It is applied only to the metatmodel type and its specializations.&lt;/LI&gt;
&lt;/UL&gt;
               </documentation>
            </annotation>
            <simpleType>
               <restriction base="string">
                  <enumeration value="all">
                  </enumeration>
                  <enumeration value="none">
                  </enumeration>
               </restriction>
            </simpleType>
         </attribute>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  The unique ID of this advice binding.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="specializes">
      <annotation>
         <documentation>
            This element is used to identify another element type (metamodel or specialization) that this type specializes.
         </documentation>
      </annotation>
      <complexType>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  Identifier of the metamodel type or specialization type that this type specializes.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="matcher">
      <annotation>
         <documentation>
            This element is used to specify the class that will determine whether or not an existing model element matches this type.
         </documentation>
      </annotation>
      <complexType>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  The fully qualified name of a class that implements &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core.IElementMatcher&lt;/code&gt;.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.gmf.runtime.emf.core.type.IElementMatcher"/>
               </appInfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="eContainer">
      <annotation>
         <documentation>
            This element is used to describe the qualities of the container model element for which this edit helper advice is relevant.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="eContainmentFeature" minOccurs="0" maxOccurs="unbounded"/>
            <choice minOccurs="0" maxOccurs="1">
               <element ref="matcher"/>
               <element ref="enablement"/>
            </choice>
         </sequence>
      </complexType>
   </element>

   <element name="eContainmentFeature">
      <annotation>
         <documentation>
            This element is used to specify the containment feature for model elements for which this edit helper advice is relevant.
         </documentation>
      </annotation>
      <complexType>
         <attribute name="qname" type="string" use="required">
            <annotation>
               <documentation>
                  The name of the containment feature qualified by its EClass name.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="param">
      <annotation>
         <documentation>
            A custom parameter name and value pair.
         </documentation>
      </annotation>
      <complexType>
         <attribute name="name" type="string" use="required">
            <annotation>
               <documentation>
                  The parameter name.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="value" type="string" use="required">
            <annotation>
               <documentation>
                  The parameter value.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <annotation>
      <appInfo>
         <meta.section type="since"/>
      </appInfo>
      <documentation>
         7.0
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="examples"/>
      </appInfo>
      <documentation>
         &lt;PRE&gt;
&lt;extension point=&quot;org.eclipse.gmf.runtime.emf.type.core.elementTypes&quot;&gt;
   
        &lt;metamodel
                nsURI=&quot;http://www.eclipse.org/emf/2002/Ecore&quot;&gt;
             &lt;metamodelType
                     id=&quot;org.eclipse.gmf.runtime.emf.type.core.eobject&quot;     
                     icon=&quot;icons/eobject.gif&quot;
                     name=&quot;%EObject&quot;
                     eclass=&quot;EObject&quot;
                     edithelper =&quot;org.eclipse.gmf.runtime.emf.type.core.EObjectEditHelper&quot;&gt; 
             &lt;/metamodelType&gt;
 
             &lt;specializationType
                     id=&quot;org.eclipse.gmf.runtime.emf.type.core.special&quot;
                     icon=&quot;icons/special.gif&quot;
                     name=&quot;%Special&quot;
                     edithelperadvice=&quot;org.eclipse.gmf.runtime.emf.type.core.SpecialEditHelperAdvice&quot;&gt; 
                 &lt;specializes id=&quot;org.eclipse.gmf.runtime.emf.type.core.eobject&quot;/&gt;
                 &lt;matcher class=&quot;org.eclipse.gmf.runtime.emf.type.core.specialMatcher&quot;/&gt;
             &lt;/specializationType&gt;
 
             &lt;specializationType
                     id=&quot;org.eclipse.gmf.runtime.emf.type.core.special2&quot;
                     icon=&quot;icons/special2.gif&quot;
                     name=&quot;%Special2&quot;
                     edithelperadvice=&quot;org.eclipse.gmf.runtime.emf.type.core.Special2EditHelperAdvice&quot;&gt;
                 &lt;specializes id=&quot;org.eclipse.gmf.runtime.emf.type.core.eobject&quot;/&gt;
                 &lt;eContainer&gt;
                     &lt;enablement&gt;
                         &lt;test property=&quot;special2&quot; value=&quot;special2Value&quot;/&gt;
                     &lt;/enablement&gt;
                 &lt;/eContainer&gt;
                 &lt;enablement&gt;
                    &lt;test property=&quot;special2&quot; value=&quot;special2Value&quot;/&gt;
                 &lt;/enablement&gt;
             &lt;/specializationType&gt;
 
             &lt;specializationType
                     id=&quot;org.eclipse.gmf.runtime.emf.type.core.customType&quot;
                     icon=&quot;icons/customType.gif&quot;
                     name=&quot;%CustomType&quot;
                     kind=&quot;org.eclipse.gmf.runtime.emf.type.core.CustomElementKind&quot;
                     edithelperadvice=&quot;org.eclipse.gmf.runtime.emf.type.core.CustomEditHelperAdvice&quot;&gt; 
                 &lt;specializes id=&quot;org.eclipse.gmf.runtime.emf.type.core.eobject&quot;/&gt;
                 &lt;param 
                         name=&quot;customParameter1&quot; 
                         value=&quot;value1&quot;&gt;
                 &lt;/param&gt;
                 &lt;param 
                         name=&quot;customParameter2&quot; 
                         value=&quot;value2&quot;&gt;
                 &lt;/param&gt;
             &lt;/specializationType&gt;
             
             &lt;adviceBinding
                  id=&quot;org.eclipse.gmf.runtime.emf.type.core.advisedType&quot;
                  typeId=&quot;org.eclipse.gmf.runtime.emf.type.core.eobject&quot;
                  class=&quot;org.eclipse.gmf.runtime.emf.type.core.advisedTypeEditHelperAdvice&quot;
                  applyToSubtypes=&quot;false&quot;&gt; 
                  &lt;eContainer&gt;
                       &lt;enablement&gt;
                            &lt;test property=&quot;advised&quot; value=&quot;advisedValue&quot;/&gt;
                       &lt;/enablement&gt;
                  &lt;/eContainer&gt;
              &lt;/adviceBinding&gt; 
        &lt;/metamodel&gt;
        
         &lt;elementTypeFactory
               factory=&quot;org.eclipse.gmf.runtime.emf.type.core.CustomElementTypeFactory&quot;
               kind = &quot;org.eclipse.gmf.runtime.emf.type.core.CustomElementKind&quot;
               params = &quot;customParameter1, customParameter2&quot;&gt;
         &lt;/elementTypeFactory&gt;
    &lt;/extension&gt;
&lt;/PRE&gt;
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="apiInfo"/>
      </appInfo>
      <documentation>
         See the &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core&lt;/code&gt; package in the &lt;code&gt;org.eclipse.gmf.runtime.emf.type.core&lt;/code&gt; plug-in for the API description.
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="implementation"/>
      </appInfo>
      <documentation>
         
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="copyright"/>
      </appInfo>
      <documentation>
         Copyright (c) 2005  IBM Corporation and others.&lt;br&gt;
 All rights reserved. This program and the accompanying materials 
 are made available under the terms of the Eclipse Public License v1.0 
 which accompanies this distribution, and is available at 
 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
      </documentation>
   </annotation>

</schema>
