<!-- Comics Markup Language -->
<!-- VERSION 0.2 -->
<!--
$Id: comics_ml.dtd.html,v 1.1.1.1 2002/03/12 03:01:45 jmac Exp $
-->
<!-- TODO
What to do about noises characters make? Grumbling, stuttering, spoken sound effects, etc.
Investigate Dublin Core namespace to use for all the authorship information.
-->
<!-- Central elements of this DTD:
comic - The concept of a comic, rather than the actual, readable
comics themselves. This holds all the meta-information about a
particular group of comics, and holds zero or more strip elements.
strip - One instance of the actual comic. Could be each episode in a
serial adventure, each strip in a newspaper-style gag strip, and so
on. A strip contains one or more panels.
panel - One image in a strip element. This is where the actual content
lives.
-->
<!-- Meta information about the comic in general --> <!ELEMENT comic
(title, person+, last-built, icon?, description?, url?, strip*)>
<!ATTLIST comic version CDATA #REQUIRED
xml:lang CDATA #IMPLIED>
<!ELEMENT title (#PCDATA)>
<!-- Stuff about a person involved in making the comic -->
<!ELEMENT person (firstname?, surname, email?, url?, job?)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!-- person's homepage -->
<!ELEMENT url (#PCDATA)>
<!-- person's relationship to comic (writer, artist, caterer, etc.) -->
<!ELEMENT job (#PCDATA)>
<!-- timestamp of most recent strip -->
<!ELEMENT last-built (#PCDATA)>
<!-- comic's distributable logo (such as an ad banner) -->
<!ELEMENT icon (#PCDATA)>
<!-- description about this comic -->
<!ELEMENT description (#PCDATA)>
<!-- An instance of a comic -->
<!-- The optional 'person' element can be used to list people who
worked on this particular strip, but aren't in the regular credits -->
<!-- The 'url' element can point to where the strip exists in full -->
<!ELEMENT strip (date, title?, person*, url?, teaser?, panels?)>
<!-- Each strip must have a unique serial number -->
<!ATTLIST strip id ID #REQUIRED
xml:lang CDATA #IMPLIED>
<!ELEMENT date (#PCDATA)>
<!ELEMENT panels (panel+)>
<!-- An image within a strip -->
<!-- The 'url' element points to where this panel is available -->
<!ELEMENT panel (url?, caption?, panel-desc*)>
<!ATTLIST panel xml:lang CDATA #IMPLIED>
<!-- Caption for a panel -->
<!ELEMENT caption (#PCDATA)>
<!-- The teaser briefly describes what happens in this strip, and may
be useful in synidcation -->
<!ELEMENT teaser (description?, panels?)>
<!-- Panel description elements -->
<!-- Some inlines for simple text markup -->
<!ENTITY % inlines 'emphasis | strong | soft'>
<!--
'emphasis' - Ordinary spoken emphasis, which many comics make explicit
by emboldening the appropriate words.
'strong' - As above, but extra-strong emphasis, outside of normal
conversational tones.
'soft' - Speech that is distant or otherwise softer than normal
conversation, usually depicted as smaller lettering.
-->
<!ELEMENT emphasis (#PCDATA)>
<!ELEMENT strong (#PCDATA)>
<!ELEMENT soft (#PCDATA)>
<!-- More inlines for 'vocal effects', things characters can 'say' that aren't actually speech. -->
<!ENTITY % vocal-effects 'interro | bang | interrobang | silence'>
<!--
'interro' - '?'
'bang' - '!'
'interrobang' - '?!' or something similar
'silence' - An empty balloon, or '...' by itself; the character is
emoting a palpable pause.
Note that these may be combined with other markup to adjust their
"volume". A character who is really surprised and says "!!!" might say
"<strong><bang/></strong> in ComicsML.
-->
<!ELEMENT interro EMPTY>
<!ELEMENT bang EMPTY>
<!ELEMENT interrobang EMPTY>
<!ELEMENT silence EMPTY>
<!-- Text -->
<!ELEMENT panel-desc (narration | thought | speech | action)*>
<!ATTLIST panel-desc xml:lang CDATA #IMPLIED>
<!--
narration - Narrative text not spoken by any character.
thought - Unspoken character thoughts, usually shown in a puffy
thought bubble.
speech - Character speech, as depicted in word balloons, which can
come in a variety of shapes; see the 'tone' attribute.
action - A description of what is visually happening in this panel.
-->
<!ELEMENT narration (#PCDATA | %inlines; | %vocal-effects;)*>
<!ELEMENT action (#PCDATA | %inlines;)*>
<!-- Multiple characters can share a speech or thought bubble. -->
<!ELEMENT thought (character+, text)>
<!ELEMENT speech (character+, text)>
<!-- Speech bubbles come in many tones, which comics usually represent
through different bubble shapes. (The descriptions below are based on
Western comics tradition; comics in other cultures may use different
shapes, but the varieties of content, which is what the attribute
actually expresses, remains the same, since they all represent
universal human speaking styles. Aint XML cool?)
normal - Speech that would go in an ordinary, round word balloon. This
is the default attribute value.
shout - Louder-than-normal speech, as represented by a spiky-bordered
balloon.
whisper - Whispered speech, often drawn in a balloon with a
broken-line border.
cold - A knife-edged utterance from a likely angry character, as found
within a balloon with icicle outlines hanging from it.
wobbly - Wavering, unsteady speech from an upset character (as during
crying, vomiting, and other speech-hindering acts), usually shown
inside a ballon with liquid, wavy-lined borders.
-->
<!-- The 'target' attribute lists whom this speech is directed at, if
it isn't obvious. Rarely used, but useful if a character, for example,
talks to another character in the room while holding a simultaneous
conversation with someone on a telephone, and all in the same panel. -->
<!ATTLIST speech tone (shout|whisper|cold|wobbly|normal) #IMPLIED
target CDATA #IMPLIED>
<!-- The text of the character's speech -->
<!ELEMENT text (#PCDATA | %inlines; | %vocal-effects;)*>
<!ATTLIST text xml:lang CDATA #IMPLIED>
<!-- The name of the speaking chracater -->
<!ELEMENT character (#PCDATA)>