﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://riginstallsgames.org/schemas/dp/6/context"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns="http://riginstallsgames.org/schemas/dp/6/context"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" />
  <xs:attributeGroup name="ContentSourceAttributes">
    <xs:attribute ref="xml:base" use="optional" />
    <xs:attribute name="name" type="xs:string" use="required" />
    <xs:attribute name="src" type="xs:anyURI" use="optional" />
    <xs:attribute name="prompt" type="xs:string" use="optional" />
    <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="true" />
  </xs:attributeGroup>
  <xs:complexType name="Content">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="Directory">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="Content">
              <xs:attribute name="maxDepth" type="xs:nonNegativeInteger" use="optional" />
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="File">
        <xs:complexType>
          <xs:attributeGroup ref="ContentSourceAttributes" />
        </xs:complexType>
      </xs:element>
    </xs:choice>
    <xs:attributeGroup ref="ContentSourceAttributes" />
  </xs:complexType>
  <xs:group name="ContainerGroup">
    <xs:choice>
      <xs:element name="Application">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="Content">
              <xs:attribute name="id" use="required">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="\{?[a-fA-F0-9]{8}-?[a-fA-F0-9]{4}-?[a-fA-F0-9]{4}-?[a-fA-F0-9]{4}-?[a-fA-F0-9]{12}\}?"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="version" use="optional">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="\d+.*" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="description" type="xs:string" use="optional" />
              <xs:attribute name="href" type="xs:anyURI" use="optional" />
              <xs:attribute name="thumbnail" type="xs:anyURI" use="optional" />
              <xs:attribute name="runtime" type="xs:string" use="required" />
              <xs:attribute name="deploy" use="optional" default="always">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="always" />
                    <xs:enumeration value="optin" />
                    <xs:enumeration value="optout" />
                    <xs:enumeration value="never" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="entryPoint" type="xs:string" use="required" />
              <xs:attribute name="launch" use="optional" default="never">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="always" />
                    <xs:enumeration value="optin" />
                    <xs:enumeration value="optout" />
                    <xs:enumeration value="never" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="arguments" type="xs:string" use="optional" />
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="Runtime">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="Content">
              <xs:attribute name="version" use="required">
                <xs:simpleType>
                  <xs:union memberTypes="xs:nonNegativeInteger">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:pattern value="0[xX][0-9a-fA-F]+" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:union>
                </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="deploy" use="optional" default="auto">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="always" />
                    <xs:enumeration value="auto" />
                    <xs:enumeration value="never" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="implicit" type="xs:boolean" use="optional" default="false" />
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="DeploymentContext">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Mode">
          <xs:complexType>
            <xs:group ref="ContainerGroup" />
            <xs:attribute ref="xml:base" use="optional" />
            <xs:attribute name="name" type="xs:string" use="required" />
            <xs:attribute name="icon" type="xs:anyURI" use="optional" />
          </xs:complexType>
        </xs:element>
        <xs:element name="Include">
          <xs:complexType>
            <xs:attribute ref="xml:base" use="optional" />
            <xs:attribute name="src" type="xs:anyURI" use="required" />
            <xs:attribute name="critical" type="xs:boolean" use="optional" default="true" />
          </xs:complexType>
        </xs:element>
        <xs:group ref="ContainerGroup" />
      </xs:choice>
      <xs:attribute ref="xml:base" use="optional" />
      <xs:attribute name="name" type="xs:string" use="optional" />
      <xs:attribute name="background" type="xs:anyURI" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>