<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:dsam="http://www.itu.int/xml-namespace/itu-t/h.783/dsam" xmlns:ca="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr" xmlns:gml="http://www.opengis.net/gml" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itu.int/xml-namespace/itu-t/h.783/dsam" elementFormDefault="qualified">
  <annotation>
    <documentation xml:lang="en">
      <![CDATA[This schema is for the audience measurement of digital signages (ITU-T H.783).
The namespace of the schema is "http://www.itu.int/xml-namespace/itu-t/h.783/dsam", and
its preferred namespace prefix is "dsam".]]>
    </documentation>
  </annotation>
  <import namespace="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr" schemaLocation="rfc5139.xsd"/>
  <import namespace="http://www.opengis.net/gml" schemaLocation="./gml/2.1.2/gml.xsd"/>
  <import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
  <!-- ========================================================= -->
  <!-- ========================================================= -->
  <!-- Basic Data Types -->
  <!-- ========================================================= -->
  <!-- ========================================================= -->
  <complexType name="IDREFType">
    <attribute name="idref" type="NMTOKEN" use="required"/>
  </complexType>
  <complexType name="IDREFSType">
    <attribute name="idrefs" type="NMTOKENS" use="required"/>
  </complexType>
  <!-- ========================================================= -->
  <!-- ========================================================= -->
  <!-- Metadata for Audience & Environment Information -->
  <!-- ========================================================= -->
  <!-- ========================================================= -->
  <!-- -->
  <!-- ============================================== -->
  <!-- 1. Audience Information (Table 2) -->
  <!-- ============================================== -->
  <complexType name="AudienceInformationType">
    <sequence>
      <element name="AgeGroup" type="dsam:AgeGroupType" minOccurs="0"/>
      <element name="GenderGroup" type="dsam:GenderGroupType" minOccurs="0"/>
      <element name="Relation" type="dsam:RelationType" minOccurs="0"/>
      <element name="Activity" type="dsam:ActivityType" minOccurs="0"/>
      <element name="AudienceDistance" type="dsam:DistanceType" minOccurs="0"/>
      <element name="VehicleNumber" type="nonNegativeInteger" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="AgeGroupType">
    <sequence>
      <element name="ChildNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="YoungAdultNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="AdultNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="SeniorNumber" type="nonNegativeInteger" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="GenderGroupType">
    <sequence>
      <element name="MaleNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="FemaleNumber" type="nonNegativeInteger" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="RelationType">
    <sequence>
      <element name="FamilyGroupNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="FriendsGroupNumber" type="nonNegativeInteger" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="ActivityType">
    <sequence>
      <element name="ActiveAudienceNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="PassiveAudienceNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="PasserByNumber" type="nonNegativeInteger" minOccurs="0"/>
      <element name="AverageViewingTime" type="nonNegativeInteger" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="DistanceType">
    <simpleContent>
      <extension base="nonNegativeInteger">
        <attribute name="unit" type="dsam:LengthUnitType" use="optional" default="m"/>
      </extension>
    </simpleContent>
  </complexType>
  <simpleType name="LengthUnitType">
    <restriction base="NMTOKEN">
      <enumeration value="cm"/>
      <enumeration value="m"/>
      <enumeration value="inch"/>
      <enumeration value="feet"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <!-- 2. Environmental Information (Table 3) -->
  <!-- ============================================== -->
  <complexType name="EnvironmentInformationType">
    <sequence>
      <element name="BrightnessLevel" type="nonNegativeInteger" minOccurs="0"/>
      <element name="SoundLevel" type="dsam:SoundPressureLevelType" minOccurs="0"/>
      <element name="Temperature" type="dsam:TemperatureType" minOccurs="0"/>
      <element name="Humidity" type="dsam:ObservedDataValueType" minOccurs="0"/>
      <element name="WeatherDescriptionList" type="dsam:WeatherDescriptionListType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="SoundPressureLevelType">
    <simpleContent>
      <extension base="nonNegativeInteger">
        <attribute name="unit" type="NMTOKEN" use="optional" default="dB"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ============================================== -->
  <complexType name="TemperatureType">
    <simpleContent>
      <extension base="integer">
        <attribute name="unit" type="dsam:TemperatureUnitType" use="optional" default="Celsius"/>
      </extension>
    </simpleContent>
  </complexType>
  <simpleType name="TemperatureUnitType">
    <restriction base="NMTOKEN">
      <enumeration value="Celsius"/>
      <enumeration value="Fahrenheit"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <complexType name="ObservedDataValueType">
    <simpleContent>
      <extension base="nonNegativeInteger">
        <attribute name="unit" type="dsam:ValueUnitType" use="optional" default="Percentage"/>
      </extension>
    </simpleContent>
  </complexType>
  <simpleType name="ValueUnitType">
    <restriction base="NMTOKEN">
      <enumeration value="Percentage"/>
      <enumeration value="Absolute"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <simpleType name="WeatherDescriptionListType">
    <list itemType="dsam:WeatherDescriptionType"/>
  </simpleType>
  <simpleType name="WeatherDescriptionType">
    <restriction base="NMTOKEN">
      <enumeration value="Snowy"/>
      <enumeration value="Rainy"/>
      <enumeration value="Sunny"/>
      <enumeration value="Cloudy"/>
      <enumeration value="Windy"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ========================================================= -->
  <!-- ========================================================= -->
  <!-- Metadata for AM Messages -->
  <!-- ========================================================= -->
  <!-- ========================================================= -->
  <!-- -->
  <!-- ============================================== -->
  <!-- 1. Configuration for AM data (Table 4) -->
  <!-- ============================================== -->
  <element name="Configuration" type="dsam:ConfigurationType"/>
  <complexType name="ConfigurationType">
    <sequence>
      <element name="MeasurementTarget" type="dsam:MeasurementTargetType" minOccurs="0"/>
      <element name="MeasurmentCategory" type="dsam:MeasurmentCategoryType" minOccurs="0"/>
      <element name="MeasurementSchedule" type="dsam:MeasurementScheduleType" maxOccurs="unbounded"/>
      <element name="MeasurementDeliverySchedule" type="dsam:MeasurementDeliveryScheduleType" minOccurs="0"/>
    </sequence>
    <attribute name="measurementRequestId" type="NMTOKEN" use="required"/>
    <attribute name="aggregationFunctionIdref" type="NMTOKEN" use="required"/>
  </complexType>
  <!-- ============================================== -->
  <!-- Measurement Target (Table 5) -->
  <!-- ============================================== -->
  <complexType name="MeasurementTargetType">
    <sequence>
      <element name="TargetTerminalDeviceList" type="dsam:IDREFSType" minOccurs="0"/>
      <element name="TargetTerminalGroupList" type="dsam:IDREFSType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <!-- Measurment Category (Table 6) -->
  <!-- ============================================== -->
  <complexType name="MeasurmentCategoryType">
    <sequence>
      <element name="MeasurementCategoryAudience" type="dsam:MeasurementCategoryAudienceType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="MeasurementCategoryAmbient" type="dsam:MeasurementCategoryAmbientType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="MeasurmentLocationInclusion" type="dsam:MeasurmentLocationInclusionType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="MeasurementCategoryAudienceType">
    <sequence>
      <element name="AudienceCategoryList" type="dsam:AudienceCategoryListType" minOccurs="0"/>
      <element name="AllAudienceCategoryExceptList" type="dsam:AudienceCategoryListType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <simpleType name="AudienceCategoryListType">
    <list itemType="dsam:AudienceCategoryType"/>
  </simpleType>
  <simpleType name="AudienceCategoryType">
    <restriction base="NMTOKEN">
      <enumeration value="AgeGroup"/>
      <enumeration value="GenderGroup"/>
      <enumeration value="Relation"/>
      <enumeration value="Activity"/>
      <enumeration value="AudienceDistance"/>
      <enumeration value="VehicleNumber"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <complexType name="MeasurementCategoryAmbientType">
    <sequence>
      <element name="AmbientCategoryList" type="dsam:AmbientCategoryListType" minOccurs="0"/>
      <element name="AllAmbientCategoryExceptList" type="dsam:AmbientCategoryListType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <simpleType name="AmbientCategoryListType">
    <list itemType="dsam:AmbientCategoryType"/>
  </simpleType>
  <simpleType name="AmbientCategoryType">
    <restriction base="NMTOKEN">
      <enumeration value="Brightness"/>
      <enumeration value="SoundLevel"/>
      <enumeration value="Temperature"/>
      <enumeration value="Humidity"/>
      <enumeration value="Weather"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <simpleType name="MeasurmentLocationInclusionType">
    <restriction base="NMTOKEN">
      <enumeration value="Inclusion"/>
      <enumeration value="Exclusion"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <!-- Measurement Schedule (Table 7) -->
  <!-- ============================================== -->
  <complexType name="MeasurementScheduleType">
    <sequence>
      <element name="MeasurementPeriod" type="dsam:MeasurementPeriodType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="MeasurmentInterval" type="dsam:TimeIntervalType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="MeasurementPeriodType">
    <sequence>
      <element name="AppliedDayOfTheWeekList" type="dsam:DayOfTheWeekListType" default="Everyday" minOccurs="0"/>
    </sequence>
    <attribute name="startDay" type="date" use="optional"/>
    <attribute name="endDay" type="date" use="optional"/>
    <attribute name="startTime" type="time" use="optional"/>
    <attribute name="endTime" type="time" use="optional" default="23:59:59.99"/>
  </complexType>
  <!-- ============================================== -->
  <simpleType name="DayOfTheWeekListType">
    <list itemType="dsam:DayOfTheWeekType"/>
  </simpleType>
  <simpleType name="DayOfTheWeekType">
    <restriction base="NMTOKEN">
      <enumeration value="Sunday"/>
      <enumeration value="Monday"/>
      <enumeration value="Tuesday"/>
      <enumeration value="Wednesday"/>
      <enumeration value="Thursday"/>
      <enumeration value="Friday"/>
      <enumeration value="Saturday"/>
      <enumeration value="Weekday"/>
      <enumeration value="Weedend"/>
      <enumeration value="PublicHoliday"/>
      <enumeration value="Everyday"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <complexType name="TimeIntervalType">
    <simpleContent>
      <extension base="nonNegativeInteger">
        <attribute name="unit" type="dsam:TimeUnitType" use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <simpleType name="TimeUnitType">
    <restriction base="NMTOKEN">
      <enumeration value="Hour"/>
      <enumeration value="Minute"/>
      <enumeration value="Second"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <!-- Measurement Delivery Schedule (Table 8) -->
  <!-- ============================================== -->
  <complexType name="MeasurementDeliveryScheduleType">
    <sequence>
      <element name="DeliveryAddress" type="anyURI" minOccurs="0" maxOccurs="unbounded"/>
      <element name="ImmediatePush" type="dsam:ImmediatePushType" minOccurs="0"/>
      <element name="DelayedDelivery" type="dsam:DelayedDeliveryType" minOccurs="0"/>
      <element name="Pull" type="dsam:PushType" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="ImmediatePushType">
    <sequence>
      <element name="MeasurementReportNumberByPush" type="positiveInteger" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="DelayedDeliveryType">
    <sequence>
      <element name="DeliveryWindow" type="dsam:TimePeriodType" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="TimePeriodType">
    <attribute name="startTime" type="time" use="optional"/>
    <attribute name="endTime" type="time" use="optional"/>
  </complexType>
  <!-- ============================================== -->
  <complexType name="PushType">
    <!-- TBD -->
  </complexType>
  <!-- ============================================== -->
  <!-- 2. Measurement Report Request (Table 9) -->
  <!-- ============================================== -->
  <element name="MeasurementReportRequest" type="dsam:MeasurementReportRequestType"/>
  <complexType name="MeasurementReportRequestType">
    <attribute name="measurementRequestIdrefs" type="NMTOKENS" use="required"/>
  </complexType>
  <!-- ============================================== -->
  <!-- 3. Measurement Report Package (Table 10) -->
  <!-- ============================================== -->
  <element name="MeasurementReportPackage" type="dsam:MeasurementReportPackageType"/>
  <complexType name="MeasurementReportPackageType">
    <sequence>
      <element name="MeasurementReport" type="dsam:MeasurementReportType" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="terminalDeviceIdref" type="NMTOKEN" use="required"/>
  </complexType>
  <!-- ============================================== -->
  <!-- Measurement Report (Table 11) -->
  <!-- ============================================== -->
  <complexType name="MeasurementReportType">
    <sequence>
      <element name="MeasurementReportTriggerTime" type="dateTime"/>
      <element name="MeasuringTime" type="dateTime" minOccurs="0"/>
      <element name="MeasuringLocation" type="dsam:MeasuringLocationType" minOccurs="0"/>
      <element name="MeasuringInformation" type="dsam:MeasuringInformationType"/>
    </sequence>
    <attribute name="measurementRequestIdref" type="NMTOKEN" use="required"/>
  </complexType>
  <!-- ============================================== -->
  <complexType name="MeasuringLocationType">
    <sequence>
      <element name="GeoLocation" type="gml:PointType" minOccurs="0"/>
      <element name="PostalLocation" type="ca:civicAddress" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="MeasuringInformationType">
    <sequence>
      <element name="AudienceInformation" type="dsam:AudienceInformationWithDetectionMethodType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="EnvironmentInformation" type="dsam:EnvironmentInformationWithDetectionMethodType" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <!-- ============================================== -->
  <complexType name="AudienceInformationWithDetectionMethodType">
    <complexContent>
      <extension base="dsam:AudienceInformationType">
        <sequence>
          <element name="AudienceDetectionMethod" type="dsam:AudienceDetectionMethodType" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ============================================== -->
  <simpleType name="AudienceDetectionMethodType">
    <restriction base="NMTOKEN">
      <enumeration value="Camera"/>
      <enumeration value="Microphone"/>
      <enumeration value="TouchScreen"/>
      <enumeration value="RFIDReader"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
  <!-- ============================================== -->
  <complexType name="EnvironmentInformationWithDetectionMethodType">
    <complexContent>
      <extension base="dsam:EnvironmentInformationType">
        <sequence>
          <element name="EnvironmentDetectionMethod" type="dsam:EnvironmentDetectionMethodType" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ============================================== -->
  <simpleType name="EnvironmentDetectionMethodType">
    <restriction base="NMTOKEN">
      <enumeration value="Thermometer"/>
      <enumeration value="Other"/>
    </restriction>
  </simpleType>
</schema>
