Towards a Document Profile
The case of a digital television document profile

Draft 1, 19 Aug 99
Ted Wugofski, Gateway
[ted.wugofski@gateway.com]

1. Overview

This document begins to explore what might be found in an XHTML document profile. The case of a digital television content specification was studied.

This document does not propose a specific naming convention or syntax; the use of XML is provided purely for the sake of clarity.

Examples of how the sections of a profile are used is provided in Appendix B and Appendix C, where a "minimum profile" and "main profile" are suggested.

This document was written in support of the W3C HTML Working Group and the ATSC T3/S17 specialist group. It is a working draft and may be modified or made obsolete at any time.

2. Tuners

The <tuner> section refers to the tuners required to be in the receiver. This may affect what interfaces are available to scripts within the document and the number of media elements that can be supported simultaneously in the document.

<num-required> {1 | 2} default=1
The number of DTV tuners required in the receiver. Specifies whether the document will may access multiple tuners (i.e., have multiple <object> elements which refer to a tuning resource).

3. Applications

The <applications> section refers to support for broadcast applications (not applications that are native to the receiver).

<per-channel> { 1 | 2 | 3 | 4 } default=1
The number of applications per channel that can be executed by the receiver. Some applications may want to cooperate with other applications delivered on the same channel. For example, a "text/html"-based application and a java application.
<num-active> integer default=1
The number of applications that can be running concurrently on the receiver. Some applications may wish to cooperate with other running applications.
<num-osd> integer default=1
The number of applications that may share control the on-screen display resources of the receiver. Some applications may require complete control of the screen.
<num-bkgnd> integer default=0
The number of applications that may run on the receiver without controlling the on-screen display resources of the receiver. Some applications may require running in the background.
<num-persistant> integer default=0
The number of applications that may remain in memory (but not running) between channel changes. Some applications may require the ability to remain loaded on the receiver even if the application is not running.
<memory> integer default=0
The amount of memory (in megabytes) guaranteed to be available to a downloaded application. Some applications will have minimum memory requirements for execution (heap).
<storage> integer default=0
The amount of persistant data storage (in megabytes) guaranteed to be available to a downloaded application. Some applications will have minimum non-resident memory requirements (such as a hard disk drive) for temporally storing data.

4. External Interfaces

The <external-interfaces> section refers to the ability for broadcast applications to access or be accessed by external devices through physical interfaces. This often is reflected in the availability of APIs, media types, and event types.

<digital-baseband>
Specifies whether a digital baseband interface is required.
<input> boolean default=false
Specifies whether a digital baseband interface into the receiver is required. This might be needed by an object which references this physical interface.
<output> boolean default=false
Specifies whether a digital baseband interface out of the receiver is required. This might be affect the availability of an API.
<pod> boolean default=false
Specifies whether a "point of deployment" module (POD) is required. The POD is related to conditional access and security. This might affect the ability to tune the receiver or the availability of an API.
<return-channel>
Specifies whether a return channel is required. This can affect the availability of APIs and hyperlinks.
<full-time> boolean default=false
Specifies whether a full-time return channel is required (such as a cable modem).
<on-demand> boolean default=false
Specifies whether an on-demand return channel is required (such as a standard telephone line).
<batch> boolean default=false
Specifies whether return channel is required, but access can be delayed (such as scheduled connection).
<bandwidth> integer default=9600
Specifies the minimal bandwidth required for the return channel.
<downstream-channel>
Specifies whether a downstream channel (from the server to the client) is required. This might used when streaming media is embedded in a document.
<bandwidth> integer default=9600
Specifies the minimal bandwidth required for the downstream channel.
<input-devices>
Specifies what types of input devices are required.
<pointing> { none | discrete | point } default=discrete
Specifies what type of pointing device is required.
none
No pointing device is required.
discrete
The pointing device can navigate to discrete locations on the screen. Examples include up/down/left/right an tab-forward/tab-back.
point
The pointing device is free to navigate to any point on the screen. Examples of this include a mouse.
<alphanumeric> boolean default=true
Specifies whether alphanumeric entry is required.
<doubleclick> boolean default=false
Specifies whether support for double click events are required.
<eia-775>
Specifies whether an EIA-775 compliant interface is required. EIA-775 specifies a video and OSD digital interface between two consumer electronics devices.
<source> boolean default=false
Specifies whether the receiver must be able to act as the source component on the EIA-775 interface. This might affect the availability of certain APIs.
<sink> boolean default=false
Specifies whether the receiver must be able to act as the client component on the EIA-775 interface. This might affect the ability to embed object elements refering to a device across the EIA-775 interface.

