<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
            xmlns:Deployment="http://www.omg.org/Deployment"
            targetNamespace="http://www.omg.org/Deployment">


  <xsd:simpleType name="TCKind">
    <xsd:restriction base="xsd:NCName">
      <xsd:enumeration value="tk_null"/>
      <xsd:enumeration value="tk_void"/>
      <xsd:enumeration value="tk_short"/>
      <xsd:enumeration value="tk_long"/>
      <xsd:enumeration value="tk_ushort"/>
      <xsd:enumeration value="tk_ulong"/>
      <xsd:enumeration value="tk_float"/>
      <xsd:enumeration value="tk_double"/>
      <xsd:enumeration value="tk_boolean"/>
      <xsd:enumeration value="tk_char"/>
      <xsd:enumeration value="tk_octet"/>
      <xsd:enumeration value="tk_any"/>
      <xsd:enumeration value="tk_TypeCode"/>
      <xsd:enumeration value="tk_Principal"/>
      <xsd:enumeration value="tk_objref"/>
      <xsd:enumeration value="tk_struct"/>
      <xsd:enumeration value="tk_union"/>
      <xsd:enumeration value="tk_enum"/>
      <xsd:enumeration value="tk_string"/>
      <xsd:enumeration value="tk_sequence"/>
      <xsd:enumeration value="tk_array"/>
      <xsd:enumeration value="tk_alias"/>
      <xsd:enumeration value="tk_except"/>
      <xsd:enumeration value="tk_longlong"/>
      <xsd:enumeration value="tk_ulonglong"/>
      <xsd:enumeration value="tk_longdouble"/>
      <xsd:enumeration value="tk_wchar"/>
      <xsd:enumeration value="tk_wstring"/>
      <xsd:enumeration value="tk_wfixed"/>
      <xsd:enumeration value="tk_value"/>
      <xsd:enumeration value="tk_value_box"/>
      <xsd:enumeration value="tk_native"/>
      <xsd:enumeration value="tk_abstract_interface"/>
      <xsd:enumeration value="tk_local_interface"/>
      <xsd:enumeration value="tk_component"/>
      <xsd:enumeration value="tk_home"/>
      <xsd:enumeration value="tk_event"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="DataType">
    <xsd:choice>
      <xsd:element name="kind" type="Deployment:TCKind"/>
<!--
@@ not used, what for?

      <xsd:element name="enum" type="Deployment:EnumType"/>
      <xsd:element name="objref" type="Deployment:ObjrefType"/>
      <xsd:element name="boundedString" type="Deployment:BoundedStringType"/>
      <xsd:element name="fixed" type="Deployment:FixedType"/>
      <xsd:element name="array" type="Deployment:ArrayType"/>
      <xsd:element name="sequence" type="Deployment:SequenceType"/>
      <xsd:element name="alias" type="Deployment:AliasType"/>
      <xsd:element name="struct" type="Deployment:StructType"/>
      <xsd:element name="value" type="Deployment:ValueType"/>
      <xsd:element name="union" type="Deployment:UnionType"/>
-->
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="DataValue">
    <xsd:choice>
      <xsd:element name="short" type="xsd:short"/>
      <xsd:element name="long" type="xsd:int"/>
      <xsd:element name="ushort" type="xsd:unsignedShort"/>
      <xsd:element name="ulong" type="xsd:unsignedInt"/>
      <xsd:element name="float" type="xsd:float"/>
      <xsd:element name="double" type="xsd:double"/>
      <xsd:element name="boolean" type="xsd:boolean"/>
      <xsd:element name="octet" type="xsd:unsignedByte"/>
      <!-- xsd:element name="opaque" type="xsd:base64Binary"/ -->
      <xsd:element name="objref" type="xsd:string"/>
      <xsd:element name="enum" type="xsd:string"/>
      <xsd:element name="string" type="xsd:string"/>
      <xsd:element name="longlong" type="xsd:long"/>
      <xsd:element name="ulonglong" type="xsd:unsignedLong"/>
      <xsd:element name="longdouble" type="xsd:double"/>
      <xsd:element name="fixed" type="xsd:string"/>

