6.3.1 Wireless LAN Profile v1 Schema

 <?xml version="1.0" encoding="UTF-8" ?>
 <xs:schema targetNamespace="http://www.microsoft.com/networking/WLAN/profile/v1"
     xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     elementFormDefault="qualified">
  
   <!-- type definition section -->
   <xs:simpleType name="nameType">
     <xs:restriction base="xs:string">
       <xs:minLength value="1" />
       <xs:maxLength value="255" />
     </xs:restriction>
   </xs:simpleType>
  
   <xs:element name="WLANProfile">
     <xs:complexType>
       <xs:sequence>
         <!-- Profile name is required. -->
         <xs:element name="name" type="nameType" />
  
         <!-- WLAN network settings -->
         <!-- SSID's and connectionType are required. -->
         <xs:element name="SSIDConfig" maxOccurs="256">
           <xs:complexType>
             <xs:sequence>
               <xs:annotation>
                 <xs:documentation>
                   This element supports up to 256 SSIDs in the v1 namespace and up to 10000 additional SSIDs in the v2 namespace.
                   The v2 namespace also supports SSID prefixes.
                 </xs:documentation>
               </xs:annotation>
               <!-- In this version, only one <SSID> is supported from UI -->
               <xs:element name="SSID" maxOccurs="256">
                 <xs:complexType>
                   <xs:sequence>
                     <!-- Either Hex or named SSID must be present. -->
                     <!-- Hex SSID takes precedence over named SSID. -->
                     <xs:element name="hex" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:hexBinary">
                           <xs:minLength value="1" />
                           <xs:maxLength value="32" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <xs:element name="name" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:string">
                           <xs:minLength value="1" />
                           <xs:maxLength value="32" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- extension point for other namespaces -->
                     <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
  
               <!--
                   Flag to indicate whether SSIDs within the same SSIDConfig group will be
                   broadcasted or not. Default value is "false"
               -->
               <xs:element name="nonBroadcast" type="xs:boolean" minOccurs="0" />
  
               <!-- SSID and SSIDPrefix elements from v2 namespace can be set here.
               <xs:element name="SSID" minOccurance="0" maxOccurance="10000"
                 namespace="http://www.microsoft.com/networking/WLAN/profile/v2"/>
               <xs:element name="SSIDPrefix" minOccurance="0" maxOccurance="32"
                 namespace="http://www.microsoft.com/networking/WLAN/profile/v2"/>
               -->
  
               <!-- extension point for other namespaces -->
               <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
  
         <!-- Hotspot2.0 is optional. -->
         <xs:element name="Hotspot2" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="DomainName" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:minLength value="1" />
                    <xs:maxLength value="255" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
  
              <xs:element name="NAIRealm" minOccurs="0">
                <xs:complexType>
                  <xs:sequence> 
                     <xs:element name="name" minOccurs="0" maxOccurs="256">
                       <xs:simpleType>
                         <xs:restriction base="xs:string">
                           <xs:minLength value="1" />
                           <xs:maxLength value="255" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
  
              <xs:element name="Network3GPP" minOccurs="0">
                <xs:complexType>
                  <xs:sequence> 
                     <xs:element name="PLMNID" minOccurs="0" maxOccurs="256">
                       <xs:simpleType>
                         <xs:restriction base="xs:string">
                           <xs:minLength value="5" />
                           <xs:maxLength value="6" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
  
              <xs:element name="RoamingConsortium" minOccurs="0">
                <xs:complexType>
                  <xs:sequence> 
                     <xs:element name="OUI" minOccurs="0" maxOccurs="256">
                       <xs:simpleType>
                         <xs:restriction base="xs:hexBinary">
                           <xs:minLength value="3" />
                           <xs:maxLength value="5" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
  
            </xs:sequence>
          </xs:complexType>
         </xs:element>
  
         <xs:element name="connectionType">
           <xs:simpleType>
             <xs:restriction base="xs:string">
               <xs:enumeration value="IBSS" />
               <xs:enumeration value="ESS" />
             </xs:restriction>
           </xs:simpleType>
         </xs:element>
  
         <!--
             Specify connection mode when a network is in range
             Default value = "auto"
         -->
         <xs:element name="connectionMode" minOccurs="0">
           <xs:simpleType>
             <xs:restriction base="xs:string">
               <xs:enumeration value="auto" />
               <xs:enumeration value="manual" />
             </xs:restriction>
           </xs:simpleType>
         </xs:element>
  
         <!--
             Flag to determine roaming behavior when a more preferred network is in range
             Default value = "true"
         -->
         <xs:element name="autoSwitch" type="xs:boolean" minOccurs="0" />
  
         <!-- wireless LAN MSM settings -->
         <xs:element name="MSM" minOccurs="0">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="connectivity" minOccurs="0">
                 <xs:complexType>
                   <xs:sequence>
                     <xs:element name="phyType" minOccurs="0" maxOccurs="6">
                       <xs:simpleType>
                         <xs:restriction base="xs:string">
                           <xs:enumeration value="a"  />
                           <xs:enumeration value="b"  />
                           <xs:enumeration value="g"  />
                           <!-- this value is reserved for future use -->
                           <xs:enumeration value="n"  />
                           <xs:enumeration value="ac" />
                           <xs:enumeration value="ad" />
                           <xs:enumeration value="ax" />
                           <xs:enumeration value="be" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- optional flag indicating QoS DSCP To UP Mapping allowed (v5 namespace) (default false)-->
                     <!--
                     <xs:element name="QoSDSCPToUPMappingAllowed" type="xs:boolean"
                       namespace = "http://www.microsoft.com/networking/WLAN/profile/v5"/>
                     -->
  
                     <!-- extension point for other namespaces -->
                     <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
  
               <!-- security settings -->
               <xs:element name="security" minOccurs="0">
                 <xs:complexType>
                   <xs:sequence>
                     <!-- AuthEncryptions is required except for when IHV extensibility uses 1X. -->
                     <xs:element name="authEncryption" minOccurs="0">
                       <xs:complexType>
                         <xs:sequence>
                           <!-- valid authentication methods -->
                           <xs:element name="authentication">
                             <xs:simpleType>
                               <xs:restriction base="xs:string">
                                 <xs:enumeration value="open" />
                                 <xs:enumeration value="shared" />
                                 <xs:enumeration value="WPA" />
                                 <xs:enumeration value="WPAPSK" />
                                 <xs:enumeration value="WPA2" />
                                 <xs:enumeration value="WPA2PSK" />
                                 <xs:enumeration value="WPA3" /> <!-- WPA3 Enterprise 192 Bits, prefer WPA3ENT192 -->
                                 <xs:enumeration value="WPA3ENT192" />
                                 <xs:enumeration value="WPA3ENT" />
                                 <xs:enumeration value="WPA3SAE" />
                                 <xs:enumeration value="OWE" />
                               </xs:restriction>
                             </xs:simpleType>
                           </xs:element>
  
                           <!-- valid encryption methods -->
                           <xs:element name="encryption">
                             <xs:simpleType>
                               <xs:restriction base="xs:string">
                                 <xs:enumeration value="none" />
                                 <xs:enumeration value="WEP" />
                                 <xs:enumeration value="TKIP" />
                                 <xs:enumeration value="AES" />
                                 <xs:enumeration value="GCMP256" />
                               </xs:restriction>
                             </xs:simpleType>
                           </xs:element>
  
                           <!-- flag indicating use of 802.1X -->
                           <xs:element name="useOneX" type="xs:boolean" minOccurs="0" />
  
                           <!-- flag indicating FIPS mode (v2 namespace) -->
                           <!--
                           <xs:element name="FIPSMode" type="xs:boolean" minOccurs="0"
                             namespace = "http://www.microsoft.com/networking/WLAN/profile/v2"/>
                           -->
  
                           <!-- extension point for other namespaces -->
                           <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
                         </xs:sequence>
                       </xs:complexType>
                     </xs:element>
  
                     <!-- Optional MSM security settings. -->
                     <!-- there is no default value for shareKey if absent -->
                     <xs:element name="sharedKey" minOccurs="0">
                       <xs:complexType>
                         <xs:sequence>
                           <xs:element name="keyType">
                             <xs:simpleType>
                               <xs:restriction base="xs:string">
                                 <xs:enumeration value="networkKey" />
                                 <xs:enumeration value="passPhrase" />
                               </xs:restriction>
                             </xs:simpleType>
                           </xs:element>
                           <xs:element name="protected" type="xs:boolean" />
                           <xs:element name="keyMaterial" type="xs:string" />
  
                           <!-- extension point for other namespaces -->
                           <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
                         </xs:sequence>
                       </xs:complexType>
                     </xs:element>
  
                     <!-- the default value is 0 when the shared key is present -->
                     <xs:element name="keyIndex" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:integer">
                           <xs:minInclusive value="0" />
                           <xs:maxInclusive value="3" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!--
                         For WPA2 or WPA3, the default value is "enabled"
                         for all others, the default value is "disabled"
                     -->
                     <xs:element name="PMKCacheMode" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:string">
                           <xs:enumeration value="disabled" />
                           <xs:enumeration value="enabled" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- the default value is 720 minutes -->
                     <xs:element name="PMKCacheTTL" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:integer">
                           <xs:minInclusive value="5" />
                           <xs:maxInclusive value="1440" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- the default value is 128 entries -->
                     <xs:element name="PMKCacheSize" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:integer">
                           <xs:minInclusive value="1" />
                           <xs:maxInclusive value="255" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- the default value is "disabled" -->
                     <xs:element name="preAuthMode" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:string">
                           <xs:enumeration value="disabled" />
                           <xs:enumeration value="enabled" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- the default value is 3 times -->
                     <xs:element name="preAuthThrottle" minOccurs="0">
                       <xs:simpleType>
                         <xs:restriction base="xs:integer">
                           <xs:minInclusive value="1" />
                           <xs:maxInclusive value="16" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- extension point for other namespaces -->
                     <!-- this is also the insertion point for OneX namespace -->
                     <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
  
               <!-- extension point for other namespaces -->
               <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
  
         <!-- IHV specific settings -->
         <xs:element name="IHV" minOccurs="0">
           <xs:complexType>
             <xs:sequence>
               <!--
                   OUI info of the IHV. Required. First three (3) bytes represented by eight (6)
                   hex chars (0-9, A-F)indicates the OUI, the 4th byte represented by two (2) hex
                   chars (0-9, A-F) indicates the type of the OUI.
               -->
               <xs:element name="OUIHeader">
                 <xs:complexType>
                   <xs:sequence>
                     <xs:element name="OUI">
                       <xs:simpleType>
                         <xs:restriction base="xs:hexBinary">
                           <xs:length value="3" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
                     <xs:element name="type">
                       <xs:simpleType>
                         <xs:restriction base="xs:hexBinary">
                           <xs:length value="1" />
                         </xs:restriction>
                       </xs:simpleType>
                     </xs:element>
  
                     <!-- extension point for other namespaces -->
                     <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
  
               <!-- Either <connectivity> or <security> must be present -->
               <!-- IHV specific connectivity settings -->
               <xs:element name="connectivity" minOccurs="0">
                 <xs:complexType>
                   <xs:sequence>
                     <!-- Must be a single top-level element -->
                     <xs:any namespace="##other" processContents="lax" />
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
  
               <!-- IHV specific security settings -->
               <xs:element name="security" minOccurs="0">
                 <xs:complexType>
                   <xs:sequence>
                     <!-- Must be a single top-level element -->
                     <xs:any namespace="##other" processContents="lax" />
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
  
               <!-- optional flag indicating whether IHV security uses MS 1X settings (default false) -->
               <xs:element name="useMSOneX" type="xs:boolean" minOccurs="0" />
  
               <!-- extension point for other namespaces -->
               <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
  
         <!-- extension point for other namespaces -->
         <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
     </xs:complexType>
   </xs:element>
 </xs:schema>