7.2 ADMX Policy Definition Schema

The ADMX Policy Definition Types Schema provides the schema elements and types used to define the required information for creating individual policy settings. These elements define the category, supported on and individual policy setting definition information, including the localized presentation portions. Also defined are elements in the ADMX File Schema (section 7.3).

ADMX Policy Definition Types Schema Element/Group Name (Parent Elements or Types)

Description

and (SupportedOnDefinition)

All conditions are required to be TRUE.

annotation (BaseDescriptiveGroup, PolicyDefinitions, PolicyDefinitionResources)

String comment for categories, policy definition resources, and policy definitions. Strings added to this tag will not be processed by GP tools.

BaseDescriptiveAttributeGroup

Common group attribute declarations for use by categories and policy definitions.

BaseDescriptiveGroup

Common group element declarations for use by categories and policy definitions.

boolean (PolicyElements)

Of type BooleanElement.

BooleanElement

Describes a choice element in a policy with associated values for the TRUE and

FALSE cases.

Category

A grouping of policy definitions.

CategoryReference

A reference to an already defined category.

CheckBox

Represents a checkbox display element. Must be associated with a BooleantyElement when defined in the <elements> PolicyDefinition element.

checkBox (PolicyPresentation)

Of type CheckBox.

ComboBox

Represents a combobox display element with default/suggested entries. Must be associated with a TextElement when defined in the <elements> PolicyDefinition element.

comboBox (PolicyPresentation)

Of type CheckBox.

DataElement

An abstract type that represents parameters for a policy setting definition and used as a base type within MultiTextBox, TextBox, and ComboBox types.

DataElementContent

An abstract type that represents parameters for a policy setting definition and used as a base type within DecimalTextBox, CheckBox,  DropdownList, ListBox, and longDecimalTextBox types.

decimal (PolicyElements)

Of type DecimalElement.

decimal (Value)

Represents an unsigned 32-bit integer numeric value.

DecimalElement

Describes a number/decimal element in a policy. The number can be defined to be stored as either a numeric or string representative value that represents, at maximum, a 32-bit number.

DecimalTextBox

Represents a text box with or without a spin control for entering decimal numbers as a policy setting parameter. Must be associated with either a DecimalElement or TextElement when defined in the <elements> PolicyDefinition element.

decimalTextBox (PolicyPresentation)

Of type DecimalTextBox.

default (ComboBox)

Specifies a default string.

defaultValue (TextBox)

Specifies a default value. This can be used for either string or numeric data.

definition (SupportedOnDefinitions)

Of type SupportedOnDefinition.

delete (Value)

Represents a deleted registry value or key.

disabledList (PolicyDefinition)

A list of ValueItems representing a registry value name set to disabled value.

disabledValue (PolicyDefinition)

A registry value name set to disabled value.

DropdownList

Represents a dropdown list display element from which a user can pick one of the displayed entries. Must be associated with an EnumerationElement when defined in the <elements> PolicyDefinition element.

dropdownList (PolicyPresentation)

Of type DropdownList.

elements (PolicyDefinition)

Of type PolicyElements.

enabledList (PolicyDefinition)

A list of ValueItems representing a registry value name set to enabled value.

enabledValue (PolicyDefinition)

A registry value name set to enabled value.

enum (PolicyElements)

Of type EnumerationElement.

EnumerationElement

Describes an enumeration element in a policy. This element always contains at least one item.

falseList (BooleanElement)

A list of values to be set when the item is set to a FALSE state.

falseValue (BooleanElement)

A value to be set when the item is set to a FALSE state.

item (EnumerationElement)

Represents an item in the EnumerationElement.

item (ValueList)

Represents an item in a list.

keywords (BaseDescriptiveGroup)

Optional keywords associated with categories and policy definitions. Not supported by Group Policy tools.

label (ComboBox)

Text associated with input box to provide prompt text.

label (TextBox)

Text associated with input box to provide prompt text.

ListBox

Represents a list box with Add and Remove buttons. This is the only type that can be used to manage multiple values under one key. Must be associated with a ListElement when defined in the <elements> PolicyDefinition element.