<!--
@@ recursive
      <xsd:element name="any" type="Deployment:Any"/>
-->

      <xsd:element name="typecode" type="Deployment:DataType"/>

<!--
@@ recursive
      <xsd:element name="element" type="Deployment:DataValue"/>
      <xsd:element name="discriminator" type="Deployment:DataValue"/>
      <xsd:element name="value" type="Deployment:DataValue"/>
      <xsd:element name="boxedValue" type="Deployment:DataValue"/>
      <xsd:element name="member" type="Deployment:NamedValue"/>
-->
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="Any">
    <xsd:sequence>
      <xsd:element name="type" type="Deployment:DataType"/>
      <xsd:element name="value" type="Deployment:DataValue"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="Property">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="value" type="Deployment:Any"/>
    </xsd:sequence>
  </xsd:complexType>


<!-- End of base definitions. -->

  <xsd:complexType name="Node">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="label" type="xsd:string"/>
<!--
@@ recursive, not used
      <xsd:element name="connection" type="Deployment:Interconnect"/>
      <xsd:element name="sharedResource" type="Deployment:SharedResource"/>
      <xsd:element name="resource" type="Deployment:Resource"/>
-->
    </xsd:sequence>
  </xsd:complexType>


  <xsd:simpleType name="SatisfierPropertyKind">
    <xsd:restriction base="xsd:NCName">
      <xsd:enumeration value="Quantity"/>
      <xsd:enumeration value="Capacity"/>
      <xsd:enumeration value="Minimum"/>
      <xsd:enumeration value="Maximum"/>
      <xsd:enumeration value="Attribute"/>
      <xsd:enumeration value="Selection"/>
    </xsd:restriction>
  </xsd:simpleType>


  <xsd:complexType name="SatisfierProperty">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="kind" type="Deployment:SatisfierPropertyKind"/>
      <xsd:element name="value" type="Deployment:Any"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="Resource">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="resourceType" type="xsd:string"/>
      <xsd:element name="property" type="Deployment:SatisfierProperty"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="SharedResource">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="resourceType" type="xsd:string"/>
      <xsd:element name="node" type="Deployment:Node"/>
      <xsd:element name="property" type="Deployment:SatisfierProperty"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="Domain">
    <xsd:sequence>
      <xsd:element name="label" type="xsd:string"/>
      <xsd:element name="UUID" type="xsd:string"/>
      <xsd:element name="sharedResource" type="Deployment:SharedResource" minOccurs="0"/>
      <xsd:element name="node" type="Deployment:Node" maxOccurs="unbounded"/>
<!--
@@ recursive, not used
      <xsd:element name="interconnect" type="Deployment:Interconnect"/>
      <xsd:element name="bridge" type="Deployment:Bridge"/>
-->
      <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="Requirement">
    <xsd:sequence>
      <xsd:element name="resourceType" type="xsd:string"/>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="property" type="Deployment:Property"/>
    </xsd:sequence>
  </xsd:complexType>


