<?xml version="1.0" encoding="utf-8"?>
<!--
DMTF - Distributed Management Task Force, Inc. - http://www.dmtf.org

Document number: DSP8009
Date: 2012-10-26
Version: 1.0.1
Document status: DMTF Standard 

Title: CIMI Schema

Document type: Specification (W3C XML Schema Document)
Document language: en-US

Abstract: XML Schema for CIMI

Contact group: cmwg, cmwg@dmtf.org

Copyright (C) 2012 Distributed Management Task Force, Inc. (DMTF).  
All rights reserved.
DMTF is a not-for-profit association of industry members dedicated to
promoting enterprise and systems management and interoperability.  Members and
non-members may reproduce DMTF specifications and documents, provided that 
correct attribution is given.

As DMTF specifications may be revised from time to time, the particular
version and release date should always be noted.  Implementation of certain
elements of this standard or proposed standard may be subject to third party
patent rights, including provisional patent rights (herein "patent rights").

DMTF makes no representations to users of the standard as to the existence of
such rights, and is not responsible to recognize, disclose, or identify any
or all such third party patent right, owners or claimants, nor for any
incomplete or inaccurate identification or disclosure of such rights,
owners or claimants.  DMTF shall have no liability to any party, in any
manner or circumstance, under any legal theory whatsoever, for failure to
recognize, disclose, or identify any such third party patent rights, or for
such party's reliance on the standard or incorporation thereof in its product,
protocols or testing procedures.  DMTF shall have no liability to any party
implementing such standard, whether such implementation is foreseeable or
not, nor to any patent owner or claimant, and shall have no liability or
responsibility for costs or losses incurred if a standard is withdrawn or
modified after publication, and shall be indemnified and held harmless by
any party implementing the standard from any and all claims of infringement
by a patent owner for such implementations.  For information about patents
held by third-parties which have notified the DMTF that, in their opinion,
such patent may relate to or impact implementations of DMTF standards, visit
http://www.dmtf.org/about/policies/disclosures.php.

Note: while the schema defined in this file specifies certain elements
as optional (via a minOccurs="0"), this is done to allow for the flexibility
of those elements being excluded from the serialization even though they
would be required under "normal" circumstances.  For example, normally the
"id" element is a required one, however, if $select is used and
"id" is not part of the selected attributes, then "id" will not be present
in the serialization.  So, the schema is defined to not detect these
non-normal serializations invalid.

The schema provided does not intend to reflect every single modeling 
constraint and requirement specified in the model. This schema is designed 
to apply more broadly to any model-related serialized material found in 
Consumer requests as well as in Provider responses, and is intended to 
provide a preliminary, non-exhaustive syntactic check on these. In particular 
future updates of this specification may intermix new XML elements into the 
resources using the current CIMI namespace to resources. The schema that is 
provided is just a starting-point for those who would find it useful and 
it might need to be modified based on specific application's needs.

Change Log:
1.0.0	2012-08-28	Version 1.0
1.0.1	2012-09-01	Errata

-->

