<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.eclipse.modisco.infra.browser.uicore" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
      <appinfo>
         <meta.schema plugin="org.eclipse.modisco.infra.browser.uicore" id="naming" name="Naming of metamodel instances"/>
      </appinfo>
      <documentation>
         Used to specify naming rules for model instances.
      </documentation>
   </annotation>

   <element name="extension">
      <annotation>
         <appinfo>
            <meta.element />
         </appinfo>
      </annotation>
      <complexType>
         <sequence>
            <element ref="metamodel" minOccurs="1" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="point" type="string" use="required">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  
               </documentation>
               <appinfo>
                  <meta.attribute translatable="true"/>
               </appinfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="metamodel">
      <annotation>
         <documentation>
            Defines the metamodel whose instances will be named by contained name providers.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="nameProvider" minOccurs="1" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  The nsURI of the package containing the metamodel definition, or &quot;*&quot; (a star character) to specify that this name provider applies to all metamodels.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="nameProvider">
      <annotation>
         <documentation>
            A name provider which is asked for the name of model instances from the metamodel defined in the &quot;metamodel&quot; element.
         </documentation>
      </annotation>
      <complexType>
         <choice minOccurs="0" maxOccurs="1">
            <element ref="filter"/>
         </choice>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  Specify a class that will provide a name for model instances.
               </documentation>
               <appinfo>
                  <meta.attribute kind="java" basedOn=":org.eclipse.modisco.common.editor.extensions.naming.NameProvider"/>
               </appinfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="filter">
      <annotation>
         <documentation>
            A list of metaclasses whose name will be provided by this name provider. If the filter is not defined, then the name provider will be asked for every metaclass in the metamodel.
         </documentation>
      </annotation>
      <complexType>
         <sequence minOccurs="1" maxOccurs="unbounded">
            <element ref="metaclass"/>
         </sequence>
      </complexType>
   </element>

   <element name="metaclass">
      <annotation>
         <documentation>
            A metaclass that is selected by this filter, so that its name will be provided by the name provider.
         </documentation>
      </annotation>
      <complexType>
         <attribute name="name" type="string" use="required">
            <annotation>
               <documentation>
                  The full qualified name of the metaclass.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <annotation>
      <appinfo>
         <meta.section type="since"/>
      </appinfo>
      <documentation>
         0.7
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="examples"/>
      </appinfo>
      <documentation>
         The following is an example of a name provider extension definition for the Java metamodel:
&lt;p&gt;
&lt;pre&gt;
&lt;extension point=&quot;org.eclipse.modisco.infra.browser.uicore.naming&quot;&gt;
  &lt;metamodel id=&quot;http://www.eclipse.org/MoDisco/Java/0.2.incubation/java&quot;&gt;
    &lt;nameProvider class=&quot;org.eclipse.modisco.java.browser.extension.NameProvider&quot;/&gt;
  &lt;/metamodel&gt;
&lt;/extension&gt;
&lt;/pre&gt;
&lt;/p&gt;
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="apiinfo"/>
      </appinfo>
      <documentation>
         Implement the NameProvider interface, or FilteredNameProvider if you want to add additional filtering. Alternatively, you can subclass AbstractNameProvider, which provides a default naming.
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="implementation"/>
      </appinfo>
      <documentation>
         See plugin project &quot;org.eclipse.modisco.java.browser.extension&quot;, available at  https://dev.eclipse.org/svnroot/modeling/org.eclipse.modisco/deprecated/plugins/org.eclipse.modisco.java.browser.extension
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="copyright"/>
      </appinfo>
      <documentation>
         Copyright (c) 2009 Mia-Software and others.

All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v2.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v20.html
      </documentation>
   </annotation>

</schema>