<!-- Deployment -->

  <xsd:complexType name="ResourceDeploymentDescription">
    <xsd:sequence>
      <xsd:element name="requirementName" type="xsd:string"/>
      <xsd:element name="resourceName" type="xsd:string"/>
      <xsd:element name="resourceValue" type="Deployment:Any"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ArtifactDeploymentDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="source" type="xsd:string"/>
      <xsd:element name="node" type="xsd:string" minOccurs="0"/>
      <xsd:element name="location" type="xsd:string" maxOccurs="unbounded"/>
      <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/>
      <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/>
      <xsd:element name="deployedResource" type="Deployment:ResourceDeploymentDescription" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>


  <xsd:complexType name="MonolithicDeploymentDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="source" type="xsd:string"/>
      <xsd:element name="artifact" type="xsd:IDREF" maxOccurs="unbounded"/> <!-- ArtifactDeploymentDescription -->
      <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/>
      <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

  <xsd:simpleType name="ResourceUsageKind">
    <xsd:restriction base="xsd:NCName">
      <xsd:enumeration value="None"/>
      <xsd:enumeration value="InstanceUsesResource"/>
      <xsd:enumeration value="ResourceUsesInstance"/>
      <xsd:enumeration value="PortUsesResource"/>
      <xsd:enumeration value="ResourceUsesPort"/>
    </xsd:restriction>
  </xsd:simpleType>


  <xsd:complexType name="InstanceResourceDeploymentDescription">
    <xsd:sequence>
      <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/>
      <xsd:element name="requirementName" type="xsd:string"/>
      <xsd:element name="resourceName" type="xsd:string"/>
      <xsd:element name="resourceValue" type="Deployment:Any"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="InstanceDeploymentDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="node" type="xsd:string"/>
      <xsd:element name="source" type="xsd:string"/>
      <xsd:element name="implementation" type="xsd:IDREF"/> <!-- MonolithicDeploymentDescription -->
      <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="deployedResource" type="Deployment:InstanceResourceDeploymentDescription" minOccurs="0"/>
      <xsd:element name="deployedSharedResource" type="Deployment:InstanceResourceDeploymentDescription" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>


  <xsd:simpleType name="CCMComponentPortKind">
    <xsd:restriction base="xsd:NCName">
      <xsd:enumeration value="Facet"/>
      <xsd:enumeration value="SimplexReceptacle"/>
      <xsd:enumeration value="MultiplexReceptacle"/>
      <xsd:enumeration value="EventEmitter"/>
      <xsd:enumeration value="EventPublisher"/>
      <xsd:enumeration value="EventConsumer"/>
    </xsd:restriction>
  </xsd:simpleType>


  <xsd:complexType name="ComponentPortDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="specificType" type="xsd:string"/>
      <xsd:element name="supportedType" type="xsd:string"/>
      <xsd:element name="provider" type="xsd:string"/>
      <xsd:element name="exclusiveProvider" type="xsd:string"/>
      <xsd:element name="exclusiveUser" type="xsd:string"/>
      <xsd:element name="optional" type="xsd:string"/>
      <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ComponentPropertyDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="type" type="Deployment:DataType"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ComponentInterfaceDescription">
    <!-- @@mxiong: added minOccurs="0" maxOccurs="unbounded"
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:sequence>
        <xsd:element name="label" type="xsd:string"/>
        <xsd:element name="UUID" type="xsd:string"/>
        <xsd:element name="specificType" type="xsd:string"/>
        <xsd:element name="supportedType" type="xsd:string" maxOccurs="unbounded" />
        <xsd:element name="idlFile" type="xsd:string" minOccurs="0"/>
        <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/>
        <xsd:element name="port" type="Deployment:ComponentPortDescription" maxOccurs="unbounded"/>
        <xsd:element name="property" type="Deployment:ComponentPropertyDescription" minOccurs="0"/>
        <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/>
      </xsd:sequence>
      <xsd:element name="contentLocation" type="xsd:string"/>
    </xsd:choice>
    <!-- @@mxiong: added a href attribute
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:attribute name="href" type="xsd:string" use="optional"/>
  </xsd:complexType>


  <xsd:complexType name="ComponentExternalPortEndpoint">
    <xsd:sequence>
      <xsd:element name="portName" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="PlanSubcomponentPortEndpoint">
    <xsd:sequence>
      <xsd:element name="portName" type="xsd:string"/>
      <xsd:element name="provider" type="xsd:string" minOccurs="0"/>
      <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/>
      <xsd:element name="instance" type="xsd:IDREF"/> <!-- InstanceDeploymentDescription -->
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ExternalReferenceEndpoint">
    <xsd:sequence>
      <xsd:element name="location" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ConnectionResourceDeploymentDescription">
    <xsd:sequence>
      <xsd:element name="targetName" type="xsd:string"/>
      <xsd:element name="requirementName" type="xsd:string"/>
      <xsd:element name="resourceName" type="xsd:string"/>
      <xsd:element name="resourceValue" type="Deployment:Any"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="PlanConnectionDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="source" type="xsd:string" minOccurs="0"/>
      <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/>
      <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="internalEndpoint" type="Deployment:PlanSubcomponentPortEndpoint" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="deployedResource" type="Deployment:ConnectionResourceDeploymentDescription" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ImplementationDependency">
    <xsd:sequence>
      <xsd:element name="requiredType" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="DeploymentPlan">
   <xsd:sequence>
     <xsd:element name="label" type="xsd:string" minOccurs="0"/>
     <xsd:element name="UUID" type="xsd:string" minOccurs="0"/>
     <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription" minOccurs="0" maxOccurs="1"/>
     <xsd:element name="implementation" type="Deployment:MonolithicDeploymentDescription" maxOccurs="unbounded" />
     <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/>
     <xsd:element name="connection" type="Deployment:PlanConnectionDescription" minOccurs="0" maxOccurs="unbounded"/>
     <!-- potentially recursive, not used
          <xsd:element name="externalProperty" type="Deployment:PlanPropertyMapping"/>
     -->
     <xsd:element name="dependsOn" type="Deployment:ImplementationDependency" minOccurs="0" maxOccurs="unbounded"/>
     <xsd:element name="artifact" type="Deployment:ArtifactDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/>
     <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>




