<?xml version="1.0" encoding="UTF-8"?>
<!-- 
      Copyright 2005 by Oracle USA
      500 Oracle Parkway, Redwood Shores, California, 94065, U.S.A.
      All rights reserved. 
-->
<xs:schema targetNamespace="http://jcp.org/jsr/198/extension-manifest"
           xmlns="http://jcp.org/jsr/198/extension-manifest"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified" attributeFormDefault="unqualified">
  <!-- Root element declaration============================================ -->
  <xs:element name="extension">
    <xs:annotation>
      <xs:documentation>An extension is a unit of functionality that plugs into
                        an ide.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="identifiableType">
          <xs:sequence>
            <xs:element name="name" type="i18n_string" minOccurs="1">
              <xs:annotation>
                <xs:documentation>The name of this extension.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="owner" type="i18n_string" minOccurs="0">
              <xs:annotation>
                <xs:documentation>The individual or group responsible for this
                                  extension.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="dependencies" minOccurs="0">
              <xs:annotation>
                <xs:documentation>
                  Dependencies this extension has on other extensions.
                </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="import" maxOccurs="unbounded" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>
                        Specifies a dependency on another extension. The text
                        value of this element is the extension id of an
                        extension the current extension depends on.
                      </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:simpleContent>
                        <xs:extension base="javaxIdentifier">
                          <xs:attribute name="minVersion" type="versionNumber"
                                        use="optional">
                            <xs:annotation>
                              <xs:documentation>
                                Optionally specifies the minimum version of the
                                dependency that must be installed.
                              </xs:documentation>
                            </xs:annotation>
                          </xs:attribute>
                          <xs:attribute name="maxVersion" type="versionNumber">
                            <xs:annotation>
                              <xs:documentation>
                                Optionally specifies the maximum version of the
                                dependency that must be installed.
                              </xs:documentation>
                            </xs:annotation>
                          </xs:attribute>
                        </xs:extension>
                      </xs:simpleContent>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="classpaths" minOccurs="0">
              <xs:annotation>
                <xs:documentation>
                  Classpath entries that this extension reqiures.
                </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="classpath" type="xs:string" minOccurs="0"
                              maxOccurs="unbounded">
                    <xs:annotation>
                      <xs:documentation>
                        A classpath entry. The text content of this element is
                        the relative path of a jar file or directory that will
                        be added to the classpath of this extension.
                      </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="platform-info" minOccurs="0">
              <xs:annotation>
                <xs:documentation>Information about the platform this extension
                                  requires.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="toolkit" type="toolkitType" maxOccurs="2">
                    <xs:annotation>
                      <xs:documentation>The UI toolkit this extension requires.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="hooks" minOccurs="1">
              <xs:annotation>
                <xs:documentation>All functionality provided by the extension is
                                  described in the hooks section of the
                                  extension manifest.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element name="menu-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies functionality this extension
                                        contributes to menus and toolbars.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="actions" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Actions contributed by this
                                                  extension.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="action" minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A user invokable action.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:complexContent>
                                        <xs:extension base="identifiableType">
                                          <xs:all>
                                            <xs:element name="label"
                                                        type="i18n_string"
                                                        minOccurs="1">
                                              <xs:annotation>
                                                <xs:documentation>The label for
                                                                  this action.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="mnemonic"
                                                        type="i18n_char"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>The mnemonic
                                                                  character to
                                                                  use for this
                                                                  action.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="tooltip"
                                                        type="i18n_string"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>The tooltip
                                                                  text to use
                                                                  for this
                                                                  action.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="iconpath"
                                                        type="i18n_string"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>The path to
                                                                  the icon to
                                                                  use for this
                                                                  action. This
                                                                  is usually a
                                                                  resource
                                                                  available on
                                                                  the classpath
                                                                  of the
                                                                  extension.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="enabled"
                                                        type="xs:boolean"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>Whether this
                                                                  action is
                                                                  enabled by
                                                                  default.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="checked"
                                                        type="xs:boolean"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>Whether this
                                                                  action is
                                                                  checked by
                                                                  default. This
                                                                  property only
                                                                  applies to
                                                                  actions which
                                                                  have the
                                                                  toggle
                                                                  attribute set
                                                                  to true.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="invoke-class"
                                                        type="className"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>The fully
                                                                  qualified
                                                                  class name of
                                                                  an invoke
                                                                  handler for
                                                                  this action.
                                                                  The specified
                                                                  class must be
                                                                  an
                                                                  implementation
                                                                  of
                                                                  javax.ide.command.InvokeHandler.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                            <xs:element name="update-class"
                                                        type="className"
                                                        minOccurs="0">
                                              <xs:annotation>
                                                <xs:documentation>The fully
                                                                  qualified
                                                                  class name of
                                                                  an update
                                                                  handler for
                                                                  this action.
                                                                  The specified
                                                                  class must be
                                                                  an
                                                                  implementation
                                                                  of
                                                                  javax.ide.command.UpdateHandler.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                          </xs:all>
                                          <xs:attribute name="toggle"
                                                        type="xs:boolean">
                                            <xs:annotation>
                                              <xs:documentation>Whether this
                                                                action is a
                                                                toggle action.
                                                                Toggle actions
                                                                have a notion of
                                                                a selection
                                                                state, which can
                                                                be either true
                                                                or false.</xs:documentation>
                                            </xs:annotation>
                                          </xs:attribute>
                                        </xs:extension>
                                      </xs:complexContent>
                                    </xs:complexType>
                                  </xs:element>
                                  <xs:element name="action-override"
                                              minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>An override of an action
                                                        provided by another
                                                        extension. This
                                                        mechanism allows
                                                        extension writers to
                                                        register invoke and
                                                        update handlers for
                                                        actions provided by
                                                        other extensions and
                                                        optionally override the
                                                        default behavior of the
                                                        action.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:all>
                                        <xs:element name="invoke-class"
                                                    type="className">
                                          <xs:annotation>
                                            <xs:documentation>The fully
                                                              qualified class
                                                              name of the invoke
                                                              handler for the
                                                              overridden action.
                                                              This must be an
                                                              implmentation of
                                                              javax.ide.command.InvokeHandler.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                        <xs:element name="update-class"
                                                    type="className"
                                                    minOccurs="0">
                                          <xs:annotation>
                                            <xs:documentation>The fully
                                                              qualified class
                                                              name of the update
                                                              handler for the
                                                              overridden action.
                                                              This must be an
                                                              implmentation of
                                                              javax.ide.command.UpdateHandler.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                      </xs:all>
                                      <xs:attribute name="action-ref"
                                                    use="required">
                                        <xs:annotation>
                                          <xs:documentation>The id of the action
                                                            being overridden.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="menus" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Menus contributed by this
                                                  extension.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:choice maxOccurs="1" minOccurs="1">
                                  <xs:element name="menubar" type="menuBarType"
                                              maxOccurs="unbounded"
                                              minOccurs="0">
                                    <xs:annotation>
                                      <xs:documentation>Menu bars contributed by
                                                        this extension.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                  <xs:element name="popup" type="popupType"
                                              minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>Popup menus contributed
                                                        by this extension.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                </xs:choice>
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="toolbars" type="toolbarsType"
                                        minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Toolbars contributed by this
                                                  extension.</xs:documentation>
                              </xs:annotation>
                            </xs:element>
                            <xs:element name="item-factories" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Factories to create custom
                                                  toolbar items contributed by
                                                  this extension.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="item-factory-class"
                                              minOccurs="1"
                                              maxOccurs="unbounded"
                                              type="className">
                                    <xs:annotation>
                                      <xs:documentation>The fully qualified
                                                        class name of an
                                                        ItemFactory which
                                                        provides a custom GUI
                                                        component for a menu or
                                                        toolbar item. In the
                                                        current release of
                                                        JSR-198, only toolbar
                                                        items support
                                                        customizability. The
                                                        specified class must be
                                                        a subclass of
                                                        javax.ide.menu.ItemFactory.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="document-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies custom document types and
                                        listeners for document events this
                                        extension contributes.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="documents" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Document types contributed by
                                                  this extension.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:choice maxOccurs="unbounded">
                                  <xs:element name="by-suffix" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>Registers a document
                                                        type by suffix.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:sequence>
                                        <xs:element name="suffix"
                                                    type="xs:string"
                                                    minOccurs="1"
                                                    maxOccurs="unbounded"/>
                                      </xs:sequence>
                                      <xs:attribute name="document-class"
                                                    use="required"
                                                    type="className">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            document type to
                                                            register. This
                                                            should be a class
                                                            extending
                                                            javax.ide.model.Document.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                  <xs:element name="by-xml-root" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>Registers a recognizer
                                                        that will identify
                                                        document types based on
                                                        the root element of an
                                                        XML document.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:sequence>
                                        <xs:element name="suffix" minOccurs="0"
                                                    maxOccurs="unbounded"
                                                    type="xs:string">
                                          <xs:annotation>
                                            <xs:documentation>The suffix to
                                                              recognize. If none
                                                              is specified, .xml
                                                              is used.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                        <xs:element name="root-element"
                                                    maxOccurs="unbounded">
                                          <xs:annotation>
                                            <xs:documentation>The root element
                                                              to recognize.</xs:documentation>
                                          </xs:annotation>
                                          <xs:complexType>
                                            <xs:attribute name="namespace"
                                                          use="required">
                                              <xs:annotation>
                                                <xs:documentation>The namespace
                                                                  URI to
                                                                  recognize.</xs:documentation>
                                              </xs:annotation>
                                            </xs:attribute>
                                            <xs:attribute name="localName"
                                                          use="required">
                                              <xs:annotation>
                                                <xs:documentation>The local
                                                                  element name
                                                                  to recognize.</xs:documentation>
                                              </xs:annotation>
                                            </xs:attribute>
                                          </xs:complexType>
                                        </xs:element>
                                      </xs:sequence>
                                      <xs:attribute name="document-class"
                                                    use="optional"
                                                    type="className">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            document class to
                                                            use when recognizing
                                                            a file by its XML
                                                            root. This should be
                                                            a subclass of
                                                            javax.ide.model.xml.XMLDocument.
                                                            If no document class
                                                            is specified, then
                                                            XMLDocument is used.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                  <xs:element name="by-xml-doctype"
                                              minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>Registers a recognizer
                                                        that will identify
                                                        document types based on
                                                        the doctype of xml
                                                        documents.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:sequence>
                                        <xs:element name="suffix"
                                                    maxOccurs="unbounded"
                                                    minOccurs="0">
                                          <xs:annotation>
                                            <xs:documentation>The suffix to
                                                              recognize. If none
                                                              is specified, .xml
                                                              is used.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                        <xs:element name="doc-type"
                                                    maxOccurs="unbounded">
                                          <xs:annotation>
                                            <xs:documentation>The document type
                                                              to recognize.</xs:documentation>
                                          </xs:annotation>
                                          <xs:complexType>
                                            <xs:attribute name="public-id">
                                              <xs:annotation>
                                                <xs:documentation>The public id
                                                                  to recognize.</xs:documentation>
                                              </xs:annotation>
                                            </xs:attribute>
                                            <xs:attribute name="system-id">
                                              <xs:annotation>
                                                <xs:documentation>The system id
                                                                  to recognize.</xs:documentation>
                                              </xs:annotation>
                                            </xs:attribute>
                                          </xs:complexType>
                                        </xs:element>
                                      </xs:sequence>
                                      <xs:attribute name="document-class"
                                                    type="className">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            document class to
                                                            use. Must be a
                                                            subclass of
                                                            javax.ide.model.xml.XMLDocument.
                                                            If none is specifed,
                                                            XMLDocument is used.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                  <xs:element name="by-recognizer" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>Registers a custom
                                                        recognizer
                                                        implementation.
                                                        Extension writers should
                                                        use this as a last
                                                        resort if other
                                                        recognizers are not
                                                        suitable, it may have
                                                        severe performance
                                                        issues on some IDEs.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:attribute name="recognizer-class"
                                                    use="required"
                                                    type="className">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            recognizer to use.
                                                            This should be a
                                                            subclass of
                                                            javax.ide.model.Recognizer.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:choice>
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="listeners" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Listeners for document events
                                                  contributed by this extension.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="document-listener"
                                              type="listenerType" minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A listener for document
                                                        events.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                  <xs:element name="property-listener"
                                              type="listenerType" minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>Listens for property
                                                        events.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="ide-listener-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies listeners this extension
                                        attaches to the IDE.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="ide-listeners" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Listeners for IDE activation
                                                  and deactivation events.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="listener-class"
                                              type="className" minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>The fully qualified
                                                        class name of a listener
                                                        for ide activation and
                                                        deactivation. The class
                                                        must implement
                                                        javax.ide.IDEListener.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="editor-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies custom editors, document
                                        editor assignments, and listeners for
                                        editor events that this extension
                                        contributes.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="editors" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Specifies custom editors
                                                  provided by this extension.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="editor" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A custom editor.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:all>
                                        <xs:element name="name"
                                                    type="i18n_string">
                                          <xs:annotation>
                                            <xs:documentation>The name of the
                                                              editor.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                      </xs:all>
                                      <xs:attribute name="editor-class"
                                                    type="className"
                                                    use="required">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            custom editor. The
                                                            class must be a
                                                            subclass of
                                                            javax.ide.editor.Editor.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="mappings" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Mappings from document types
                                                  to editors.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="mapping" minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A mapping from a
                                                        document type to an
                                                        editor type. The mapping
                                                        allows documents of the
                                                        specified type to be
                                                        opened with the
                                                        specified editor types.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:sequence>
                                        <xs:element name="open-with"
                                                    minOccurs="0"
                                                    maxOccurs="unbounded">
                                          <xs:annotation>
                                            <xs:documentation>Specifies which
                                                              editors to open
                                                              the document type
                                                              with.</xs:documentation>
                                          </xs:annotation>
                                          <xs:complexType>
                                            <xs:attribute name="editor-class"
                                                          type="className"
                                                          use="required">
                                              <xs:annotation>
                                                <xs:documentation>The fully
                                                                  qualified
                                                                  class name of
                                                                  an editor to
                                                                  register the
                                                                  document type
                                                                  with. The
                                                                  class should
                                                                  be a subclass
                                                                  of
                                                                  javax.ide.editor.Editor.</xs:documentation>
                                              </xs:annotation>
                                            </xs:attribute>
                                            <xs:attribute name="preferred"
                                                          type="xs:boolean"
                                                          use="optional"
                                                          default="false">
                                              <xs:annotation>
                                                <xs:documentation>Specifies
                                                                  whether this
                                                                  is the
                                                                  preferred
                                                                  editor for the
                                                                  specified
                                                                  document type.
                                                                  An IDE is free
                                                                  to interpret
                                                                  this attribute
                                                                  however it
                                                                  pleases. For
                                                                  example, it
                                                                  might open
                                                                  documents in
                                                                  the preferred
                                                                  editor by
                                                                  default on
                                                                  double click.
                                                                  The default
                                                                  value for this
                                                                  attribute if
                                                                  not specified
                                                                  is false.</xs:documentation>
                                              </xs:annotation>
                                            </xs:attribute>
                                          </xs:complexType>
                                        </xs:element>
                                      </xs:sequence>
                                      <xs:attribute name="document-class"
                                                    type="className"
                                                    use="required">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of a
                                                            document class to
                                                            register a mapping
                                                            for. The class
                                                            should be a subclass
                                                            of
                                                            javax.ide.model.Document.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="editor-listeners" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Listeners for editor events.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="editor-listener"
                                              minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A listener for editor
                                                        events.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:complexContent>
                                        <xs:extension base="listenerType"/>
                                      </xs:complexContent>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="property-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies preference and settings pages
                                        that this extension contributes.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:sequence>
                            <xs:element name="property-pages">
                              <xs:annotation>
                                <xs:documentation>Property pages.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="property-page" minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A property page.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:all>
                                        <xs:element name="label"
                                                    type="i18n_string">
                                          <xs:annotation>
                                            <xs:documentation>The label for the
                                                              property page.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                        <xs:element name="object-class"
                                                    type="className">
                                          <xs:annotation>
                                            <xs:documentation>The fully
                                                              qualified class
                                                              name of the type
                                                              of object this
                                                              property page
                                                              edits. JSR-198
                                                              defines two
                                                              standard object
                                                              types:
                                                              javax.ide.IDE for
                                                              global IDE
                                                              properties, and
                                                              javax.ide.model.Project
                                                              for project
                                                              specific
                                                              properties.
                                                              Extensions can
                                                              also provide other
                                                              object types for
                                                              which dependee
                                                              extensions may
                                                              register property
                                                              pages. For more
                                                              information, see
                                                              javax.ide.property.PropertyPageRegistry
                                                              javadoc.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                      </xs:all>
                                      <xs:attribute name="property-page-class"
                                                    type="className"
                                                    use="required">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            property page. This
                                                            should be a subclass
                                                            of
                                                            javax.ide.property.PropertyPage.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                      <xs:attribute name="parent-page"
                                                    type="className">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            parent page of this
                                                            page. If property
                                                            pages are shown in a
                                                            hierarchical mode,
                                                            this provides a hint
                                                            to the IDE about
                                                            where to place this
                                                            page. If
                                                            unspecified, this is
                                                            a top level property
                                                            page. The class
                                                            should be a subclass
                                                            of
                                                            javax.ide.property.PropertyPage.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:sequence>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="log-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies log pages that this extension
                                        contributes.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="log-pages" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Custom log pages.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="log-page" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A custom log page.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:attribute name="log-page-class"
                                                    type="className"
                                                    use="required">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            custom log page.
                                                            This must be a
                                                            subclass of
                                                            javax.ide.log.LogPage.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="wizard-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies wizards that this extension
                                        contributes.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="wizards" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Wizards are user interface
                                                  objects that can create new
                                                  objects.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="wizard-category"
                                              minOccurs="0"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A category for wizards.
                                                        IDEs may choose to use
                                                        the categorization
                                                        information to group
                                                        wizards.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:complexContent>
                                        <xs:extension base="identifiableType">
                                          <xs:sequence>
                                            <xs:element name="label"
                                                        type="i18n_string">
                                              <xs:annotation>
                                                <xs:documentation>A label for
                                                                  the category.</xs:documentation>
                                              </xs:annotation>
                                            </xs:element>
                                          </xs:sequence>
                                          <xs:attribute name="parent-category"
                                                        type="xs:string">
                                            <xs:annotation>
                                              <xs:documentation>The parent
                                                                category for
                                                                this category.
                                                                If none is
                                                                specified, then
                                                                this is
                                                                considered to be
                                                                a root category.</xs:documentation>
                                            </xs:annotation>
                                          </xs:attribute>
                                        </xs:extension>
                                      </xs:complexContent>
                                    </xs:complexType>
                                  </xs:element>
                                  <xs:element name="wizard" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>A wizard.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                      <xs:all>
                                        <xs:element name="label"
                                                    type="i18n_string">
                                          <xs:annotation>
                                            <xs:documentation>A label for the
                                                              wizard.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                        <xs:element name="iconpath"
                                                    type="i18n_string">
                                          <xs:annotation>
                                            <xs:documentation>An icon for the
                                                              wizard.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                        <xs:element name="tooltip"
                                                    type="i18n_string">
                                          <xs:annotation>
                                            <xs:documentation>A tooltip for the
                                                              wizard.</xs:documentation>
                                          </xs:annotation>
                                        </xs:element>
                                      </xs:all>
                                      <xs:attribute name="wizard-class"
                                                    type="className"
                                                    use="required">
                                        <xs:annotation>
                                          <xs:documentation>The fully qualified
                                                            class name of the
                                                            wizard
                                                            implementation. This
                                                            should be an
                                                            implementation of
                                                            javax.ide.wizard.Wizard.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                      <xs:attribute name="category-ref"
                                                    type="className">
                                        <xs:annotation>
                                          <xs:documentation>The id of the
                                                            category that this
                                                            wizard should be
                                                            displayed in, if the
                                                            IDE supports wizard
                                                            categorization. If
                                                            no category is
                                                            specified, then the
                                                            IDE will display the
                                                            wizard in a default
                                                            category.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="build-system-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies listeners for build events
                                        that this extension contributes.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:all>
                            <xs:element name="build-listeners" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Listeners for build events.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="listener-class"
                                              type="className" minOccurs="1"
                                              maxOccurs="unbounded">
                                    <xs:annotation>
                                      <xs:documentation>The fully qualified
                                                        class name of a
                                                        listener. The class
                                                        should be an
                                                        implementation of
                                                        javax.ide.build.BuildListener.</xs:documentation>
                                    </xs:annotation>
                                  </xs:element>
                                </xs:sequence>
                              </xs:complexType>
                            </xs:element>
                          </xs:all>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="feature-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies optional information about
                                        this extension identifying the
                                        functionality it provides to the user as
                                        a feature.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:all>
                        <xs:element name="license" type="i18n_string"
                                    minOccurs="0">
                          <xs:annotation>
                            <xs:documentation>Licensing information about this
                                              extension.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="copyright" type="i18n_string"
                                    minOccurs="0">
                          <xs:annotation>
                            <xs:documentation>Copyright information about this
                                              extension.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="iconpath" type="i18n_string"
                                    minOccurs="0">
                          <xs:annotation>
                            <xs:documentation>The path to an icon for this
                                              extension.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="description" type="i18n_string"
                                    minOccurs="0">
                          <xs:annotation>
                            <xs:documentation>A description of the functionality
                                              provided by this extension.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="optional" type="xs:boolean"
                                    default="true" minOccurs="0">
                          <xs:annotation>
                            <xs:documentation>Whether this extension is
                                              optional. Optional extensions can
                                              be switched off by users via some
                                              IDE specific extension
                                              customization UI. By default,
                                              extensions which have a
                                              feature-hook are optional.
                                              Extensions with no feature-hook
                                              are not optional.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="part-of" type="javaxIdentifier"
                                    minOccurs="0">
                          <xs:annotation>
                            <xs:documentation>The id of an extension this
                                              extension is logically part of.
                                              There is no requirement that there
                                              be an actual dependency between
                                              the extensions.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:all>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="hook-handler-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies handlers this extension
                                        contributes for custom hooks.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:complexContent>
                        <xs:extension base="hookType">
                          <xs:sequence>
                            <xs:element name="hook-handler"
                                        maxOccurs="unbounded" minOccurs="0">
                              <xs:annotation>
                                <xs:documentation>Registers a custom hook
                                                  handler.</xs:documentation>
                              </xs:annotation>
                              <xs:complexType>
                                <xs:attribute name="namespace" type="xs:anyURI"
                                              use="required">
                                  <xs:annotation>
                                    <xs:documentation>The namespace URI of the
                                                      xml element that this hook
                                                      handler handles.</xs:documentation>
                                  </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="tag-name" type="xs:NCName"
                                              use="required">
                                  <xs:annotation>
                                    <xs:documentation>The local element name of
                                                      the XML element that this
                                                      hook handler handles.</xs:documentation>
                                  </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="handler-class"
                                              type="className" use="required">
                                  <xs:annotation>
                                    <xs:documentation>The fully qualified class
                                                      name of the custom hook
                                                      handler. This must be a
                                                      subclass of
                                                      javax.ide.extension.ExtensionHook.</xs:documentation>
                                  </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="schema-location"
                                              type="xs:string">
                                  <xs:annotation>
                                    <xs:documentation>The location of the XML
                                                      schema for the custom hook
                                                      grammar. This location is
                                                      relative to the location
                                                      of the extension.xml
                                                      within the jar file
                                                      providing this extension.</xs:documentation>
                                  </xs:annotation>
                                </xs:attribute>
                              </xs:complexType>
                            </xs:element>
                          </xs:sequence>
                        </xs:extension>
                      </xs:complexContent>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="vfs-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Specifies virtual file system helpers
                                        contributed by this extension.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="helper" maxOccurs="unbounded">
                          <xs:annotation>
                            <xs:documentation>A virtual file system helper.</xs:documentation>
                          </xs:annotation>
                          <xs:complexType>
                            <xs:attribute name="helper-class" type="className"
                                          use="required">
                              <xs:annotation>
                                <xs:documentation>The fully qualified class name
                                                  of the helper implementation.
                                                  This should be a subclass of
                                                  javax.ide.net.VirtualFileSystemHelper.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                            <xs:attribute name="scheme" type="xs:string"
                                          use="required">
                              <xs:annotation>
                                <xs:documentation>The URI scheme to register
                                                  this helper for.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element ref="custom-hook" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Abstract element representing custom
                                        hooks.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:choice>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="version" use="required" type="versionNumber">
            <xs:annotation>
              <xs:documentation>The version of this extension, should only
                                contain digits and periods.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="esdk-version" use="required"
                        type="esdkVersionNumber">
            <xs:annotation>
              <xs:documentation>The extension SDK this extension is compatible
                                with. This currently must be "1.0".</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="rsbundle-class" type="className">
            <xs:annotation>
              <xs:documentation>The fully qualified class name of a resource
                                bundle to use to look up translated strings in
                                this extension manifest.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="loader" default="global" type="loaderType"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="custom-hook" type="customHookType" abstract="true"/>
  <!-- Type declarations ============================================= -->
  <!-- complexType declaration for identifiables -->
  <xs:complexType name="identifiableType">
    <xs:attribute name="id" type="javaxIdentifier" use="required">
      <xs:annotation>
        <xs:documentation>A unique identifier.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="customHookType"></xs:complexType>
  <!-- Abstract hook type -->
  <xs:complexType name="hookType" abstract="true"/>
  <!-- Hook handler declaration -->
  <xs:complexType name="typeType">
    <xs:all>
      <xs:element name="toggle" type="xs:boolean" minOccurs="0"/>
      <xs:element name="context-sensitive" type="xs:boolean" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="popupType">
    <xs:complexContent>
      <xs:extension base="sectionContainerType"/>
    </xs:complexContent>
  </xs:complexType>
  <!-- Pulldown menu declaration -->
  <xs:complexType name="menuBarType">
    <xs:complexContent>
      <xs:extension base="identifiableType">
        <xs:sequence>
          <xs:element name="menu" type="menuType" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- Pulldown menu declaration -->
  <xs:complexType name="sectionContainerType">
    <xs:complexContent>
      <xs:extension base="identifiableType">
        <xs:sequence maxOccurs="unbounded" minOccurs="0">
          <xs:element name="section" type="sectionType">
            <xs:annotation>
              <xs:documentation>A section containing items.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- Menu declaration -->
  <xs:complexType name="menuType">
    <xs:complexContent>
      <xs:extension base="identifiableType">
        <xs:sequence minOccurs="0">
          <xs:element name="label" type="i18n_string" minOccurs="0"
                      maxOccurs="1">
            <xs:annotation>
              <xs:documentation>The label for the menu.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="mnemonic" type="i18n_char" minOccurs="0"
                      maxOccurs="1">
            <xs:annotation>
              <xs:documentation>The mnemonic for the menu.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="tooltip" type="i18n_string" minOccurs="0"
                      maxOccurs="1">
            <xs:annotation>
              <xs:documentation>The tooltip text for the menu.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="iconpath" type="i18n_string" minOccurs="0"
                      maxOccurs="1">
            <xs:annotation>
              <xs:documentation>The path to the icon for the menu. For top level
                                menus, this property may be ignored.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="section" maxOccurs="unbounded" minOccurs="0"
                      type="sectionType">
            <xs:annotation>
              <xs:documentation>A section containing items in a menu.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attributeGroup ref="menuPositionAttributes"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- Menu item declaration -->
  <xs:attributeGroup name="menuPositionAttributes">
    <xs:attribute name="before" type="xs:string">
      <xs:annotation>
        <xs:documentation>Specifies the id of a menu component the current
                          component must come before.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="after" type="xs:string">
      <xs:annotation>
        <xs:documentation>Specifies the id of a menu component the current
                          component must come after.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:complexType name="itemType">
    <xs:attribute name="action-ref" type="xs:string" use="required">
      <xs:annotation>
        <xs:documentation>The id of the action this menu or toolbar item is for.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="radiogroup-id">
      <xs:annotation>
        <xs:documentation>If this menu or toolbar item is in a radio group,
                          specifies the id of the radio group. This id should be
                          the same for all items in a given radio group.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attributeGroup ref="menuPositionAttributes"/>
  </xs:complexType>
  <!-- Menu section declaration -->
  <xs:complexType name="sectionType">
    <xs:complexContent>
      <xs:extension base="identifiableType">
        <xs:sequence>
          <xs:choice maxOccurs="unbounded">
            <xs:element name="item" type="itemType">
              <xs:annotation>
                <xs:documentation>An item in a menu or toolbar section.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="menu" type="menuType">
              <xs:annotation>
                <xs:documentation>A submenu in a section. For toolbar sections,
                                  the behavior of this element is unspecifies.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:choice>
        </xs:sequence>
        <xs:attributeGroup ref="menuPositionAttributes"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="toolbarsType">
    <xs:sequence>
      <xs:element name="toolbar" type="sectionContainerType"
                  maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>A toolbar.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <!-- Tool declaration -->
  <!-- Toolbar section declaration -->
  <xs:complexType name="toolSectionType">
    <xs:complexContent>
      <xs:extension base="identifiableType">
        <xs:sequence>
          <xs:element name="item" type="itemType" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- Radio group declaration -->
  <xs:complexType name="radioGroupType">
    <xs:complexContent>
      <xs:extension base="identifiableType">
        <xs:sequence>
          <xs:element name="radio-item" type="itemType" minOccurs="2"
                      maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="weight" type="xs:float"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- Type declarations ================================================== -->
  <!-- Localizable string type -->
  <xs:complexType name="i18n_string">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="rskey" type="xs:string">
          <xs:annotation>
            <xs:documentation>
              The name of a key in the resource bundle specified by the
              rsbundle-class root element of the extension.
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="char">
    <xs:restriction base="xs:string">
      <xs:length value="1" fixed="true"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="i18n_char">
    <xs:simpleContent>
      <xs:extension base="char">
        <xs:attribute name="rskey" type="xs:string">
          <xs:annotation>
            <xs:documentation>
              The name of a key in the resource bundle specified by the
              rsbundle-class root element of the extension.
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="docTypeType">
    <xs:attribute name="public-id" type="xs:string"/>
    <xs:attribute name="system-id" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="listenerType">
    <xs:attribute name="listener-class" type="className" use="required">
      <xs:annotation>
        <xs:documentation>The listener to register.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="source-class" type="className" use="optional">
      <xs:annotation>
        <xs:documentation>The object to register the listener for.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <!-- Custom type for xml elements or attributes which are class names. -->
  <xs:simpleType name="className">
    <xs:annotation>
      <xs:documentation>
        A fully qualified class name.
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:normalizedString"/>
  </xs:simpleType>
  <!-- Custom type for allowed toolkit types. -->
  <xs:simpleType name="toolkitType">
    <xs:annotation>
      <xs:documentation>A UI toolkit.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:enumeration value="swing">
        <xs:annotation>
          <xs:documentation>The Swing UI toolkit.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="swt">
        <xs:annotation>
          <xs:documentation>The SWT UI toolkit.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <!-- Custom type for loader types -->
  <xs:simpleType name="loaderType">
    <xs:annotation>
      <xs:documentation>The preferred classloader for an extension</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:enumeration value="isolated">
        <xs:annotation>
          <xs:documentation>When an extension is loaded in an isolated loader, it can only see classes from extensions it depends on, their dependencies, or classpath entries they provide.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="global">
        <xs:annotation>
          <xs:documentation>When an extension is loaded in a global loader, it can see classes from all other extensions loaded in the global loader.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="versionNumber">
    <xs:restriction base="xs:token">
      <xs:pattern value="[\.0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="esdkVersionNumber">
    <xs:annotation>
      <xs:documentation>The version of the JSR-198 spec this extension manifest conforms to. Must currently be either 1.0 or 2.0.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="versionNumber">
      <xs:enumeration value="1.0" />
      <xs:enumeration value="2.0" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="javaxIdentifier">
    <xs:restriction base="xs:token">
      <xs:pattern value="[\.\-A-Za-z0-9_]+" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
