\section{cmml.dtd}
The DTD for CMML is quite short and produces flat hierarchies. It follows an intention to create the minimal necessary markup and although tags were copied from HTML, attributes and elements were selected carefully. The inclusion of further tags is possible, but only when there is a proven need for it. Incompatible changes will result in a change of the major version number of CMML, while compatible changes, such as optional extensions, only change the minor version number.

To get a better understanding of the components in libcmml it is recommended to read the DTD:



\begin{DocInclude}\begin{verbatim}<!--

  Continuous Media Markup Language CMML version 2.1 DTD
  Authoring language for ANNODEX(TM) media.

  Namespace = http://www.annodex.net/cmml

  Copyright (c) 2001- 
  Commonwealth Scientific and Industrial Research Organisation
  (CSIRO), Australia.
  All Rights Reserved. 

  This DTD module is identified by the PUBLIC and SYSTEM identifiers:

  PUBLIC "-//CSIRO//DTD CMML 2.1//EN"
  SYSTEM "http://www.annodex.net/DTD/cmml_2_1.dtd"

  $Revision: 2.1 $
  $Date: 2006/03/04 24:00:00 $
-->

<!-- **************************** -->
<!-- Definition of Imported Names -->
<!-- **************************** -->

<!-- media type, as per [RFC2045] -->
<!ENTITY % ContentType "CDATA">
 
<!-- space-separated list of link types -->
<!ENTITY % LinkTypes "CDATA">

<!-- single or comma-separated list of media descriptors -->
<!ENTITY % MediaDesc "CDATA">

<!-- used for titles etc. -->
<!ENTITY % Text "CDATA">

<!-- a Uniform Resource Identifier, see [RFC2396] -->
<!ENTITY % URI "CDATA">

<!-- a language code, as per [RFC1766] -->
<!ENTITY % LanguageCode "NMTOKEN">

<!-- timestamps similar to [RFC2326] 
 "smpte-24:" SMPTE time with a 24 fps basis
 "smpte-24-drop:" SMPTE time with a 24/1.001 fps basis
 "smpte-25:" SMPTE time with a 25 fps basis
 "smpte-30:" SMPTE time with a 30 fps basis
 "smpte-30-drop:" SMPTE time with a 30/1.001 fps basis
 "smpte-50:" SMPTE time with a 50 fps basis
 "smpte-60:" SMPTE time with a 60 fps basis
 "smpte-60-drop:" SMPTE time with a 60/1.001 fps basis
 "npt:" npt-time
 "clock:" utc-time

 Playbacktime is specified as a smpte-time 
 or npt-time only.

 UTCtime is specified as in [RFC2326], but
 without the "clock" identifier
-->
<!ENTITY % Timestamp    "CDATA">
<!ENTITY % Playbacktime "CDATA">
<!ENTITY % UTCtime      "CDATA">


<!-- ******************************** -->
<!-- Definition of Generic Attributes -->
<!-- ******************************** -->

<!-- core attributes common to most displayable elements
  id       document-wide unique id
  class    space separated list of classes
  title    advisory title/amplification
-->
<!ENTITY % coreattrs
 "id          ID                #IMPLIED
  class       CDATA             #IMPLIED
  title       %Text;            #IMPLIED"
  >

<!-- internationalization attributes
  xml:lang    language code (as per XML 1.0 spec)
  dir         direction for weak/neutral text
-->
<!ENTITY % i18n
 "lang        %LanguageCode; #IMPLIED
  dir         (ltr|rtl)      #IMPLIED"
  >

<!ENTITY % attrs "%coreattrs; %i18n;">


<!-- **************************** -->
<!-- Document Structure           -->
<!-- **************************** -->

<!-- ROOT ELEMENT: -->
<!-- cmml tag containing sequence of head and a tags -->
<!-- =============================================== -->
<!-- i18n  = the default language for the whole document including
             the id tag of the cmml element -->
<!-- xmlns = namespace of the cmml tags -->
<!-- granulerate = the base temporal resolution to be used for the
                   cmml bitstream -->
<!ELEMENT cmml (stream?, head, clip*)>
<!ATTLIST cmml
  %i18n;
  id          ID             #IMPLIED
  xmlns       %URI;          #FIXED 'http://www.annodex.net/cmml'
  granulerate CDATA          #IMPLIED
  >