<!-- Implementation -->


  <xsd:complexType name="Capability">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="resourceType" type="xsd:string"/>
      <xsd:element name="property" type="Deployment:SatisfierProperty"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="NamedImplementationArtifact">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <!-- @@ recursive NIA->IAD->NIA -->
      <xsd:element name="referencedArtifact" type="Deployment:ImplementationArtifactDescription"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ImplementationArtifactDescription">
    <!-- @@mxiong: added minOccurs="0" maxOccurs="1"
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:choice minOccurs="0" maxOccurs="1">
      <xsd:sequence>
        <xsd:element name="label" type="xsd:string"/>
        <xsd:element name="UUID" type="xsd:string"/>

        <!-- @@ There probably should be only one location? -->
        <xsd:element name="location" type="xsd:string" maxOccurs="unbounded"/>
        <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/>
        <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/>
        <xsd:element name="dependsOn" type="Deployment:NamedImplementationArtifact" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/>
      </xsd:sequence>
      <xsd:element name="contentLocation" type="xsd:string"/>
    </xsd:choice>
    <!-- @@mxiong: added a href attribute
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:attribute name="href" type="xsd:string" use="optional"/>
  </xsd:complexType>


  <xsd:complexType name="ImplementationRequirement">
    <xsd:sequence>
      <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/>
      <xsd:element name="resourcePort" type="xsd:string"/>
      <xsd:element name="componentPort" type="xsd:string"/>
      <xsd:element name="resourceType" type="xsd:string"/>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="property" type="Deployment:Property"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="MonolithicImplementationDescription">
    <xsd:sequence>
      <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/>
      <xsd:element name="primaryArtifact" type="Deployment:NamedImplementationArtifact" maxOccurs="unbounded"/>
      <xsd:element name="deployRequirement" type="Deployment:ImplementationRequirement" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="PackagedComponentImplementation">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <!-- @@ recursive CPD->PCI->CID->CAD->SID->CPD -->
      <xsd:element name="referencedImplementation" type="Deployment:ComponentImplementationDescription"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ComponentPackageDescription">
    <!-- @@mxiong: added minOccurs="0" maxOccurs="1"
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:choice minOccurs="0" maxOccurs="1">
      <xsd:sequence>
        <xsd:element name="label" type="xsd:string"/>
        <xsd:element name="UUID" type="xsd:string"/>
        <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription" minOccurs="0"/>
        <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/>
        <xsd:element name="implementation" type="Deployment:PackagedComponentImplementation"/>
        <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/>
      </xsd:sequence>
      <xsd:element name="contentLocation" type="xsd:string"/>
    </xsd:choice>
    <!-- @@mxiong: added href
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:attribute name="href" type="xsd:string" use="optional"/>
  </xsd:complexType>


  <xsd:complexType name="ComponentPackageReference">
    <xsd:sequence>
      <xsd:element name="requiredUUID" type="xsd:string"/>
      <xsd:element name="requiredName" type="xsd:string"/>
      <xsd:element name="requiredType" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="SubcomponentInstantiationDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="package" type="Deployment:ComponentPackageDescription"/>
      <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/>
      <xsd:element name="selectRequirement" type="Deployment:Requirement" minOccurs="0"/>
      <xsd:element name="reference" type="Deployment:ComponentPackageReference" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>


  <xsd:complexType name="SubcomponentPortEndpoint">
    <xsd:sequence>
      <xsd:element name="portName" type="xsd:string"/>
      <xsd:element name="instance" type="xsd:IDREF"/> <!-- SubcomponentInstantiationDescription -->
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="AssemblyConnectionDescription">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/>
      <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="internalEndpoint" type="Deployment:SubcomponentPortEndpoint" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="SubcomponentPropertyReference">
    <xsd:sequence>
      <xsd:element name="propertyName" type="xsd:string"/>
      <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="AssemblyPropertyMapping">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="externalName" type="xsd:string"/>
      <xsd:element name="delegatesTo" type="Deployment:SubcomponentPropertyReference"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ComponentAssemblyDescription">
    <xsd:sequence>
      <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription" maxOccurs="unbounded"/>
      <xsd:element name="connection" type="Deployment:AssemblyConnectionDescription" maxOccurs="unbounded"/>
      <xsd:element name="externalProperty" type="Deployment:AssemblyPropertyMapping" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="ComponentImplementationDescription">
    <!-- @@mxiong: added minOccurs="0" maxOccurs="unbounded"
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:choice minOccurs="0" maxOccurs="1">
      <xsd:sequence>
        <xsd:element name="label" type="xsd:string"/>
        <xsd:element name="UUID" type="xsd:string"/>
        <xsd:element name="implements" type="Deployment:ComponentInterfaceDescription" minOccurs="0"/>
        <xsd:choice>
          <xsd:element name="assemblyImpl" type="Deployment:ComponentAssemblyDescription"/>
          <xsd:element name="monolithicImpl" type="Deployment:MonolithicImplementationDescription"/>
        </xsd:choice>
        <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/>
        <xsd:element name="capability" type="Deployment:Capability" minOccurs="0"/>
        <xsd:element name="dependsOn" type="Deployment:ImplementationDependency" minOccurs="0"/>
        <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/>
      </xsd:sequence>
      <xsd:element name="contentLocation" type="xsd:string"/>
    </xsd:choice>
    <!-- @@mxiong: added href
                   when adding config_handler support
                   for repoMan
    -->
    <xsd:attribute name="href" type="xsd:string" use="optional"/>
  </xsd:complexType>