5. Video

The <video> section refers to the ability of the receiver to render video content. In a typical set-top box, the video processing is separate from the graphics processing.

<multi-decode> integer default=1
Specifies the number of video components that can simultaneously decode and render.
<scaling> { none | fixed | aspect | free } default=none
Specifies whether there is a requirement for scaling video.
none
Specifies that there is no requirement for scaling of the video.
fixed
Specifies that there is a requirement that video can be scaled to some fixed sizes. These fixed sizes are probably agreed upon in the television specification and may need to be made explicit; perhaps through the <layout> section.
aspect
Specifies that there is a requirement for video to scale freely, but the aspect ratio must be retained.
free
Specifies that there is a requirement for video to scale freely without consideration of maintaining the aspect ratio.
<positioning> { none | fixed | free } default=none
Specifies whether there is a requirement for positioning video.
none
Specifies that there is no requirement for positioning the video.
fixed
Specifies that there is a requirement that the video can be positioned at some fixed locations. These fixed locations are probably agreed upong in the television specification and may need to be made explicit; perhaps through the <layout> section.
free
Specifies that there is a requirement to freely position the video.
<layout> { none | "name" } default=none
Specifies whether there is a requirement for some predefined layouts of the video.
none
There are no requirements for predefined layout.
"name"
The name of the predefined layout.

6. Graphics

The <graphics> section refers to the ability of the receiver to render graphical content. In a typical set-top box, the video processing is separate from the graphics processing.

<osd-res>
The requirements for the on-screen display (OSD) resolution (horizontal x vertical pixel count).
<horiz> integer default=640
The required minimum horizontal pixel count.
<vert> integer default=480
The required minimum vertical pixel count.
<aspect> boolean default=true
Specifies whether the aspect ratio (horiz x vert) must be maintained.
<color-depth> integer default="16"
Specifies the required color-depth.
<alpha-channel> integer default=0
Specifies the number of bits of the alpha channel.

7. Decoders

The <decoders> section refers to the ability of the receiver to decode media types.

