<!ELEMENT PageVariable (#PCDATA)>
<!ELEMENT WindowCaption (#PCDATA)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!ELEMENT SubTitle (#PCDATA)>
<!ELEMENT BackBtnText (#PCDATA)>
<!ELEMENT NextBtnText (#PCDATA)>
<!ELEMENT CancelBtnText (#PCDATA)>
<!ELEMENT BrowseBtnText (#PCDATA)>
<!ELEMENT UI (Page+)>
<!ELEMENT Page (PageVariable?, WindowCaption?, Title?, SubTitle?, Description?, Image?, BackBtnText?, NextBtnText?, BrowseBtnText?, CancelBtnText?)>
<!ATTLIST Page
        Type (Welcome | Tree | Progress | Finish | FolderPath | InputString) #REQUIRED
>

<!ELEMENT AttachedProduct EMPTY>
<!ATTLIST AttachedProduct
        Guid CDATA #REQUIRED
        Name CDATA #REQUIRED
>

<!ELEMENT Event (#PCDATA)>
<!ATTLIST Event
        RunAt (Install|install|Uninstall|uninstall|Update|update) #REQUIRED
        RunAtPosition (Begin|begin|End|end) #REQUIRED
>

<!ELEMENT Condition (#PCDATA)>
<!ELEMENT FailureText (#PCDATA)>
<!ELEMENT Prerequisite (Condition, FailureText)>

<!ELEMENT Component (Requires*, (Action|ExecuteAction|MsiAction|ArchiveAction)*)>
<!ATTLIST Component
        Guid CDATA #REQUIRED
        Name CDATA #REQUIRED
        Version CDATA #REQUIRED
        Description CDATA #IMPLIED
        Min_Compliant_Version CDATA #IMPLIED
        Condition CDATA #IMPLIED
        Size CDATA #IMPLIED
        SysSize CDATA #IMPLIED
        OnlyServer (True|False) #IMPLIED
        RefCount CDATA #IMPLIED
        Arch (X86|X64|X86Only) #IMPLIED
        Error (true) #IMPLIED
        BaseVersion CDATA #IMPLIED
        Order (PreInstall | PostInstall) #IMPLIED
>

<!ELEMENT Requires EMPTY>
<!ATTLIST Requires
        Guid CDATA #REQUIRED
        Name CDATA #IMPLIED
        Description CDATA #IMPLIED
        Visible (true | false) #IMPLIED
        TransferDeselection (true | false) #IMPLIED
>

<!ELEMENT Action (Dst* | Src* | RegValue* | IniSection*)>
<!ATTLIST Action
        Type (Script | File | Registry | NtService | Execute | Shortcut | Ini | SeparatedValues | GAC) #REQUIRED
        Dst CDATA #IMPLIED
        RunAt (Install | UnInstall | Uninstall) #IMPLIED
        Condition CDATA #IMPLIED
        ConditionFailureText CDATA #IMPLIED
        Use64BitHive (true | false) #IMPLIED
        ExeName CDATA #IMPLIED
        TerminateRunningService (true | false) #IMPLIED
        ServiceName CDATA #IMPLIED
        StartOnServer CDATA #IMPLIED
        StartType CDATA #IMPLIED
        ServiceType CDATA #IMPLIED
        ServiceTypeInteractive (true|false) #IMPLIED
        Password CDATA #IMPLIED
        UserName CDATA #IMPLIED
        Description CDATA #IMPLIED
        Dependencies CDATA #IMPLIED
        FileName CDATA #IMPLIED
        ForceOnServer (true | false) #IMPLIED
        Persistent (true | false) #IMPLIED
        DisplayName CDATA #IMPLIED
        Debug (true | false) #IMPLIED
        ApplicationId CDATA #IMPLIED 
>

<!ELEMENT Dst (#PCDATA)>
<!ATTLIST Dst
         CheckInfo_version CDATA #IMPLIED
         CheckInfo_timestamp CDATA #IMPLIED
>

<!ELEMENT Src (#PCDATA)>
<!ATTLIST Src
        DisplayText CDATA #IMPLIED
        Parameters CDATA #IMPLIED
        AppPath CDATA #IMPLIED
        Register (true | false | CreateTLB | CreateTLBNoCodebase) #IMPLIED
        PatchThis (true | false) #IMPLIED
        TimeOut CDATA #IMPLIED
        SuppressWindow (true | false) #IMPLIED
        NoWaitOnExecute (true | false) #IMPLIED
>

<!ELEMENT RegValue (#PCDATA)>
<!ATTLIST RegValue
        Name CDATA #IMPLIED
        Type (String | DWORD | Binary | ExpandedString | MultipleStrings) #IMPLIED
        Delimiter CDATA #IMPLIED
        Overwrite (true | false) #IMPLIED
>

<!ELEMENT IniSection (IniKey+)>
<!ATTLIST IniSection
        Name CDATA #IMPLIED
>

<!ELEMENT IniKey (#PCDATA)>
<!ATTLIST IniKey
        Name CDATA #REQUIRED
        DeleteKey (true | false) #IMPLIED
>

<!ELEMENT ExecuteAction (Condition?, Exe, Parameters?, (Wait|NoWait))>
<!ATTLIST ExecuteAction
        Debug (true | false) #IMPLIED
        Persistent (true | false) #IMPLIED
        RunAt (Install|Uninstall|Update|ServerCreate|Patch|Always) #IMPLIED
>

<!ELEMENT Exe (#PCDATA)>
<!ATTLIST Exe
        SuppressWindow (true | false) #IMPLIED
        RunAsInteractiveUser (true | false) #IMPLIED
        DisplayText CDATA #IMPLIED
        PatchThis (true | false) #IMPLIED
>
<!ELEMENT Parameters (#PCDATA)>
<!ELEMENT NoWait EMPTY>
<!ELEMENT Wait (#PCDATA)>
<!ATTLIST Wait
        TimeOut CDATA #IMPLIED
>

<!ELEMENT MsiAction (Condition?, MsiFile, MsiParameter*)>
<!ATTLIST MsiAction
        Debug (true | false) #IMPLIED
        Persistent (true | false) #IMPLIED
        RunAt (Install|Uninstall|Update|ServerCreate|Patch|Always) #IMPLIED
>

<!ELEMENT MsiFile (#PCDATA)>
<!ATTLIST MsiFile
        ProductCode CDATA #IMPLIED
        PatchThis (true | false) #IMPLIED
>

<!ELEMENT MsiParameter (#PCDATA)>
<!ATTLIST MsiParameter
          Name CDATA #REQUIRED
>

<!ELEMENT ArchiveAction (Condition?, Archive)>
<!ATTLIST ArchiveAction
  Dst CDATA #REQUIRED
  Persistent (true | false) #IMPLIED
  RunAt (Install | Uninstall | Update | ServerCreate | Patch | Always) #IMPLIED
  Debug (true | false) #IMPLIED
>

<!ELEMENT Archive (#PCDATA)>
<!ATTLIST Archive
  CRC32 CDATA #IMPLIED
>

