﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:x="MSN:manifest" targetNamespace="MSN:manifest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Packages" minOccurs="1" maxOccurs="1" nillable="false">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Package" minOccurs="1" nillable="false">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="LanguageMarket" minOccurs="1" maxOccurs="unbounded" nillable="false">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Name" minOccurs="1" maxOccurs="1" nillable="false">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:minLength value="1" />
                                <xs:maxLength value="50" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>
                          <xs:element name="PackageFileName" minOccurs="1" maxOccurs="1" nillable="false">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:pattern value=".*\.((?i:msi)|(?i:msp)|(?i:exe)|(?i:cab))">
                                </xs:pattern>
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>
                          <xs:element name="Version" minOccurs="1" maxOccurs="1" nillable="false">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:pattern value="[0-9]{1,6}\.[0-9]{1,6}(\.[0-9]{1,6}){0,1}(\.[0-9]{1,6}){0,1}" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>
                          <xs:element name="DownloadLocation" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                          <xs:element name="DownloadSize" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                          <xs:element name="ProductCode" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                          <xs:element name="GUID" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                          <xs:element name="DependsOn" minOccurs="0" maxOccurs="1" nillable="false">
                            <xs:complexType>
                              <xs:sequence minOccurs="0">
                                <xs:element name="dependency" maxOccurs="unbounded" nillable="false">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="ExcludeVersions" minOccurs="1" maxOccurs="1" nillable="false">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="ExcludeVersion" nillable="false" maxOccurs="unbounded">
                                              <xs:complexType>
                                                <xs:attribute name="MinVersion" use="optional">
                                                  <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                      <xs:pattern value="[0-9]{1,6}\.[0-9]{1,6}(\.[0-9]{1,6}){0,1}(\.[0-9]{1,6}){0,1}" />
                                                    </xs:restriction>
                                                  </xs:simpleType>
                                                </xs:attribute>
                                                <xs:attribute name="MaxVersion" use="optional">
                                                  <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                      <xs:pattern value="[0-9]{1,6}\.[0-9]{1,6}(\.[0-9]{1,6}){0,1}(\.[0-9]{1,6}){0,1}" />
                                                    </xs:restriction>
                                                  </xs:simpleType>
                                                </xs:attribute>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="GUID" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="PackageType" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                          <xs:element name="InstallParams" minOccurs="1" maxOccurs="1" nillable="false">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="InstallCmd" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                                <xs:element name="SkipOnFailure" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                              </xs:sequence>
                              <xs:attribute name="deploydir" type="xs:string" />
                              <xs:attribute name="Installalways" type="xs:string" />
                              <xs:attribute name="ProductCodeLocation" type="xs:string" />
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="UninstallParams" minOccurs="1" maxOccurs="1" nillable="false">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="UninstallCmd" minOccurs="1" maxOccurs="1" nillable="false">
                                  <xs:complexType>
                                    <xs:attribute name="PrefixCmd" type="xs:string" use="required" />
                                    <xs:attribute name="SuffixCmd" type="xs:string" use="required" />
                                    <xs:attribute name="FullCmd" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="SkipUninstall" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="RepairParams" minOccurs="1" maxOccurs="1" nillable="false">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="RepairCmd" minOccurs="1" maxOccurs="1" nillable="false" >
                                  <xs:complexType>
                                    <xs:attribute name="PrefixCmd" type="xs:string" use="optional" />
                                    <xs:attribute name="SuffixCmd" type="xs:string" use="optional" />
                                    <xs:attribute name="FullCmd" type="xs:string" use="optional" />
                                    <xs:attribute name="ForceDl" type="xs:string" use="optional" />
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="Skiprepair" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                                <xs:element name="Arprepair" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                                <xs:element name="SkipOnFailure" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="InstallTime" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
                          <xs:element name="Regkeys" minOccurs="0" nillable="false" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="Regkey" minOccurs="0" nillable="false">
                                  <xs:complexType>
                                    <xs:attribute name="root" type="xs:string" use="required" />
                                    <xs:attribute name="location" type="xs:string" use="required" />
                                    <xs:attribute name="name" type="xs:string" use="required" />
                                    <xs:attribute name="data" type="xs:string" use="required" />
                                    <xs:attribute name="type" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="RegKeyOps" minOccurs="0" nillable="false" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="RegKeyStamp" minOccurs="0" nillable="false">
                                  <xs:complexType>
                                    <xs:attribute name="Condition" type="xs:string" use="required" />
                                    <xs:attribute name="NonsilentOnly" type="xs:string" use="optional" />
                                    <xs:attribute name="Root" type="xs:string" use="required" />
                                    <xs:attribute name="Path" type="xs:string" use="required" />
                                    <xs:attribute name="Name" type="xs:string" use="required" />
                                    <xs:attribute name="Value" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                                <xs:element maxOccurs="unbounded" name="RegKeyCopy" minOccurs="0" nillable="false">
                                  <xs:complexType>
                                    <xs:attribute name="SrcRoot" type="xs:string" use="required" />
                                    <xs:attribute name="SrcPath" type="xs:string" use="required" />
                                    <xs:attribute name="SrcName" type="xs:string" use="required" />
                                    <xs:attribute name="DstRoot" type="xs:string" use="required" />
                                    <xs:attribute name="DstPath" type="xs:string" use="required" />
                                    <xs:attribute name="DstName" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element minOccurs="0" name="SupportedLangMarkets" nillable="false" maxOccurs="1">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:string">
                                  <xs:attribute name="SupportAll" type="xs:string" use="required" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="ClientMachine" maxOccurs="1" minOccurs="1" nillable="false">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="OperatingSystem" minOccurs="1" maxOccurs="1" nillable="false">
                                  <xs:complexType>
                                    <xs:attribute name="MinVersion" type="xs:string" use="required" />
                                    <xs:attribute name="MaxVersion" type="xs:string" use="required" />
                                    <xs:attribute name="Architecture" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="Browser" minOccurs="0" maxOccurs="1">
                                  <xs:complexType>
                                    <xs:attribute name="Name" type="xs:string" use="required" />
                                    <xs:attribute name="MinVersion" type="xs:string" use="required" />
                                    <xs:attribute name="MaxVersion" type="xs:string" use="required" />
                                    <xs:attribute name="Architecture" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="langMarket" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="hideInstall" type="xs:string" use="required" />
                  <xs:attribute name="installer" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="override" type="xs:string" use="required"></xs:attribute>
            <xs:attribute name="brandName" type="xs:string" use="required"></xs:attribute>
          </xs:complexType>
        </xs:element>
        <xs:element name="Logging" maxOccurs="1" minOccurs="1" nillable="false">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Omniture" minOccurs="1" maxOccurs="1" nillable="false">
                <xs:complexType>
                  <xs:attribute name="location" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required" />
      <xs:attribute name="Brand" type="xs:string" use="required" />
      <xs:attribute name="Distributor" type="xs:string" use="required" />
      <xs:attribute name="InstallType" type="xs:string" use="required" />
      <xs:attribute name="ManifestVersion" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{1,6}\.[0-9]{1,6}(\.[0-9]{1,6}){0,1}(\.[0-9]{1,6}){0,1}">
            </xs:pattern>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>