<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:pdi="http://www.atsc.org/XMLSchemas/iss-pdi-1"
    targetNamespace="http://www.atsc.org/XMLSchemas/iss-pdi-1" 
    elementFormDefault="qualified"
    version="1.0">

    <annotation>
        <documentation source="http://www.atsc.org/cms/standards/cs_documents/A105-CS.zip"> 
            ATSC Interactive Services Standard (ISS) PDI-related schema 
            Version: 1.0 
            Date: 12/12/2013 
            Namespace: http://www.atsc.org/XMLSchemas/iss-pdi-1 
            Information about the use of this schema can be found in ATSC standard A/105-2013. 
            This schema defines several XML elements: 
            (1) An XML element named PDITable that is used to deliver PDI questionnaires to TV receivers. 
            (2) A set of XML elements named QIAD, QBAD, QSAD, QTAD and QAAD that are used to pass 
            individual PDI questions and answers to and from Declarative Objects via an API defined for 
            that purpose. 
            (3) An XML element named FilteringCriteria that is used to attach PDI targeting criteria to a
            Content Item in a TPT. 
            </documentation>
    </annotation>

    <annotation>
        <documentation xml:lang="en"> PDITable element, used to deliver PDI questionnaires
        </documentation>
    </annotation>
    <element name="PDITable">
        <complexType>
            <choice maxOccurs="unbounded">
                <element name="QIA" type="pdi:QIAType"/>
                <element name="QBA" type="pdi:QBAType"/>
                <element name="QSA" type="pdi:QSAType"/>
                <element name="QTA" type="pdi:QTAType"/>
                <element name="QAA" type="pdi:QAAType"/>
            </choice>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
            <attribute name="pdiTableId" type="anyURI" use="required"/>
            <attribute name="pdiTableVersion" type="unsignedByte" use="required"/>
            <attribute name="time" type="dateTime" use="required"/>
        </complexType>
    </element>

    <annotation>
        <documentation xml:lang="en"> QIAD, QBAD, QSAD, QTAD, QAAD elements, 
            used to pass individual questions and answers to and from DOs via APIs 
        </documentation>
    </annotation>
    <element name="QIAD">
        <complexType>
            <sequence>
                <element name="QIA" type="pdi:QIAType"/>
            </sequence>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
        </complexType>
    </element>
    <element name="QBAD">
        <complexType>
            <sequence>
                <element name="QBA" type="pdi:QBAType"/>
            </sequence>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
        </complexType>
    </element>
    <element name="QSAD">
        <complexType>
            <sequence>
                <element name="QSA" type="pdi:QSAType"/>
            </sequence>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
        </complexType>
    </element>
    <element name="QTAD">
        <complexType>
            <sequence>
                <element name="QTA" type="pdi:QTAType"/>
            </sequence>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
        </complexType>
    </element>
    <element name="QAAD">
        <complexType>
            <sequence>
                <element name="QAA" type="pdi:QAAType"/>
            </sequence>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
        </complexType>
    </element>

    <annotation>
        <documentation xml:lang="en"> Type definitions for QIA, QBA, QSA, QTA, QAA elements, 
            which appear in PDITable and in QIAD, QBAD, QSAD, QTAD, QAAD elements 
        </documentation>
    </annotation>
    <complexType name="QIAType">
        <sequence>
            <element name="Q">
                <complexType>
                    <sequence>
                        <element name="QText" type="pdi:QTextType" maxOccurs="unbounded"/>
                    </sequence>
                    <attribute name="loEnd" type="int" use="optional"/>
                    <attribute name="hiEnd" type="int" use="optional"/>
                </complexType>
            </element>
            <element name="A" minOccurs="0">
                <complexType>
                    <attribute name="answer" type="int" use="required"/>
                    <attribute name="time" type="dateTime" use="optional"/>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
        <attribute name="expire" type="dateTime" use="optional"/>
        <attribute name="xactionSetId" type="unsignedShort" use="optional"/>
    </complexType>

    <complexType name="QBAType">
        <sequence>
            <element name="Q">
                <complexType>
                    <sequence>
                        <element name="QText" type="pdi:QTextType" maxOccurs="unbounded"/>
                    </sequence>
                </complexType>
            </element>
            <element name="A" minOccurs="0">
                <complexType>
                    <attribute name="answer" type="boolean" use="required"/>
                    <attribute name="time" type="dateTime" use="optional"/>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
        <attribute name="expire" type="dateTime" use="optional"/>
        <attribute name="xactionSetId" type="unsignedShort" use="optional"/>
    </complexType>

    <complexType name="QSAType">
        <sequence>
            <element name="Q">
                <complexType>
                    <sequence>
                        <element name="QText" type="pdi:QTextType" maxOccurs="unbounded"/>
                        <element name="Selection" minOccurs="2" maxOccurs="unbounded">
                            <complexType>
                                <simpleContent>
                                    <extension base="string">
                                        <attribute name="selectionId" type="unsignedByte" use="required"/>
                                        <attribute name="lang" type="language" use="optional"/>
                                    </extension>
                                </simpleContent>
                            </complexType>
                        </element>
                    </sequence>
                    <attribute name="minChoices" type="unsignedByte" use="optional"/>
                    <attribute name="maxChoices" type="unsignedByte" use="optional"/>
                </complexType>
            </element>
            <element name="A" minOccurs="0" maxOccurs="255">
                <complexType>
                    <attribute name="answer" type="unsignedByte" use="required"/>
                    <attribute name="time" type="dateTime" use="optional"/>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
        <attribute name="expire" type="dateTime" use="optional"/>
        <attribute name="xactionSetId" type="unsignedShort" use="optional"/>
    </complexType>

    <complexType name="QTAType">
        <sequence>
            <element name="Q">
                <complexType>
                    <sequence>
                        <element name="QText" type="pdi:QTextType" maxOccurs="unbounded"/>
                    </sequence>
                </complexType>
            </element>
            <element name="A" minOccurs="0">
                <complexType>
                    <attribute name="answer" type="string" use="required"/>
                    <attribute name="time" type="dateTime" use="optional"/>
                    <attribute name="lang" type="language" use="optional"/>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
        <attribute name="expire" type="dateTime" use="optional"/>
        <attribute name="xactionSetId" type="unsignedShort" use="optional"/>
    </complexType>

    <complexType name="QAAType">
        <sequence>
            <element name="A" minOccurs="0">
                <complexType>
                    <attribute name="answer" type="string" use="required"/>
                    <attribute name="time" type="dateTime" use="optional"/>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
        <attribute name="expire" type="dateTime" use="optional"/>
        <attribute name="xactionSetId" type="unsignedShort" use="optional"/>
    </complexType>

    <complexType name="QTextType">
        <simpleContent>
            <extension base="string">
                <attribute name="lang" type="language" use="optional"/>
            </extension>
        </simpleContent>
    </complexType>

    <annotation>
        <documentation xml:lang="en"> FilteringCriteria element, used to attach targeting criteria
            to Content Items in a TPT 
        </documentation>
    </annotation>
    <element name="FilteringCriteria">
        <complexType>
            <choice maxOccurs="unbounded">
                <element name="QIACriterion" type="pdi:QIACriterionType"/>
                <element name="QBACriterion" type="pdi:QBACriterionType"/>
                <element name="QSACriterion" type="pdi:QSACriterionType"/>
                <element name="QTACriterion" type="pdi:QTACriterionType"/>
                <element name="QAACriterion" type="pdi:QAACriterionType"/>
            </choice>
            <attribute name="protocolVersion" type="hexBinary" use="optional" default="10"/>
        </complexType>
    </element>

    <annotation>
        <documentation xml:lang="en"> Type definitions for various criterion elements
            which can appear in a FilteringCriteria element
        </documentation>
    </annotation>
    <complexType name="QIACriterionType">
        <sequence>
            <element name="CriterionValue" maxOccurs="unbounded">
                <complexType>
                    <simpleContent>
                        <extension base="int">
                            <attribute name="extent" type="positiveInteger" use="optional"/>
                        </extension>
                    </simpleContent>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
    </complexType>
    
    <complexType name="QBACriterionType">
        <sequence>
            <element name="CriterionValue" type="boolean"/>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
    </complexType>
    
    <complexType name="QSACriterionType">
        <sequence>
            <element name="CriterionValue" type="unsignedByte" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
    </complexType>  
    
    <complexType name="QTACriterionType">
        <sequence>
            <element name="CriterionValue" maxOccurs="unbounded">
                <complexType>
                    <simpleContent>
                        <extension base="string">
                            <attribute name="lang" type="language" use="optional"/>
                        </extension>
                    </simpleContent>
                </complexType>
            </element>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
    </complexType>
    
    <complexType name="QAACriterionType">
        <sequence>
            <element name="CriterionValue" type="string" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="id" type="anyURI" use="required"/>
    </complexType>

</schema>