<!-- Package -->


  <xsd:complexType name="PackageConfiguration">
    <xsd:choice>
      <xsd:sequence>
        <xsd:element name="label" type="xsd:string"/>
        <xsd:element name="UUID" type="xsd:string"/>
<!--
@@ recursive, not used
        <xsd:element name="specializedConfig" type="Deployment:PackageConfiguration"/>
-->

        <xsd:element name="basePackage" type="Deployment:ComponentPackageDescription"/>
        <xsd:element name="reference" type="Deployment:ComponentPackageReference" minOccurs="0"/>
        <xsd:element name="selectRequirement" type="Deployment:Requirement" minOccurs="0"/>
        <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/>
      </xsd:sequence>
      <xsd:element name="contentLocation" type="xsd:string"/>
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="TopLevelPackageDescription">
    <xsd:sequence>
      <xsd:element name="package" type="Deployment:PackageConfiguration" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>


<!-- Top-level elements. -->


  <xsd:element name="domain" type="Deployment:Domain"/>
  <xsd:element name="deploymentPlan" type="Deployment:DeploymentPlan"/>
  <xsd:element name="implementationArtifactDescription" type="Deployment:ImplementationArtifactDescription" />
  <xsd:element name="componentInterfaceDescription" type="Deployment:ComponentInterfaceDescription"/>
  <xsd:element name="componentImplementationDescription" type="Deployment:ComponentImplementationDescription"/>
  <xsd:element name="componentPackageDescription" type="Deployment:ComponentPackageDescription"/>
  <xsd:element name="packageConfiguration" type="Deployment:PackageConfiguration"/>
  <xsd:element name="topLevelPackageDescription" type="Deployment:TopLevelPackageDescription"/>