<!-- **************************** -->
<!-- Definition of stream element -->
<!-- **************************** -->

<!-- STREAM tag providing timing information for the ANNODEX file -->
<!-- (will be stored in the binary headers of the ANX bitstreams) -->
<!-- ============================================================ -->
<!-- (has no text attributes and thus no i18n; id tag follows default 
      language specified in cmml tag) -->
<!-- basetime  = base time associated with the first frame of the
                 media document from which subsequent time references
                 (such as in clip tags) will be taken relative to -->
<!-- timebase  = same as basetime; kept for backwards compatibility;
                 deprecated and will not be used in versions>=3.0 -->
<!-- utc       = a mapping of the first frame to clock time; 
                 specifications of utc time offsets into the document
                 as in a URI will be taken relative to this -->
<!ELEMENT stream (import*)>
<!ATTLIST stream
  id          ID             #IMPLIED
  basetime    %Playbacktime; "0"
  timebase    %Playbacktime; "0"
  utc         %UTCtime;      #IMPLIED
  >

<!-- IMPORT tag giving descriptions on an input bitstream
     (empty content)                                              -->
<!-- ============================================================ -->
<!-- i18n        = the language of the import tag's and the contained
                   param tags' attribute values -->
<!-- title       = human readable comment on the import bitstream -->
<!-- granulerate = the base temporal resolution of the bitstream
                   (e.g. its framerate for video or samplerate for
                   audio) -->
<!-- contenttype = encoding format of the input document (a MIME type
                   and a character encoding separated by semicolon)
                   -->
<!-- src         = URI to the media document -->
<!-- start       = the start time of the media bitstream specified
                   in src -->
<!-- end         = the end time of the media bitstream specified
                   in src -->
<!ELEMENT import (param*)>
<!ATTLIST import 
  %i18n;
  id          ID             #IMPLIED
  title       %Text;         #IMPLIED
  granulerate CDATA          #IMPLIED
  contenttype %ContentType;  #IMPLIED
  src         %URI;          #REQUIRED
  start       %Timestamp;    "0"
  end         %Timestamp;    #IMPLIED
  >

<!-- PARAM description tags of an input bitstream (empty content) -->
<!-- (name-value pairs e.g. comments on recording quality or so)  -->
<!-- ============================================================ -->
<!-- (internationalisation inherited from the parent import tag)  -->
<!-- name  = identifies a property name; does not list legal values
             for this attribute --> 
<!-- value = specifies a property's value; does not list legal values
             for this attribute -->
<!ELEMENT param EMPTY>
<!ATTLIST param
  id          ID             #IMPLIED
  name        CDATA          #REQUIRED
  value       CDATA          #REQUIRED
  >


<!-- **************************** -->
<!-- Definition of document head  -->
<!-- **************************** -->

<!-- head tag containing description of a specific media stream -->
<!-- ========================================================== -->
<!-- i18n    = the base language of the head's attribute values
               and text content -->
<!-- profile = space-separated list of URIs to locate meta tag
               schemes -->

<!-- content model is %head.misc; combined with a single
     title and an optional base element in any order -->
<!ENTITY % head.misc "(meta|link)*">
<!ELEMENT head (%head.misc;,
                ((title, %head.misc;, (base, %head.misc;)?) |
                 (base, %head.misc;, (title, %head.misc;))))>
<!ATTLIST head
  %i18n;
  id          ID             #IMPLIED
  profile     %URI;          #IMPLIED
  >