listBox (PolicyPresentation)

Of type ListBox.

list (PolicyElements)

Of type ListElement.

ListElement

Describes a list element in a policy.

longDecimal (PolicyElements)

Of type LongDecimalElement.

longDecimal (Value)

Represents an unsigned 64-bit integer numerical value.

LongDecimalElement

Describes a number / decimal element in a policy. The number can be defined to be stored as either a numeric or string representative value that represents, at maximum, a 64-bit number.

LongDecimalTextBox

Represents a text box with or without a spin control for entering decimal numbers as a policy setting parameter. Must be associated with either a LongDecimalElement or TextElement when defined in the <elements> PolicyDefinition element.

longDecimalTextBox (PolicyPresentation)

Of type LongDecimalTextBox

majorVersion (SupportedProduct)

A major version of a product.

minorVersion (SupportedMajorVersion)

Single version of a component.

multiText

Of type multiTextElement.

multiTextElement

Describes a string in a policy interpreted as a sequence of characters terminated by two null Unicode characters, within which zero or more null-terminated Unicode strings can exist.

MultiTextBox

Represents a multi-line textbox display element. Must be associated with a multiTextElement when defined in the <elements> PolicyDefinition element.

multiTextBox (PolicyPresentation)

Of type MultiTextBox

or (SupportedOnDefinition)

At least one condition is required to be TRUE.

parentCategory (BaseDescriptiveGroup)

References parent category to the current Category.

PolicyClass

An enumeration of the 3 possible classes of a policy definition. The class determines whether the policy setting will be applicable to a user, a machine, or both.

PolicyDefinition

Represents a policy setting.

PolicyElementAttributeGroup

Attribute group that all policy elements are required to have: string ID, GUID representing the client extension, registry key set, and registry valuename.

PolicyElements

Represents the types of optional parameters defined in a policy setting. The number and type of PolicyElements match the policy presentation elements.

PolicyPresentation

Represents the localized portions (display information for a specific language) of the parameter definition and corresponds to those elements defined in PolicyElements, including elements text, decimalTextBox, textBox, checkBox, comboBox, dropdownList, listBox, longDecimalTextBox, and multiTextBox.

product (SupportedProducts)

A potentially supported product.

range (SupportedAndCondition)

Supported version range.

range (SupportedOrCondition)

Supported version range.

reference (SupportedAndCondition)

Reference to a supported product definition (single version or complex definition).

reference (SupportedOrCondition)

Reference to a supported product definition (single version or complex definition).

seeAlso (BaseDescriptiveGroup)

Optional string descriptor used to reference related policy definitions. Unsupported by Group Policy tools.

string (Value)

String type limited to 255 characters long.

suggestion (ComboBox)

A list of suggestions to be placed in the drop-down list. Suggestions are separated with spaces and are enclosed by double quotation marks when a value includes spaces. If a suggestion name includes white space, it is enclosed in quotation marks.

SupportedAndCondition (SupportedOnDefinition)

A list of references to a supported product definition and/or range elements that are all required to be TRUE for the policy definition to be supported.

SupportedMajorVersion (SupportedProduct)

A major version of a product that can be referenced by a policy as being supported on.

SupportedMinorVersion (SupportedMajorVersion)

Single version of a component to facilitate simple ranking of versions within a SupportedMajorVersion.

supportedOn (PolicyDefinitions)

Of type SupportedOnTable.

supportedOn (PolicyDefinition)

Of type SupportedOnReference. A policy can have a SupportedOnReference defined that refers to a specific SupportedOnDefinition defined in the SupportedOnTable or a SupportedProduct defined in the SupportedProducts. When used as a SupportedOnReference, this element is always associated with a single policy, although the reference value can be used for multiple policies.

SupportedOnDefinition (SupportedOnDefinitions)

