libcmml: cmml.dtd

# 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:

    <!--

      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;
      >