<video-atsc> boolean default=true
Specifies whether an ATSC-compliant video decoder is required.
<img-png>
Specifies whether a Portable Network Graphics (PNG) decoder is required.
<grayscale> boolean default="true"
Specifies whether the optional grayscale format of PNG is required.
<indexed> boolean default="true"
Specifies whether the optional indexed format of PNG is required.
<truecolor> boolean default="true"
Specifies whether the optional truecolor format of PNG is required.
<pixel-depth> integer default="4"
Specifies the required PNG pixel depth.
<background-color> boolean default=true
Specifies whether the optional background color feature of PNG is required.
<alpha-channel> boolean default=false
Specifies whether the optional alpha channel feature of PNG is required.
<progressive-coding> boolean default=true
Specifies whether the optional progressing encoding feature of PNG is required.
<non-progressive-coding> boolean default=true
Specifies whether the optional non-progressive encoding feature of PNG is required.
<text> boolean default=true
Specifies whether the optional text feature of PNG is required.
<non-square-pixels> boolean default=false
Specifies whether the optional non-square pixels feature of PNG is required.
<gamma-correction> boolean default=false
Specifies whether the optional gamma-correction feature of PNG is required.
<chroma-correction> boolean default=false
Specifies whether the optional chroma-correction feature of PNG is required.
<img-jpeg>
Specifies whether ISO/IEC 10918-1 JPEG Profile support is required.
<text/html>
Specifies whether support for the Internet Media Type "text/html" is required.
<html>
Specifies the required level of support for the HTML language.
<version> { none | 3.2 | 4.0 | 4.1 } default=none
Specifies which version of HTML is required.
<dtd> { frameset | transitional | strict } default=frameset
Specifies which document type support is required.
<xhtml>
Specifies the required level of support for the XHTML language.
<version> { 1 } default=1
Specifies which version of XHTML is required.
<applet> boolean default=false
Specifies whether the XHTML applet module is required.
<base> boolean default=false
Specifies whether the XHTML base module is required.
<bdo> boolean default=false
Specifies whether the XHTML bdo module is required.
<editing> boolean default=false
Specifies whether the XHTML editing module is required.
<forms-basic> boolean default=false
Specifies whether the XHTML basic forms module is required.
<forms> boolean default=false
Specifies whether the XHTML forms module is required.
<frame> boolean default=false
Specifies whether the XHTML frames module is required.
<hypertext> boolean default=false
Specifies whether the XHTML hypertext module is required.
<image> boolean default=false
Specifies whether the XHTML image module is required.
<image-map> boolean default=false
Specifies whether the XHTML image map module is required.
<intrinsic-events> boolean default=false
Specifies whether the XHTML intrinsic events module is required.
<link> boolean default=false
Specifies whether the XHTML linking module is required.
<list> boolean default=false
Specifies whether the XHTML list module is required.
<metainformation> boolean default=false
Specifies whether the XHTML metainformation module is required.
<object> boolean default=false
Specifies whether the XHTML object module is required.
<presentation> boolean default=false
Specifies whether the XHTML presentation module is required.
<scripting> boolean default=false
Specifies whether the XTHML scripting module is required.
<structure> boolean default=false
Specifies whether the XHTML structure module is required.
<stylesheet> boolean default=false
Specifies whether the XHTML stylesheet module is required.
<tables-basic> boolean default=false
Specifies whether the XHTML basic tables module is required.
<tables> boolean default=false
Specifies whether the XHTML tables module is required.
<text> boolean default=false
Specifies whether the XHTML text module is required.
<atsc-conditional-content> boolean default=false
Specifies whether the ATSC conditional content module is required.
<atsc-event> boolean default=false
Specifies whether the ATSC event module is required.
<text/css>
Specifies whether support for W3C Cascading Style Sheet (CSS) language is required.
<css-1> boolean default=true
Specifies whether CSS Level 1 support is required.
<css-2>
Specifies whether CSS Level 2 support is required.
<aural> boolean default=false
Specifies whether the aural properties of CSS Level 2 are required.
<visual> boolean default=true
Specifies whether the visual properties of CSS Level 2 are required.
<paged> booleand default=true
Specifies whether the paged media properties of CSS Level 2 are required.
<font-name-matching> boolean default=true
Specifies whether the CSS Level 2 font name matching method for font selection is required.
<intelligent-font-matching> boolean default=false
Specifies whether the CSS Level 2 intelligent font matching method for font selection is required.
<font-downloading> boolean default=false
Specifies whether the CSS Level 2 font downloading method for font selection is required.
<font-synthesis> boolean default=false
Specifies whether the CSS Level 2 font synthesis method for font selection is required.
<atsc-navigation> boolean default=false
Specifies whether support for the ATSC navigation properties are required.
<atsc-synchronization> boolean default=false
Specifies whether support for the ATSC synchronization properties are required.
<text/plain> boolean default=true
Specifies whether support for plain ASCII text is required.

8. Fonts

The <fonts> section refers to the ability of the receiver to support fonts.

<font-set>
Specifies a required font set.

9. Native Applications

The <native-apps> section refers the applications embedded in the receiver. The <decoder> section could be considered as a subset of the <native-apps> section, but native applications are typically software and decoders may be implemented in hardware or software.

<pe>
Specifies whether the presentation engine is required.
<level> { none | base | main | high } default=none
Specifies which level of functionality for the presentation engine is required.
<version> integer default=1
Specifies the version of the presentation engine (for a given level).
<later-ok> boolean default=true
Specifies whether later versions of the presentation engine are acceptable.
<dase-api>
Specifies whether the Java APIs are required.
<level> { none | base | main | high } default=none
Specifies what level of functionality for the Java APIs is required.
<version> integer default=1
Specifies which version of the APIs is required.
<later-ok> boolean default=true
Specifies whether later versions of the APIs are acceptable.