<xs:schema
  xmlns:tns="http://schemas.dmtf.org/cimi/1"
  xmlns:cimi="http://schemas.dmtf.org/cimi/1"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://schemas.dmtf.org/cimi/1"
  elementFormDefault="qualified"
  blockDefault="#all"
  version="1.0.1">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2001/xml.xsd"/>

  <xs:complexType name="propertyType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="key" type="xs:string" use="required"/>
        <xs:anyAttribute processContents="lax"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- Expandable Reference -->
  <!-- Element has an 'href' attribute and an 'xs:any' in the body -->
  <xs:complexType name="expRef">
    <xs:sequence>
      <xs:any namespace="##any" processContents="lax" minOccurs="0"
              maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="operationType">
    <xs:sequence>
      <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="rel" type="xs:anyURI" use="required"/>
    <xs:attribute name="href" type="xs:anyURI" use="required"/>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>

  <!-- These appear in almost all resources -->
  <xs:group name="commonElements">
    <xs:sequence>
      <xs:element name="id" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="description" type="xs:string" minOccurs="0"/>
      <xs:element name="created" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="updated" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="property" type="tns:propertyType" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:element name="Action">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="action" type="xs:anyURI"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="Collection">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:any namespace="##targetNamespace" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="resourceURI" type="xs:anyURI" use="required"/>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="CloudEntryPoint">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="baseURI" type="xs:anyURI" minOccurs="0"/>
        <xs:element name="resourceMetadata" type="tns:ResourceMetadataCollRef"
                    minOccurs="0"/>
        <xs:element name="systems" type="tns:SystemCollRef" minOccurs="0"/>
        <xs:element name="systemTemplates" type="tns:SystemTemplateCollRef" 
                    minOccurs="0"/>
        <xs:element name="machines" type="tns:MachineCollRef" minOccurs="0"/>
        <xs:element name="machineTemplates" type="tns:MachineTemplateCollRef" 
                    minOccurs="0"/>
        <xs:element name="machineConfigs" type="tns:MachineConfigurationCollRef"
                    minOccurs="0"/>
        <xs:element name="machineImages" type="tns:MachineImageCollRef" 
                    minOccurs="0"/>
        <xs:element name="credentials" type="tns:CredentialCollRef" 
                    minOccurs="0"/>
        <xs:element name="credentialTemplates" 
                    type="tns:CredentialTemplateCollRef" minOccurs="0"/>
        <xs:element name="volumes" type="tns:VolumeCollRef" minOccurs="0"/>
        <xs:element name="volumeTemplates" type="tns:VolumeTemplateCollRef" 
                    minOccurs="0"/>
        <xs:element name="volumeConfigs" type="tns:VolumeConfigurationCollRef" 
                    minOccurs="0"/>
        <xs:element name="volumeImages" type="tns:VolumeImageCollRef" 
                    minOccurs="0"/>
        <xs:element name="networks" type="tns:NetworkCollRef" minOccurs="0"/>
        <xs:element name="networkTemplates" type="tns:NetworkTemplateCollRef" 
                    minOccurs="0"/>
        <xs:element name="networkConfigs" type="tns:NetworkConfigurationCollRef"
                    minOccurs="0"/>
        <xs:element name="networkPorts" type="tns:NetworkPortCollRef" 
                    minOccurs="0"/>
        <xs:element name="networkPortTemplates" 
                    type="tns:NetworkPortTemplateCollRef" minOccurs="0"/>
        <xs:element name="networkPortConfigs" 
                    type="tns:NetworkPortConfigurationCollRef" minOccurs="0"/>
        <xs:element name="addresses" type="tns:AddressCollRef" minOccurs="0"/>
        <xs:element name="addressTemplates" type="tns:AddressTemplateCollRef" 
                    minOccurs="0"/>
        <xs:element name="forwardingGroups" type="tns:ForwardingGroupCollRef" 
                    minOccurs="0"/>
        <xs:element name="forwardingGroupTemplates" 
                    type="tns:ForwardingGroupTemplateCollRef" minOccurs="0"/>
        <xs:element name="jobs" type="tns:JobCollRef" minOccurs="0"/>
        <xs:element name="meters" type="tns:MeterCollRef" minOccurs="0"/>
        <xs:element name="meterTemplates" type="tns:MeterTemplateCollRef" 
                    minOccurs="0"/>
        <xs:element name="meterConfigs" type="tns:MeterConfigurationCollRef" 
                    minOccurs="0"/>
        <xs:element name="eventLogs" type="tns:EventLogCollRef" minOccurs="0"/>
        <xs:element name="eventLogTemplates" type="tns:EventLogTemplateCollRef"
                    minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="ResourceMetadataElements">
    <xs:sequence>
      <xs:element name="id" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="typeURI" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="attribute" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="name" type="xs:string" use="required"/>
          <xs:attribute name="namespace" type="xs:anyURI"/>
          <xs:attribute name="type" type="xs:string" use="required"/>
          <xs:attribute name="required" type="xs:boolean"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="capability" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="name" type="xs:string"/>
          <xs:attribute name="uri" type="xs:anyURI" use="required"/>
          <xs:attribute name="description" type="xs:string"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="action" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="name" type="xs:string" use="required"/>
          <xs:attribute name="uri" type="xs:anyURI" use="required"/>
          <xs:attribute name="description" type="xs:string"/>
          <xs:attribute name="method" type="xs:string" use="required"/>
          <xs:attribute name="inputMessage" type="xs:string"/>
          <xs:attribute name="outputMessage" type="xs:string"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0"
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:element name="ResourceMetadata">
    <xs:complexType>
      <xs:group ref="tns:ResourceMetadataElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="ResourceMetadataRef">
    <xs:group ref="tns:ResourceMetadataElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="ResourceMetadataCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:ResourceMetadata" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="System">
    <xs:complexType>
      <xs:group ref="tns:SystemElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="SystemElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="systems" type="tns:SystemSystemCollRef" minOccurs="0"/>
      <xs:element name="machines" type="tns:SystemMachineCollRef" 
                  minOccurs="0"/>
      <xs:element name="credentials" type="tns:SystemCredentialCollRef" 
                  minOccurs="0"/>
      <xs:element name="volumes" type="tns:SystemVolumeCollRef" minOccurs="0"/>
      <xs:element name="networks" type="tns:SystemNetworkCollRef" 
                  minOccurs="0"/>
      <xs:element name="networkPorts" type="tns:SystemNetworkPortCollRef" 
                  minOccurs="0"/>
      <xs:element name="addresses" type="tns:SystemAddressCollRef" 
                  minOccurs="0"/>
      <xs:element name="forwardingGroups" 
                  type="tns:SystemForwardingGroupCollRef" minOccurs="0"/>
      <xs:element name="meters" type="tns:MeterCollRef" minOccurs="0"/>
      <xs:element name="eventLog" type="tns:EventLogRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0"
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="SystemRef">
    <xs:group ref="tns:SystemElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="SystemCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:System" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="systemTemplate" type="tns:SystemTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="SystemSystem">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="system" type="tns:SystemRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemSystemCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemSystem" minOccurs="0" maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemMachine">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="machine" type="tns:MachineRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemMachineCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemMachine" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemCredential">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="machine" type="tns:CredentialRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemCredentialCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemCredential" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemVolume">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="volume" type="tns:VolumeRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemVolumeCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemVolume" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemNetwork">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemNetworkCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemNetwork" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemNetworkPort">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="networkPort" type="tns:NetworkPortRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemNetworkPortCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemNetworkPort" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemAddress">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="address" type="tns:AddressRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemAddressCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemAddress" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemForwardingGroup">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="forwardingGroup" type="tns:ForwardingGroupRef"
                    minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="SystemForwardingGroupCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemForwardingGroup" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="SystemTemplate">
    <xs:complexType>
      <xs:group ref="tns:SystemTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="SystemTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="componentDescriptor" minOccurs="0" 
                  maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string" minOccurs="0"/>
            <xs:element name="description" type="xs:string" minOccurs="0"/>
            <xs:element name="property" type="tns:propertyType" minOccurs="0" 
                        maxOccurs="unbounded"/>
            <xs:element name="type" type="xs:anyURI"/>
            <xs:any namespace="##any" processContents="lax" minOccurs="0" 
                    maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="meterTemplate" type="tns:MeterTemplateRef" 
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="eventLogTemplate" type="tns:EventLogTemplateRef" 
                  minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  
  <xs:complexType name="SystemTemplateRef">
    <xs:group ref="tns:SystemTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="SystemTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:SystemTemplate" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Machine">
    <xs:complexType>
      <xs:group ref="tns:MachineElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MachineElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="cpu" type="xs:integer" minOccurs="0"/>
      <xs:element name="memory" type="xs:integer" minOccurs="0"/>
      <xs:element name="disks" type="tns:DiskCollRef" minOccurs="0"/>
      <xs:element name="cpuArch" type="xs:string" minOccurs="0"/>
      <xs:element name="volumes" type="tns:MachineVolumeCollRef" minOccurs="0"/>
      <xs:element name="networkInterfaces" type="tns:NetworkInterfaceCollRef" 
                  minOccurs="0"/>
      <xs:element name="latestSnapshot" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="snapshots" type="tns:MachineImageCollRef" 
                  minOccurs="0"/>
      <xs:element name="meters" type="tns:MeterCollRef" minOccurs="0"/>
      <xs:element name="eventLog" type="tns:EventLogRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="MachineRef">
    <xs:group ref="tns:MachineElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="MachineCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Machine" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MachineCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="machineTemplate" type="tns:MachineTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Disk">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="capacity" type="xs:integer" minOccurs="0"/>
        <xs:element name="initialLocation" type="xs:string" minOccurs="0"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="DiskCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Disk" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MachineVolume">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="initialLocation" type="xs:string" minOccurs="0"/>
        <xs:element name="volume" type="tns:VolumeRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="MachineVolumeCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:MachineVolume" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MachineNetworkInterface">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="addresses" type="tns:AddressCollRef" minOccurs="0"/>
        <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
        <xs:element name="networkPort" type="tns:NetworkPortRef" minOccurs="0"/>
        <xs:element name="state" type="xs:string" minOccurs="0"/>
        <xs:element name="maxAddress" type="xs:string" minOccurs="0"/>
        <xs:element name="mtu" type="xs:integer" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="MachineNetworkInterfaceAddress">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="address" type="tns:AddressRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="MachineSnapshot">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="shapshot" type="tns:MachineImageRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="MachineTemplate">
    <xs:complexType>
      <xs:group ref="tns:MachineTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MachineTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="initialState" type="xs:string" minOccurs="0"/>
      <xs:element name="machineConfig" type="tns:optMachineConfigurationRef"
                  minOccurs="0"/>
      <xs:element name="machineImage" type="tns:optMachineImageRef" 
                  minOccurs="0"/>
      <xs:element name="credential" type="tns:optCredentialTemplateRef" 
                  minOccurs="0"/>
      <xs:element name="volume" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                    maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="initialLocation" type="xs:string" 
                        use="optional"/>
          <xs:attribute name="href" type="xs:anyURI"/>
          <xs:anyAttribute namespace="##other" processContents="lax"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="volumeTemplate" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:group ref="tns:VolumeTemplateElements"/>
          <xs:attribute name="initialLocation" type="xs:string" 
                        use="optional"/>
          <xs:attribute name="href" type="xs:anyURI" use="optional"/>
          <xs:anyAttribute namespace="##other" processContents="lax"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="networkInterface" type="tns:NetworkInterface"
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="meterTemplate" type="tns:MeterTemplateRef" 
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="eventLogTemplate" type="tns:EventLogTemplateRef" 
                  minOccurs="0"/>
      <xs:element name="userData" type="xs:string" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="MachineTemplateRef">
    <xs:group ref="tns:MachineTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MachineTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:MachineTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkInterface">
    <xs:sequence>
      <xs:element name="address" type="tns:AddressRef" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:element name="network" type="tns:NetworkRef"/>
      <xs:element name="networkPort" type="tns:NetworkPortRef" 
                  minOccurs="0"/>
      <xs:element name="state" type="xs:string"/>
      <xs:element name="mtu" type="xs:integer" minOccurs="0"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="NetworkInterface" type="tns:NetworkInterface"/>

  <xs:complexType name="NetworkInterfaceCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:NetworkInterface" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MachineConfiguration">
    <xs:complexType>
      <xs:group ref="tns:MachineConfigurationElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MachineConfigurationElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="cpu" type="xs:integer" minOccurs="0"/>
      <xs:element name="memory" type="xs:integer" minOccurs="0"/>
      <xs:element name="disk" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="capacity" type="xs:integer"/>
            <xs:element name="format" type="xs:string"/>
            <xs:element name="initialLocation" type="xs:string" minOccurs="0"/>
            <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                    maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:anyAttribute namespace="##other" processContents="lax"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="cpuArch" type="xs:string" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optMachineConfigurationRef">
    <xs:group ref="tns:MachineConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MachineConfigurationRef">
    <xs:group ref="tns:MachineConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MachineConfigurationCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:MachineConfiguration" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MachineImage">
    <xs:complexType>
      <xs:group ref="tns:MachineImageElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MachineImageElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="type" type="xs:string" minOccurs="0"/>
      <xs:element name="imageLocation" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="relatedImage" type="tns:MachineImageRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optMachineImageRef">
    <xs:group ref="tns:MachineImageElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MachineImageRef">
    <xs:group ref="tns:MachineImageElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MachineImageCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:MachineImage" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Credential">
    <xs:complexType>
      <xs:group ref="tns:CredentialElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="CredentialElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <!-- Spec defined extensions that may be used -->
      <xs:element name="userName" type="xs:string" minOccurs="0"/>
      <xs:element name="password" type="xs:string" minOccurs="0"/>
      <xs:element name="key" type="xs:hexBinary" minOccurs="0"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="CredentialRef">
    <xs:group ref="tns:CredentialElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="CredentialCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Credential" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="CredentialCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="credentialTemplate" type="tns:CredentialTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="CredentialTemplate">
    <xs:complexType>
      <xs:group ref="tns:CredentialTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="CredentialTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0"
                  maxOccurs="unbounded"/>
      <!-- Spec defined extensions that may be used -->
      <xs:element name="userName" type="xs:string" minOccurs="0"/>
      <xs:element name="password" type="xs:string" minOccurs="0"/>
      <xs:element name="key" type="xs:hexBinary" minOccurs="0"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optCredentialTemplateRef">
    <xs:group ref="tns:CredentialTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="CredentialTemplateRef">
    <xs:group ref="tns:CredentialTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="CredentialTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:CredentialTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Volume">
    <xs:complexType>
      <xs:group ref="tns:VolumeElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="VolumeElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="type" type="xs:string" minOccurs="0"/>
      <xs:element name="capacity" type="xs:integer" minOccurs="0"/>
      <xs:element name="bootable" type="xs:boolean" minOccurs="0"/>
      <xs:element name="images" type="tns:VolumeImageCollRef" minOccurs="0"/>
      <xs:element name="meters" type="tns:MeterCollRef" minOccurs="0"/>
      <xs:element name="eventLog" type="tns:EventLogRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="VolumeRef">
    <xs:group ref="tns:VolumeElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="VolumeCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Volume" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="VolumeCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="volumeTemplate" type="tns:VolumeTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="VolumeVolumeImage">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="volumeImage" type="tns:VolumeImageRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="VolumeTemplate">
    <xs:complexType>
      <xs:group ref="tns:VolumeTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="VolumeTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="volumeConfig" type="tns:optVolumeConfigurationRef" 
                  minOccurs="0"/>
      <xs:element name="volumeImage" type="tns:VolumeImageRef" minOccurs="0"/>
      <xs:element name="meterTemplate" type="tns:MeterTemplateRef" 
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="eventLogTemplate" type="tns:EventLogTemplateRef" 
                  minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="VolumeTemplateRef">
    <xs:group ref="tns:VolumeTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="VolumeTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:VolumeTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="VolumeConfiguration">
    <xs:complexType>
      <xs:group ref="tns:VolumeConfigurationElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="VolumeConfigurationElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="type" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="format" type="xs:string" minOccurs="0"/>
      <xs:element name="capacity" type="xs:integer" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optVolumeConfigurationRef">
    <xs:group ref="tns:VolumeConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="VolumeConfigurationRef">
    <xs:group ref="tns:VolumeConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="VolumeConfigurationCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:VolumeConfiguration" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="VolumeImage">
    <xs:complexType>
      <xs:group ref="tns:VolumeImageElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="VolumeImageElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="imageLocation" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="bootable" type="xs:boolean" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="VolumeImageRef">
    <xs:group ref="tns:VolumeImageElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="VolumeImageCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:VolumeImage" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Network">
    <xs:complexType>
      <xs:group ref="tns:NetworkElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="NetworkElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="networkType" type="xs:string" minOccurs="0"/>
      <xs:element name="mtu" type="xs:integer" minOccurs="0"/>
      <xs:element name="classOfService" type="xs:string" minOccurs="0"/>
      <xs:element name="networkPorts" type="tns:NetworkPortCollRef" 
                  minOccurs="0"/>
      <xs:element name="forwardingGroup" type="tns:ForwardingGroupRef" 
                  minOccurs="0"/>
      <xs:element name="meters" type="tns:MeterCollRef" minOccurs="0"/>
      <xs:element name="eventLog" type="tns:EventLogRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="NetworkRef">
    <xs:group ref="tns:NetworkElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="NetworkCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Network" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="NetworkCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="networkTemplate" type="tns:NetworkTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="NetworkTemplate">
    <xs:complexType>
      <xs:group ref="tns:NetworkTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="NetworkTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="networkConfig" type="tns:optNetworkConfigurationRef" 
                  minOccurs="0"/>
      <xs:element name="forwardingGroup" type="tns:ForwardingGroupRef" 
                  minOccurs="0"/>
      <xs:element name="meterTemplate" type="tns:MeterTemplateRef" 
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="eventLogTemplate" type="tns:EventLogTemplateRef" 
                  minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  
  <xs:complexType name="NetworkTemplateRef">
    <xs:group ref="tns:NetworkTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:NetworkTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="NetworkConfiguration">
    <xs:complexType>
      <xs:group ref="tns:NetworkConfigurationElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="NetworkConfigurationElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="networkType" type="xs:string" minOccurs="0"/>
      <xs:element name="mtu" type="xs:integer" minOccurs="0"/>
      <xs:element name="classOfService" type="xs:string" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optNetworkConfigurationRef">
    <xs:group ref="tns:NetworkConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkConfigurationRef">
    <xs:group ref="tns:NetworkConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkConfigurationCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:NetworkConfiguration" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="NetworkPort">
    <xs:complexType>
      <xs:group ref="tns:NetworkPortElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="NetworkPortElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
      <xs:element name="portType" type="xs:string" minOccurs="0"/>
      <xs:element name="classOfService" type="xs:string" minOccurs="0"/>
      <xs:element name="meters" type="tns:MeterCollRef" minOccurs="0"/>
      <xs:element name="eventLog" type="tns:EventLogRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="NetworkPortRef">
    <xs:group ref="tns:NetworkPortElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkPortCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:NetworkPort" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="NetworkPortCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="networkPortTemplate" 
                    type="tns:NetworkPortTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="NetworkPortTemplate">
    <xs:complexType>
      <xs:group ref="tns:NetworkPortTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="NetworkPortTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
      <xs:element name="networkPortConfig" 
                  type="tns:optNetworkPortConfigurationRef" minOccurs="0"/>
      <xs:element name="meterTemplate" type="tns:MeterTemplateRef" 
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="eventLogTemplate" type="tns:EventLogTemplateRef" 
                  minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  
  <xs:complexType name="NetworkPortTemplateRef">
    <xs:group ref="tns:NetworkPortTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkPortTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:NetworkPortTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="NetworkPortConfiguration">
    <xs:complexType>
      <xs:group ref="tns:NetworkPortConfigurationElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="NetworkPortConfigurationElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="portType" type="xs:string" minOccurs="0"/>
      <xs:element name="classOfService" type="xs:string" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optNetworkPortConfigurationRef">
    <xs:group ref="tns:NetworkPortConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkPortConfigurationRef">
    <xs:group ref="tns:NetworkPortConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="NetworkPortConfigurationCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:NetworkPortConfiguration" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Address">
    <xs:complexType>
      <xs:group ref="tns:AddressElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="AddressElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="ip" type="xs:string" minOccurs="0"/>
      <xs:element name="hostname" type="xs:string" minOccurs="0"/>
      <xs:element name="allocation" type="xs:string" minOccurs="0"/>
      <xs:element name="defaultGateway" type="xs:string" minOccurs="0"/>
      <xs:element name="dns" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="protocol" type="xs:string" minOccurs="0"/>
      <xs:element name="mask" type="xs:string" minOccurs="0"/>
      <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
      <xs:element name="resource" type="tns:expRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="AddressRef">
    <xs:group ref="tns:AddressElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="AddressCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Address" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="AddressCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="addressTemplate" type="tns:AddressTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="AddressTemplate">
    <xs:complexType>
      <xs:group ref="tns:AddressTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="AddressTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="ip" type="xs:string" minOccurs="0"/>
      <xs:element name="hostname" type="xs:string" minOccurs="0"/>
      <xs:element name="allocation" type="xs:string" minOccurs="0"/>
      <xs:element name="defaultGateway" type="xs:string" minOccurs="0"/>
      <xs:element name="dns" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="protocol" type="xs:string" minOccurs="0"/>
      <xs:element name="mask" type="xs:string" minOccurs="0"/>
      <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
      </xs:sequence>
  </xs:group>
  
    <xs:complexType name="AddressTemplateRef">
    <xs:group ref="tns:AddressTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="AddressTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:AddressTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="ForwardingGroup">
    <xs:complexType>
      <xs:group ref="tns:ForwardingGroupElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="ForwardingGroupElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="network" type="tns:NetworkRef" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="ForwardingGroupRef">
    <xs:group ref="tns:ForwardingGroupElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="ForwardingGroupCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:ForwardingGroup" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="ForwardingGroupCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="forwardingGroupTemplate" 
                    type="tns:ForwardingGroupTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="ForwardingGroupNetwork">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="network" type="tns:NetworkRef" minOccurs="0"/>
        <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="ForwardingGroupTemplate">
    <xs:complexType>
      <xs:group ref="tns:ForwardingGroupElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="ForwardingGroupTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="network" type="tns:NetworkRef" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="ForwardingGroupTemplateRef">
    <xs:group ref="tns:ForwardingGroupTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="ForwardingGroupTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:ForwardingGroupTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Job">
    <xs:complexType>
      <xs:group ref="tns:JobElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="JobElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="targetResource" type="tns:expRef" minOccurs="0"/>
      <xs:element name="affectedResource" type="tns:expRef" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:element name="action" type="xs:string" minOccurs="0"/>
      <xs:element name="status" type="xs:string" minOccurs="0"/>
      <xs:element name="returnCode" type="xs:integer" minOccurs="0"/>
      <xs:element name="progress" type="xs:integer" minOccurs="0"/>
      <xs:element name="statusMessage" type="xs:string" minOccurs="0"/>
      <xs:element name="timeOfStatusChange" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="isCancellable" type="xs:boolean" minOccurs="0"/>
      <xs:element name="parentJob" type="tns:JobRef" minOccurs="0"/>
      <xs:element name="nestedJob" type="tns:JobRef" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="JobRef">
    <xs:group ref="tns:JobElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="JobCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Job" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Meter">
    <xs:complexType>
      <xs:group ref="tns:MeterElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MeterElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="targetResource" type="tns:expRef" minOccurs="0"/>
      <xs:element name="aspect" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="units" type="xs:string" minOccurs="0"/>
      <xs:element name="sampleInterval" type="xs:integer" minOccurs="0"/>
      <xs:element name="timeScope" type="xs:string" minOccurs="0"/>
      <xs:element name="intervalDuration" type="xs:duration" minOccurs="0"/>
      <xs:element name="isContinuous" type="xs:boolean" minOccurs="0"/>
      <xs:element name="samples" minOccurs="0" type="tns:SampleCollRef"/>
      <xs:element name="minValue" type="xs:string" minOccurs="0"/>
      <xs:element name="maxValue" type="xs:string" minOccurs="0"/>
      <xs:element name="stopTime" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="expiresTime" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="MeterRef">
    <xs:group ref="tns:MeterElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="MeterCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Meter" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MeterCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="meterTemplate" type="tns:MeterTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="MeterTemplate">
    <xs:complexType>
      <xs:group ref="tns:MeterTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MeterTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="targetResource" type="tns:expRef" minOccurs="0"/>
      <xs:element name="meterConfig" type="tns:optMeterConfigurationRef" 
                  minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="MeterTemplateRef">
    <xs:group ref="tns:MeterTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MeterTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:MeterTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Sample">
    <xs:complexType>
      <xs:group ref="tns:SampleElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="SampleElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="sample">
        <xs:complexType>
          <xs:sequence>
            <xs:any namespace="##any" processContents="lax" minOccurs="0" 
                    maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="timestamp" type="xs:dateTime"/>
          <xs:attribute name="value" type="xs:string"/>
          <xs:anyAttribute namespace="##any" processContents="lax"/>
        </xs:complexType>
      </xs:element>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="SampleRef">
    <xs:group ref="tns:SampleElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="SampleCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Sample" minOccurs="0" maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="MeterConfiguration">
    <xs:complexType>
      <xs:group ref="tns:MeterConfigurationElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="MeterConfigurationElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="associatedTo" type="tns:expRef" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:element name="aspect" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="units" type="xs:string" minOccurs="0"/>
      <xs:element name="sampleInterval" type="xs:integer" minOccurs="0"/>
      <xs:element name="timeScope" type="xs:string" minOccurs="0"/>
      <xs:element name="intervalDuration" type="xs:duration" minOccurs="0"/>
      <xs:element name="isContinuous" type="xs:boolean" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="optMeterConfigurationRef">
    <xs:group ref="tns:MeterConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI" use="optional"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MeterConfigurationRef">
    <xs:group ref="tns:MeterConfigurationElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="MeterConfigurationCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:MeterConfiguration" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="EventLog">
    <xs:complexType>
      <xs:group ref="tns:EventLogElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="EventLogElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="targetResource" type="tns:expRef" minOccurs="0"/>
      <xs:element name="events" type="tns:EventCollRef" minOccurs="0"/>
      <xs:element name="persistence" type="xs:string" minOccurs="0"/>
      <xs:element name="summary" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="low" type="xs:integer"/>
            <xs:element name="medium" type="xs:integer"/>
            <xs:element name="high" type="xs:integer"/>
            <xs:element name="critical" type="xs:integer"/>
            <xs:any namespace="##any" processContents="lax" minOccurs="0" 
                    maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:anyAttribute namespace="##any" processContents="lax"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="EventLogRef">
    <xs:group ref="tns:EventLogElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>
  
  <xs:complexType name="EventLogCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:EventLog" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="EventLogCreate">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="tns:commonElements"/>
        <xs:element name="eventLogTemplate" type="tns:EventLogTemplateRef"/>
        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="EventLogTemplate">
    <xs:complexType>
      <xs:group ref="tns:EventLogTemplateElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="EventLogTemplateElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="targetResource" type="tns:expRef" minOccurs="0"/>
      <xs:element name="persistence" type="xs:string" minOccurs="0"/>
      <xs:element name="operation" type="tns:operationType" minOccurs="0" 
                  maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="EventLogTemplateRef">
    <xs:group ref="tns:EventLogTemplateElements"/>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="EventLogTemplateCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:EventLogTemplate" minOccurs="0"
                    maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:element name="Event">
    <xs:complexType>
      <xs:group ref="tns:EventElements"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:group name="EventElements">
    <xs:sequence>
      <xs:group ref="tns:commonElements"/>
      <xs:element name="timestamp" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="type" type="xs:string" minOccurs="0"/>
      <xs:element name="content" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:any namespace="##any" processContents="lax" minOccurs="0" 
                    maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:anyAttribute namespace="##any" processContents="lax"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="outcome" type="xs:string" minOccurs="0"/>
      <xs:element name="severity" type="xs:string" minOccurs="0"/>
      <xs:element name="contact" type="xs:string" minOccurs="0"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" 
              maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="EventCollRef">
    <xs:choice>
      <xs:sequence/>
      <xs:sequence>
        <xs:element name="id" type="xs:anyURI"/>
        <xs:element name="count" type="xs:integer"/>
        <xs:element ref="tns:Event" minOccurs="0" maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax" minOccurs="0"
                maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="href" type="xs:anyURI"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

</xs:schema>
