ComicsML: A Simple Markup Language for Comics
by Jason McIntosh
|
Pages: 1, 2, 3
Examples
I have made a complete and very chatty example ComicsML document that attempts to illustrate a few interesting things about ComicsML. I want to excerpt some of it here for sake of discussion.
Let's start with an actual comic strip (drawn by me in 1999):
I'll mark this one strip up in a very simple fashion, sharing only some metadata about it, without digging very much into its actual content.
<strip id="disbroken-10-2">
<date>2000-01-01</date>
<title>Creation Myths</title>
<url>http://disbroken.jmac.org/archive/?stripno=10</url>
<teaser>
<description>Burt scoffs at Martha's kitchen cosmology.</description>
<panels>
<panel><url>http://www.jmac.org/xml/dcs-xml/panel1.gif</url></panel>
<!-- Actually, I just might want to use a <panel-desc> element
here for accessibility reasons, but I'll skip it for now. -->
</panels>
</teaser>
</strip>
This shows only part of ComicsML, but for most comics, it's probably enough; it could even be autogenerated without much human input. That's why I made so much of ComicsML optional; even if you do only a little extra work, you can still get a lot of its benefits.
That being said, let's now pull out all the stops and revisit this
strip, this time using panel elements to painstakingly
describe each part of the comic:
<strip id="disbroken-10">
<date>2000-01-01</date>
<title>Creation Myths</title>
<panels>
<panel>
<url>http://www.jmac.org/xml/dcs-xml/panel1.gif</url>
<panel-desc>
<action>Martha, holding a knife and a fork, peers at an
empty plate.</action>
<narration>Father Fork and Mother Knife looked down upon
the Plate of the World, and saw that it was
empty.</narration>
</panel-desc>
</panel>
<panel>
<url>http://www.jmac.org/xml/dcs-xml/panel2.gif</url>
<panel-desc>
<action>Martha, smiling serenely, places a slice of
bread upon the plate.</action>
<narration>And so it came to pass that Father Fork said,
"Let us put Bread upon the Plate, and give it Form. And
so they did, and they smiled.</narration>
<narration>But, ah! The Bread lay still on the Plate,
itself empty, without Purpose. So Mother Knife said,
"Let us call upon our Sister, Jar-of-Mayonaise
and--</narration>
</panel-desc>
</panel>
<panel>
<url>http://www.jmac.org/xml/dcs-xml/panel3.gif</url>
<panel-desc>
<action>Burt interrupts Martha, brandishing a sandwich
at her. Martha looks confused.</action>
<speech>
<character>Burt</character>
<text><strong>Pagh!</strong>Again, I have completed
construction of my chicken sandwich in half the time
as you. Your "Kitchen Creation Myths" remain
unconstructive drivel!</text>
</speech>
</panel-desc>
</panel>
<panel>
<url>http://www.jmac.org/xml/dcs-xml/panel4.gif</url>
<panel-desc>
<action>Martha, a wild look in her eye, suddenly
ripostes with her mayonaise-covered butterknife,
disarming Burt, who drops his sandwich.</action>
<speech>
<character>Martha</character>
<text><strong>Oh?</strong>And what do you
tell<emphasis>your</emphasis> lunch, when it
asks?</text>
</speech>
<speech>
<character>Burt</character>
<text><soft>Um...</soft></text>
</speech>
<speech>
<character>Martha</character>
<text><soft>I thought so.</soft></text>
</speech>
</panel-desc>
</panel>
</panels>
</strip>
No matter the level of detail you choose, what you'll end up with after you're done markup up your comic is XML describing a collection of comic panels.
No Layout Here
ComicsML has no concept of layout. It knows that each strip has a bunch of panels in it, but it makes no presumptions about how to present them, beyond the order in which the reader is to see them. If a comic that makes use of ComicsML chooses to add URLs for all its panel images, then an application will not know how to display them without further information from another source, and will instead use its own methods for displaying the panels one after the other.
For the majority of comics, whose panel layout is simply a matter of convenience, this shouldn't pose a hardship. It might become less than ideal for comics that use full-page layouts, where panel positioning can often be an art in itself, and the model might break down for those very rare comics which use panels in ways integral to their very meaning. However, I suspect that most members of the former group could probably survive the application panel-description markup with no pain.
The first draft of the ComicsML DTD actually did have some elements for performing rudimentary layout modeled after HTML's table elements, but I decided to ditch that, preferring to make ComicsML all about content. If you have a different view, please let me know using the form on the last page.