<!-- TITLE tag giving descriptive title of the media document  -->
<!-- ========================================================= -->
<!-- i18n  = the language of the title text -->
<!ELEMENT title (#PCDATA)>
<!ATTLIST title 
  %i18n;
  id          ID             #IMPLIED
  >


<!-- BASE URI of the document (empty content) --> 
<!-- ======================================== -->
<!-- (internationalisation inherited from the parent head tag) -->
<!-- href = URI associated with the document; all relative URI
            references get interpreted relative to this base -->
<!ELEMENT base EMPTY>
<!ATTLIST base
  id          ID             #IMPLIED
  href        %URI;          #REQUIRED
  >

<!-- META description tags of the document (empty content) -->
<!-- ===================================================== -->
<!-- i18n    = the language of the meta attributes -->
<!-- name    = identifies a property name; does not list legal
               values for this attribute --> 
<!-- content = specifies a property's value; does not list legal
               values for this attribute -->
<!-- scheme  = names a scheme to be used to interpret the property's
               value (see the profiles tag in the head element for
               locating these) -->
<!ELEMENT meta EMPTY>
<!ATTLIST meta
  %i18n;
  id          ID             #IMPLIED
  name        NMTOKEN        #IMPLIED
  content     CDATA          #REQUIRED
  scheme      CDATA          #IMPLIED
  >

<!-- LINK tag to specify relationship values (empty content) --> 
<!-- ======================================================= -->
<!-- Relationship values can be used in principle:
     a) for document specific toolbars/menus when used
        with the link element in document head e.g.
        start, contents, previous, next, index, end, help
     b) to link to a separate style sheet (rel="stylesheet")
     As charsets are given in the xml directive of cmml documents,
     this attribute of html is not required for cmml.
  -->
<!-- attrs = the language of the title text; a short description of
             the relationship through title, and the stylesheet class
             -->
<!-- href  = reference to a related document -->
<!-- type  = type of the document referenced, e.g. "text/css" -->
<!-- rel   = type of relationship to forward linked document -->
<!-- rev   = type of relationship to reverse linked document -->
<!-- media = type or medium/media to be rendered on, default "screen"
             -->

<!ELEMENT link EMPTY>
<!ATTLIST link
  %attrs;
  href        %URI;          #IMPLIED
  type        %ContentType;  #IMPLIED
  rel         %LinkTypes;    #IMPLIED
  rev         %LinkTypes;    #IMPLIED
  media       %MediaDesc;    #IMPLIED
  >


<!-- ************************** -->
<!-- Definition of clip tags    -->
<!-- ************************** -->

<!-- Clip tag containing information for a specific fragment -->
<!-- ======================================================= -->
<!-- through meta, a, img and desc are given in specific order
     here, their order is acutally random -->
<!-- attrs    = the base language of the clip's attribute values and 
                of its content elements; a short title representing
                the anchor (e.g. in tooltips) -->
<!-- track    = defines different sets of clip tags; clip tags of
                same type cannot overlap temporally -->
<!-- start    = specifies the start time of the clip; specified in 
               time relative to the basetime of the header 
                [NOT INCLUDED IN ANNODEXED DOCUMENT] -->
<!-- end      = specifies the end time of the clip; specified in 
                time relative to the basetime of the header 
                [NOT INCLUDED IN ANNODEXED DOCUMENT] -->

<!ELEMENT clip (meta*, a?, img?, desc?)>
<!ATTLIST clip
  %attrs;
  track       CDATA          "default"
  start       %Timestamp;    #REQUIRED
  end         %Timestamp;    #IMPLIED
  >

<!-- A tag containing information for a specific clip -->
<!-- ================================================ -->
<!-- a tag contains anchor text being a textual description of the
     link between the current element (the source anchor) and the
     destination anchor given by the href attribute -->
<!-- attrs    = the base language of the clip's attribute values
                and of its content elements; the stylesheet class
                attribute; a short title representing the anchor
                (e.g. in tooltips) -->
<!-- href     = specifies the location of a Web resource, thus
                defining a link between the current element (the
                source anchor) and the destination anchor given by
                this attribute -->
<!ELEMENT a (#PCDATA)>
<!ATTLIST a
  %attrs;
  href        %URI;          #REQUIRED
  >

<!-- IMG tag to include a representative image for the clip -->
<!-- ====================================================== -->
<!-- attrs = the language of the image's attribute values;
             the stylesheet class attribute; a short title
             representing the image (e.g. in tooltips) -->
<!-- src   = reference to the image                          -->
<!-- alt   = alternative text for the image (accessibility)  -->
<!ELEMENT img EMPTY>
<!ATTLIST img
  %attrs;
  src         %URI;          #REQUIRED
  alt         CDATA          #IMPLIED
  >

<!-- DESC human-readable, textual description of the clip
     (annotation)                                            -->
<!-- ======================================================= -->
<!-- attrs    = the base language of the data in the
                description; the class & style attributes;
                a short title representing the desc (e.g. in
                tooltips) -->
<!ELEMENT desc (#PCDATA)>
<!ATTLIST desc
  %attrs;
  >
\end{verbatim}
\end{DocInclude}
 