<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.cablelabs.com/namespaces/opencable/xsd/codf/2.0" targetNamespace="http://www.cablelabs.com/namespaces/opencable/xsd/codf/2.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0">
	<xs:annotation>
		<xs:documentation>For this schema the "2.0" at the end of the xmlns SHALL represent the major and minor version for the schema and any XML document generated using the schema. In this case the major version is 2 and the minor version is 0.</xs:documentation>
	</xs:annotation>
	<!-- Elements begin. -->
	<!-- Define root element, CoDF -->

	<xs:element name="CoDF">
		<xs:annotation>
			<xs:documentation>This is the top-level element for all CoDF documents.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Version" type="VersionType" minOccurs="0" maxOccurs="1"/>
				<xs:element name="Carousel" type="CarouselType" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="EISS" type="EISSType" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="AIT" type="AITType" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="XAIT" type="XAITType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Atomic" type="xs:boolean" use="optional" default="true">
				<xs:annotation>
					<xs:documentation>Indicates if the CoDF processing should fail atomically. If true, and an error is detected at any point in the processing of a CoDF document, then the entire CoDF is not processed.;</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Define children of root element -->
	<xs:complexType name="CarouselType">
		<xs:annotation>
			<xs:documentation>This element encapsulates a set of content items and destination addresses for a given carousel configuration. Each instance of a carousel element describes a single carousel stream instantiation. There may be multiple carousel instantiations for a particular carousel stream configuration name, each with a different set of destinations.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Destination" type="DestinationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Item" type="ItemType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="BIFDescriptor" type="BIFDescriptorType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="OCConfiguration" type="OCConfigurationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="FileSystem" type="FileSystemType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="StreamConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the carousel. This name is used to match the carousel content definition with the carousel's configuration parameters.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BandwidthConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the bandwidth required to stream the carousel. This name is used to determine how much bandwidth has been configured for the carousel. The bandwidth pool is specific to each unique destination address. Multiple streams and content references can share the same bandwidth pool on the same destination.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ContentReference" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Uniquely references a carousel content set and carousel destination set.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ReplaceContent" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>Indicates how the items in the referenced content set should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Authority" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the authority for the modules.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="EISSType">
		<xs:annotation>
			<xs:documentation>This element is used to create ETV Integrated Signaling Streams as specified in [ETV-AM]. There may be one or more EISS elements in each CoDF document. The EISS element encapsulates a set of EISS tables and destination addresses for a given EISS stream name. Each EISS element typically describes a single instantiation of an EISS stream to a particular set of destinations. There may be multiple stream instantiations per stream configuration name.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Destination" type="DestinationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="EISSDescriptor" type="EISSDescriptorType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="EISSTable" type="EISSTableType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="StreamConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the ETV stream. This name is used to match the ETV stream content definition with the stream's configuration parameters.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BandwidthConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the bandwidth required to stream the carousel. This name is used to determine how much bandwidth has been configured for the carousel. The bandwidth pool is specific to each unique destination address. Multiple streams and content references can share the same bandwidth pool on the same destination.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ContentReference" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a string value to uniquely reference an ETV stream table set and stream destination set.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ReplaceContent" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>Indicates how the items in the referenced content set should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="XAITType">
		<xs:annotation>
			<xs:documentation>This element describes unbound applications and their associated information.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="AbstractService" type="AbstractServiceType" maxOccurs="unbounded"/>
			<xs:element name="UnboundApplication" type="UnboundApplicationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="PrivilegedCertificate" type="ItemType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>One or more PrivilegedCertificate element may appear as the child of an XAIT element. The Data/Data64/DataHex child of this element provides a SHA-1 hash of a certificate (in DER encoded form) that is used to sign an application that needs monitor permission.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="TransportProtocol" type="TransportProtocolType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Schedule" type="DataScheduleType" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Destination" type="DestinationType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="StreamConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the carousel. This name is used to match the carousel content definition with the carousel's configuration parameters.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BandwidthConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the bandwidth required to stream the carousel. This name is used to determine how much bandwidth has been configured for the carousel. The bandwidth pool is specific to each unique destination address. Multiple streams and content references can share the same bandwidth pool on the same destination.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="TestApplicationFlag" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>If true, indicates an application which is transmitted for the purposes of receiver testing and which shall not be started or listed in any API or displayed in any user interface by OCAP receivers under normal operational conditions.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ContentReference" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Uniquely references a carousel content set and carousel destination set.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationType" type="OCAPApplicationTypeType" use="optional" default="OCAP-J">
			<xs:annotation>
				<xs:documentation>Identifies the type of the applications described in this XAIT. The only valid string value for this attribute is "OCAP-J".</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="XAITFilename" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the file name of the XAIT when it is carried on an object carousel.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="AITType">
		<xs:annotation>
			<xs:documentation>The AIT element is used to create Application Information Tables as specified in [OCAP]. Many elements described in this section are also valid XAIT elements; they are described with this overlap in mind. One AIT element may appear as the child of a CoDF element. The AIT element describes bound applications and their associated information.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="BoundApplication" type="BoundApplicationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="TransportProtocol" type="TransportProtocolType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Schedule" type="DataScheduleType" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Destination" type="DestinationType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="StreamConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the carousel. This name is used to match the carousel content definition with the carousel's configuration parameters.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BandwidthConfigName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the configuration name for the bandwidth required to stream the carousel. This name is used to determine how much bandwidth has been configured for the carousel. The bandwidth pool is specific to each unique destination address. Multiple streams and content references can share the same bandwidth pool on the same destination.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="TestApplicationFlag" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>If  true, indicates an application which is transmitted for the purposes of receiver testing and which shall not be started or listed in any API or displayed in any user interface by OCAP receivers under normal operational conditions.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ReplaceContent" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>Indicates how the items in the referenced content set should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ContentReference" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Uniquely references a carousel content set and carousel destination set.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationType" type="OCAPApplicationTypeType" use="optional" default="OCAP-J">
			<xs:annotation>
				<xs:documentation>Identifies the type of the applications described in this AIT. The only valid string value for this attribute is "OCAP-J".</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- Define sub-elements -->
	<!-- Carousel-specific sub-elements -->
	<xs:complexType name="ItemType">
		<xs:annotation>
			<xs:documentation>A carousel's content is made up of zero or more Item elements. Each Item specifies a module in a DSMCC data carousel or a file in a DSMCC object carousel.  This element defines a single content item, which is a data carousel module or an object carousel file.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:choice>
				<xs:element name="Data" type="DataType"/>
				<xs:element name="HREF" type="xs:anyURI">
					<xs:annotation>
						<xs:documentation>Specifies an URL that can be used to fetch the data resource for this Item.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:element name="Schedule" type="DataScheduleType" minOccurs="1"/>
		</xs:sequence>
		<xs:attribute name="Identity" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Uniquely identifies the Item within the carousel. This attribute can be used to reference an Item in subsequent CoDF documents for replacement or deletion.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the name for the Item. For data carousels this name string will be placed in the moduleInfoBytes of the DownloadInfoIndication message. For object carousels, this name will be used to create a series of directory objects that reference the item.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Delete" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates how the Item with this Identity should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="IsArchive" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>Indicates whether this Item is an archive.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Version" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the version number of this Item.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ReservedSize" type="xs:positiveInteger" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the stream generator may take account of this size when packaging objects into modules.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Authenticate" type="xs:boolean" use="optional" default="true">
			<xs:annotation>
				<xs:documentation>If false, then the hash code of this file will not be included in the hash file of the parent directory.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ModuleTemplateName" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the ModuleTemplate to be applied to this Item. If this attribute is not supplied, the default module template will be applied.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<!-- NOTE: The spec contains a "MediaType" attribute that seems to be missing here -->
	</xs:complexType>
	<xs:complexType name="BIFDescriptorType">
		<xs:annotation>
			<xs:documentation>A carousel content definition can include one or more BIFDescriptor elements. This element is used to add an ETV BIF descriptor to the MPEG PMT for the carousel. The BIFDescriptor element defines an ETV BIF descriptor instance. This descriptor is placed into the PMT for the data PID of the carousel.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="BIFPlatform" type="BIFPlatformType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="Identity" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a unique identifier for this BIFDescriptor.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Delete" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates how the BIFDescriptor with this Identity should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="OCConfigurationType">
		<xs:annotation>
			<xs:documentation>The object carousel configuration used to carry the set of OCAP Java applications is defined in this element. If the application playout system is configured to deliver the applications via an Object Carousel, then it will use the carousel configuration information to generate the DIIs and modules carrying the file system. Where configuration information is not defined for an application, then the stream generator will generate DIIs and modules to carry the file system in an implementation-dependent manner.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="DIITemplate" type="DIITemplateType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="ModuleTemplate" type="ModuleTemplateType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="RecommendedBitRate" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the recommended bit rate for this object carousel configuration.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:integer">
					<xs:minInclusive value="1000"/>
					<xs:maxInclusive value="125000000"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="DIITemplateType">
		<xs:annotation>
			<xs:documentation>This element defines a template for constructing DIIs with given attributes. The stream generator will create a DII with the appropriate attributes to signal all modules constructed using module templates declared inside that DIITemplate element, creating more DIIs as needed to accommodate the modules. Modules constructed using module templates declared outside a DIITemplate element will be signaled in a DII created in an implementation-dependent manner.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="ModuleTemplate" type="ModuleTemplateType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="Name" type="xs:NCName" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the unique identifier for this DIITemplate.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Period" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the required repetition rate of the templated DII in seconds.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:double">
					<xs:minInclusive value="0.1"/>
					<xs:maxInclusive value="60.0"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ModuleTemplateType">
		<xs:annotation>
			<xs:documentation>This element defines a template for constructing modules with given attributes. The stream generator will carry file system objects allocated to a module template in one or more modules with the appropriate attributes, creating new modules as needed to accommodate the objects.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="Name" type="xs:NCName" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the unique identifier for this ModuleTemplate.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Compressed" type="xs:boolean" use="optional" default="false">
			<xs:annotation>
				<xs:documentation>Indicates whether the contents of this template are compressed.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Period" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the required repetition rate of the templated module in seconds. Mutually exclusive with the RelativePriority attribute.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:double">
					<xs:minInclusive value="0.1"/>
					<xs:maxInclusive value="60.0"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="RelativePriority" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the relative frequency of the module relative to other modules with assigned priorities in this application. Thus, a module with priority N will be delivered N times for each M times a module of priority M is delivered. Mutually exclusive with the Period attribute.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:minInclusive value="1"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attributeGroup ref="CachingPriority"/>
		<!-- <xs:attributeGroup ref="PrefetchSignalling"/> -->
	</xs:complexType>
	<!-- Does this belong to XAIT? 
  <xs:attributeGroup name="PrefetchSignalling"> 
    <xs:attribute name="PrefetchLabel" type="normalized255CharStringType" use="optional"/> 
    <xs:attribute name="PrefetchPriority" use="optional"> 
      <xs:simpleType> 
        <xs:restriction base="xs:unsignedByte"> 
          <xs:minInclusive value="1"/> 
          <xs:maxInclusive value="100"/> 
        </xs:restriction> 
      </xs:simpleType> 
    </xs:attribute> 
  </xs:attributeGroup> 
  -->
	<xs:attributeGroup name="CachingPriority">
		<xs:attribute name="CachingPriority" type="xs:unsignedByte" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the relative caching priority of modules templated with this template. If this attribute is specified, the attribute CachingTransparencyLevel must also be specified.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="TransparencyLevel" type="CachingTransparencyLevelType" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates the caching transparency level of this module (see [DVB-MHP 1.0.3] section B.2.2.4.2). If this attribute is specified, the attribute CachingPriority must also be specified.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:attributeGroup>
	<xs:simpleType name="CachingTransparencyLevelType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Transparent caching"/>
			<xs:enumeration value="Semi-transparent caching"/>
			<xs:enumeration value="Static caching"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="ApplicationIconsDescriptorType">
		<xs:annotation>
			<xs:documentation>The signaling information for the icons descriptor of an OCAP Java application is defined in the ApplicationIconsDescriptor element.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="IconLocator" type="normalized255CharStringType" use="required">
			<xs:annotation>
				<xs:documentation>Indicates the location of an icon for this application. The stream generator will convert the value of this attribute into a string of bytes using UTF-8 encoding before inserting the data into the AIT or XAIT.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="IconFlags" use="required">
			<xs:annotation>
				<xs:documentation>Indicates the type of the icon in accordance with [DVB-MHP 1.0.3] section 10.7.4.2.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:int">
					<xs:minInclusive value="1"/>
					<xs:maxInclusive value="511"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<!-- EISS-specific sub-elements -->
	<xs:complexType name="EISSTableType">
		<xs:annotation>
			<xs:documentation>An EISS content set is made up of one or more table elements. Each table specifies an EISS table that is repeated a given number of times on the stream. The EISSTable element defines a single content item, which is a data carousel module or an object carousel file.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="BIFPlatform" type="BIFPlatformType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="EISSApplication" type="EISSApplicationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="EISSMediaTime" type="EISSMediaTimeType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="EISSStreamEvent" type="EISSStreamEventType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="OrganizationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a 32-bit organization ID for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a 16-bit application ID for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationInstanceID" type="ApplicationInstanceIDType" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies an application instance identifier. The data ApplicationInstanceID is exposed to the application using the application instance identifier metadata item.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Identity" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Uniquely identifies the table within the stream. This attribute can be used to reference a table in subsequent CoDF documents for replacement or deletion.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Delete" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates how the EISSTable with this Identity should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ProtocolVersionMajor" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an 8-bit major version number for the ETV messaging protocol being conveyed in the ETV streams for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ProtocolVersionMinor" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an 8-bit minor version number for the ETV messaging protocol being conveyed in the ETV streams for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationType" type="ETVApplicationTypeType" use="optional" default="ETV-BIF">
			<xs:annotation>
				<xs:documentation>Specifies the type of ETV application that this table has been created for. This attribute accepts an integer value, or the text string "ETV-BIF" which corresponds to value 0x0008.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="EISSApplicationType">
		<xs:annotation>
			<xs:documentation>An EISS table can include information about the applications that are capable of processing ETV streams. The EISSApplication element adds the information for one application to an EISS table.  This descriptor is placed into the eiss_descriptor field of the eiss_section.
			If data is provided in the Data, Data64, or DataHex child element, it SHALL be mapped into the private_data field of the ETV Application Information Descriptor, which is described in the [ETV-AM] specification.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Data" type="DataType" minOccurs="0" maxOccurs="1"/>
			<xs:element name="Schedule" type="EventScheduleType" minOccurs="1"/>
			<xs:element name="MetaData" type="EISSMetaDataType" minOccurs="0" maxOccurs="1"/>
		</xs:sequence>
		<xs:attribute name="MajorVersion" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies a major version for the application.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedInt">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
			<!-- NOTE: The valid range is a new addition here.  Note that the type was changed from xs:integer to xs:unsignedInt -->
		</xs:attribute>
		<xs:attribute name="MaxMajorProtocolVersion" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>If non-zero, specifies a maximum major protocol version that should decode this application</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedInt">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
			<!-- NOTE: The valid range is a new addition here.  Note that the type was changed from xs:integer to xs:unsignedInt -->
		</xs:attribute>
		<xs:attribute name="MinorVersion" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies a minor version for the application.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedInt">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
			<!-- NOTE: The valid range is a new addition here.  Note that the type was changed from xs:integer to xs:unsignedInt -->
		</xs:attribute>
		<xs:attribute name="MaxMinorProtocolVersion" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>If non-zero, specifies a maximum minor protocol version that should decode this application.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedInt">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
			<!-- NOTE: The valid range is a new addition here.  Note that the type was changed from xs:integer to xs:unsignedInt -->
		</xs:attribute>
		<xs:attribute name="TestFlag" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>8-bit integer which specifies a flag field. The usage of this field is entirely defined by the MSO.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ControlCode" type="ETVControlCodeType" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the control command for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Priority" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the relative priority for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="InitialResourceURI" type="xs:anyURI" use="required">
			<xs:annotation>
				<xs:documentation>Used to locate a resource using a generic Uniform Resource Identifier.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ResourceUpdateFlags" use="optional">
			<xs:annotation>
				<xs:documentation>Sequence number which indicates if the application resource has changed on the carousel.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:maxInclusive value="15"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="EISSMetaDataType">
		<xs:sequence>
			<xs:element name="EISSMetaDataItem" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Data" type="DataType"/>
					</xs:sequence>
					<xs:attribute name="MetaDataItemID" use="required">
						<xs:simpleType>
							<xs:restriction base="xs:unsignedInt">
								<xs:minInclusive value="16711680"/>
								<xs:maxInclusive value="16777214"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="MetaDataItemType" use="required">
						<xs:simpleType>
							<xs:union>
								<xs:simpleType>
									<xs:restriction base="xs:unsignedInt">
										<xs:minInclusive value="0"/>
										<xs:maxInclusive value="15"/>
									</xs:restriction>
								</xs:simpleType>
								<xs:simpleType>
									<xs:restriction base="xs:string">
										<xs:enumeration value="UNSIGNEDINT"/>
										<xs:enumeration value="BOOLEAN"/>
										<xs:enumeration value="STRING"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:union>
						</xs:simpleType>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EISSDescriptorType">
		<xs:annotation>
			<xs:documentation>An ETV stream content definition can include one or more EISSDescriptor elements. This element is used to add an ETV Integrated Signaling descriptor to the MPEG PMT for the EISS. The EISSDescriptor element defines an EISS descriptor instance. This descriptor is placed into the PMT for the data PID of the EISS.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Data" type="DataType"/>
			<xs:element name="BIFPlatform" type="BIFPlatformType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="Identity" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a unique identifier for this EISSDescriptor.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Delete" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates how the EISSDescriptor with this Identity should be treated.  Refer to the specification section on Content Updates and Replacement.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="EISSStreamEventType">
		<xs:annotation>
			<xs:documentation>This element specifies data to be provided to an application synchronously with the broadcast.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Data" type="DataType"/>
			<xs:element name="Schedule" type="EventScheduleType" minOccurs="1">
				<xs:annotation>
					<xs:documentation>Defines when the stream event will be sent to the client.  The EISS event_counter field will be incremented upon each iteration of the schedule, resulting in a unique stream event for each schedule iteration.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="TimeValue" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a time value for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="DuplicateCount" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>Specifies how many duplicate stream events per schedule iteration will be sent to the client.  For example, if the EISSStreamEvent defines a schedule to send the stream event 3 times over the course of 30 seconds, and the Duplicate attribute is set to 5, then for each of the 3 schedule iterations the stream event will be sent 6 times (1 "original" and 5 "duplicates", which are indicated by the EISS event_counter field remaining the same for the duplicated events).  As noted above, the EISS event_counter field will be incremented on each of the 3 schedule iterations, resulting in a unique stream event for each schedule iteration.  Duplicate stream events cannot be interleaved, so if a new/original stream event is sent while a previous stream event is scheduled to be duplicated, then the previous event’s duplicate schedule will be terminated and any remaining stream event duplicates will not be sent.</xs:documentation>
			</xs:annotation>			
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="15"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="DuplicateRate" type="xs:unsignedInt" use="optional" default="35">
			<xs:annotation>
				<xs:documentation>Specifies the delay in milliseconds between each duplicate stream event (per schedule iteration).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="HeaderType" use="optional" default="0">
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="7"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="PayloadType" use="optional" default="2">
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="31"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="EISSMediaTimeType">
		<xs:annotation>
			<xs:documentation>An EISS table can include information that can be used to synchronize the ETV stream to the program-specific timeline. The EISSMediaTime element adds the information for one application to an EISS table.  This descriptor is placed into the eiss_descriptor field of the eiss_section.
			If the EISSMediaTime element contains a repetitive schedule, then the streamer will mutate the TimeValue attribute in successive EISSMediaTime descriptors.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Schedule" type="EventScheduleType" minOccurs="1"/>
		</xs:sequence>
		<xs:attribute name="TimeValue" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a time value for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="ApplicationInstanceIDType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-zA-Z0-9_\-]*"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- (X)AIT-specific sub-elements -->
	<xs:complexType name="UnboundApplicationType">
		<xs:annotation>
			<xs:documentation>This element describes a single unbound application.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="ApplicationName" type="ApplicationNameType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="ApplicationProfile" type="ApplicationProfileType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="TransportProtocol" type="TransportProtocolType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="RegisteredAPI" type="RegisteredAPIType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="TransportProtocolLabel" type="TransportProtocolLabelType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="ApplicationIconsDescriptor" type="ApplicationIconsDescriptorType" minOccurs="0"
				 maxOccurs="unbounded"/>
			<xs:element name="ApplicationParameter" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Prefetch" type="PrefetchType" minOccurs="0" maxOccurs="1"/>
			<xs:element name="ExternalApplicationAuthorization" type="ExternalApplicationAuthorizationType"
				 minOccurs="0" maxOccurs="1"/>
		</xs:sequence>
		<xs:attribute name="OrganizationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an organization ID.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an application ID.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="TransportCarouselName" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Creates an implicit OC transport protocol descriptor. Should match the value for a stream config name of a carousel within the stream generator.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ControlCode" type="OCAPControlCodeType" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the control command for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Visibility" use="optional" default="Invisible">
			<xs:annotation>
				<xs:documentation>Specifies the visibility of the application.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Invisible"/>
					<xs:enumeration value="APIVisible"/>
					<xs:enumeration value="Visible"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Priority" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>Specifies the relative priority for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="AbstractServiceID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the service ID of the abstract service to which this application belongs.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="UnboundVersion" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the version number of this application for the unbound application descriptor.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="StoragePriority" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>If this attribute has the value 0, this application shall not be stored in NVMEM. If this attribute has a value between 11-255, this application is stored according to the specified priority value and subject to available storage constraints.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="LaunchOrder" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>Indicates the order of applications with the same ApplicationID and priority. Only the application with the highest launch order is entered in the Application Database. LaunchOrder may be used to signal and store a new version of an application prior to a change of LaunchOrder in a subsequent revision of the XAIT.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BaseDir" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a directory name starting from the root of the file system with directories delimited by the slash character "/" (0x2F). This directory is used as a base directory for relative path names. This base directory is automatically considered to form the first directory in the class path (after the path to the system's classes).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Classpath" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a further extension for the OCAP-J class path where the classes of the application are searched in addition to the base directory. The class path extension string contains path names where the elements in the path are delimited by the semicolon character ";" (0x3B). The elements of the path may be either absolute paths starting from the root of the file system or they can be relative to the base directory. The directories are delimited by the slash character "/" (0x2F) and absolute path names begin with the slash character "/" (0x2F).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="InitialClass" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the name of the object in the file system that is the class implementing the Xlet interface. This string is an OCAP-J class name that is found in the class path (e.g., "com.broadcaster.appA.MainClass").</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:minLength value="1"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Permissions" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Bitmask representing the permissions of this application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="BoundApplicationType">
		<xs:annotation>
			<xs:documentation>One or more BoundApplication elements must appear as the child of an AIT element. The BoundApplication element describes a single bound application.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="ApplicationName" type="ApplicationNameType" maxOccurs="unbounded"/>
			<xs:element name="ApplicationProfile" type="ApplicationProfileType" maxOccurs="unbounded"/>
			<xs:element name="TransportProtocol" type="TransportProtocolType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="TransportProtocolLabel" type="TransportProtocolLabelType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="ApplicationParameter" type="xs:string" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Zero or more ApplicationParameter elements may appear as children of each BoundApplication or UnboundApplication element. The ApplicationParameter element provides a parameter to the application that is its parent.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Prefetch" type="PrefetchType" minOccurs="0" maxOccurs="1"/>
			<xs:element name="ExternalApplicationAuthorization" type="ExternalApplicationAuthorizationType"
				 minOccurs="0" maxOccurs="1"/>
		</xs:sequence>
		<xs:attribute name="OrganizationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an organization ID.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an application ID.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="TransportCarouselName" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Creates an implicit OC transport protocol descriptor. Should match the value for a stream config name of a carousel within the stream generator.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ControlCode" type="OCAPControlCodeType" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the control command for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Visibility" use="optional" default="Invisible">
			<xs:annotation>
				<xs:documentation>Specifies the visibility of the application.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Invisible"/>
					<xs:enumeration value="APIVisible"/>
					<xs:enumeration value="Visible"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Priority" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>Specifies the relative priority for the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BaseDir" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a directory name starting from the root of the file system with directories delimited by the slash character "/" (0x2F). This directory is used as a base directory for relative path names. This base directory is automatically considered to form the first directory in the class path (after the path to the system's classes).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Classpath" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies a further extension for the OCAP-J class path where the classes of the application are searched in addition to the base directory. The class path extension string contains path names where the elements in the path are delimited by the semicolon character ";" (0x3B). The elements of the path may be either absolute paths starting from the root of the file system or they can be relative to the base directory. The directories are delimited by the slash character "/" (0x2F) and absolute path names begin with the slash character "/" (0x2F).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="InitialClass" use="required">
			<xs:annotation>
				<xs:documentation>Specifes the name of the object in the file system that is the class implementing the Xlet interface. This string is an OCAP-J class name that is found in the class path (e.g., "com.broadcaster.appA.MainClass").</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:minLength value="1"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Permissions" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Bitmask representing the permissions of this application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="AbstractServiceType">
		<xs:annotation>
			<xs:documentation>The AbstractService element is used to define an abstract service descriptor. This element can be included as the child to XAIT elements to place a descriptor in the common descriptor loop of the XAIT. This descriptor is used to define the name and source ID of an abstract service. Each unbound application must reference an abstract service by source ID. One AbstractService element is required for each abstract service that may be selected from the network. One or more AbstractService element must appear as a child of an XAIT element.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="ServiceID" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the service identifier for this abstract service.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:integer">
					<xs:minExclusive value="65535"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Autoselect" type="xs:boolean" use="required">
			<xs:annotation>
				<xs:documentation>If true, specifies that this service shall be automatically selected.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ServiceName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the name of this abstract service.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ApplicationNameType">
		<xs:annotation>
			<xs:documentation>One or more ApplicationName elements must appear as a child of each BoundApplication or UnboundApplication element.The ApplicationName element provides a string name for the application in a named language. The string names the application in a manner intended to be informative to the user.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="Language" use="optional" default="ENG">
			<xs:annotation>
				<xs:documentation>Specifies the ISO 639.2 three character language code of the language of the application. Both ISO 639.2/B and ISO 639.2/T may be used.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[a-zA-Z0-9]{3}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Name" use="required">
			<xs:annotation>
				<xs:documentation>Names the application in a manner intended to be informative to the user.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ApplicationProfileType">
		<xs:annotation>
			<xs:documentation>One or more ApplicationProfile elements must appear as the child of each BoundApplication or UnboundApplication element. The ApplicationProfile element indicates that a receiver implements the profile described.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="Profile" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Represents the application-type specific profile.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="MajorVersion" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Carries the numeric value of the major sub-field of the profile version number.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="MinorVersion" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>Carries the numeric value of the minor sub-field of the profile version number.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="MicroVersion" type="xs:integer" use="optional" default="0">
			<xs:annotation>
				<xs:documentation>Carries the numeric value of the micro sub-field of the profile version number.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="RegisteredAPIType">
		<xs:annotation>
			<xs:documentation>One or more RegisteredAPI element may appear as the child of an UnboundApplication element. The RegisteredAPI element requests application access to the shared classes of a registered API. Up to 16 of these elements may appear as children of an UnboundApplication. If more than 16 instances of this element appear as children of a single UnboundApplication, then the terminal may ignore all instances of this element after the 16th one.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="Name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the name of a registered API to which this application requests access.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TransportProtocolType">
		<xs:annotation>
			<xs:documentation>The TransportProtocol element is used to define a transport protocol descriptor. This element can be included as a child to AIT and XAIT elements to place a descriptor in the common descriptor loop of the table. This element can also be included as the child of BoundApplication and UnboundApplication elements to place a descriptor in the application descriptor loop. This descriptor includes an 8-bit transport label value. An application element can be associated to a transport protocol by including a TransportProtocolLabel element with the same label.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="TransportProtocolURL" type="xs:string">
					<xs:annotation>
						<xs:documentation>This element must appear as the child of any TransportProtocol element whose attribute Protocol has the value "URL". The TransportProtocolURL element provides the URL associated with this transport protocol. </xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="TransportProtocolOC" type="TransportProtocolOCType"/>
				<xs:element name="TransportProtocolSelectorBytes" type="xs:string">
					<xs:annotation>
						<xs:documentation>This element must appear as the child of any TransportProtocol element whose attribute Protocol has an integer value. The TransportProtocolSelectorBytes element contains the selector bytes for a third party TransportProtocol.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="Protocol" type="ProtocolType" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the protocol for the application. This attribute may be set to "OC" (in which case a child TransportProtocolOC element must appear), "URL" (in which case a child TransportProtocolURL element must appear), or "MONOLITHIC", "FLASH", "FILE", or an integer (in which cases a child TransportProtocolSelectorBytes must appear).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Label" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Uniquely identifies a transport protocol within this AIT or XAIT section.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TransportProtocolLabelType">
		<xs:annotation>
			<xs:documentation>The TransportProtocolLabel element is used to define a transport protocol label descriptor. This element can be included as the child to BoundApplication and UnboundApplication elements to place a descriptor in the application descriptor loop. This descriptor is used to associate the application to a particular transport protocol. The 8-bit transport protocol label value must match the value of a particular transport protocol. It is assumed that the application can be loaded using the matched transport protocol.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="Label" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Identifies a transport protocol that delivers the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TransportProtocolOCType">
		<xs:annotation>
			<xs:documentation>This element must appear as the child of any TransportProtocol element whose attribute Protocol has the value "OC". The TransportProtocolOC element provides the source ID for this transport.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="RemoteConnection" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>If set to true, indicates that the transport connection is provided by a service that is different from the one carrying the AIT. For AIT, such applications shall not be autostarted by receivers but are visible (subject to the visibility field of the application descriptor) via an application listing API for possible launching by service selection (but not via an application launching API). When this is set to true, the following three attributes (OriginalNetworkID, TransportStreamID and ServiceID) are included in the selector bytes. This flag shall be set to false when the transport connection is provided by the current service. For XAIT, RemoteConnection is enforced true. For AIT, defaults to false.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="SourceID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Identifies the source id of the service that provides the transport connection.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ComponentTag" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Identifies the "principal" service component that delivers the application. The identified component is the elementary stream that carries the DSI of the object carousel.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="ProtocolType">
		<xs:union memberTypes="xs:integer">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="OC"/>
					<xs:enumeration value="URL"/>
					<xs:enumeration value="MONOLITHIC"/>
					<xs:enumeration value="FLASH"/>
					<xs:enumeration value="FILE"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>
	<xs:complexType name="PrefetchType">
		<xs:annotation>
			<xs:documentation>Zero or one Prefetch elements can be included as children of an AIT element. The Prefetch element is defined for use where the protocol_id of the transport is 0x0001 ([DVB-MHP 1.0.3] Object Carousel). Each Prefetch element is associated with a specific TransportProtocolDescriptor via its TransportProtocolLabel attribute. This element may be used to improve application start-up by pre-fetching modules that have the indicated labels.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="PrefetchLabel" type="xs:string" minOccurs="1" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>One or more PrefetchLabel elements must be included as the children of a Prefetch element. The PrefetchLabel element specifies a module label. This label matches a label on one or more module carried by Label descriptors in the userInfo fields of the moduleInfo structure of DIIs.</xs:documentation>
				</xs:annotation>
				<!-- NOTE: Are we missing the Priority attribute on the PrefetchLabel element here? -->
			</xs:element>
		</xs:sequence>
		<xs:attribute name="TransportProtocolLabel" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Identifies a transport protocol that delivers the application.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ExternalApplicationAuthorizationType">
		<xs:annotation>
			<xs:documentation>An AIT element may have as children zero or more ExternalApplicationAuthorization elements. Each ExternalApplicationAuthorization element contains information about an external application that is allowed to continue to run with the applications listed as children of the parent AIT element, but which cannot be launched from this service. The external authorization applies to applications with the identified OrganizationID/ApplicationID pair that are of the application_type identified by the AIT parent of this element. See [DVB-MHP 1.0.3], Section 10.7.5.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="OrganizationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an organization ID.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ApplicationID" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies an application ID.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Priority" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the priority that this application assumes in the context of the current service.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- Common sub-elements -->
	<xs:complexType name="DataType">
		<xs:choice>
			<xs:element name="DataString" type="xs:string">
				<xs:annotation>
					<xs:documentation>This element specifies raw string-encoded data.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Data64" type="xs:base64Binary">
				<xs:annotation>
					<xs:documentation>This element specifies base-64 encoded data.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="DataHex" type="xs:hexBinary">
				<xs:annotation>
					<xs:documentation>This element specifies hexadecimally encoded data.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	<xs:simpleType name="ApplicationTypeType">
		<xs:restriction base="xs:integer"/>
	</xs:simpleType>
	<xs:simpleType name="ETVApplicationTypeType">
		<xs:union memberTypes="ApplicationTypeType">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="ETV-BIF"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>
		<xs:simpleType name="OCAPApplicationTypeType">
		<xs:union memberTypes="ApplicationTypeType">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="OCAP-J"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>
	<xs:complexType name="BIFPlatformType">
		<xs:annotation>
			<xs:documentation>A BIFPlatform definition includes one or more BIFPlatform elements. This element is used to add platform specifications to an ETV BIF descriptor. The BIFPlatform element defines a platform entry for an ETV BIF descriptor instance. The ETV BIF descriptor is placed into the PMT for the data PID of the carousel.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="HWManufacturer" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Sets the hardware manufacturer code for the platform entry.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="HWModel" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Sets the hardware model code for the platform entry.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="HWVersionMajor" use="required">
			<xs:annotation>
				<xs:documentation>Sets the hardware major version code for the platform entry.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:integer">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="HWVersionMinor" use="required">
			<xs:annotation>
				<xs:documentation>Sets the hardware minor version code for the platform entry.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:integer">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="SWManufacturer" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Sets the software manufacturer code for the platform entry.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="SWModel" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Sets the software model code for the platform entry.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="SWVersionMajor" use="required">
			<xs:annotation>
				<xs:documentation>Sets the software major version code for the platform entry.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:integer">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="SWVersionMinor" use="required">
			<xs:annotation>
				<xs:documentation>Sets the software minor version code for the platform entry.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:integer">
					<xs:minInclusive value="0"/>
					<xs:maxInclusive value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Profile" type="xs:integer" use="required">
			<xs:annotation>
				<xs:documentation>Sets the platform profile code for the platform entry.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="CoDFTimeType">
		<xs:restriction base="xs:dateTime">
			<xs:pattern value=".+T[^+\-]+Z"/>
			<!--  Note that all times are specified in UTC. -->
			<!-- Examples of this pattern: -->
			<!-- 2007-03-09T10:01:23.4567Z ; 2007-03-09T12:00:00Z -->
			<!--  Note that this is xs:dateTime with a mandatory UTC time zone designator. -->
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ETVControlCodeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Autostart"/>
			<xs:enumeration value="Present"/>
			<xs:enumeration value="Destroy"/>
			<xs:enumeration value="Suspend"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="OCAPControlCodeType">
		<xs:union memberTypes="ETVControlCodeType">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Kill"/>
					<xs:enumeration value="Prefetch"/>
					<xs:enumeration value="Remote"/>
					<xs:enumeration value="Legacy_mode"/>
					<xs:enumeration value="Normal_mode"/>
					<xs:enumeration value="Crossenvironment_mode"/>
					<xs:enumeration value="Background_mode"/>
					<xs:enumeration value="Paused_mode"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>
	<xs:complexType name="DestinationType">
		<xs:annotation>
			<xs:documentation>This element defines a destination or group of related destinations for a stream on a cable television network.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="Type" type="DestinationTypeType" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the type of destination.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ControllerID" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the value for the controller ID for the destination. This attribute is required if the destination type is "PlantGroup", "Controller", "ChannelMapArea", "DSGPlant", or "OOBPlant"</xs:documentation>
				<!-- NOTE: Should we make this a 'required' field, since the description requries this attribute for all valid values of "Type"? -->
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ID" type="xs:integer" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the ID value for those destination types that require it. For channel maps, this attribute corresponds to the channel map ID. For plants this attribute corresponds to the plant ID. This attribute is required if the destination type is "ChannelMapArea", "DSGPlant", or "OOBPlant".</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="DestinationTypeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="DSGPlant"/>
			<xs:enumeration value="OOBPlant"/>
			<xs:enumeration value="Controller"/>
			<xs:enumeration value="ChannelMapArea"/>
			<xs:enumeration value="PlantGroup"/>
			<xs:enumeration value="AllDestinations"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:group name="TimeRangeGroup">
		<xs:annotation>
			<xs:documentation>Defines a time range, either absolute or relative.</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:sequence>
				<xs:element name="Start" type="CoDFTimeType">
					<xs:annotation>
						<xs:documentation>Specifies the time to start broadcasting the data, in GMT (Greenwich Mean Time), according to the stream generator server clock. The values are specified in the format YYYY-MM-DDTHH:MM:SS:mmmmZ, (where the letter 'T' separates the day from the hour).  The millisecond value is optional.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Stop" type="CoDFTimeType" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Optional time to stop broadcasting the data, in GMT (Greenwich Mean Time), according to the stream generator server clock.  Data SHALL be transmitted for no more than Stop - Start starting from the Start. An implementation SHOULD avoid starting transmission of data that cannot be completed in the remaining time.  The values are specified in the format YYYY-MM-DDTHH:MM:SS:mmmmZ, (where the letter 'T' separates the day from the hour).  The millisecond value is optional.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:sequence>
				<xs:element name="StartOffset" type="xs:integer">
					<xs:annotation>
						<xs:documentation>Specifies the time to start broadcasting the data, in milliseconds from the document start time.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="StopOffset" type="xs:integer" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Optional time to stop broadcasting the data, in milliseconds from the document start time. Data SHALL be transmitted for no more than StopOffset - StartOffset milliseconds starting from the StartOffset. An implementation SHOULD avoid starting transmission of data that cannot be completed in the remaining time.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:choice>
	</xs:group>
	<xs:complexType name="EventScheduleType">
		<xs:sequence>
			<xs:element name="Interval" type="xs:integer">
				<xs:annotation>
					<xs:documentation>Specifies a desired repetition interval for the scheduled entity, in milliseconds. The stream configuration includes a default value for this attribute.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:group ref="TimeRangeGroup" minOccurs="1" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DataScheduleType">
		<xs:annotation>
			<xs:documentation>This element specifies when the server broadcasts the referenced data. If there is no Schedule element defined, the stream generator server starts broadcasting the referenced data immediately and continues to send the data as often as possible.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:choice>
				<xs:element name="Interval" type="xs:integer">
					<xs:annotation>
						<xs:documentation>Specifies a desired repetition interval for the scheduled entity, in milliseconds. The stream configuration includes a default value for this attribute.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Bitrate" type="xs:integer">
					<xs:annotation>
						<xs:documentation>Specifies a desired bitrate for the scheduled entity/item, in bits per second. The stream configuration includes a default value for this attribute.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:group ref="TimeRangeGroup" minOccurs="1" />
		</xs:sequence>
		<xs:anyAttribute namespace="##any" processContents="lax">
			<xs:annotation>
				<xs:documentation>This attribute can be used for private extension purposes.</xs:documentation>
			</xs:annotation>
		</xs:anyAttribute>
	</xs:complexType>
	<xs:simpleType name="normalized255CharStringType">
		<xs:restriction base="xs:normalizedString">
			<xs:maxLength value="255"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="FileSystemType">
		<xs:annotation>
			<xs:documentation>This element defines the file system used to carry a set of OCAP applications. Exactly one instance of either RootTree or Root must appear as the child of this element. The RootTree element allows the content of the file system to be constructed from a ZIP format archive, whereas the Root element allows the objects in the root of the file system to be specified explicitly.</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:element name="RootTree">
				<xs:annotation>
					<xs:documentation>This element allows the content of the file system to be constructed from a ZIP format archive.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:attribute name="ModuleTemplate" type="xs:NCName" use="optional">
						<xs:annotation>
							<xs:documentation>Indicates that the specified module template will apply to all objects in the file system.</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="ContentArchive" type="xs:anyURI" use="required">
						<xs:annotation>
							<xs:documentation>Specifies the URL from which a ZIP archive defining the contents of the file system can be obtained.</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
			<xs:element name="Root">
				<xs:annotation>
					<xs:documentation>This element allows the objects in the root of the file system to be specified explicitly.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="DirectoryContentType">
							<xs:attribute name="ModuleTemplate" type="xs:NCName" use="optional">
								<xs:annotation>
									<xs:documentation>Indicates that the specified module template will apply to all objects in the file system.</xs:documentation>
								</xs:annotation>
							</xs:attribute>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:choice>
		<xs:attribute name="DefaultModuleTemplate" type="xs:NCName" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the name of the module template to be applied by default to sub-elements specifying no ModuleTemplate.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="DirectoryContentType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="Directory" type="DirectoryType"/>
			<xs:element name="DirectoryTree" type="DirectoryTreeType"/>
			<xs:element name="Item" type="ItemType"/>
			<!-- <xs:element ref="stream_event_object"/> -->
			<!-- <xs:element ref="signature_file"/> -->
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="DirectoryType">
		<xs:annotation>
			<xs:documentation>The content of a directory in the file system is defined in this element. This element allows for the objects in the directory to be enumerated.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="DirectoryContentType">
				<xs:attribute name="Name" type="normalized255CharStringType" use="required">
					<xs:annotation>
						<xs:documentation>Identifies the directory in the file system. This value must not contain the forward slash character. The stream generator will convert the Name attribute value to a string of bytes using UTF-8 encoding before inserting the entry into the object carousel.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="ModuleTemplate" type="xs:NCName" use="optional">
					<xs:annotation>
						<xs:documentation>Indicates that the specified module template will apply to all objects in the directory that do not have their own ModuleTemplate attribute defined.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="Authenticate" type="xs:boolean" use="optional" default="true">
					<xs:annotation>
						<xs:documentation>If false, indicates that the hash code for this directory and its contents will not be included in the hash file of the parent directory</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DirectoryTreeType">
		<xs:annotation>
			<xs:documentation/>
		</xs:annotation>
		<xs:attribute name="Name" type="normalized255CharStringType" use="required">
			<xs:annotation>
				<xs:documentation>Identifies the top-level directory in the tree. This value must not contain the forward slash character. The stream generator will convert the Name attribute value to a string of bytes using UTF-8 encoding before inserting the entry into the object carousel.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ModuleTemplate" type="xs:NCName" use="optional">
			<xs:annotation>
				<xs:documentation>Indicates that the specified module template will apply to all objects in the directory and its subdirectories.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Authenticate" type="xs:boolean" use="optional" default="true">
			<xs:annotation>
				<xs:documentation>If false, indicates that the hash code for this directory and its contents will not be included in the hash file of the parent directory.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ContentArchive" type="xs:anyURI" use="required">
			<xs:annotation>
				<xs:documentation>Specifies the URL from which a ZIP archive defining the contents of the directory tree can be obtained.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
    <xs:simpleType name="PositiveIntType">
        <xs:annotation>
            <xs:documentation> This is an xs:int restricted to  positive content
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:int">
            <xs:minInclusive value="1"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="VersionType">
        <xs:annotation>
            <xs:documentation>MinSchemaMajorVersion is lowest compatible schema 
                major version number (assumes all forward compatible within 
                MajorVersion). The value is fixed at 2 for this release.  For example, 
                a document with a MinSchemaMajorVersion of 2 is 
                compatible with any processor implementing schema major version 2 or 
                greater, but not with a processor implementing schema major version 1.</xs:documentation>
            <xs:documentation>MinSchemaMinorVersion is the lowest compatible schema 
                minor version number.  The value is fixed at 0 for this release.  If missing, all minor version
                numbers are assumed to be compatible.</xs:documentation>
        </xs:annotation>
        <xs:attribute name="MinSchemaMajorVersion" type="PositiveIntType" fixed="2"/>
        <xs:attribute name="MinSchemaMinorVersion" type="xs:int" use="optional" fixed="0"/>
    </xs:complexType>
</xs:schema>
