<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../xslt/schema.xsl"?>

<!-- (C) 2009-2011 Rackspace Hosting, All Rights Reserved -->

<schema
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:csapi="http://docs.openstack.org/compute/api/v1.1"
    xmlns:xsdxt="http://docs.rackspacecloud.com/xsd-ext/v1.0"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
    targetNamespace="http://docs.openstack.org/compute/api/v1.1"
>
  <annotation>
    <xsd:appinfo
        xml:lang="EN"
        xmlns="http://www.w3.org/1999/xhtml">
      <xsdxt:title>Shared IP Groups</xsdxt:title>
      <xsdxt:link rel="index" href="api.xsd" />
    </xsd:appinfo>
    <xsd:documentation
        xml:lang="EN"
        xmlns="http://www.w3.org/1999/xhtml">
      <p>
        This schema file defines all entities related to <a
        href="#type_SharedIpGroup" title="See definition of
        SharedIPGroup">Shared IP Groups</a>.
      </p>
    </xsd:documentation>
  </annotation>

  <!-- Import ATOM specific schema definitions -->
  <import vc:minVersion="1.1" namespace="http://www.w3.org/2005/Atom" schemaLocation="atom/atom.xsd" />

  <include schemaLocation="common.xsd">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          Common types used by multiple entities and possibly spanning
          several types of requests.
        </p>
      </xsd:documentation>
    </annotation>
  </include>

  <element name="sharedIpGroup" type="csapi:SharedIpGroup">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          The element defines a group of servers that can share one or
          more public IPs with each other.
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/ipgroup.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/ipgroup.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>
  <element name="sharedIpGroups" type="csapi:SharedIpGroups">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          A collection of shared IP groups.
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/ipgroups.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/ipgroups.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>

  <!-- Complex Types -->
  <complexType name="SharedIpGroup">
    <sequence>
      <choice>
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              An IP group type can take two basic forms.  On a request
              a single, optional, server ID may be specified&#x2026;
            </p>
            <xsdxt:samples>
              <xsdxt:sample>
                <xsdxt:code type="application/xml" href="../samples/ipgroup2.xml" />
              </xsdxt:sample>
              <xsdxt:sample>
                <xsdxt:code type="application/json" href="../samples/ipgroup2.json" />
              </xsdxt:sample>
            </xsdxt:samples>
            <p>
              &#x2026;on a response a server ID list is always returned.  This
              server list may be empty&#x2026;
            </p>
            <xsdxt:samples>
              <xsdxt:sample>
                <xsdxt:code type="application/xml" href="../samples/ipgroup.xml" />
              </xsdxt:sample>
              <xsdxt:sample>
                <xsdxt:code type="application/json" href="../samples/ipgroup.json" />
              </xsdxt:sample>
            </xsdxt:samples>
            <p>
              &#x2026;note that is a mutually exclusive choice: either
              a &lt;server&gt; or &lt;servers&gt; element must be
              specified, but not both.
            </p>
          </xsd:documentation>
        </annotation>
        <element name="server" type="csapi:ServerID" minOccurs="0" maxOccurs="1">
          <annotation>
            <xsd:documentation
                xml:lang="EN"
                xmlns="http://www.w3.org/1999/xhtml">
              <p>
                A single, optional, server ID. This form is used when
                creating an IP group.
              </p>
            </xsd:documentation>
          </annotation>
        </element>
        <element name="servers" type="csapi:ServerIDList">
          <annotation>
            <xsd:documentation
                xml:lang="EN"
                xmlns="http://www.w3.org/1999/xhtml">
              <p>
                A collection of server IDs. This form is used when
                querying an IP group.
              </p>
            </xsd:documentation>
          </annotation>
        </element>
      </choice>
      <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <attribute type="csapi:UUID" name="id" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The ID of the shared IP group.  The attribute should not
            be specified when creating a new shared IP group.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string" name="name" use="required">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The name of the shared IP group.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="SharedIpGroups">
    <sequence>
      <element name="sharedIpGroup" type="csapi:SharedIpGroup" minOccurs="0" maxOccurs="1000">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of shared IP groups.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="ServerIDList">
    <sequence>
      <element name="server" type="csapi:ServerID" minOccurs="0" maxOccurs="25">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of servers within a shared IP group.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="ServerID">
    <sequence>
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <attribute name="id" type="csapi:UUID" use="required">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The ID of a server within a shared IP group.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>
</schema>