<!-- VAULT

Place for strange things. Nobody knows what they are for...

-->

<!--

  <xsd:complexType name="EnumType">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="typeId" type="xsd:string"/>
      <xsd:element name="member" type="xsd:string" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="ObjrefType">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="typeId" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="BoundedStringType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="bound" type="xsd:string"/>
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="FixedType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="digits" type="xsd:string"/>
      <xsd:element name="scale" type="xsd:string"/>
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="ArrayType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="length" type="xsd:string"/>
      <xsd:element name="elementType" type="Deployment:DataType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="SequenceType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="bound" type="xsd:string"/>
      <xsd:element name="elementType" type="Deployment:DataType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="AliasType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="typeId" type="xsd:string"/>
      <xsd:element name="elementType" type="Deployment:DataType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="StructType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="typeId" type="xsd:string"/>
      <xsd:element name="member" type="Deployment:StructMemberType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="StructMemberType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="type" type="Deployment:DataType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="ValueType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="typeId" type="xsd:string"/>
      <xsd:element name="modifier" type="xsd:string"/>
      <xsd:element name="baseType" type="Deployment:DataType"/>
      <xsd:element name="member" type="Deployment:ValueMemberType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="ValueMemberType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="visibility" type="xsd:string"/>
      <xsd:element name="type" type="Deployment:DataType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="UnionType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="typeId" type="xsd:string"/>
      <xsd:element name="default" type="Deployment:UnionMemberType"/>
      <xsd:element name="discriminatorType" type="Deployment:DataType"/>
      <xsd:element name="member" type="Deployment:UnionMemberType"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="UnionMemberType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="type" type="Deployment:DataType"/>
      <xsd:element name="label" type="Deployment:DataValue"/>
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="NamedValue">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="value" type="Deployment:DataValue"/>
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="Bridge">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="label" type="xsd:string"/>
      <xsd:element name="connect" type="Deployment:Interconnect"/>
      <xsd:element name="resource" type="Deployment:Resource"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Interconnect">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="label" type="xsd:string"/>
      <xsd:element name="connection" type="Deployment:Bridge"/>
      <xsd:element name="connect" type="Deployment:Node"/>
      <xsd:element name="resource" type="Deployment:Resource"/>
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="PlanPropertyMapping">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="source" type="xsd:string"/>
      <xsd:element name="externalName" type="xsd:string"/>
      <xsd:element name="delegatesTo" type="Deployment:PlanSubcomponentPropertyReference"/>
    </xsd:choice>
  </xsd:complexType>


  <xsd:complexType name="PlanSubcomponentPropertyReference">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="propertyName" type="xsd:string"/>
      <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription"/>
    </xsd:choice>
  </xsd:complexType>

-->

<!--

  This type is not referenced anywhere.

  <xsd:complexType name="RequirementSatisfier">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="resourceType" type="xsd:string"/>
      <xsd:element name="property" type="Deployment:SatisfierProperty"/>
    </xsd:choice>
  </xsd:complexType>

-->

</xsd:schema>
