Encoding Peanuts with TEI/CBML

Rationale

As I’ve told you, my colleagues in ODH have created a corpus of all the Peanuts comics by harvesting data from GoComics.com. The GoComics team has created transcripts of what happens in the comics, which is tremendously helpful. But…it turns out they’re not always exactly correct. Just take a look at Schulz’s comic for 23 January 1952 and GoComics’s corresponding data transcript:

Image of 23 January 1952 Peanuts strip

Schroeder sits at the piano playing. Charlie Brown comes up to him and says, “Say, that’s sensational, Schroeder…what is it?” He looks to the reader confused as Schroeder replies, “Grasse Sonata fur das Hommer-Klavier” As Schroeder resumes his playing, Charlie Brown walks away. The latter says, “Sometimes I feel like I don’t belong around here!”

So it’s close…but it’s maybe not close enough. There’s a lot of information that isn’t captured in this transcript: who the characters are, what music Schroeder is playing, the setting, what happens in which panel, or the McCloudian transitions across the gutters. And that’s just the first five things I thought to type!

We can do better than this! Creating marked-up editions of Peanuts strips will provide us the chance to more accurately represent the strip, as well as enriching it in the specific ways that we care about: themes, gender roles, tagging person or place names, recording weather, and pretty much anything else you can imagine. Creating such editions is time-consuming and requires serious attention to detail. But the opportunities for research that we gain with this process makes it worth the investment. To paraphrase John A. Walsh, encoding Peanuts will “facilitate both close and distant reading strategies”

Nitty Gritty

Each of us will markup one month of strips from each of the volumes we’re reading for class. That’s about 60 strips, when all is said and done. And then you’ll write a reflection on the project…because of course.

Your marked-up strips will be due no later than Monday, 30 March by the beginning of class. Your reflection papers are due on Wednesday, 1 April by the beginning of class.

Get Oxygen

Download Oxygen XML Editor and sign up for a free, 30-day trial. You will receive a license key via email and you will need to use it with your individual copy.

Create the strip file

In Oxygen, open the strip template from our repo and copy all of its text (Ctrl/Cmd-A, then Ctrl/Cmd-C). Then open a new document in Oxygen and paste the template (Ctrl/Cmd-V) into it. Do NOT start editing the template itself.

Name the file as follows: peanuts-[four-digit year]-[two-digit month]-[two-digit day].xml. For example, the frst strip, which is from 2 October 1950 would have the following filename: peanuts_1950_10_02.xml.

Save the file in the encoded-strips folder in your local copy of the GitHub repo.

Encode the strip

Encode the strip as follows. If you run into questions, be sure to refer to our “Peanuts Encoding Editorial Decisions” document.

teiHeader

  • <filedesc>
    • <titleStmt>
      • <title>: Change the title to have the correct date in YYYY-MM-DD format
      • <respStmt><persName>: Change “Your Name” to—surprise!—your name
    • <publicationStmt>
      • <idno>: Set the date to the proper YYYY-MM-DD format. Please make sure you don’t put a space between Peanuts and the year.
    • <sourceDesc>
      • <title level='a'>: Change the date of the strip to the proper date in YYYY-MM-DD format.
      • <title>: Change the title of the book if you are working with a different volume.
      • <date>: Change the publication date if you are working with a different volume. The 1971-1972 volume was published in 2009.
  • <revisionDesc>
    • <change>: for the value of who, use your r-name from the taxonomy. For the value of when, record the date you are doing the edits using YYYY-MM-DD format. Then replace the ? with a description of what you did. Most of the time, “initial markup” will be a perfectly acceptable good description.

facsimile

  • <graphic> update the value of url to the proper date for your comic. Open the URL in a browser to make sure it resolves properly.

Body

Metadata
  • <head>: update the value of when to the proper YYYY-MM-DD format. Then change the date within the element to (D)D [full month name] YYYY format.
  • <div...xml:id>: Change the value of xml:id to match the idno value from the <publicationStmt> from the teiHeader.
Panels

The template has a default of 4 panels. If there are more or less panels, add or subtract <cbml:panel> elements.

