<rendition>/rend discussion
John A. Walsh

Introduction

A revision of the <rendition> element and the global rend attribute has been discussed for some time within the TEI Council and on the TEI-L email list. The general proposal is to provide in the Guidelines a formal linkage between the rend attribute and the <rendition> elements that appear in the TEI header. Advantages of this approach include:
  • formalizing the explicitly stated relationship between <rendition> and rend.
  • encouraging more accurate and precise definitions of rendition vocabularies for TEI documents.
  • discouraging loose encoding practices which allow, for instance, rend="italic", rend="italics", rend="italicize", etc. all in a single document.
Responses to the proposal from TEI-L indicate a general agreement with the goals of the proposal along with misgivings regarding backwards compatibility and the “breaking” of existing documents. We also saw some valid arguments for keeping the looser rend attribute alongside a new attribute that would point to <rendition> elements in the header. The most convincing argument for providing two attributes (a pointing attribute and an inline style attribute) is that there are many instances in which one encounters a “one-off” style that does not merit the overhead of its own formal definition in a <rendition> element.

Revised description of <rendition>

<rendition> supplies detailed information about the rendition of one or more elements in the source document. The details about rendition may be described using a formal language, such as Cascading Style Sheets (CSS) or Extensible Stylesheet Language Formatting Objects (XSL-FO); in an original formal language developed for a specific project; or informally in running prose. Although languages such as CSS and XSL-FO are generally used to describe document output to screen or print, they nonetheless provide formal and precise mechanisms for describing the appearance of many source documents, especially print documents, but also many aspects of manuscript documents. For example, both CSS and XSL-FO provide mechanisms for describing font families, weight, and styles; character and line spacing; and so on. To describe the rendition of any given element in the text, the global rendition element points to one or more <rendition> elements.
While the rendition attribute must point to a <rendition> element in the current document or an external document, the related global rend attribute may also be used to describe the rendition of an element in the text. Again, a formal language, like CSS or XSL-FO may be used, or running prose or a locally developed formal vocabulary may be used to describe the rendition of the element.
The combination of the global rendition and rend attributes provide a robust system for describing rendition information for source documents. rendition is analogous to the X/HTML class attribute, which references style declaration in a Cascading Style Sheet. The global rend attribute is analogous to the X/HTML style attribute, which provides a mechanism for embedding inline style/rendition information in a TEI document. However, in all cases, the TEI rendition and rend attributes describe the rendition of the source document, not intended output renditions.
While in most cases, one will want to fully describe a rendition style in a <rendition> element, pointed to by a rendition attribute in the text, the rend attribute may be useful to override or augment default rendition styles

Proposed changes to <rendition>

An attribute that indicates the formal language used to describe the rendition style should be added to <rendition>. Some possible names for this attribute might be: type or scheme. Thus, a series of rendition styles described in <rendition> elements may appear as follows:
<!-- font-style -->
<rendition n="italics" xml:id="i" scheme="css">font-style: italic;</rendition>
<rendition n="normal" xml:id="n" scheme="css">font-style: normal;</rendition>
<!-- font-variant -->
<rendition n="small caps" xml:id="sc" scheme="css">font-variant: small-caps;</rendition>
<!-- font-weight -->
<rendition n="bold" xml:id="b" scheme="css">font-weight: bold;</rendition>
<!-- text-decoration -->
<rendition n="strike through" xml:id="strike" scheme="css">text-decoration: line-through;</rendition>
<rendition n="underline" xml:id="u" scheme="css">text-decoration: underline;</rendition>                   
                        
                    
And elements referencing these styles would appear as follows:

<l n="1"><hi rendition="#sc">These</hi> many years since we began to be,</l>
                        

Conclusion

While some on Council suggested deprecating the existing use of rend in favor of a new attribute that points to <rendition> elements, I believe there is a convincing argument for keeping the current looser system alongside the more rigorous and formal method proposed here. I believe the two approaches can be usefully combined in a manner analogous to the X/HTML class/style system. And I recommend we introduce the new system while maintaining the existing P4 global rend attribute.