<?xml version="1.0"?>
<xs:schema
    xmlns:cell="urn:ietf:params:xml:ns:geopriv:lm:cell"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:ietf:params:xml:ns:geopriv:lm:cell"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">

  <xs:annotation>
    <xs:appinfo
    source="urn:ietf:params:xml:schema:geopriv:lm:cell">
    </xs:appinfo>
    <xs:documentation source="http://www.rfc-editor.org/rfc/rfc7105.txt">
      This schema defines a set of cellular location measurements.
    </xs:documentation>
  </xs:annotation>

  <xs:element name="cellular" type="cell:cellularType"/>

  <xs:complexType name="cellularType">
    <xs:complexContent>
      <xs:restriction base="xs:anyType">
    <xs:sequence>
      <xs:choice>
        <xs:element name="servingCell" type="cell:cellType"/>
        <xs:element name="observedCell" type="cell:cellType"/>
      </xs:choice>
      <xs:element name="observedCell" type="cell:cellType"
              minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="cellType">
    <xs:complexContent>
      <xs:restriction base="xs:anyType">
    <xs:choice>
      <xs:sequence>
        <xs:element name="mcc" type="cell:mccType"/>
        <xs:element name="mnc" type="cell:mncType"/>
        <xs:choice>
          <xs:sequence>
        <xs:choice>
          <xs:element name="rnc" type="cell:cellIdType"/>
          <xs:element name="lac" type="cell:cellIdType"/>
        </xs:choice>
        <xs:element name="cid" type="cell:cellIdType"/>
          </xs:sequence>
          <xs:element name="eucid" type="cell:cellIdType"/>
        </xs:choice>
        <xs:any namespace="##other" processContents="lax"
            minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:sequence>
        <xs:element name="sid" type="cell:cellIdType"/>
        <xs:element name="nid" type="cell:cellIdType"/>
        <xs:element name="baseid" type="cell:cellIdType"/>
        <xs:any namespace="##other" processContents="lax"
            minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
    </xs:choice>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:simpleType name="mccType">
    <xs:restriction base="xs:token">
      <xs:pattern value="[0-9]{3}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="mncType">
    <xs:restriction base="xs:token">
      <xs:pattern value="[0-9]{2,3}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="cellIdType">
    <xs:restriction base="xs:nonNegativeInteger">
      <xs:maxInclusive value="268435455"/> <!-- 2^28 (eucid) -->
    </xs:restriction>
  </xs:simpleType>

  <!-- Measurement Request elements -->

  <xs:element name="type" type="cell:typeType"/>
  <xs:simpleType name="typeType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="gsm"/>
      <xs:enumeration value="umts"/>
      <xs:enumeration value="lte"/>
      <xs:enumeration value="cdma"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="network" type="cell:networkType"/>
  <xs:complexType name="networkType">
    <xs:complexContent>
      <xs:restriction base="xs:anyType">
    <xs:choice>
      <xs:sequence>
        <xs:element name="mcc" type="cell:mccType"/>
        <xs:element name="mnc" type="cell:mncType"/>
      </xs:sequence>
      <xs:element name="nid" type="cell:cellIdType"/>
    </xs:choice>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

</xs:schema>