A. Glossary

API
Applications Programming Interface. APIs are software interfaces made available to programs on the receiver.
OSD
On-Screen Display. The OSD is the graphics "surface" of the receiver. Prior to output to the display, the OSD is overlayed on the video. Overlaying the graphics and the video is often called composition or compositing.
POD
Point of Deployment. The POD module is a device used for conditional access and security.

B. Minimum Profile (full definition)

An example of a document profile for a "minimum profile" digital television receiver:

<document-profile>
  <tuners>
    <num-required>1</num-required>
  </tuners>
  <applications>
    <per-channel>1</per-channel>
    <num-active>1</num-active>
    <num-osd>1</num-osd>
    <num-bkgnd>0</num-bkgnd>
    <num-persistant>0<num-persistant>
    <memory>1</memory>
    <storage>0</storage>
  </applications>
  <external-interfaces>
    <digital-baseband>
      <input>false</input>
      <output>false</output>
    </digital-baseband>
    <pod>false</pod>
    <return-channel>
      <full-time>false</full-time>
      <on-demand>false</on-demand>
      <batch>false</batch>
      <bandwidth>14400</bandwidth>
    </return-channel>
    <downstream-channel>
      <bandwidth>14400</bandwidth>
    </downstream-channel>
    <input-devices>
      <pointing>discrete</pointing>
      <alphanumeric>false</alphanumeric>
      <doubleclick>false<doubleclick>
    </input-devices>
    <eia-775>
      <source>true</source>
      <sink>false</sink>
    </eia-775>
  </external-interfaces>
  <video>
    <multi-decode>0</multi-decode>
    <scaling>fixed</scaling>
    <positioning>fixed</positioning>
    <layout>fullscreen</layout>
    <layout>pip</layout>
  </video>
  <graphics>
    <osd-res>
      <horiz>640</horiz>
      <vert>480</vert>
      <aspect>true</aspect>
    </osd-res>
    <color-depth>4</color-depth>
    <alpha-channel>0</alpha-channel>
  </graphics>
  <decoders>
    <video-atsc />
    <img-png>
      <grayscale>true</grayscale>
      <indexed>true</indexed>
      <truecolor>true</truecolor>
      <pixel-depth>5</pixel-depth>
      <background-color>true</background-color>
      <alpha-channel>false</alpha-channel>
      <progressive-coding>true</progressive-coding>
      <non-progressive-coding>true</non-progressive-coding>
      <text>true</text>
      <non-square-pixels>false</non-square-pixels>
      <gamma-correction>false</gamma-correction>
<chroma-correction>false</chroma-correction> </img-png> <img-jpeg /> <text/html> <xhtml> <version>1.0</version> <applet>false</applet> <base>false</base> <bdo>false</bdo> <editing>false</editing> <forms-basic>true</forms-basic> <forms>false</forms> <frame>true</frame> <hypertext>true</hypertext> <image>true</image> <image-map>true</image-map> <intrinsic-events>false</intrinsic-events> <link>true</link> <list>true</list> <metainformation>false</metainformation> <object>true</object> <presentation>false</presentation> <scripting>true</scripting> <structure>true</structure> <stylesheet>true</stylesheet> <tables-basic>true<tables-basic> <tables>false</tables> <text>true</text> </xhtml> <atsc-conditional-content>true</atsc-conditional-content> <atsc-event>true</atsc-event> </text/html> <text/css> <css-1 /> <css-2> <aural>false</aural> <visual>true</visual> <paged>false</paged> <font-name-matching>true</font-name-matching> <intelligent-font-matching>false</intelligent-font-matching> <font-downloading>true</font-downloading> <font-synthesis>false</font-synthesis> </css-2> <atsc-navigation /> <atsc-synchronization /> </text/css> <text/plain /> </decoders> <fonts> <font-set>atsc-font</font-set> <font-set>atsc-bigfont</font-set> </fonts> <native-apps> <pe> <level>1</level> <version>1.0</verison> <later-ok>true</later-ok> </pe> <dase-api> <level>1</level> <version>1.0</version> <later-ok>true</later-ok> </dase-api> </native-apps> </document-profile>

