Mobile Broadband Profile Schema v4

The Windows 10Mobile Broadband Profile Schema v4 is available in the namespace https://www.microsoft.com/networking/WWAN/profile/v4.

<xs:schema targetNamespace="https://www.microsoft.com/networking/WWAN/profile/v4"
    xmlns="https://www.microsoft.com/networking/WWAN/profile/v4"
    xmlns:xs="https://www.w3.org/2001/XMLSchema"
    xmlns:WWAN_profile_v1="https://www.microsoft.com/networking/WWAN/profile/v1"
    xmlns:WWAN_profile_v2="https://www.microsoft.com/networking/WWAN/profile/v2"
    xmlns:WWAN_profile_v3="https://www.microsoft.com/networking/WWAN/profile/v3"
    elementFormDefault="qualified">

    <xs:import namespace="https://www.microsoft.com/networking/WWAN/profile/v1" schemaLocation="WWAN_profile_v1.xsd"/>
    <xs:import namespace="https://www.microsoft.com/networking/WWAN/profile/v2" schemaLocation="WWAN_profile_v2.xsd"/>
    <xs:import namespace="https://www.microsoft.com/networking/WWAN/profile/v3" schemaLocation="WWAN_profile_v3.xsd"/>

  <!-- type definition section -->

  <!-- Extended contextType based on the Schema v1 contextType -->
  <xs:complexType name="contextExtType">
    <xs:sequence>
      <xs:element name="AccessString" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:minLength value="1"/>
            <xs:maxLength value="100"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="UserLogonCred" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="UserName" type="WWAN_profile_v1:nameType"/>
            <xs:element name="IgnorePassword" type="xs:boolean" minOccurs="0" />
            <xs:element name="Password" type="xs:string" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Compression" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="DISABLE"/>
            <xs:enumeration value="ENABLE"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="AuthProtocol" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="NONE"/>
            <xs:enumeration value="PAP"/>
            <xs:enumeration value="CHAP"/>
            <xs:enumeration value="MsCHAPv2"/>
            <!-- NEW enum in contextExType ( not in contextType of v1) -->
            <!-- AutoSelection means that an auth protocol is to be picked by lower layer(s) -->
            <xs:enumeration value="AutoSelection"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <!-- NEW element in contextExType ( not in contextType of v1) -->
      <xs:element name="IPType" minOccurs="0">
        <!-- When this element is absent, the IPType is default -->
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <!-- Default means that an IP type is to be picked by lower layer(s) -->
            <xs:enumeration value="Default"/>
            <xs:enumeration value="IPv4"/>
            <xs:enumeration value="IPv6"/>
            <xs:enumeration value="IPv4v6"/>
            <xs:enumeration value="XLAT"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <!-- applicability to any combination of home carrier, partner MOs and non-partner MOs, except for HomeAndNonPartner -->
  <xs:simpleType name="roamApplicabilityType">
    <xs:restriction base="xs:token">
       <xs:enumeration value="NonPartnerOnly"/>
       <xs:enumeration value="PartnerOnly"/>
       <xs:enumeration value="HomeOnly"/>
       <xs:enumeration value="HomeAndPartner"/>
       <xs:enumeration value="PartnerAndNonpartner"/>
       <xs:enumeration value="AllRoaming"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="roamControlType">
    <xs:restriction base="xs:token">
       <xs:enumeration value="AllRoamAllowed"/>
       <xs:enumeration value="PartnerRoamAllowed"/>
       <xs:enumeration value="NoRoamAllowed"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A type definition for what wireless network or networks a profile is applicable at -->
  <xs:simpleType name="iwlanApplicabilityType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="CellularOnly"/>
      <xs:enumeration value="CellularAndIwlan"/>
      <xs:enumeration value="IwlanOnly"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Define the data type for conditions where a profile is applicable -->
  <xs:complexType name="profileConditionType">
    <!-- When an optional element is absent, the profile is not subject to the condition related to the element, -->
    <!-- unless specifically specified otherwise -->
    <xs:sequence>    
      <xs:element name="CellularClass" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="3GPP"/>
            <xs:enumeration value="3GPP2"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      
      <xs:element name="RATApplicability" minOccurs="0">
        <!-- if this is present, , the element of CellularClass must be present and is 3GPP -->
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="LTE_eHRPD"/>
            <xs:enumeration value="3GPP_LEGACY"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      
      <xs:element name="RoamApplicability" type="roamApplicabilityType" minOccurs="0" />
      
      <!-- If IMSI is present, the profile is applicable only for the IMSI -->
      <xs:element name="IMSI" type="WWAN_profile_v1:subscriberIdType" minOccurs="0"/>

      <!-- if this element is absent or the containing ProfileConditionType element is absent, CellularOnly is assumed. -->
      <!-- IWLAN network does not have such cellular-centric parameters as roaming state, RAT type or cellular class. -->
      <!-- The profile conditions or policies related to those cellular-centric parameters do not apply -->
      <!-- in the consideration of using a profile on IWLAN. -->
      <xs:element name="IwlanApplicability" type="iwlanApplicabilityType" minOccurs="0"/>

    </xs:sequence>
  </xs:complexType>

  <!-- GUID in string, as in example: {17c5d5ec-c9be-4b8b-aa76-984f07cb1cf0} -->
  <xs:simpleType name="guidType">
    <xs:restriction base="xs:token">
      <xs:pattern value="{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:complexType name="mmsConfigurationType">
    <xs:sequence>
      <!-- optional element, the URL of the MMSC server for mobile device -->
      <xs:element name="MmscUrl" type="xs:anyURI" minOccurs="0"/>
      
      <!-- optional element, the port number of the MMSC server for mobile device. -->
      <!-- valid range [1,99999]. 0 or absence means no specific port number specified -->
      <xs:element name="MmscPort" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:nonNegativeInteger">
            <xs:maxInclusive value="99999"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
        
      <!-- optional element, the maximum message size in kilobytes for MMS messages. -->
      <!-- The value 0 indicates no maximum -->
      <xs:element name="MmsMaximumMessageSize" type="xs:nonNegativeInteger" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <!-- element definition section -->

  <xs:element name="MBNProfileExt">
    <xs:complexType>
      <xs:sequence>
        <!-- Profile name -->
        <xs:element name="Name" type="WWAN_profile_v1:nameType"/>

        <!-- Brief description of the profile -->
        <xs:element name="Description" type="WWAN_profile_v1:nameType" minOccurs="0"/>

        <!-- Path of the icon file for the provider -->
        <xs:element name="ICONFilePath" type="WWAN_profile_v1:iconFileType" minOccurs="0"/>

        <!-- Flag to indicate whether this is the default profile -->
        <!-- Atmost one profile per SIM shall have this flag set to true -->
        <xs:element name="IsDefault" type="xs:boolean"/>

        <!-- Profile creation type -->
        <!-- This is used to decide if the user can delete the profile or not  -->
        <!-- This is used to prioritize profiles when more than one are applicable  -->
        <xs:element name="ProfileCreationType" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="UserProvisioned"/>
              <xs:enumeration value="AdminProvisioned"/>
              <xs:enumeration value="OperatorProvisioned"/>
              <xs:enumeration value="DeviceProvisioned"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>

        <!-- Subscriber Identification : IMSI, MIN, etc -->
        <!-- optional in extended MBNProfile -->
        <xs:element name="SubscriberID" type="WWAN_profile_v1:subscriberIdType" minOccurs="0"/>

        <!-- SimIccID number of the SIM -->
        <!-- Mandatory in extended MBNProfile -->
        <xs:element name="SimIccID" type="WWAN_profile_v1:simIccIDType" />

        <!-- Home Provider Name -->
        <xs:element name="HomeProviderName" type="WWAN_profile_v1:providerNameType" minOccurs="0"/>

        <!-- Flag to indicate wether the Auto Connect should be blocked when we have Internet Connectivity -->
        <xs:element name="AutoConnectOnInternet" type="xs:boolean" minOccurs="0"/>

        <!-- Connection Mode, default is "manual" -->
        <xs:element name="ConnectionMode" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <!-- manual connect always -->
              <xs:enumeration value="manual" />
              <!-- auto connect always -->
              <xs:enumeration value="auto" />
              <!-- auto connect when not roaming -->
              <xs:enumeration value="auto-home"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>

        <!-- Connection Settings -->
        <xs:element name="Context" type="contextExtType" minOccurs="0"/>

        <!-- Roaming Partner List -->
        <xs:element name="DataRoamingPartners" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Provider" type="WWAN_profile_v1:providerType" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <!-- Profile Group List -->
        <!-- A profile group is defined by a GUID, for the usage purpose of profiles of the group. -->
        <!-- One profile may belong to more than one group, i.e. a profile can be multi-purposed. -->
        <xs:element name="PurposeGroups" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="PurposeGroupGuid" type="guidType" maxOccurs="10"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <!-- optional element for MBNProfileExt. It defines the condition(s) when the profile is applicable (usable) -->
        <!-- If ProfileConditionedOn is present, the defined condiftion(s) must be satisfied for the profile to be applicable -->
        <xs:element name="ProfileConditionedOn" type="profileConditionType" minOccurs="0"/>

        <!-- Flag to indicate whether this is a provisioning profile, default is "false" -->
        <!-- If IsProvisioningProfile is true, IsDefault must be false, ConnectionMode must be manual -->
        <xs:element name="IsProvisioningProfile" type="xs:boolean" minOccurs="0"/>

        <!-- optional element. the Default is 0 -->
        <xs:element name="ApnID" type="xs:decimal" minOccurs="0"/>
        
        <!-- optional elemtment. the default is TRUE (enabled) -->
        <xs:element name="AdminEnable" type="xs:boolean" minOccurs="0"/>
        
        <!-- optional element, the default is AllRoamAllowed -->
        <xs:element name="AdminRoamControl" type="roamControlType" minOccurs="0"/>

        <!-- Flag to indicate whether this profile excludes other profiles of the same group, default is "false" -->
        <xs:element name="IsExclusiveToOther" type="xs:boolean" minOccurs="0"/>

        <!-- Flag to indicate whether this is a long-standing additional PDP context profile, default is "false" -->
        <!-- If IsLongStandingManualProfile is true, IsAdditionalPdpContextProfile must be true -->
        <xs:element name="IsLongStandingAdditionalPdpContextProfile" type="xs:boolean" minOccurs="0"/>

        <!-- Mms settings -->
        <xs:element name="MmsConfiguration" type="mmsConfigurationType" minOccurs="0"/>
        
        <!-- extension point for other namespaces -->
        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- modem DM configuration Profile -->
  <xs:element name="ModemDMConfigProfile">
    <xs:complexType>
      <xs:sequence>
        <!-- Profile name -->
        <xs:element name="Name" type="WWAN_profile_v1:nameType"/>

        <!-- SimIccID -->
        <xs:element name="SimIccID" type="WWAN_profile_v1:simIccIDType" />
        <xs:element name="ApnID" type="xs:decimal"/>
        
        <!-- For modem -->
        <xs:element name="OemConnectionId" type="guidType"/>
        <xs:element name="RoamApplicability" type="roamApplicabilityType" minOccurs="0" />
        
        <xs:element name="Context" type="contextExtType" />
        <xs:element name="AdminEnable" type="xs:boolean"/>
        <xs:element name="AdminRoamControl" type="roamControlType"/>

        <!-- Profile creation type -->
        <!-- This is used to decide if the user can delete the profile or not  -->
        <!-- This is used to prioritize profiles when more than one are applicable  -->
        <xs:element name="ProfileCreationType" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="UserProvisioned"/>
              <xs:enumeration value="AdminProvisioned"/>
              <xs:enumeration value="OperatorProvisioned"/>
              <xs:enumeration value="DeviceProvisioned"/>
            </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>

</xs:schema>