<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mcvideoloc="urn:3gpp:ns:mcvideoLocationInfo:1.0" targetNamespace="urn:3gpp:ns:mcvideoLocationInfo:1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
  <xs:import namespace="http://www.w3.org/2001/04/xmlenc#" />
  <xs:element name="location-info" id="loc">
    <xs:annotation>
      <xs:documentation>Root element, contains all information related to location configuration, location request and location reporting for the MCVideo service</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="Configuration" type="mcvideoloc:tConfigurationType" />
        <xs:element name="Request" type="mcvideoloc:tRequestType" />
        <xs:element name="Report" type="mcvideoloc:tReportType" />
        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
      </xs:choice>
      <xs:anyAttribute namespace="##any" processContents="lax" />
    </xs:complexType>
  </xs:element>
  <xs:complexType name="tConfigurationType">
    <xs:sequence>
      <xs:element name="NonEmergencyLocationInformation" type="mcvideoloc:tRequestedLocationType" minOccurs="0" />
      <xs:element name="EmergencyLocationInformation" type="mcvideoloc:tRequestedLocationType" minOccurs="0" />
      <xs:element name="TriggeringCriteria" type="mcvideoloc:TriggeringCriteriaType" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="ConfigScope">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="Full" />
          <xs:enumeration value="Update" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tRequestType">
    <xs:complexContent>
      <xs:extension base="mcvideoloc:tEmptyType">
        <xs:attribute name="RequestId" type="xs:string" use="required" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="tReportType">
    <xs:sequence>
      <xs:element name="TriggerId" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="CurrentLocation" type="mcvideoloc:tCurrentLocationType" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="ReportID" type="xs:string" use="optional" />
    <xs:attribute name="ReportType" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="Emergency" />
          <xs:enumeration value="NonEmergency" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="TriggeringCriteriaType">
    <xs:sequence>
      <xs:element name="CellChange" type="mcvideoloc:tCellChange" minOccurs="0" />
      <xs:element name="TrackingAreaChange" type="mcvideoloc:tTrackingAreaChangeType" minOccurs="0" />
      <xs:element name="PlmnChange" type="mcvideoloc:tPlmnChangeType" minOccurs="0" />
      <xs:element name="MbmsSaChange" type="mcvideoloc:tMbmsSaChangeType" minOccurs="0" />
      <xs:element name="MbsfnAreaChange" type="mcvideoloc:tMbsfnAreaChangeType" minOccurs="0" />
      <xs:element name="PeriodicReport" type="mcvideoloc:tIntegerAttributeType" minOccurs="0" />
      <xs:element name="TravelledDistance" type="mcvideoloc:tIntegerAttributeType" minOccurs="0" />
      <xs:element name="McvideoSignallingEvent" type="mcvideoloc:tSignallingEventType" minOccurs="0" />
      <xs:element name="GeographicalAreaChange" type="mcvideoloc:tGeographicalAreaChange" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tCellChange">
    <xs:sequence>
      <xs:element name="AnyCellChange" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="EnterSpecificCell" type="mcvideoloc:tSpecificCellType" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="ExitSpecificCell" type="mcvideoloc:tSpecificCellType" minOccurs="0" maxOccurs="unbounded" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tEmptyType" />
  <xs:simpleType name="tEcgi">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{3}\d{3}[0-1]{28}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tSpecificCellType">
    <xs:simpleContent>
      <xs:extension base="mcvideoloc:tEcgi">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tEmptyTypeAttribute">
    <xs:complexContent>
      <xs:extension base="mcvideoloc:tEmptyType">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="tTrackingAreaChangeType">
    <xs:sequence>
      <xs:element name="AnyTrackingAreaChange" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="EnterSpecificTrackingArea" type="mcvideoloc:tTrackingAreaIdentity" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="ExitSpecificTrackingArea" type="mcvideoloc:tTrackingAreaIdentity" minOccurs="0" maxOccurs="unbounded" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:simpleType name="tTrackingAreaIdentityFormat">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{3}\d{3}[0-1]{16}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tTrackingAreaIdentity">
    <xs:simpleContent>
      <xs:extension base="mcvideoloc:tTrackingAreaIdentityFormat">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tPlmnChangeType">
    <xs:sequence>
      <xs:element name="AnyPlmnChange" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="EnterSpecificPlmn" type="mcvideoloc:tPlmnIdentity" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="ExitSpecificPlmn" type="mcvideoloc:tPlmnIdentity" minOccurs="0" maxOccurs="unbounded" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:simpleType name="tPlmnIdentityFormat">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{3}\d{3}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tPlmnIdentity">
    <xs:simpleContent>
      <xs:extension base="mcvideoloc:tPlmnIdentityFormat">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tMbmsSaChangeType">
    <xs:sequence>
      <xs:element name="AnyMbmsSaChange" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="EnterSpecificMbmsSa" type="mcvideoloc:tMbmsSaIdentity" minOccurs="0" />
      <xs:element name="ExitSpecificMbmsSa" type="mcvideoloc:tMbmsSaIdentity" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:simpleType name="tMbmsSaIdentityFormat">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0" />
      <xs:maxInclusive value="65535" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tMbmsSaIdentity">
    <xs:simpleContent>
      <xs:extension base="mcvideoloc:tMbmsSaIdentityFormat">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tMbsfnAreaChangeType">
    <xs:sequence>
      <xs:element name="EnterSpecificMbsfnArea" type="mcvideoloc:tMbsfnAreaIdentity" minOccurs="0" />
      <xs:element name="ExitSpecificMbsfnArea" type="mcvideoloc:tMbsfnAreaIdentity" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:simpleType name="tMbsfnAreaIdentityFormat">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0" />
      <xs:maxInclusive value="255" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tMbsfnAreaIdentity">
    <xs:simpleContent>
      <xs:extension base="mcvideoloc:tMbsfnAreaIdentityFormat">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tIntegerAttributeType">
    <xs:simpleContent>
      <xs:extension base="xs:integer">
        <xs:attribute name="TriggerId" type="xs:string" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tTravelledDistanceType">
    <xs:sequence>
      <xs:element name="TravelledDistance" type="xs:positiveInteger" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tSignallingEventType">
    <xs:sequence>
      <xs:element name="InitialLogOn" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="GroupCallNonEmergency" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="PrivateCallNonEmergency" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="LocationConfigurationReceived" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tEmergencyEventType">
    <xs:sequence>
      <xs:element name="GroupCallEmergency" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="GroupCallImminentPeril" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="PrivateCallEmergency" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="InitiateEmergencyAlert" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tRequestedLocationType">
    <xs:sequence>
      <xs:element name="ServingEcgi" type="mcvideoloc:tEmptyType" minOccurs="0" />
      <xs:element name="NeighbouringEcgi" type="mcvideoloc:tEmptyType" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="MbmsSaId" type="mcvideoloc:tEmptyType" minOccurs="0" />
      <xs:element name="MbsfnArea" type="mcvideoloc:tEmptyType" minOccurs="0" />
      <xs:element name="GeographicalCoordinate" type="mcvideoloc:tEmptyType" minOccurs="0" />
      <xs:element name="minimumIntervalLength" type="xs:positiveInteger" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tCurrentLocationType">
    <xs:sequence>
      <xs:element name="CurrentServingEcgi" type="mcvideoloc:tLocationType" minOccurs="0" />
      <xs:element name="NeighbouringEcgi" type="mcvideoloc:tLocationType" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="MbmsSaId" type="mcvideoloc:tLocationType" minOccurs="0" />
      <xs:element name="MbsfnArea" type="mcvideoloc:tLocationType" minOccurs="0" />
      <xs:element name="CurrentCoordinate" type="mcvideoloc:tPointCoordinate" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <!-- anyExt elements for "tCurrentLocationType" -->
  <xs:element name="locTimestamp" type="xs:dateTime" />
  <xs:simpleType name="protectionType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Normal" />
      <xs:enumeration value="Encrypted" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tLocationType">
    <xs:choice minOccurs="1" maxOccurs="1">
      <xs:element name="Ecgi" type="mcvideoloc:tEcgi" minOccurs="0" />
      <xs:element name="SaId" type="mcvideoloc:tMbmsSaIdentity" minOccurs="0" />
      <xs:element name="MbsfnAreaId" type="mcvideoloc:tMbsfnAreaIdentity" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:choice>
    <xs:attribute name="type" type="mcvideoloc:protectionType" />
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tGeographicalAreaChange">
    <xs:sequence>
      <xs:element name="AnyAreaChange" type="mcvideoloc:tEmptyTypeAttribute" minOccurs="0" />
      <xs:element name="EnterSpecificAreaType" type="mcvideoloc:tSpecificAreaType" minOccurs="0" />
      <xs:element name="ExitSpecificAreaType" type="mcvideoloc:tSpecificAreaType" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tSpecificAreaType">
    <xs:sequence>
      <xs:element name="GeographicalArea" type="mcvideoloc:tGeographicalAreaDef" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="TriggerId" type="xs:string" use="required" />
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tPointCoordinate">
    <xs:sequence>
      <xs:element name="longitude" type="mcvideoloc:tCoordinateType" />
      <xs:element name="latitude" type="mcvideoloc:tCoordinateType" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <!-- anyExt elements for "tPointCoordinate" -->
  <xs:element name="altitude" type="mcvideoloc:tCoordinateType2Bytes" />
  <xs:element name="horizontalaccuracy" type="mcvideoloc:tCoordinateType1Byte"/>
  <xs:element name="verticalaccuracy" type="mcvideoloc:tCoordinateType1Byte"/>
  <xs:complexType name="tCoordinateType">
    <xs:choice minOccurs="1" maxOccurs="1">
      <xs:element name="threebytes" type="mcvideoloc:tThreeByteType" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:choice>
    <xs:attribute name="type" type="mcvideoloc:protectionType" />
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tCoordinateType2Bytes">
    <xs:choice minOccurs="1" maxOccurs="1">
      <xs:element name="twobytes" type="mcvideoloc:tTwoByteType" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:choice>
    <xs:attribute name="type" type="mcvideoloc:protectionType" />
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tCoordinateType1Byte">
    <xs:choice minOccurs="1" maxOccurs="1">
      <xs:element name="onebyteunsignedhalfrange" type="mcvideoloc:tOneByteUnsignedHalfRangeType" minOccurs="0"/>
      <xs:any namespace="##other" processContents="lax"/>
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0"/>
    </xs:choice>
    <xs:attribute name="type" type="mcvideoloc:protectionType"/>
    <xs:anyAttribute namespace="##any" processContents="lax"/>
  </xs:complexType>
  <xs:simpleType name="tThreeByteType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0" />
      <xs:maxInclusive value="16777215" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="tTwoByteType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="-32768" />
      <xs:maxInclusive value="32767" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="tOneByteUnsignedHalfRangeType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="127"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tGeographicalAreaDef">
    <xs:sequence>
      <xs:element name="PolygonArea" type="mcvideoloc:tPolygonAreaType" minOccurs="0" />
      <xs:element name="EllipsoidArcArea" type="mcvideoloc:tEllipsoidArcType" minOccurs="0" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tPolygonAreaType">
    <xs:sequence>
      <xs:element name="Corner" type="mcvideoloc:tPointCoordinate" minOccurs="3" maxOccurs="15" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="tEllipsoidArcType">
    <xs:sequence>
      <xs:element name="Center" type="mcvideoloc:tPointCoordinate" />
      <xs:element name="Radius" type="xs:nonNegativeInteger" />
      <xs:element name="OffsetAngle" type="xs:unsignedByte" />
      <xs:element name="IncludedAngle" type="xs:unsignedByte" />
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="anyExt" type="mcvideoloc:anyExtType" minOccurs="0" />
    </xs:sequence>
    <xs:anyAttribute namespace="##any" processContents="lax" />
  </xs:complexType>
  <xs:complexType name="anyExtType">
    <xs:sequence>
      <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <!-- anyEXT elements for the Configuration element – begin -->
    <xs:element name="EmergencyTriggeringCriteria" type="mcvideoloc:TriggeringCriteriaType"/>
  <!-- anyEXT elements for the Configuration element – end -->  	
</xs:schema>