Definition of targeting rules represented by a logical name and a displayName attribute via SupportedOrCondition and SupportedAndCondition elements. The displayName attribute are a linguistic representation of the complex SupportedOnDefinition. In the example in section 4.4.1, the definition for SUPPORTED_Sample_1_AND_SAMPLE_2 lists two products wrapped in an "and" element to indicate that both products are expected and the definition SUPPORTED_MIXED that lists a product and a product range wrapped in an "or" element to indicate that either is true.

SupportedOnDefinitions (SupportedOnTable)

Table of supported components definitions.

SupportedOnRange (SupportedOnDefinition)

Supported version range for a contiguous sequence of SupportedMajorVersion or SupportedMinorVersion elements. The ref attribute of type itemReference is a reference to a SupportedProduct containing SupportedMajorVersion elements or a SupportedMajorVersion containing SupportedMinorVersion elements representing a list of available product versions. The versionIndex attribute on the SupportedMajorVersion or SupportedMinorVersion is greater than or equal to the minVersionIndex attribute and less than or equal to the maxVersionIndex attribute for inclusion in the SupportedOnRange.

SupportedOnReference

Reference to a SupportedOnDefinition (single version or complex definition) or SupportedProduct. In the example in section 4.4.1, the Sample_Actionlist policy contains a reference to SupportedOnDefinition SUPPORTED_Sample_1_AND_SAMPLE_2.

SupportedOnTable (PolicyDefinitions)

A table of potentially supported products and/or definitions. The example in 4.4.1 contains a list of products and definitions. The supportedOn feature can be used in an Administrative plug-in to display the list of supported products or product combinations for which a policy can apply, by using a SupportedOnReference defined on the policy to refer to a specific SupportedOnDefinition or SupportedProduct defined in this table. The list contains the displayName attribute of the SupportedOnDefinition and SupportedProduct elements.

SupportedOrCondition (SupportedOnDefinition)

A list of references to a supported product definition and/or range elements where at least one is TRUE for the policy definition to be supported.

SupportedProduct (SupportedProducts)

A potentially supported product that can be referenced by a policy as being supported on. Products can define major and minor versions using SupportedMajorVersion and SupportedMinorVersion elements.

SupportedProducts (SupportedOnTable)

A table of potentially supported products.

TextBox

Represents a textbox display element. Must be associated with a TextElement when defined in the <elements> PolicyDefinition element.

textBox (PolicyPresentation)

Of type TextBox.

text (PolicyElements)

Of type TextElement.

text (PolicyPresentation)

A localized string.

TextElement

Describes a text element in a policy.

trueList (BooleanElement)

A list of values to be set when the item is set to a TRUE state.

trueValue (BooleanElement)

A value to be set when the item is set to a TRUE state.

value (item)

A specified item with an associated registry key and value.

value (ValueItem)

Represents either a deleted value, decimal, or string.

Value

Represents either a deleted value, decimal, or string.

ValueItem

Represents a

Registry value name.

valueList (item)

A list of items with an associated registry key and value.

ValueList

A list of ValueItems representing a registry value name. This element always contains at least one ValueItem.

            