Characters
  • <cbml:panel>: For each panel, set the value of characters that appear in that panel to the shortcodes of character names from the taxonomy. Separate multiple character names with a space, e.g. "#c-cb #c-lucy #c-violet".
Speech and Sound
  • <cbml:balloon>: Use this element to transcribe each speech. Change the value of the type attribute to another choice if it’s not a normal speech bubble. Set the value of the who attribute to the appropriate character name from the taxonomy.
  • If there are multiple word balloons in a single panel, add additional <cbml:balloon> elements.
  • If characters are referred by name or by nickname (e.g., “Chuck”) in a speech bubble, wrap the name in a <persName> element and use a ref attribute with the value set to the taxonomy reference; for example, <persName ref="#c-cb">.
  • If characters are referred to in other ways than by a name (most often a pronoun), wrap the referencing word(s) in an <rs> element and use a ref attribute with the value set to the taxonomy reference; for example, <rs ref="#c-cb">.
  • If real people are referred to by name (e.g., Beethoven), tag them using a <persName> element and use a ref attribute with the value set to a URI from an authority file like VIAF. For example, <persName ref="https://viaf.org/viaf/32182557/">Beethoven</persName>. You can often find such URIs at the bottom of a person’s Wikipedia entry.
  • If real places are referred to by name (e.g., New York), tag them using a <placeName> element and use a ref attribute with the value set to a URI from an authority file like GeoNames.
  • <sound>: Use this element to encode sounds that are not in a speech bubble. If there are sounds within a speech bubble (see this example), put a <sound> element within the <cbml:balloon> element.
Transitions
  • <cbml:panel>: For each panel except for the first, set the value of ana to the tr-name from the taxonomy. Do your best to work according to McCloud’s definitions. If you are uncertain about a transition, bring it to class and we will discuss it together.
Notes
  • <note>: Set the value of resp to your r-name from the taxonomy. Within the element, write a brief description of what happens in the panel. See the 1950 and 1982 examples in the test folder within the repo for ideas.
Signature and Date
  • Look for Schulz’s signature and date and move the <docAuthor> and <docDate> elements to the proper panel.
  • <docAuthor>: If Schulz writes his name differently, update it. If he renders it in a different font or style, encode this with <hi rend="[description]">.
  • <docDate>: Record the date as Schulz writes it in this element.
Anything Else

We will collectively decide if there’s anything else we would like to tag in the strips and how we will do this.

Commit and push the strip

After you’ve finished your work on one or more strips, commit and push the changes you have made to the repo using the GitHub Desktop client. You might want to create a different commit for each strip as you work. Before you can push your changes, you might need to fetch origin to get changes that others have made.

Reflect on the Assignment

After you have completed your two months of strips, you will write a three-page reflection on the assignment. Some questions to consider in your reflection are:

  • What did I learn about digital humanities from this assignment?
  • What did I learn about Peanuts from this assignment?
  • What did I learn about research from this assignment?
  • What would I change about this assignment to make it more relevant, informative, enjoyable, challenging, or interesting?

Grading

This assignment is worth 125 points. I will randomly select five of the strips that you marked up. Each of these five strips will be worth up to 20 points distributed as follows:

  • 5 points: I will check the strip to see if it is well-formed (per XML standards) and if it validates (against the TEI schema). Basically, if it gets a green light in Oxygen, you will be good to go.
  • 3 points: I will check to see if your `` contains all the required information.
  • 2 points: Using your URL from the <facsimile>, I will check the encoded strip’s text against the original text to make sure it is all correct.
  • 10 points: I will check the <text> to see if you have correctly tagged speech, sound, character, person, and place names, as well as anything else we determine as a class.

The remaining 25 points for the assignment will be awarded for timeliness and in connection with the reflection paper.

Credits

I designed the first version of this assignment in 2018 after discussions with Elli Mylonas, TEI aficionado and colleague extraordinaire, and I made some important revisions in 2019. It’s been updated considerably this year for our work on Peanuts, drawing particularly on the work of John A. Walsh and his Comic Book Markup Language. Working from Walsh’s article in Digital Humanities Quarterly, Elli created the basic strip template and she helped me refine it further.