<?xml version="1.0"?>
<!-- A Relax NG schema for the libvirt domain snapshot properties XML format -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name='domainsnapshot'/>
  </start>

  <include href='domaincommon.rng'/>

  <define name='domainsnapshot'>
    <element name='domainsnapshot'>
      <interleave>
        <optional>
          <element name='name'>
            <text/>
          </element>
        </optional>
        <optional>
          <element name='description'>
            <text/>
          </element>
        </optional>
        <optional>
          <element name='state'>
            <ref name='state'/>
          </element>
        </optional>
        <optional>
          <element name='creationTime'>
            <text/>
          </element>
        </optional>
        <optional>
          <element name='memory'>
            <choice>
              <attribute name='snapshot'>
                <choice>
                  <value>no</value>
                  <value>internal</value>
                </choice>
              </attribute>
              <group>
                <optional>
                  <attribute name='snapshot'>
                    <value>external</value>
                  </attribute>
                </optional>
                <attribute name='file'>
                  <ref name='absFilePath'/>
                </attribute>
              </group>
            </choice>
            <empty/>
          </element>
        </optional>
        <optional>
          <element name='disks'>
            <zeroOrMore>
              <ref name='disksnapshot'/>
            </zeroOrMore>
          </element>
        </optional>
        <optional>
          <element name='active'>
            <choice>
              <value>0</value>
              <value>1</value>
            </choice>
          </element>
        </optional>
        <optional>
          <choice>
            <element name='domain'>
              <element name='uuid'>
                <ref name="UUID"/>
              </element>
            </element>
            <ref name='domain'/>
          </choice>
        </optional>
        <optional>
          <element name='parent'>
            <element name='name'>
              <text/>
            </element>
          </element>
        </optional>
      </interleave>
    </element>
  </define>

  <define name='state'>
    <choice>
      <value>nostate</value>
      <value>running</value>
      <value>blocked</value>
      <value>paused</value>
      <value>shutdown</value>
      <value>shutoff</value>
      <value>crashed</value>
      <value>disk-snapshot</value>
    </choice>
  </define>

  <define name='disksnapshot'>
    <element name='disk'>
      <attribute name='name'>
        <choice>
          <ref name='diskTarget'/>
          <ref name='absFilePath'/>
        </choice>
      </attribute>
      <choice>
        <attribute name='snapshot'>
          <value>no</value>
        </attribute>
        <attribute name='snapshot'>
          <value>internal</value>
        </attribute>
        <group>
          <optional>
            <attribute name='snapshot'>
              <value>external</value>
            </attribute>
          </optional>
          <interleave>
            <ref name='disksnapshotdriver'/>
            <optional>
              <element name='source'>
                <optional>
                  <attribute name='file'>
                    <ref name='absFilePath'/>
                  </attribute>
                </optional>
                <empty/>
              </element>
            </optional>
          </interleave>
        </group>
      </choice>
    </element>
  </define>

  <define name='disksnapshotdriver'>
    <optional>
      <element name='driver'>
        <optional>
          <attribute name='type'>
            <ref name='storageFormat'/>
          </attribute>
        </optional>
        <empty/>
      </element>
    </optional>
  </define>

</grammar>