PolicyDefinitions.xsd

            
 <?xml version="1.0" encoding="utf-8"?>
 <xs:schema id="ADMX" targetNamespace=
 "http://www.microsoft.com/GroupPolicy/PolicyDefinitions" 
 elementFormDefault="qualified" 
 xmlns:pd="http://www.microsoft.com/GroupPolicy/PolicyDefinitions" 
 xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
   <xs:include schemaLocation="BaseTypes.xsd"/>
            
   <!--
 Policy specification elements
 -->
   <xs:attributeGroup name="PolicyElementAttributeGroup">
     <xs:annotation>
       <xs:documentation>Attribute group that all policy elements 
 must have.</xs:documentation>
     </xs:annotation>
     <xs:attribute name="id" type="xs:string" use="required"/>
     <xs:attribute name="clientExtension" type="pd:GUID"/>
     <xs:attribute name="key" type="pd:registryKey"/>
     <xs:attribute name="valueName" type="pd:registryValueName"/>
   </xs:attributeGroup>
            
            
   <!-- Policy definition elements -->
   <xs:complexType name="DecimalElement">
     <xs:annotation>
       <xs:documentation>Describes a number/decimal element in a 
 policy</xs:documentation>
     </xs:annotation>
     <xs:attributeGroup ref="pd:PolicyElementAttributeGroup"/>
     <xs:attribute name="required" type="xs:boolean" 
 default="false"/>
     <xs:attribute name="minValue" type="xs:unsignedInt" 
 default="0"/>
     <xs:attribute name="maxValue" type="xs:unsignedInt" 
 default="9999"/>
     <xs:attribute name="storeAsText" type="xs:boolean" 
 default="false"/>
     <xs:attribute name="soft" type="xs:boolean" default="false"/>
   </xs:complexType>
   <xs:complexType name="LongDecimalElement">
     <xs:annotation>
       <xs:documentation>Describes a QWORD number/decimal element in a policy</xs:documentation>
     </xs:annotation>
     <xs:attributeGroup ref="pd:PolicyElementAttributeGroup"/>
     <xs:attribute name="required" type="xs:boolean" default="false"/>
     <xs:attribute name="minValue" type="xs:unsignedLong" default="0"/>
     <xs:attribute name="maxValue" type="xs:unsignedLong" default="9999"/>
     <xs:attribute name="storeAsText" type="xs:boolean" default="false"/>
     <xs:attribute name="soft" type="xs:boolean" default="false"/>
   </xs:complexType>
            
   <xs:complexType name="BooleanElement">
     <xs:annotation>
       <xs:documentation>Describes a choice element in a policy with 
 associated values for the true and false cases.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="trueValue" type="pd:Value" minOccurs="0" 
 maxOccurs="1"/>
       <xs:element name="falseValue" type="pd:Value" minOccurs="0" 
 maxOccurs="1"/>
       <xs:element name="trueList" type="pd:ValueList" minOccurs="0" 
 maxOccurs="1"/>
       <xs:element name="falseList" type="pd:ValueList" 
 minOccurs="0" maxOccurs="1"/>
     </xs:sequence>
     <xs:attributeGroup ref="pd:PolicyElementAttributeGroup"/>
   </xs:complexType>
            
            
   <xs:complexType name="TextElement">
     <xs:annotation>
       <xs:documentation>Describes a text element in a policy.
 </xs:documentation>
     </xs:annotation>
     <xs:attributeGroup ref="pd:PolicyElementAttributeGroup"/>
     <xs:attribute name="required" type="xs:boolean" 
 default="false"/>
     <xs:attribute name="maxLength" type="xs:unsignedInt" 
 default="1023"/>
     <xs:attribute name="expandable" type="xs:boolean" 
 default="false"/>
     <xs:attribute name="soft" type="xs:boolean" default="false"/>
   </xs:complexType>
            
            
   <xs:complexType name="EnumerationElement">
     <xs:annotation>
       <xs:documentation>Describes an enumeration element in a policy.
 </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="value" type="pd:Value"/>
             <xs:element name="valueList" type="pd:ValueList" 
 minOccurs="0" maxOccurs="1"/>
           </xs:sequence>
           <xs:attribute name="displayName" type="pd:stringReference" 
 use="required"/>
         </xs:complexType>
       </xs:element>
     </xs:sequence>
     <xs:attributeGroup ref="pd:PolicyElementAttributeGroup"/>
     <xs:attribute name="required" type="xs:boolean" default="false"/>
   </xs:complexType>
            
            
   <xs:complexType name="ListElement">
     <xs:annotation>
       <xs:documentation>Describes a list element in a policy.
 </xs:documentation>
     </xs:annotation>
     <xs:attribute name="id" type="xs:string" use="required"/>
     <xs:attribute name="clientExtension" type="pd:GUID"/>
     <xs:attribute name="key" type="pd:registryKey"/>
     <xs:attribute name="valuePrefix" type="xs:string"/>
     <xs:attribute name="additive" type="xs:boolean" 
 default="false"/>
     <xs:attribute name="expandable" type="xs:boolean" 
 default="false"/>
     <xs:attribute name="explicitValue" type="xs:boolean" 
 default="false"/>
   </xs:complexType>
            
            
   <xs:complexType name="Value">
     <xs:choice>
       <xs:element name="delete">
         <xs:complexType>
         </xs:complexType>
       </xs:element>
       <xs:element name="decimal">
         <xs:complexType>
           <xs:attribute name="value" type="xs:unsignedInt" 
 use="required"/>
         </xs:complexType>
       </xs:element>
       <xs:element name="longDecimal">
         <xs:complexType>
           <xs:attribute name="value" type="xs:unsignedLong" 
 use="required"/>
         </xs:complexType>
       </xs:element>
       <xs:element name="string">
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:maxLength value="255"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:element>
     </xs:choice>
   </xs:complexType>
            
            
   <xs:complexType name="ValueList">
     <xs:sequence>
       <xs:element name="item" type="pd:ValueItem" minOccurs="1" 
 maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute name="defaultKey" type="pd:registryKey"/>
   </xs:complexType>
            
            
   <xs:complexType name="ValueItem">
     <xs:sequence>
       <xs:element name="value" type="pd:Value"/>
     </xs:sequence>
     <xs:attribute name="key" type="pd:registryKey"/>
     <xs:attribute name="valueName" type="pd:registryValueName" 
 use="required"/>
   </xs:complexType>
            
   <xs:complexType name="multiTextElement">
     <xs:annotation>
       <xs:documentation>Describes a multi line text element in a policy</xs:documentation>
     </xs:annotation>
     <xs:attributeGroup ref="pd:PolicyElementAttributeGroup"/>
     <xs:attribute name="required" type="xs:boolean" default="false"/>
     <xs:attribute name="maxLength" type="xs:unsignedInt" default="1023"/>
     <xs:attribute name="maxStrings" type="xs:unsignedInt" default="0"/>
     <xs:attribute name="soft" type="xs:boolean" default="false"/>
   </xs:complexType>
            
   <!--
 Presentation of policy elements
 -->
            
   <xs:complexType name="DataElementContent" abstract="true">
     <xs:simpleContent>
       <xs:extension base="xs:string">
         <xs:attribute name="refId" type="xs:string" use="required"/>
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
            
            
   <xs:complexType name="DataElement" abstract="true">
     <xs:attribute name="refId" type="xs:string" use="required"/>
   </xs:complexType>
            
   <!-- Policy presentation elements -->
   <xs:complexType name="DecimalTextBox">
     <xs:annotation>
       <xs:documentation>Represents a text box with or without a 
 spin control for entering decimal numbers.</xs:documentation>
       <xs:documentation>Can be associated with either a 
 DecimalElement or TextElement.</xs:documentation>
     </xs:annotation>
     <xs:simpleContent>
       <xs:extension base="pd:DataElementContent">
         <xs:attribute name="defaultValue" type="xs:unsignedInt" 
 default="1"/>
         <xs:attribute name="spin" type="xs:boolean" 
 default="true"/>
         <xs:attribute name="spinStep" type="xs:unsignedInt" 
 default="1"/>
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
            
            
   <xs:complexType name="LongDecimalTextBox">
     <xs:annotation>
       <xs:documentation>Represents a text box with or without a 
 spin control for entering 64-bit decimal numbers.</xs:documentation>
       <xs:documentation>Can be associated with either a 
 LongDecimalElement or TextElement.</xs:documentation>
     </xs:annotation>
     <xs:simpleContent>
       <xs:extension base="pd:DataElementContent">
         <xs:attribute name="defaultValue" type="xs:unsignedInt" 
 default="1"/>
         <xs:attribute name="spin" type="xs:boolean" 
 default="true"/>
         <xs:attribute name="spinStep" type="xs:unsignedInt" 
 default="1"/>
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
            
            
   <xs:complexType name="TextBox">
     <xs:annotation>
       <xs:documentation>Represents a textbox display element.
 </xs:documentation>
       <xs:documentation>Can be associated with a TextElement.
 </xs:documentation>
     </xs:annotation>
     <xs:complexContent>
       <xs:extension base="pd:DataElement">
         <xs:sequence>
           <xs:element name="label" type="xs:string"/>
           <xs:element name="defaultValue" type="xs:string" 
 minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
            
            
   <xs:complexType name="MultiTextBox">
     <xs:annotation>
       <xs:documentation>Represents a multi-line textbox display element.
 </xs:documentation>
       <xs:documentation>Can be associated with a multiTextElement.
 </xs:documentation>
     </xs:annotation>
     <xs:complexContent>
       <xs:extension base="pd:DataElement">
          <xs:attribute name="showAsDialog" type="xs:boolean" 
 default="false"/>
          <xs:attribute name="defaultHeight" type="xs:unsignedInt" 
 default="3"/>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
            
            
   <xs:complexType name="CheckBox">
     <xs:annotation>
       <xs:documentation>Represents a checkbox display element.
 </xs:documentation>
       <xs:documentation>Can be associated with a BooleanElement.
 </xs:documentation>
     </xs:annotation>
     <xs:simpleContent>
       <xs:extension base="pd:DataElementContent">
         <xs:attribute name="defaultChecked" type="xs:boolean" 
 default="false"/>
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
            
            
   <xs:complexType name="ComboBox">
     <xs:annotation>
       <xs:documentation>Represents a combobox display element with 
 default/suggested entries.</xs:documentation>
       <xs:documentation>Can be associated with a TextElement.
 </xs:documentation>
     </xs:annotation>
     <xs:complexContent>
       <xs:extension base="pd:DataElement">
         <xs:sequence>
           <xs:element name="label" type="xs:string"/>
           <xs:element name="default" type="xs:string" minOccurs="0" 
 maxOccurs="1"/>
           <xs:element name="suggestion" type="xs:string" 
 minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:attribute name="noSort" type="xs:boolean" 
 default="false"/>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
            
   <xs:complexType name="DropdownList">
     <xs:annotation>
       <xs:documentation>Represents a dropdown list display element.
 </xs:documentation>
       <xs:documentation>Can be associated with an EnumerationElement.
 </xs:documentation>
     </xs:annotation>
     <xs:simpleContent>
       <xs:extension base="pd:DataElementContent">
         <xs:attribute name="noSort" type="xs:boolean" 
 default="false"/>
         <xs:attribute name="defaultItem" type="xs:unsignedInt"/>
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
            
   <xs:complexType name="ListBox">
     <xs:annotation>
       <xs:documentation>Represents a listbox display element.
 </xs:documentation>
       <xs:documentation>Can be associated with a ListElement.
 </xs:documentation>
     </xs:annotation>
     <xs:simpleContent>
       <xs:extension base="pd:DataElementContent">
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
            
   <xs:complexType name="PolicyPresentation">
     <xs:choice minOccurs="0" maxOccurs="unbounded">
       <xs:element name="text" type="xs:string"/>
       <xs:element name="decimalTextBox" type="pd:DecimalTextBox"/>
       <xs:element name="textBox" type="pd:TextBox"/>
       <xs:element name="checkBox" type="pd:CheckBox"/>
       <xs:element name="comboBox" type="pd:ComboBox"/>
       <xs:element name="dropdownList" type="pd:DropdownList"/>
       <xs:element name="listBox" type="pd:ListBox"/>
       <xs:element name="longDecimalTextBox" type="pd:LongDecimalTextBox"/>
       <xs:element name="multiTextBox" type="pd:MultiTextBox"/>
     </xs:choice>
     <xs:attribute name="id" type="pd:resourceID" use="required"/>
   </xs:complexType>
            
   <!--
         Common group declarations for use by categories and policy 
 definitions
     -->
   <xs:group name="BaseDescriptiveGroup">
     <xs:sequence>
       <xs:element name="annotation" type="pd:Annotation" 
 minOccurs="0" maxOccurs="unbounded"/>
       <xs:element name="parentCategory" type="pd:CategoryReference" 
 minOccurs="0" maxOccurs="1"/>
       <xs:element name="seeAlso" type="xs:string" minOccurs="0" 
 maxOccurs="unbounded"/>
       <xs:element name="keywords" type="xs:string" minOccurs="0"/>
     </xs:sequence>
   </xs:group>
            
            
   <xs:attributeGroup name="BaseDescriptiveAttributeGroup">
     <xs:attribute name="displayName" type="pd:stringReference" 
 use="required"/>
     <xs:attribute name="explainText" type="pd:stringReference"/>
   </xs:attributeGroup>
            
   <!--
         Category related types
     -->
   <xs:complexType name="CategoryReference">
     <xs:annotation>
       <xs:documentation>A reference to an already defined 
 category.</xs:documentation>
     </xs:annotation>
     <xs:attribute name="ref" type="pd:itemReference" 
 use="required"/>
   </xs:complexType>
            
            
   <xs:complexType name="Category">
     <xs:annotation>
       <xs:documentation>A grouping of policy definitions.
 </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:group ref="pd:BaseDescriptiveGroup"/>
     </xs:sequence>
     <xs:attribute name="name" type="pd:itemName" use="required"/>
     <xs:attributeGroup ref="pd:BaseDescriptiveAttributeGroup"/>
   </xs:complexType>
            
   <!--
         SupportedOn types
     -->
   <xs:complexType name="SupportedProducts">
     <xs:annotation>
       <xs:documentation>A table of potentially supported products.
 </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="product" type="pd:SupportedProduct" 
 minOccurs="1" maxOccurs="unbounded"/>
     </xs:sequence>
   </xs:complexType>
            
   <xs:complexType name="SupportedProduct">
     <xs:annotation>
       <xs:documentation>A potentially supported product that can be 
 referenced by a policy as being supported on.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="majorVersion" 
 type="pd:SupportedMajorVersion" 
 minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute name="name" type="pd:itemName" use="required"/>
     <xs:attribute name="displayName" type="pd:stringReference" 
 use="required"/>
   </xs:complexType>
            
   <xs:complexType name="SupportedMajorVersion">
     <xs:annotation>
       <xs:documentation>A major version of a product that can be 
 referenced by a policy as being supported on.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="minorVersion" 
 type="pd:SupportedMinorVersion" 
 minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute name="name" type="pd:itemName" use="required"/>
     <xs:attribute name="displayName" type="pd:stringReference" 
 use="required"/>
     <xs:attribute name="versionIndex" type="xs:unsignedInt" 
 use="required"/>
   </xs:complexType>
            
   <xs:complexType name="SupportedMinorVersion">
     <xs:annotation>
       <xs:documentation>Single version of a component to facilitate 
 simple ranking of versions</xs:documentation>
     </xs:annotation>
     <xs:attribute name="displayName" type="pd:stringReference" 
 use="required"/>
     <xs:attribute name="name" type="pd:itemName" use="required"/>
     <xs:attribute name="versionIndex" type="xs:unsignedInt" 
 use="required"/>
   </xs:complexType>
            
   <xs:complexType name="SupportedOnReference">
     <xs:annotation>
       <xs:documentation>Reference to a supported product definition 
 (single version or complex definition).</xs:documentation>
     </xs:annotation>
     <xs:attribute name="ref" type="pd:itemReference" use="required"/>
   </xs:complexType>
            
   <xs:complexType name="SupportedOnRange">
     <xs:annotation>
       <xs:documentation>Supported version range.</xs:documentation>
     </xs:annotation>
     <xs:attribute name="ref" type="pd:itemReference" 
 use="required"/>
     <xs:attribute name="minVersionIndex" type="xs:unsignedInt" 
 use="optional"/>
     <xs:attribute name="maxVersionIndex" type="xs:unsignedInt" 
 use="optional"/>
   </xs:complexType>
            
   <xs:complexType name="SupportedAndCondition">
     <xs:annotation>
       <xs:documentation>A group of supported components that must 
 all be true for the policy definition to be supported.
 </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:choice minOccurs="1" maxOccurs="unbounded">
         <xs:element name="range" type="pd:SupportedOnRange"/>
         <xs:element name="reference" 
 type="pd:SupportedOnReference"/>
       </xs:choice>
     </xs:sequence>
   </xs:complexType>
            
   <xs:complexType name="SupportedOrCondition">
     <xs:annotation>
       <xs:documentation>A group of supported components where at 
 least one must be true for the policy definition to be supported.
 </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:choice minOccurs="1" maxOccurs="unbounded">
         <xs:element name="range" type="pd:SupportedOnRange"/>
         <xs:element name="reference" 
 type="pd:SupportedOnReference"/>
       </xs:choice>
     </xs:sequence>
   </xs:complexType>
            
   <xs:complexType name="SupportedOnDefinition">
     <xs:annotation>
       <xs:documentation>
         Definition of complex supported product major and/or minor 
 versions, etc.
         The DisplayName must be a linguistic representation of the 
 complex supported-on definition.
       </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <!-- Can have zero members as conversion from ADMs don't 
 contain detailed information on this -->
       <xs:choice minOccurs="0" maxOccurs="1">
         <xs:element name="or" type="pd:SupportedOrCondition"/>
         <xs:element name="and" type="pd:SupportedAndCondition"/>
       </xs:choice>
     </xs:sequence>
     <xs:attribute name="name" type="pd:itemName" use="required"/>
     <xs:attribute name="displayName" type="pd:stringReference" 
 use="required"/>
   </xs:complexType>
            
   <xs:complexType name="SupportedOnDefinitions">
     <xs:annotation>
       <xs:documentation>Table of supported components definitions.
 </xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="definition" type="pd:SupportedOnDefinition" 
 minOccurs="1" maxOccurs="unbounded"/>
     </xs:sequence>
   </xs:complexType>
            
   <!--
         Policy definition basic types
     -->
   <xs:simpleType name="PolicyClass">
     <xs:annotation>
       <xs:documentation>An enumeration of the 3 possible classes a 
 policy definition can belong to.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="xs:token">
       <xs:enumeration value="User"/>
       <xs:enumeration value="Machine"/>
       <xs:enumeration value="Both"/>
     </xs:restriction>
   </xs:simpleType>
            
   <xs:complexType name="PolicyDefinition">
     <xs:sequence>
       <xs:group ref="pd:BaseDescriptiveGroup"/>
       <xs:element name="supportedOn" 
 type="pd:SupportedOnReference"/>
       <xs:element name="enabledValue" type="pd:Value" 
 minOccurs="0" maxOccurs="1"/>
       <xs:element name="disabledValue" type="pd:Value" 
 minOccurs="0" maxOccurs="1"/>
       <xs:element name="enabledList" type="pd:ValueList" 
 minOccurs="0" maxOccurs="1"/>
       <xs:element name="disabledList" type="pd:ValueList" 
 minOccurs="0" maxOccurs="1"/>
       <xs:element name="elements" type="pd:PolicyElements" 
 minOccurs="0" maxOccurs="1"/>
     </xs:sequence>
     <xs:attribute name="name" type="pd:itemName" use="required"/>
     <xs:attribute name="class" type="pd:PolicyClass" use="required"/>
     <xs:attributeGroup ref="pd:BaseDescriptiveAttributeGroup"/>
     <xs:attribute name="presentation" 
 type="pd:presentationReference"/>
     <xs:attribute name="key" type="pd:registryKey" use="required"/>
     <xs:attribute name="valueName" type="pd:registryValueName"/>
   </xs:complexType>
            
   <xs:complexType name="PolicyElements">
     <xs:choice minOccurs="1" maxOccurs="unbounded">
       <xs:element name="boolean" type="pd:BooleanElement"/>
       <xs:element name="decimal" type="pd:DecimalElement"/>
       <xs:element name="text" type="pd:TextElement"/>
       <xs:element name="enum" type="pd:EnumerationElement"/>
       <xs:element name="list" type="pd:ListElement"/>
       <xs:element name="longDecimal" type="pd:LongDecimalElement"/>
       <xs:element name="multiText" type="pd:multiTextElement"/>
     </xs:choice>
   </xs:complexType>
 </xs:schema>