B. Main Profile (full definition)

An example of a document profile for a "main profile" digital television receiver:
<document-profile>
  <tuners>
    <num-required>1</num-required>
  </tuners>
  <applications>
    <per-channel>4</per-channel>
    <num-active>8</num-active>
    <num-osd>4</num-osd>
    <num-bkgnd>4</num-bkgnd>
    <num-persistant>4<num-persistant>
    <memory>10</memory>
    <storage>1</storage>
  </applications>
  <external-interfaces>
    <digital-baseband>
      <input>false</input>
      <output>true</output>
    </digital-baseband>
    <pod>true</pod>
    <return-channel>
      <full-time>false</full-time>
      <on-demand>true</on-demand>
      <batch>true</batch>
      <bandwidth>14400</bandwidth>
    </return-channel>
    <downstream-channel>
      <bandwidth>14400</bandwidth>
    </downstream-channel>
    <input-devices>
      <pointing>discrete</pointing>
      <alphanumeric>false</alphanumeric>
      <doubleclick>false<doubleclick>
    </input-devices>
    <eia-775>
      <source>true</source>
      <sink>false</sink>
    </eia-775>
  </external-interfaces>
  <video>
    <multi-decode>0</multi-decode>
    <scaling>fixed</scaling>
    <positioning>fixed</positioning>
    <layout>fullscreen</layout>
    <layout>pip</layout>
  </video>
  <graphics>
    <osd-res>
      <horiz>800</horiz>
      <vert>600</vert>
      <aspect>true</aspect>
    </osd-res>
    <color-depth>16</color-depth>
    <alpha-channel>0</alpha-channel>
  </graphics>
  <decoders>
    <video-atsc />
    <img-png>
      <grayscale>true</grayscale>
      <indexed>true</indexed>
      <truecolor>true</truecolor>
      <pixel-depth>5</pixel-depth>
      <background-color>true</background-color>
      <alpha-channel>false</alpha-channel>
      <progressive-coding>true</progressive-coding>
      <non-progressive-coding>true</non-progressive-coding>
      <text>true</text>
      <non-square-pixels>false</non-square-pixels>
      <gamma-correction>false</gamma-correction>
<chroma-correction>false</chroma-correction> </img-png> <img-jpeg /> <text/html> <xhtml> <version>1.0</version> <applet>false</applet> <base>false</base> <bdo>false</bdo> <editing>false</editing> <forms-basic>true</forms-basic> <forms>false</forms> <frame>true</frame> <hypertext>true</hypertext> <image>true</image> <image-map>true</image-map> <intrinsic-events>false</intrinsic-events> <link>true</link> <list>true</list> <metainformation>false</metainformation> <object>true</object> <presentation>false</presentation> <scripting>true</scripting> <structure>true</structure> <stylesheet>true</stylesheet> <tables-basic>true<tables-basic> <tables>false</tables> <text>true</text> </xhtml> <atsc-conditional-content>true</atsc-conditional-content> <atsc-event>true</atsc-event> </text/html> <text/css> <css-1 /> <css-2> <aural>false</aural> <visual>true</visual> <paged>false</paged> <font-name-matching>true</font-name-matching> <intelligent-font-matching>false</intelligent-font-matching> <font-downloading>true</font-downloading> <font-synthesis>false</font-synthesis> </css-2> <atsc-navigation /> <atsc-synchronization /> </text/css> <text/plain /> </decoders> <fonts> <font-set>atsc-font</font-set> <font-set>atsc-bigfont</font-set> </fonts> <native-apps> <pe> <level>1</level> <version>1.0</verison> <later-ok>true</later-ok> </pe> <dase-api> <level>1</level> <version>1.0</version> <later-ok>true</later-ok> </dase-api> </native-apps> </document-profile>