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