xml2rfc(1)                                                    xml2rfc(1)
                                                       26 September 2024


                  Xml2rfc Vocabulary Version 3 Schema
                         xml2rfc release 3.23.1
                          xml2rfc-docs-3.23.1

Abstract

   This document provides information about the XML schema implemented
   in this release of xml2rfc, and the individual elements of that
   schema.  The document is generated from the RNG schema file that is
   part of the xml2rfc distribution, so schema information in this
   document should always be in sync with the schema in actual use.  The
   textual descriptions depend on manual updates in order to reflect the
   implementation.

Table of Contents

   1.  Introduction
   2.  Schema Version 3 Elements
   3.  Deprecated Elements and Attributes
   4.  References
   Appendix A.  RELAX NG Schema
   Appendix B.  xml2rfc Command-line Options
   Appendix C.  xml2rfc Configuration Files
   Appendix D.  xml2rfc Documentation Template Variables
   Author's Address

1.  Introduction

   Most elements listed in this documentation will have a "Content
   schema" entry.  This shows the permitted content for the element,
   expressed in RelaxNG Compact Notation [RNC].  For relatively trivial
   cases such as the ones in this document, the notation is quite
   straightforward, and resembles simple regular expressions, but with
   element names as atoms, instead of individual characters as atoms.  A
   trailing '*' indicates zero or more instances; '+' indicates one or
   more, '?' indicates zero or one.  '|' separates choices within a
   parenthesized group, and ',' separates entries in a sequence.

   Some attributes which are valid according to the schema are not
   listed in this documentation, mostly because they primarily are used
   by the preptool, and are not useful to document authors.

   Elements and attributes that have been introduced after the
   publication of the original schema version 3 specification,
   [RFC7991], have been marked with '(New)' in this document.

   For an introduction to the v3 schema, with suggestions on how to
   transition from v2, see [INTRO-TO-V3].

   The latest version of this documentation is available in HTML form at
   https://ietf-tools.github.io/xml2rfc/.

   This documentation applies to xml2rfc version 3.23.1.

2.  Schema Version 3 Elements

2.1.  <abstract>

   Contains the Abstract of the document.  See [RFC7322] for more
   information on restrictions for the Abstract.

   This element can be a child element of <front>.

   Content schema:  ( dl | ol | t | ul )+

2.1.1.  "anchor" Attribute

   Document-wide unique identifier for this <abstract> element.

2.2.  <address>

   Provides address information for the author.

   This element can be a child element of <author> and <contact>.

   Content schema:  postal?, phone?, email*, uri?

2.3.  <annotation>

   Provides additional prose augmenting a bibliographic reference.  This
   text is intended to be shown after the rest of the generated
   reference text.

   This element can be a child element of <reference>.

   Content schema:  ( text | bcp14 | cref | em | eref | iref | strong |
      sub | sup | tt | u | xref )*

2.4.  <area>

   Provides information about the IETF area to which this document
   relates (currently not used when generating documents).

   The value ought to be either the full name or the abbreviation of one
   of the IETF areas as listed on http://www.ietf.org/iesg/area.html.  A
   list of full names and abbreviations will be kept by the RFC Series
   Editor.

   This element can be a child element of <front>.

   Content schema:  text

2.5.  <artset> (New)

   This element allows for the support of multiple artwork formats, in
   order to provide suitable artwork for different output formats.

   When multiple <artwork> instances are provided within one <artset>
   element, the renderer will try to pick the <artwork> instance which
   is most appropriate for its current output format from the given
   alternatives.

   If more than one <artwork> element with the same "type" is found
   within an <artset> element, the renderer could select the first one,
   or possibly choose between the alternative instances based on the
   output format and some quality of the alternatives that make one more
   suitable than the others for that particular format, such as size,
   aspect ratio, etc.

   This element can be a child element of <aside>, <blockquote>, <dd>,
   <figure>, <li>, <section>, <td>, and <th>.

   Content schema:  artwork+

2.5.1.  "anchor" Attribute

   Document-wide unique identifier for this <artset> element.

2.6.  <artwork>

   This element allows the inclusion of "artwork" in the document.
   <artwork> provides full control of horizontal whitespace and line
   breaks; thus, it is used for a variety of things, such as diagrams
   ("line art") and protocol unit diagrams.  Tab characters (U+0009)
   inside of this element are prohibited.

   Alternatively, the "src" attribute allows referencing an external
   graphics file, such as a vector drawing in SVG or a bitmap graphic
   file, using a URI.  In this case, the textual content acts as a
   fallback for output representations that do not support graphics;
   thus, it ought to contain either (1) a "line art" variant of the
   graphics or (2) prose that describes the included image in sufficient
   detail.

   In order to include alternative artwork expressions for different
   output formats, you should provide multiple <artwork> elements
   enclosed within an <artset>.  The text renderer will prefer instances
   with type="ascii-art", while the HTML and PDF renderers will prefer
   instances with type="svg".

   In the v1 and v2 iterations of the schema, the <artwork> element was
   also used for source code and formal languages; in v3, this is now
   done with <sourcecode>.

   There are at least five ways to include SVG in artwork in Internet-
   Drafts:

   *  Inline, by including all of the SVG in the content of the element,
      such as:

      <artwork type="svg"><svg xmlns="http://www.w3.org/2000/ svg...">
   *  Inline, but using XInclude (see Appendix B.1), such as:

      <artwork type="svg"><xi:include href=...>
   *  As a data: URI, such as:

      <artwork type="svg"
      src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww...">
   *  As a URI to an external entity, such as:

      <artwork type="svg" src="http://www.example.com/...">
   *  As a local file, such as:

      <artwork type="svg" src="diagram12.svg">

   The use of SVG in Internet-Drafts and RFCs is covered in much more
   detail in [RFC7996].

   The above methods for inclusion of SVG art can also be used for
   including text artwork, but using a data: URI is probably confusing
   for text artwork.

   Formatters that do pagination should attempt to keep artwork on a
   single page.  This is to prevent artwork that is split across pages
   from looking like two separate pieces of artwork.

   See Section 5 for a description of how to deal with issues of using
   "&" and "<" characters in artwork.

   This element can be a child element of <artset>, <aside>,
   <blockquote>, <dd>, <figure>, <li>, <section>, <td>, and <th>.

   Content schema:  ( text* | svg )

2.6.1.  "align" Attribute

   Possible values:  ( "left" | "center" | "right" )
   Default value:  "left"

   Controls whether the artwork appears left justified, centered, or
   right justified.

2.6.2.  "alt" Attribute

   Alternative text description of the artwork (which is more than just
   a summary or caption).  When the art comes from the "src" attribute
   and the format of that artwork supports alternate text, the
   alternative text comes from the text of the artwork itself, not from
   this attribute.  The contents of this attribute are important to
   readers who are visually impaired, as well as those reading on
   devices that cannot show the artwork well, or at all.

2.6.3.  "anchor" Attribute

   Document-wide unique identifier for this <artwork> element.

2.6.4.  "height" Attribute

2.6.5.  "name" Attribute

   A filename suitable for the contents (such as for extraction to a
   local file).  This attribute can be helpful for other kinds of tools
   (such as automated syntax checkers, which work by extracting the
   artwork).  Note that the "name" attribute does not need to be unique
   for <artwork> elements in a document.  If multiple <artwork> elements
   have the same "name" attribute, a processing tool might assume that
   the elements are all fragments of a single file, and the tool can
   collect those fragments for later processing.

2.6.6.  "src" Attribute

   The URI reference of a graphics file [RFC3986], or the name of a file
   on the local disk.  This can be a "data" URI [RFC2397] that contains
   the contents of the graphics file.  Note that the inclusion of art
   with the "src" attribute depends on the capabilities of the
   processing tool reading the XML document.  Tools need to be able to
   handle the file: URI, and they should be able to handle http: and
   https: URIs as well.  The prep tool will be able to handle reading
   the "src" attribute.

   If no URI scheme is given in the attribute, the attribute is
   considered to be a local filename relative to the current directory.
   Processing tools must be careful to not accept dangerous values for
   the filename, particularly those that contain absolute references
   outside the current directory.  Document creators should think hard
   before using relative URIs due to possible later problems if files
   move around on the disk.  Also, documents should most likely use
   explicit URI schemes wherever possible.

   In some cases, the prep tool may remove the "src" attribute after
   processing its value.  See [RFC7998] for a description of this.

2.6.7.  "type" Attribute

   Specifies the format of the artwork.  The value of this attribute is
   free text with certain values designated as preferred.

   The preferred values for <artwork> types are:

   *  ascii-art
   *  binary-art
   *  svg

   Values that don't describe the format, such as "call-flow" or "hex-
   dump" were mentioned in [RFC7991], but are not supported here; they
   are instead candidates for use with another future attribute to
   describe the artwork content.

   The RFC Series Editor will maintain a complete list of the preferred
   values on the RFC Editor web site, and that list is expected to be
   updated over time.  Thus, a consumer of v3 XML should not cause a
   failure when it encounters an unexpected type or no type is
   specified.  The table will also indicate which type of art can appear
   in plain-text output (for example, type="svg" cannot).

2.6.8.  "width" Attribute

2.7.  <aside>

   This element is a container for content that is semantically less
   important or tangential to the content that surrounds it.

   This element can be a child element of <dd> and <section>.

   Content schema:  ( artset | artwork | blockquote | dl | figure |
      iref | ol | t | table | ul )*

2.7.1.  "anchor" Attribute

   Document-wide unique identifier for this <aside> element.

2.8.  <author>

   Provides information about a document's author.  This is used both
   for the document itself (at the beginning of the document) and for
   referenced documents.

   The <author> elements contained within the document's <front> element
   are used to fill the boilerplate and also to generate the "Author's
   Address" section (see [RFC7322]).

   Note that an "author" can also be just an organization (by not
   specifying any of the "name" attributes, but adding the
   <organization> child element).

   Furthermore, the "role" attribute can be used to mark an author as
   "editor".  This is reflected both on the front page and in the
   "Author's Address" section, as well as in bibliographic references.
   Note that this specification does not define a precise meaning for
   the term "editor".

   This element can be a child element of <front> and <section>.

   Content schema:  organization?, address?

2.8.1.  "anchor" Attribute (New)

   Document-wide unique identifier for this <author> element.

2.8.2.  "asciiFullname" Attribute

   The Latin script equivalent of the author's full name.

2.8.3.  "asciiInitials" Attribute

   The Latin script equivalent of the author's initials, to be used in
   conjunction with the separately specified asciiSurname.

2.8.4.  "asciiSurname" Attribute

   The Latin script equivalent of the author's surname, to be used in
   conjunction with the separately specified asciiInitials.

2.8.5.  "fullname" Attribute

   The full name (used in the automatically generated "Author's Address"
   section).  Although this attribute is optional, if one or more of the
   "asciiFullname", "asciiInitials", or "asciiSurname" attributes does
   not have values, the "fullname" attribute is required.

2.8.6.  "initials" Attribute

   An abbreviated variant of the given name(s), to be used in
   conjunction with the separately specified surname.  It usually
   appears on the front page, in footers, and in references.

   Some processors will post-process the value -- for instance, when it
   only contains a single letter (in which case they might add a
   trailing dot).  Relying on this kind of post-processing can lead to
   results varying across formatters and thus ought to be avoided.

2.8.7.  "role" Attribute

   Specifies the role the author had in creating the document.

2.8.8.  "surname" Attribute

   The author's surname, to be used in conjunction with the separately
   specified initials.  It usually appears on the front page, in
   footers, and in references.

2.9.  <back>

   Contains the "back" part of the document: the references and
   appendices.  In <back>, <section> elements indicate appendices.

   This element can be a child element of <rfc>.

   Content schema:  displayreference*, references*, section*

2.10.  <bcp14>

   Marks text that are phrases defined in [BCP14] such as "MUST",
   "SHOULD NOT", and so on.  When shown in some of the output
   representations, the text in this element might be highlighted.  The
   use of this element is optional.

   This element is only to be used around the actual phrase from BCP 14,
   not the full definition of a requirement.  For example, it is correct
   to say "The packet <bcp14>MUST</bcp14> be dropped.", but it is not
   correct to say "<bcp14>The packet MUST be dropped.</bcp14>".

   This element can be a child element of <annotation>, <blockquote>,
   <dd>, <dt>, <em>, <li>, <name>, <refcontent>, <strong>, <sub>, <sup>,
   <t>, <td>, <th>, and <tt>.

   Content schema:  text

2.11.  <blockquote>

   Specifies that a block of text is a quotation.

   This element can be a child element of <aside>, <li>, and <section>.

   Content schema:  ( ( artset | artwork | dl | figure | ol |
      sourcecode | t | ul )+ | ( text | bcp14 | br | cref | em | eref |
      iref | strong | sub | sup | tt | u | xref )+ )

2.11.1.  "anchor" Attribute

   Document-wide unique identifier for this <blockquote> element.

2.11.2.  "cite" Attribute

   The source of the citation.  This must be a URI.  If the "quotedFrom"
   attribute is given, this URI will be used by processing tools as the
   link for the text of that attribute.

2.11.3.  "quotedFrom" Attribute

   Name of person or document the text in this element is quoted from.
   A formatter should render this as visible text at the end of the
   quotation.

2.12.  <boilerplate>

   Holds the boilerplate text for the document.  This element is filled
   in by the prep tool.

   This element contains <section> elements.  Every <section> element in
   this element must have the "numbered" attribute set to "false".

   This element can be a child element of <front>.

   Content schema:  section+

2.13.  <br>

   Inserts a forced break.  Use sparingly.  In most situations, it's
   better to insert U+200B, ZERO WIDTH SPACE, in order to encourage line
   breaking at a point where it would otherwise not occur.

   This element can be a child element of <blockquote>, <cref>, <dd>,
   <dt>, <em>, <li>, <name>, <strong>, <t>, <td>, <th>, <title>, and
   <tt>.

   Content schema:  empty

2.14.  <city>

   Gives the city name in a postal address.

   This element can be a child element of <postal>.

   Content schema:  text

2.14.1.  "ascii" Attribute

   The ASCII equivalent of the <city> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.15.  <cityarea> (New)

   Where postal addresses use city subdivisions, these are mapped to the
   <cityarea> element.  Korean addresses would use this for a city
   district, for instance.  Countries known to use this element are
   Ascension Island, China, Iran, South Korea, and Thailand.

   This element can be a child element of <postal>.

   Content schema:  text

2.15.1.  "ascii" Attribute

   The ASCII equivalent of the <cityarea> content.  This element may
   have non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.16.  <code>

   Gives the postal region code.

   This element can be a child element of <postal>.

   Content schema:  text

2.16.1.  "ascii" Attribute

   The ASCII equivalent of the <code> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.17.  <contact> (New)

   Provides information about contributors.  This element can be used
   inline within a <t>, and will be rendered with name only, similarly
   to how <author> is rendered in a <reference>, or it can be used as a
   direct child of <section>, where it will be rendered the same way as
   an author address block within the "Authors' Addresses" section.

   Note that a "contact" can also be just an organization (by not
   specifying any of the "name" attributes, but adding the
   <organization> child element).

   This element can be a child element of <section> and <t>.

   Content schema:  organization?, address?

2.17.1.  "anchor" Attribute

   Document-wide unique identifier for this <contact> element.

2.17.2.  "asciiFullname" Attribute

   The Latin script equivalent of the contact's full name.

2.17.3.  "asciiInitials" Attribute

   The Latin script equivalent of the contact's initials, to be used in
   conjunction with the separately specified asciiSurname.

2.17.4.  "asciiSurname" Attribute

   The Latin script equivalent of the contact's surname, to be used in
   conjunction with the separately specified asciiInitials.

2.17.5.  "fullname" Attribute

   The full name.  Although this attribute is optional, if one or more
   of the "asciiFullname", "asciiInitials", or "asciiSurname" attributes
   does not have values, the "fullname" attribute is required.

2.17.6.  "initials" Attribute

   An abbreviated variant of the given name(s), to be used in
   conjunction with the separately specified surname.

2.17.7.  "surname" Attribute

   The contact's surname, to be used in conjunction with the separately
   specified initials.

2.18.  <country>

   Specifies the country name in a postal address.  All common and
   official country names should be recognized; in addition two- and
   three-letter country codes according to ISO 3166 are recognized.

   xml2rfc has a help option which will list all names and country codes
   it recognizes as valid country names: xml2rfc --country-help .

   This element can be a child element of <postal>.

   Content schema:  text

2.18.1.  "ascii" Attribute

   The ASCII equivalent of the <country> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.19.  <cref>

   Represents a comment.

   Comments can be used in a document while it is work in progress.
   They might appear either inline and visually highlighted, at the end
   of the document, or not at all, depending on the formatting tool.

   This element can be a child element of <annotation>, <blockquote>,
   <dd>, <dt>, <em>, <li>, <name>, <strong>, <sub>, <sup>, <t>, <td>,
   <th>, <tt>, .

   Content schema:  ( text | br | em | eref | strong | sub | sup | tt |
      xref )*

2.19.1.  "anchor" Attribute

   Document-wide unique identifier for this <cref> element.

2.19.2.  "display" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "true"

   Suggests whether or not the comment should be displayed by formatting
   tools.  This might be set to "false" if you want to keep a comment in
   a document after the contents of the comment have already been dealt
   with.

2.19.3.  "source" Attribute

   Holds the "source" of a comment, such as the name or the initials of
   the person who made the comment.

2.20.  <date>

   Provides information about the publication date.  This element is
   used for two cases: the boilerplate of the document being produced,
   and inside bibliographic references that use the <front> element.

   Bibliographic references:
      (New) In order to be able to specify fuzzy dates, such as
      "2002-2003", "Second quarter 2010", etc., the date element is now
      permitted to have text content in addition to the "year", "month",
      and "day" attributes.  If there is only text content, it will be
      rendered as is.  If there is both text content and date
      components, both will be rendered, with the expanded date
      components in parentheses.

   Boilerplate for Internet-Drafts and RFCs:
      This element defines the date of publication for the current
      document (Internet-Draft or RFC).  When producing Internet-Drafts,
      the prep tool uses this date to compute the expiration date (see
      [IDGUIDE]).  When one or more of "year", "month", or "day" are
      left out, the prep tool will attempt to use the current system
      date if the attributes that are present are consistent with that
      date.

      In dates in <rfc> elements, the month must be a number or a month
      in English.  The prep tool will silently change text month names
      to numbers.  Similarly, the year must be a four-digit number.

      When the prep tool is used to create Internet-Drafts, it will warn
      if the draft has a <date> element in the boilerplate for itself
      that is more than 3 days away from today.  To avoid this problem,
      authors might simply not include a <date> element in the
      boilerplate.

   This element can be a child element of <front>.

   Content schema:  text

2.20.1.  "day" Attribute

   The day of publication.

2.20.2.  "month" Attribute

   The month of publication.

2.20.3.  "year" Attribute

   The year of publication.

2.21.  <dd>

   The definition part of an entry in a definition list.

   This element can be a child element of <dl>.

   Content schema:  ( ( artset | artwork | aside | dl | figure | ol |
      sourcecode | t | table | ul )+ | ( text | bcp14 | br | cref | em |
      eref | iref | strong | sub | sup | tt | u | xref )+ )

2.21.1.  "anchor" Attribute

   Document-wide unique identifier for this <dd> element.

2.22.  <displayreference>

   This element gives a mapping between the anchor of a reference and a
   name that will be displayed instead.  This allows authors to display
   more mnemonic anchor names for automatically included references.
   The mapping in this element only applies to <xref> elements whose
   format is "default".  For example, if the reference uses the anchor
   "RFC6949", the following would cause that anchor in the body of
   displayed documents to be "RFC-dev":

   <displayreference target="RFC6949" to="RFC-dev"/>

   If a reference section is sorted, this element changes the sort
   order.

   This element can be a child element of <back>.

2.22.1.  "target" Attribute (Required)

   This attribute must be the name of an anchor in a <reference> or
   <referencegroup> element.

2.22.2.  "to" Attribute (Required)

   This attribute is a name that will be displayed as the anchor instead
   of the anchor that is given in the <reference> element.  The string
   given must start with one of the following characters: 0-9, a-z, or
   A-Z.  The other characters in the string must be 0-9, a-z, A-Z, "-",
   ".", or "_".

2.23.  <dl>

   A definition list.  Each entry has a pair of elements: a term (<dt>)
   and a definition (<dd>).  (This is slightly different and simpler
   than the model used in HTML, which allows for multiple terms for a
   single definition.)

   This element can be a child element of <abstract>, <aside>,
   <blockquote>, <dd>, <li>, <note>, <section>, <td>, and <th>.

   Content schema:  ( dt, dd )+

2.23.1.  "anchor" Attribute

   Document-wide unique identifier for this <dl> element.

2.23.2.  "indent" Attribute (New)

   Default value:  "3"

   Indicates the indentation to be used for the rendering of the second
   and following lines of the item (the first line starts with the term,
   and is not indented).  The indentation amount is interpreted as
   characters when rendering plain-text documents, and en-space units
   when rendering in formats that have richer typographic support such
   as HTML or PDF.  One en-space is assumed to be the length of 0.5 em-
   space in CSS units.

2.23.3.  "newline" Attribute (New)

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   The "newline" attribute defines whether or not the term appears on
   the same line as the definition.  newline="false" indicates that the
   term is to the left of the definition, while newline="true" indicates
   that the term will be on a separate line.

2.23.4.  "spacing" Attribute

   Possible values:  ( "normal" | "compact" )
   Default value:  "normal"

   Defines whether or not there is a blank line between entries.
   spacing="normal" indicates a single blank line, while
   spacing="compact" indicates no blank line between entries.

2.24.  <dt>

   The term being defined in a definition list.

   This element can be a child element of <dl>.

   Content schema:  ( text | bcp14 | br | cref | em | eref | iref |
      strong | sub | sup | tt | xref )*

2.24.1.  "anchor" Attribute

   Document-wide unique identifier for this <dt> element.

2.25.  <em>

   Indicates text that is semantically emphasized.  In HTML and PDF
   rendering, text enclosed within this element will be displayed as
   italic after processing; in text rendering it will be preceded and
   followed by an underline character.  This element can be combined
   with other character formatting elements, and the formatting will be
   additive.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <li>, <name>, <refcontent>, <strong>, <sub>,
   <sup>, <t>, <td>, <th>, <tt>, and <xref>.

   Content schema:  ( text | bcp14 | br | cref | eref | iref | strong |
      sub | sup | tt | xref )*

2.26.  <email>

   Provides an email address.

   The value is expected to be the addr-spec defined in Section 2 of
   [RFC6068].

   (New) In [RFC7991], only zero or one instance of this element was
   permitted in an address.  In the current schema, now multiple email
   addresses are permitted.

   This element can be a child element of <address>.

   Content schema:  text

2.26.1.  "ascii" Attribute

   The ASCII equivalent of the author's email address.  This is only
   used if the email address has any internationalized components.

2.27.  <eref>

   Represents an "external" link (as specified in the "target"
   attribute).  This is useful for embedding URIs in the body of a
   document.

   If the <eref> element has non-empty text content, the content is used
   as the displayed text that is linked.  Otherwise, the value of the
   "target" attribute is used as the displayed text.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <em>, <li>, <name>, <strong>, <sub>, <sup>, <t>,
   <td>, <th>, <tt>, .

   Content schema:  text

2.27.1.  "brackets" Attribute (New)

   Possible values:  ( "none" | "angle" )
   Default value:  "none"

   Determines the type of brackets that an eref will be rendered with.
   "angle" will render with angle brackets, and "none" will render with
   no brackets in HTML and PDF, and with parentheses by the text
   renderer.

2.27.2.  "target" Attribute (Required)

   URI of the link target [RFC3986].  This must begin with a scheme name
   (such as "https://") and thus not be relative to the URL of the
   current document.

2.28.  <extaddr> (New)

   Extra address information.  This element can be used for address
   parts more specific than a street, for instance apartment numbers,
   suite numbers, building parts, etc.

   This element can be a child element of <postal>.

   Content schema:  text

2.28.1.  "ascii" Attribute

   The ASCII equivalent of the <extaddr> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.29.  <figure>

   Contains a figure with a caption with the figure number.  If the
   element contains a <name> element, the caption will also show that
   name.

   This element can be a child element of <aside>, <blockquote>, <dd>,
   <li>, <section>, <td>, and <th>.

   Content schema:  name?, iref*, ( artset | artwork | sourcecode )+

2.29.1.  "align" Attribute

   Possible values:  ( "left" | "center" | "right" )
   Default value:  "left"

2.29.2.  "alt" Attribute

2.29.3.  "anchor" Attribute

   Document-wide unique identifier for this <figure> element.

2.29.4.  "height" Attribute

2.29.5.  "src" Attribute

2.29.6.  "suppress-title" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

2.29.7.  "title" Attribute

   Deprecated.  Use the <name> element instead.

2.29.8.  "width" Attribute

2.30.  <front>

   Represents the "front matter" metadata (such as author information),
   the Abstract, and additional notes.

   A <front> element may have more than one <seriesInfo> element.  Each
   should contain a "name" attribute with the series name and a "value"
   attribute with the series number; other uses of <front><seriesInfo>
   described in [RFC7991] are deprecated.

   This element can be a child element of <reference> and <rfc>.

   Content schema:  title, seriesInfo*, author+, date?, area*,
      workgroup*, keyword*, abstract?, note*, boilerplate?, toc?

2.31.  <iref>

   Provides terms for the document's index.

   Index entries can be either regular entries (when just the "item"
   attribute is given) or nested entries (by specifying "subitem" as
   well), grouped under a regular entry.

   Index entries generally refer to the exact place where the <iref>
   element occurred.  An exception is the occurrence as a child element
   of <section>, in which case the whole section is considered to be
   relevant for that index entry.  In some formats, index entries of
   this type might be displayed as ranges.

   When the prep tool is creating index content, it collects the items
   in a case-sensitive fashion for both the item and subitem level.

   This element can be a child element of <annotation>, <aside>,
   <blockquote>, <dd>, <dt>, <em>, <figure>, <li>, <name>, <section>,
   <strong>, <sub>, <sup>, <t>, <table>, <td>, <th>, <tt>, .

   Content schema:  empty

2.31.1.  "item" Attribute (Required)

   The item to include.

2.31.2.  "primary" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Setting this to "true" declares the occurrence as "primary", which
   might cause it to be highlighted in the index.  There is no
   restriction on the number of occurrences that can be "primary".

2.31.3.  "subitem" Attribute

   The subitem to include.

2.32.  <keyword>

   Specifies a keyword applicable to the document.

   Note that each element should only contain a single keyword; for
   multiple keywords, the element can simply be repeated.

   Keywords are used both in the RFC Index and in the metadata of
   generated document representations.  They are not reflected in the
   HTML, PDF, or text rendering of the document.

   This element can be a child element of <front>.

   Content schema:  text

2.33.  <li>

   A list element, used in <ol> and <ul>.

   This element can be a child element of <ol> and <ul>.

   Content schema:  ( ( artset | artwork | blockquote | dl | figure |
      ol | sourcecode | t | table | ul )+ | ( text | bcp14 | br | cref |
      em | eref | iref | strong | sub | sup | tt | u | xref )+ )

2.33.1.  "anchor" Attribute

   Document-wide unique identifier for this <li> element.

2.34.  <link>

   A link to an external document that is related to the RFC.

   The following are the supported types of external documents that can
   be pointed to in a <link> element:

   *  The current International Standard Serial Number (ISSN) for the
      RFC Series.  The value for the "rel" attribute is "item".  The
      link should use the form "urn:issn:".
   *  The Digital Object Identifier (DOI) for this document.  The value
      for the "rel" attribute is "describedBy".  The link should use the
      form specified in [RFC7669]; this is expected to change in the
      future.
   *  The Internet-Draft that was submitted to the RFC Editor to become
      the published RFC.  The value for the "rel" attribute is "prev".
      (RFC7998 specified "convertedFrom", but that value is not one of
      the recognised values for the @rel attribute of <link> elements in
      HTML.  The "prev" value has the desired semantics.)  The link
      should be to an IETF-controlled web site that retains copies of
      Internet-Drafts.
   *  A representation of the document offered by the document author.
      The value for the "rel" attribute is "alternate".  The link can be
      to a personally run web site.

   In RFC production mode, the prep tool needs to check the values for
   <link> before an RFC is published.  In draft production mode, the
   prep tool might remove some <link> elements during the draft
   submission process.

   This element can be a child element of <rfc>.

2.34.1.  "href" Attribute (Required)

   The URI of the external document.

2.34.2.  "rel" Attribute

   The relationship of the external document to this one.  The
   relationships are taken from the "Link Relations" registry maintained
   by IANA [LINKRELATIONS].

2.35.  <middle>

   Represents the main content of the document.

   This element can be a child element of <rfc>.

   Content schema:  section+

2.36.  <name>

   The name of the containing (parent) element, for instance the section
   name.  This name can include inline markup (for example, including
   references or making some characters use a fixed-width font).

   This element can be a child element of <figure>, <note>,
   <references>, <section>, <table>, .

   Content schema:  ( text | bcp14 | br | cref | em | eref | iref |
      strong | sub | sup | tt | xref )*

2.37.  <note>

   Creates an unnumbered, titled block of text that appears after the
   Abstract.

   It is usually used for additional information to reviewers (Working
   Group information, mailing list, ...) or for additional publication
   information such as "IESG Notes".

   This element can be a child element of <front>.

   Content schema:  name?, ( dl | ol | t | ul )+

2.37.1.  "removeInRFC" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   If set to "true", this note is marked in the prep tool with text
   indicating that it should be removed before the document is published
   as an RFC.  That text will be "This note is to be removed before
   publishing as an RFC."

2.37.2.  "title" Attribute

   Deprecated.  Use the <name> element instead.

2.38.  <ol>

   An ordered list.  The labels on the items will be either a number or
   a letter, depending on the value of the style attribute.

   This element can be a child element of <abstract>, <aside>,
   <blockquote>, <dd>, <li>, <note>, <section>, <td>, and <th>.

   Content schema:  li+

2.38.1.  "anchor" Attribute

   Document-wide unique identifier for this <ol> element.

2.38.2.  "group" Attribute

   When the prep tool sees an <ol> element with a "group" attribute that
   has already been seen, it continues the numbering of the list from
   where the previous list with the same group name left off.  If an
   <ol> element has both a "group" attribute and a "start" attribute,
   the group's numbering is reset to the given start value.

2.38.3.  "indent" Attribute (New)

   Possible values:  ( text | "adaptive" )
   Default value:  "adaptive"

   The indentation of the list elements relative to the start of the
   list item number.  With indent='adaptive', the width of the widest
   list item number will determine the indentation.  With a numeric
   value, that value will be used to determine the amount of
   indentation.  The indentation amount is interpreted as characters
   when rendering plain-text documents, and en-space units when
   rendering in formats that have richer typographic support such as
   HTML or PDF.  One en-space is assumed to be the length of 0.5 em-
   space in CSS units.  Only non-negative integer amounts of indentation
   are supported.

2.38.4.  "spacing" Attribute

   Possible values:  ( "normal" | "compact" )
   Default value:  "normal"

   Defines whether or not there is a blank line between entries.
   spacing="normal" indicates a single blank line, while
   spacing="compact" indicates no blank line between entries.

2.38.5.  "start" Attribute

   Default value:  "1"

   The ordinal value at which to start the list.  This defaults to "1"
   and must be an integer of value 0 or greater.

2.38.6.  "type" Attribute

   Default value:  "1"

   The type of the labels on list items.  If the length of the type
   value is 1, the meaning is the same as it is for HTML:

   a 
      Lowercase letters (a, b, c, ...)

   A 
      Uppercase letters (A, B, C, ...)

   1 
      Decimal numbers (1, 2, 3, ...)

   i 
      Lowercase Roman numerals (i, ii, iii, ...)

   I 
      Uppercase Roman numerals (I, II, III, ...)

   For types "a" and "A", after the 26th entry, the numbering starts at
   "aa"/"AA", then "ab"/"AB", and so on.

   If the length of the type value is greater than 1, the value must
   contain a percent-encoded indicator and other text.  The value is a
   free-form text that allows counter values to be inserted using a
   "percent-letter" format.  For instance, "[REQ%d]" generates labels of
   the form "[REQ1]", where "%d" inserts the item number as a decimal
   number.

   The following formats are supported:

   %c
      Lowercase letters (a, b, c, ...)

   %C
      Uppercase letters (A, B, C, ...)

   %d
      Decimal numbers (1, 2, 3, ...)

   %i
      Lowercase Roman numerals (i, ii, iii, ...)

   %I
      Uppercase Roman numerals (I, II, III, ...)

   %p
      The list counter of a list item in a parent list (see more below)

   %%
      Represents a percent sign

   Other formats are reserved for future use.  Only one percent encoding
   other than "%%" and "%p" is allowed in a type string.

   It is an error for the type string to be empty.  For bulleted lists,
   use the <ul> element.  For lists that have neither bullets nor
   numbers, use the <ul> element with the 'empty="true"' attribute.

   '%p' may be used in nested ordered lists, where it represents the
   item number of the parent list item.  This lets you say for instance:

   <ol>
     <li>List item one</li>
     <li>
       <t>Nested list:</t>
       <ol type='%p%d'>
         <li>Sublist item 2.1</li>
         <li>Sublist item 2.2</li>
       </ol>
     </li>
   </ol>

   which is rendered as:

   1.  List item one

   2.  Nested list

       2.1  Sublist item 2.1

       2.2  Sublist item 2.2

   Without the '%p' format specifier, you would have to explicitly
   insert the counter number of the parent item, which could easily
   result in mismatched numbering if parent list items were inserted or
   removed during document editing.

2.39.  <organization>

   Specifies the affiliation [RFC7322] of an author.

   This information appears both in the "Author's Address" section and
   on the front page (see [RFC7322] for more information).  If the value
   is long, an abbreviated variant can be specified in the "abbrev"
   attribute.

   This element can be a child element of <author> and <contact>.

   Content schema:  text

2.39.1.  "abbrev" Attribute

   Abbreviated variant of the organization name.

2.39.2.  "ascii" Attribute

   The ASCII equivalent of the <organization> content.  This element may
   have non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.39.3.  "asciiAbbrev" Attribute (New)

   The ASCII equivalent of the abbreviated variant of the organization's
   name.

2.39.4.  "showOnFrontPage" Attribute (New)

   Possible values:  ( "true" | "false" )
   Default value:  "true"

   Turns off listing of organization with author name on the first
   document page.

2.40.  <phone>

   Represents a phone number.

   The value is expected to be the scheme-specific part of a "tel" URI
   (and so does not include the prefix "tel:"), using the "global-
   number-digits" syntax.  See Section 3 of [RFC3966] for details.

   This element can be a child element of <address>.

   Content schema:  text

2.41.  <pobox> (New)

   Represents a post office box number.

   This element can be a child element of <postal>.

   Content schema:  text

2.41.1.  "ascii" Attribute

   The ASCII equivalent of the <pobox> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.42.  <postal>

   Contains optional child elements providing postal information.  These
   elements will be displayed in an order that is specific to
   formatters.  A postal address can contain only a set of <street>,
   <city>, <region>, <code>, and <country> elements, or only an ordered
   set of <postalLine> elements, but not both.

   This element can be a child element of <address>.

   Content schema:  ( ( city | cityarea | code | country | extaddr |
      pobox | region | sortingcode | street )* | postalLine+ )

2.43.  <postalLine>

   Represents one line of a postal address.  When more than one
   <postalLine> is given, the prep tool emits them in the order given.

   This element can be a child element of <postal>.

   Content schema:  text

2.43.1.  "ascii" Attribute

   The ASCII equivalent of the <postalLine> content.  This element may
   have non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.44.  <refcontent>

   Text that should appear between the title and the date of a
   reference.  The purpose of this element is to obviate the need for
   abuse of <seriesInfo> in order to add such text.

   For example:

   <reference anchor="April1"> <front> <title>On Being A Fool</title>
   <author initials="K." surname="Phunny" fullname="Knot Phunny"/> <date
   year="2000" month="April"/> </front> <refcontent>Self-published
   pamphlet</refcontent> </reference>

   would render as:

   [April1] Phunny, K., "On Being A Fool", Self-published pamphlet,
   April 2000.

   This element can be a child element of <reference>.

   Content schema:  ( text | bcp14 | em | strong | sub | sup | tt )*

2.45.  <reference>

   Represents a bibliographic reference.

   This element can be a child element of <referencegroup> and
   <references>.

   Content schema:  stream?, front, ( annotation | refcontent |
      seriesInfo )*

2.45.1.  "anchor" Attribute (Required)

   Document-wide unique identifier for this <reference>.  Usually, this
   will be used both to "label" the reference in the "References"
   section and as an identifier in links to this reference entry; but
   see <displayreference (Section 2.22)> for how to change this.

2.45.2.  "quote-title" Attribute (New)

   Possible values:  ( "true" | "false" )

   Specifies whether or not the title in the reference should be quoted.
   This can be used to prevent quoting, such as on errata.

2.45.3.  "target" Attribute

   Holds the URI for the reference.

2.46.  <referencegroup>

   Represents a list of bibliographic references that will be
   represented as a single reference.  This is most often used to
   reference STDs and BCPs, where a single reference (such as "BCP 9")
   may encompass more than one RFC.

   This element can be a child element of <references>.

   Content schema:  reference+

2.46.1.  "anchor" Attribute (Required)

   Document-wide unique identifier for this <referencegroup>.  Usually,
   this will be used both to "label" the reference group in the
   "References" section and as an identifier in links to this reference
   entry; but see <displayreference (Section 2.22)> for how to change
   this.

2.46.2.  "target" Attribute (New)

   (New) Holds an URI for the reference group, analogous to the "target"
   attribute of <reference>.  Useful for a STD which consists of
   multiple RFCs with their own URLs, but also has its own unique URL.

2.47.  <references>

   Contains a set of bibliographic references.

   In the early days of the RFC Series, there was only one "References"
   section per RFC.  This convention was later changed to group
   references into two sets, "Normative" and "Informative", as described
   in [RFC7322].  This vocabulary supports the split with the <name>
   child element.  In general, the title should be either "Normative
   References" or "Informative References".

   The recommended way to include references to RFCs and Internet-Drafts
   is to use the standard XML XInclude mechanism.  Here is an example:

   <references>
   <name>Normative References</name>
   <!--RTP-->
   <xi:include href=
   "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3550.xml"/>
   <!--SIP-->
   <xi:include href=
   "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3261.xml"/>
   </references>

   This element can be a child element of <back> and <references>.

   Content schema:  name?, ( references+ | ( reference | referencegroup
      )* )

2.47.1.  "anchor" Attribute

   An optional user-supplied identifier for this set of references.

2.47.2.  "title" Attribute

   Deprecated.  Use the <name> element instead.

2.48.  <region>

   Provides the region name in a postal address.

   This element can be a child element of <postal>.

   Content schema:  text

2.48.1.  "ascii" Attribute

   The ASCII equivalent of the <region> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.49.  <rfc>

   This is the root element of the xml2rfc vocabulary.

   Content schema:  link*, front, middle, back?

2.49.1.  "category" Attribute

   Possible values:  ( "std" | "bcp" | "exp" | "info" | "historic" )

   Document category

   For RFCs, the "category" attribute (Section 2.33.1) determines the
   "maturity level" (see Section 4 of [RFC2026]).  The allowed values
   are "std" for "Standards Track", "bcp" for "BCP", "info" for
   "Informational", "exp" for "Experimental", and "historic" for
   "Historic".

   For Internet-Drafts, the "category" attribute is not needed; when
   supplied, it will appear as "Intended Status".  Supplying this
   information can be useful to reviewers.

2.49.2.  "consensus" Attribute

   Possible values:  ( "no" | "yes" | "false" | "true" )
   Default value:  "false"

   Affects the generated boilerplate.  Note that the values of "no" and
   "yes" are deprecated and are replaced by "false" and "true".

   See [RFC7841] for more information.

2.49.3.  "docName" Attribute

   Indicates the draft name (including revision number) for a draft, or
   the draft from which an RFC derived, for an RFC.  Used to insert the
   <link rel="prev" href="..."> element that points to the precursor of
   the RFC, in accordance with the intentions of Section 5.6.3 of
   [RFC7998].

2.49.4.  "indexInclude" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "true"

   Specifies whether or not a formatter is requested to include an index
   in generated files.  If the source file has no <iref> elements, an
   index is never generated.  This option is useful for generating
   documents where the source document has <iref> elements but the
   author no longer wants an index.

2.49.5.  "ipr" Attribute

   Represents the Intellectual Property status of the document.

   If the attribute is set to the empty string: <tt>ipr=''</tt>, it is
   assumed that this is not a regular IETF/IRTF/IAB/ISE document, and
   the document header content is reduced.  This is considered a feature
   by a few other standards organisations that have used xml2rfc to
   format their standards documents.

2.49.6.  "iprExtract" Attribute

   Identifies a single section within the document for which extraction
   "as is" is explicitly allowed (only relevant for historic values of
   the "ipr).

2.49.7.  "number" Attribute

   Used to determine whether to produce an RFC or an Internet-Draft.

2.49.8.  "obsoletes" Attribute

   A comma-separated list of RFC numbers or Internet-Draft names.

   The prep tool will parse the attribute value so that incorrect
   references can be detected.

2.49.9.  "prepTime" Attribute

   The date that the XML was processed by a prep tool.  This is included
   in the XML file just before it is saved to disk.  The value is
   formatted using the "date-time" format defined in Section 5.6 of
   [RFC3339].  The "time-offset" should be "Z".

2.49.10.  "seriesNo" Attribute

   Deprecated; instead, use the "value" in <seriesInfo>.

2.49.11.  "sortRefs" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Specifies whether or not the prep tool will sort the references in
   each reference section.

2.49.12.  "submissionType" Attribute

   Possible values:  ( "IETF" | "IAB" | "IRTF" | "independent" |
      "editorial" )
   Default value:  "IETF"

   The document stream, as described in [RFC7841].  (The RFC Series
   Editor may change the list of allowed values in the future.)

2.49.13.  "symRefs" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "true"

   Specifies whether or not a formatter is requested to use symbolic
   references (such as "RFC2119").  If the value for this is "false",
   the references come out as numbers (such as "[3]").

2.49.14.  "tocDepth" Attribute

   Default value:  "3"

   Specifies the number of levels of headings that a formatter is
   requested to include in the table of contents.

2.49.15.  "tocInclude" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "true"

   Specifies whether or not a formatter is requested to include a table
   of contents in generated files.

2.49.16.  "updates" Attribute

   A comma-separated list of RFC numbers or Internet-Draft names.

   The prep tool will parse the attribute value so that incorrect
   references can be detected.

2.49.17.  "version" Attribute

   Specifies the version of xml2rfc syntax used in this document.  The
   only expected value (for now) is "3".

2.50.  <section>

   Represents a section (when inside a <middle> element) or an appendix
   (when inside a <back> element).

   Subsections are created by nesting <section> elements inside
   <section> elements.  Sections are allowed to be empty.

   This element can be a child element of <back>, <boilerplate>,
   <middle>, <section>, and <toc>.

   Content schema:  name?, ( artset | artwork | aside | author |
      blockquote | contact | dl | figure | iref | ol | sourcecode | t |
      table | ul )*, section*

2.50.1.  "anchor" Attribute

   Document-wide unique identifier for this <section> element.

2.50.2.  "numbered" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "true"

   If set to "false", the formatter is requested to not display a
   section number.  The prep tool will verify that such a section is not
   followed by a numbered section in this part of the document.
   Descendant sections of unnumbered sections are unnumbered by
   definition.  (New) Both top-level <section>s and other <section>s may
   have numbered='false'.

2.50.3.  "removeInRFC" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   If set to "true", this section is marked in the prep tool with text
   indicating that it should be removed before the document is published
   as an RFC.  That text will be "This section is to be removed before
   publishing as an RFC."

2.50.4.  "title" Attribute

   Deprecated.  Use the <name> element instead.

2.50.5.  "toc" Attribute

   Possible values:  ( "include" | "exclude" | "default" )
   Default value:  "default"

   Indicates to a formatter whether or not the section is to be included
   in a table of contents, if such a table of contents is produced.
   This only takes effect if the level of the section would have
   appeared in the table of contents based on the "tocDepth" attribute
   of the <rfc> element, and of course only if the table of contents is
   being created based on the "tocInclude" attribute of the <rfc>
   element.  If this is set to "exclude", any section below this one
   will be excluded as well.  The "default" value indicates inclusion of
   the section if it would be included by the tocDepth attribute of the
   <rfc> element.

2.51.  <seriesInfo>

   Specifies the document series in which this document appears, and
   also specifies an identifier within that series.

   A processing tool determines whether it is working on an RFC or an
   Internet-Draft by inspecting the "name" attribute of a <seriesInfo>
   element inside the <front> element inside the <rfc> element, looking
   for "RFC" or "Internet-Draft".  (Specifying neither value in any of
   the <seriesInfo> elements can be useful for producing other types of
   documents but is out of scope for this specification.)

   It is invalid to have multiple <seriesInfo> elements inside the same
   <front> element containing the same "name" value.  Some combinations
   of <seriesInfo> "name" attribute values make no sense, such as having
   both <seriesInfo name="rfc"/> and <seriesInfo name="Internet-Draft"/>
   in the same <front> element.

   This element can be a child element of <front> and <reference>.

   Content schema:  empty

2.51.1.  "asciiName" Attribute

   The ASCII equivalent of the name field.

2.51.2.  "asciiValue" Attribute

   The ASCII equivalent of the value field.

2.51.3.  "name" Attribute (Required)

   The name of the series.  Some values in use by the IETF community are
   "RFC", "Internet-Draft", and "DOI", but other names such as "ISO",
   "W3C" for exist for other standardisation organisations.

2.51.4.  "status" Attribute

2.51.5.  "stream" Attribute

   Possible values:  ( "IETF" | "IAB" | "IRTF" | "independent" |
      "editorial" )

   Deprecated.  Use the <stream (Section 2.54)> element instead.

2.51.6.  "value" Attribute (Required)

   The identifier within the series specified by the "name" attribute.

   For BCPs, FYIs, RFCs, and STDs, this is the number within the series.

   For Internet-Drafts, it is the full draft name (ending with the two-
   digit version number).

   For DOIs, the value is given, such as "10.17487/rfc1149", as
   described in [RFC7669].

   The name in the value should be the document name without any file
   extension.

2.52.  <sortingcode> (New)

   A sorting code is related to postal codes in that it is used in
   addresses to allow sorting, for example to route mail to a certain
   postal centre or to distinguish streets with the same name in two
   different areas of the same settlement.

   This element can be a child element of <postal>.

   Content schema:  text

2.52.1.  "ascii" Attribute

   The ASCII equivalent of the <sortingcode> content.  This element may
   have non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.53.  <sourcecode>

   This element allows the inclusion of source code into the document.

   When rendered, source code is always shown in a monospace font.  When
   <sourcecode> is a child of <figure> or <section>, it provides full
   control of horizontal whitespace and line breaks.  When formatted, it
   is indented relative to the left margin of the enclosing element.  It
   is thus useful for source code and formal languages (such as ABNF
   [RFC5234] or the RNC notation used in this document).  (When
   <sourcecode> is a child of other elements, it flows with the text
   that surrounds it.)  Tab characters (U+0009) inside of this element
   are prohibited.

   For artwork such as character-based art, diagrams of message layouts,
   and so on, use the <artwork> element instead.

   Output formatters that do pagination will attempt to keep source code
   on a single page.  This is to prevent source code that is split
   across pages from looking like two separate pieces of code.

   This element can be a child element of <blockquote>, <dd>, <figure>,
   <li>, <section>, <td>, and <th>.

   Content schema:  text

2.53.1.  "anchor" Attribute

   Document-wide unique identifier for this <sourcecode> element.

2.53.2.  "markers" Attribute (New)

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Indicates whether "<CODE BEGINS>" and "<CODE ENDS>" markers, as
   introduced by [RFC6087], should be generated when rendering the
   <sourcecode> element.  The alternative is to include these explicitly
   inside the element, but that would necessitate extra code to strip
   these, when extracting code from the XML source.

2.53.3.  "name" Attribute

   A filename suitable for the contents (such as for extraction to a
   local file).  This attribute can be helpful for other kinds of tools
   (such as automated syntax checkers, which work by extracting the
   source code).  Note that the "name" attribute does not need to be
   unique for <sourcecode> elements in a document.  If multiple
   <sourcecode> elements have the same "name" attribute, a formatter
   might assume that the elements are all fragments of a single file,
   and such a formatter can collect those fragments for later
   processing.

2.53.4.  "src" Attribute

   The URI reference of a source file [RFC3986].

   It is an error to have both a "src" attribute and content in the
   <sourcecode> element.

2.53.5.  "type" Attribute

   Specifies the type of the source code.  The value of this attribute
   is free text with certain values designated as preferred.

   Most of the preferred values for <sourcecode> types are language
   names, in a wide sense, such as "abnf", "asn.1", "bash", "c++", etc.

   The RFC Series Editor maintains a list of the preferred values on the
   RFC Editor web site at https://www.rfc-editor.org/materials/
   sourcecode-types.txt, and that list is updated over time.  Thus, a
   consumer of v3 XML should not cause a failure when it encounters an
   unexpected type or no type is specified.

2.54.  <stream> (New)

   Indicates which stream an RFC belongs to.

   This element can be a child element of <reference>.

   Content schema:  ( "IETF" | "IAB" | "IRTF" | "independent" |
      "editorial" )?

2.55.  <street>

   Provides a street address.

   This element can be a child element of <postal>.

   Content schema:  text

2.55.1.  "ascii" Attribute

   The ASCII equivalent of the <street> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.56.  <strong>

   Indicates text that is semantically strong.  In HTML and PDF
   rendering, text enclosed within this element will be displayed as
   bold after processing; in text rendering it will be preceeded and
   followed by an asterisk.  This element can be combined with other
   character formatting elements, and the formatting will be additive.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <em>, <li>, <name>, <refcontent>, <sub>, <sup>,
   <t>, <td>, <th>, <tt>, and <xref>.

   Content schema:  ( text | bcp14 | br | cref | em | eref | iref |
      sub | sup | tt | xref )*

2.57.  <sub>

   Causes the text to be displayed as subscript, approximately half a
   letter-height lower than normal text, in HTML and PDF rendering.
   This element can be combined with other character formatting
   elements, and the formatting will be additive.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <em>, <li>, <name>, <refcontent>, <strong>,
   <sub>, <sup>, <t>, <td>, <th>, <tt>, and <xref>.

   Content schema:  ( text | bcp14 | cref | em | eref | iref | strong |
      sub | sup | tt | xref )*

2.58.  <sup>

   Causes the text to be displayed as superscript, approximately half a
   letter-height higher than normal text, in HTML and PDF rendering.
   This element can be combined with other character formatting
   elements, and the formatting will be additive.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <em>, <li>, <name>, <refcontent>, <strong>,
   <sub>, <sup>, <t>, <td>, <th>, <tt>, and <xref>.

   Content schema:  ( text | bcp14 | cref | em | eref | iref | strong |
      sub | sup | tt | xref )*

2.59.  <t>

   Contains a paragraph of text.

   This element can be a child element of <abstract>, <aside>,
   <blockquote>, <dd>, <li>, <note>, <section>, <td>, and <th>.

   Content schema:  ( text | bcp14 | br | contact | cref | em | eref |
      iref | strong | sub | sup | tt | u | xref )*

2.59.1.  "anchor" Attribute

   Document-wide unique identifier for this paragraph.

2.59.2.  "hangText" Attribute

   Deprecated.  Instead, use <dd> inside of a definition list (<dl>).

2.59.3.  "indent" Attribute (New)

   Default value:  "0"

   Indicates any extra amount of indentation to be used when rendering
   the paragraph of text.  The indentation amount is interpreted as
   characters when rendering plain-text documents, and en-space units
   when rendering in formats that have richer typographic support such
   as HTML or PDF.  One en-space is assumed to be the length of 0.5 em-
   space in CSS units.  Only non-negative integer amounts of indentation
   are supported.

2.59.4.  "keepWithNext" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Acts as a hint to the output formatters that do pagination to do a
   best-effort attempt to keep the paragraph with the next element,
   whatever that happens to be.  For example, for HTML output @media
   print CSS might translate this to page-break-after: avoid.  For PDF,
   the paginator could attempt to keep the paragraph with the next
   element.  Note: this attribute is strictly a hint and not always
   actionable.

2.59.5.  "keepWithPrevious" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Acts as a hint to the output formatters that do pagination to do a
   best-effort attempt to keep the paragraph with the previous element,
   whatever that happens to be.  For example, for HTML output @media
   print CSS might translate this to page-break-before: avoid.  For PDF,
   the paginator could attempt to keep the paragraph with the previous
   element.  Note: this attribute is strictly a hint and not always
   actionable.

2.60.  <table>

   Contains a table with a caption with the table number.  If the
   element contains a <name> element, the caption will also show that
   name.

   Inside the <table> element there is, optionally, a <thead> element to
   contain the rows that will be the table's heading and, optionally, a
   <tfoot> element to contain the rows of the table's footer.  If the
   XML is converted to a representation that has page breaks (such as
   PDFs or printed HTML), the header and footer are meant to appear on
   each page.

   This element can be a child element of <aside>, <dd>, <li>, and
   <section>.

   Content schema:  name?, iref*, thead?, tbody+, tfoot?

2.60.1.  "align" Attribute (New)

   Possible values:  ( "left" | "center" | "right" )
   Default value:  "center"

   Controls whether the table appears left justified, centered, or right
   justified.  The caption will be centered under the table, and the
   combined table and caption will be aligned according to the "align"
   attribute.

2.60.2.  "anchor" Attribute

   Document-wide unique identifier for this <table> element.

2.61.  <tbody>

   A container for a set of body rows for a table.

   This element can be a child element of <table>.

   Content schema:  tr+

2.61.1.  "anchor" Attribute

   Document-wide unique identifier for this <tbody> element.

2.62.  <td>

   A cell in a table row.

   This element can be a child element of <tr>.

   Content schema:  ( ( artset | artwork | dl | figure | ol |
      sourcecode | t | ul )+ | ( text | bcp14 | br | cref | em | eref |
      iref | strong | sub | sup | tt | u | xref )* )

2.62.1.  "align" Attribute

   Possible values:  ( "left" | "center" | "right" )
   Default value:  "left"

   Controls whether the content of the cell appears left justified,
   centered, or right justified.  Note that "center" or "right" will
   probably only work well in cells with plain text; any other elements
   might make the contents render badly.

2.62.2.  "anchor" Attribute

   Document-wide unique identifier for this <td> element.

2.62.3.  "colspan" Attribute

   Default value:  "1"

   The number of columns that the cell is to span.  For example, setting
   "colspan='3'" indicates that the cell occupies the same horizontal
   space as three cells of a row without any "colspan" attributes.

2.62.4.  "rowspan" Attribute

   Default value:  "1"

   The number of rows that the cell is to span.  For example, setting
   "rowspan='3'" indicates that the cell occupies the same vertical
   space as three rows.

2.63.  <tfoot>

   A container for a set of footer rows for a table.

   This element can be a child element of <table>.

   Content schema:  tr+

2.63.1.  "anchor" Attribute

   Document-wide unique identifier for this <tfoot> element.

2.64.  <th>

   A cell in a table row.  When rendered, this will normally come out in
   boldface; other than that, there is no difference between this and
   the <td> element.

   This element can be a child element of <tr>.

   Content schema:  ( ( artset | artwork | dl | figure | ol |
      sourcecode | t | ul )+ | ( text | bcp14 | br | cref | em | eref |
      iref | strong | sub | sup | tt | u | xref )* )

2.64.1.  "align" Attribute

   Possible values:  ( "left" | "center" | "right" )
   Default value:  "left"

   Controls whether the content of the cell appears left justified,
   centered, or right justified.  Note that "center" or "right" will
   probably only work well in cells with plain text; any other elements
   might make the contents render badly.

2.64.2.  "anchor" Attribute

   Document-wide unique identifier for this <th> element.

2.64.3.  "colspan" Attribute

   Default value:  "1"

   The number of columns that the cell is to span.  For example, setting
   "colspan='3'" indicates that the cell occupies the same horizontal
   space as three cells of a row without any "colspan" attributes.

2.64.4.  "rowspan" Attribute

   Default value:  "1"

   The number of rows that the cell is to span.  For example, setting
   "rowspan='3'" indicates that the cell occupies the same vertical
   space as three rows.

2.65.  <thead>

   A container for a set of header rows for a table.

   This element can be a child element of <table>.

   Content schema:  tr+

2.65.1.  "anchor" Attribute

   Document-wide unique identifier for this <thead> element.

2.66.  <title>

   Represents the document title.

   When this element appears in the <front> element of the current
   document, the title might also appear in page headers or footers.  If
   it is long (~40 characters), the "abbrev" attribute can be used to
   specify an abbreviated variant.

   This element can be a child element of <front>.

   Content schema:  ( text | br )*

2.66.1.  "abbrev" Attribute

   Specifies an abbreviated variant of the document title.

2.66.2.  "ascii" Attribute

   The ASCII equivalent of the <title> content.  This element may have
   non-ASCII Latin script content without specifying an ASCII
   equivalent, but for other non-ASCII content an ASCII equivalent is
   required.

2.67.  <toc> (New)

   This element contains the Table of Content.  The content of the <toc>
   element is generated by the preptool based on the "tocInclude" and
   "tocDepth" attributes of the <rfc> element.  As a document author,
   you should not use <toc> directly.

   This element can be a child element of <front>.

   Content schema:  section*

2.68.  <tr>

   A row of a table.

   This element can be a child element of <tbody>, <tfoot>, and <thead>.

   Content schema:  ( td | th )+

2.68.1.  "anchor" Attribute

   Document-wide unique identifier for this <tr> element.

2.69.  <tt>

   Causes the text to be displayed in a constant-width font.  This
   element can be combined with other character formatting elements, and
   the formatting will be additive.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <em>, <li>, <name>, <refcontent>, <strong>,
   <sub>, <sup>, <t>, <td>, <th>, and <xref>.

   Content schema:  ( text | bcp14 | br | cref | em | eref | iref |
      strong | sub | sup | xref )*

2.70.  <u> (New)

   In xml2rfc vocabulary version 3, the elements <author>,
   <organisation>, <street>, <city>, <region>, <code>, <country>,
   <postalLine>, <email>, <seriesInfo>, and <title> may contain non-
   ascii characters for the purpose of rendering author names,
   addresses, and reference titles correctly.  They also have an
   additional "ascii" attribute for the purpose of proper rendering in
   ascii-only media.

   In order to insert Unicode characters in any other context, xml2rfc
   vocabulary v3 requires that the Unicode string be enclosed within an
   <u> element.  The element will be expanded inline based on the value
   of a "format" attribute.  This provides a generalised means of
   generating the 6 methods of Unicode renderings listed in [RFC7997],
   Section 3.4, and also several others found in for instance the RFC
   Format Tools example rendering of RFC 7700, at https://rfc-
   format.github.io/draft-iab-rfc-css-bis/sample2-v2.html.

   This element can be a child element of <annotation>, <blockquote>,
   <dd>, <li>, <t>, <td>, and <th>.

   Content schema:  text

2.70.1.  "anchor" Attribute

   Document-wide unique identifier for this <u> element.

2.70.2.  "ascii" Attribute

   The ASCII equivalent of the content, to be used if the "ascii"
   keyword is used in the "format" specification.

2.70.3.  "format" Attribute

   Default value:  "lit-name-num"

   The "format" attribute accepts either a simplified format
   specification, or a full format string with placeholders for the
   various possible Unicode expansions.

   The simplified format consists of dash-separated keywords, where each
   keyword represents a possible expansion of the Unicode character or
   string; use for example "<u "lit-num-name">foo</u>" to expand the
   text to its literal value, code point values, and code point names.

   A combination of up to 3 of the following keywords may be used,
   separated by dashes: "num", "lit", "name", "ascii", "char".  The
   keywords are expanded as follows and combined, with the second and
   third enclosed in parentheses if present:

   ascii
      The value of the 'ascii' attribute on the <u> element

   char
      The literal element text, without quotes

   lit
      The literal element text, enclosed in quotes

   name
      The Unicode name(s) of the element text

   num
      The numeric value(s) of the element text, in U+1234 notation

   In order to ensure that no specification mistakes can result for
   rendering methods that cannot render all Unicode code points, "num"
   MUST always be part of the specified format.

2.70.3.1.  Examples

   Examples:

      format="num-lit":
         Temperature changes in the Temperature Control Protocol are
         indicated by the character U+0394 ("Δ").

      format="num-name":
         Temperature changes in the Temperature Control Protocol are
         indicated by the character U+0394 (GREEK CAPITAL LETTER DELTA).

      format="num-lit-name":
         Temperature changes in the Temperature Control Protocol are
         indicated by the character U+0394 ("Δ", GREEK CAPITAL LETTER
         DELTA).

      format="num-name-lit":
         Temperature changes in the Temperature Control Protocol are
         indicated by the character U+0394 (GREEK CAPITAL LETTER DELTA,
         "Δ").

      format="name-lit-num":
         Temperature changes in the Temperature Control Protocol are
         indicated by the character GREEK CAPITAL LETTER DELTA ("Δ",
         U+0394).

      format="lit-name-num":
         Temperature changes in the Temperature Control Protocol are
         indicated by the character "Δ" (GREEK CAPITAL LETTER DELTA,
         U+0394).

2.70.3.2.  Expansion of <u> multi-codepoint strings

   If the <u> element encloses a sequence of Unicode codepoints, rather
   than a single one, the rendering reflects this.  The element

      <u format="num-lit">ᏚᎢᎵᎬᎢᎬᏒ</u>

   will be expanded to "U+13DA U+13A2 U+13B5 U+13AC U+13A2 U+13AC U+13D2
   ("ᏚᎢᎵᎬᎢᎬᏒ")".

   Unicode characters in document text which are not enclosed in <u>
   will be replaced with a question mark (?) and a warning will be
   issued.

2.70.3.3.  Non-simplified <u> format specifications

   In order to provide for cases where the simplified format above is
   insufficient, without relinquishing the requirement that the number
   of a code point always must be rendered, the "format" attribute can
   also accept a full format string.  This format uses placeholders
   which consist of any of the key words above enclosed in curly braces;
   outside of this, any ascii text is permissible.  For example,

      The <u format="{lit} character ({num})">Δ</u>.

   will be rendered as

      The "Δ" character (U+0394).

   As for the simplified format, "num" MUST always be part of the
   specified format in order to ensure that no specification mistakes
   can result for rendering methods that cannot render all Unicode code
   points,

2.70.3.4.  Split expansion of <u> elements

   There are cases which cannot be handled with either the simplified or
   full <u> format specifications.  One is exemplified in Table 1 of the
   CSS sample document at https://rfc-format.github.io/draft-iab-rfc-
   css-bis/sample2-v2.html#s-3.  Rendering this with <u> elements
   requires that the non-ascii content be rendered in one place (a table
   cell in one column) while the expansion is rendered in another cell
   in a different column.  Provision for this has been made by modifying
   the expansion of <u> when it is referenced by an <xref>.  This table,
   with <u> elements referenced by <xref> instances:

      <table>
        <name>A Sample of Legal Nicknames</name>
        <thead>
          <tr>
             <th>#</th>
             <th>Nickname</th>
             <th>Output for comparison</th>
          </tr>
        </thead>
        <tbody>
          <tr>
             <td>1</td>
             <td>&lt;Foo&gt;</td>
             <td>&lt;foo&gt;</td>
          </tr>
          <tr>
             <td>2</td>
             <td>&lt;foo&gt;</td>
             <td>&lt;foo&gt;</td> </tr>
          <tr>
             <td>3</td>
             <td>&lt;Foo Bar&gt;</td>
             <td>&lt;foo bar&gt;</td>
          </tr>
          <tr>
             <td>4</td>
             <td>&lt;foo bar&gt;</td>
             <td>&lt;foo bar&gt;</td>
          </tr>
          <tr>
            <td>5</td>
            <td>
               &lt;
               <u format="name-num" anchor="greek-upper-sigma">Σ</u>
               &gt;
            </td>
            <td> <xref target="greek-upper-sigma" /> </td>
          </tr>
          <tr>
             <td>6</td>
             <td>
                &lt;
                <u format="name-num" anchor="greek-lower-sigma">σ</u>
                &gt;
             </td>
             <td> <xref target="greek-lower-sigma" /> </td>
          </tr>
          <tr>
             <td>7</td>
             <td>
                &lt;
                <u format="name-num" anchor="greek-final-sigma">ς</u>
                &gt;
             </td>
             <td> <xref target="greek-final-sigma" /> </td>
          </tr>
          <tr>
             <td>8</td>
             <td>
                &lt;
                <u format="name-num" anchor="black-chess-king">♚</u>
                &gt;
             </td>
             <td>
                <xref target="black-chess-king" format="default"/>
             </td>
          </tr>
          <tr>
             <td>9</td>
             <td>
                &lt;Richard
                <u format="{char}> ({num})" anchor="richard-iv">Ⅳ</u>
                &gt;
             </td>
             <td>&lt;richard iv&gt;</td>
          </tr>
        </tbody>
      </table>


   comes out as shown below:

       +===+=============+=========================================+
       | # | Nickname    | Output for comparison                   |
       +===+=============+=========================================+
       | 1 | <Foo>       | <foo>                                   |
       +---+-------------+-----------------------------------------+
       | 2 | <foo>       | <foo>                                   |
       +---+-------------+-----------------------------------------+
       | 3 | <Foo Bar>   | <foo bar>                               |
       +---+-------------+-----------------------------------------+
       | 4 | <foo bar>   | <foo bar>                               |
       +---+-------------+-----------------------------------------+
       | 5 | <Σ>         | GREEK CAPITAL LETTER SIGMA (U+03A3)     |
       +---+-------------+-----------------------------------------+
       | 6 | <σ>         | GREEK SMALL LETTER SIGMA (U+03C3)       |
       +---+-------------+-----------------------------------------+
       | 7 | <ς>         | GREEK SMALL LETTER FINAL SIGMA (U+03C2) |
       +---+-------------+-----------------------------------------+
       | 8 | <♚>         | BLACK CHESS KING (U+265A)               |
       +---+-------------+-----------------------------------------+
       | 9 | <Richard Ⅳ> | <richard iv>                            |
       |   | (U+2163)    |                                         |
       +---+-------------+-----------------------------------------+

                    Table 1: A Sample of Legal Nicknames

2.71.  <ul>

   An unordered list.  The labels on the items will be symbols picked by
   the formatter.

   This element can be a child element of <abstract>, <aside>,
   <blockquote>, <dd>, <li>, <note>, <section>, <td>, and <th>.

   Content schema:  li+

2.71.1.  "anchor" Attribute

   Document-wide unique identifier for this <ul> element.

2.71.2.  "bare" Attribute (New)

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Can only be used with empty="true" (see below).  Determines if the
   blank bullet has an horizontal extension or not.  With bare="false",
   the empty list bullet will still occupy the same space as for
   empty="false".  With empty="true", there will be no bullet at all,
   i.e., the list items will have no indentation.

   Example: an unordered list with bare="true" and empty="true":

   One

   Two

2.71.3.  "empty" Attribute

   Possible values:  ( "true" | "false" )
   Default value:  "false"

   Defines whether or not the list item bullets are empty. empty="true"
   indicates that a blank (empty) bullet will be shown.

   Example: an unordered list with bare="false" and empty="false":

   *  One

   *  Two

   Example: an unordered list with bare="false" and empty="true":

      One

      Two

2.71.4.  "indent" Attribute (New)

   Default value:  "3"

   The indentation of the list elements relative to the start of the
   bullet or bullet text.

2.71.5.  "spacing" Attribute

   Possible values:  ( "normal" | "compact" )
   Default value:  "normal"

   Defines whether or not there is a blank line between entries.
   spacing="normal" indicates a single blank line, while
   spacing="compact" indicates no blank line between entries.

2.72.  <uri>

   Contains a web address associated with the author.

   The contents should be a valid URI; this most likely will be an
   "http:" or "https:" URI.

   This element can be a child element of <address>.

   Content schema:  text

2.73.  <workgroup>

   This element is used to specify the Working Group (IETF) or Research
   Group (IRTF) from which the document originates, if any.  The
   recommended format is the official name of the Working Group (with
   some capitalization).

   In Internet-Drafts, this is used in the upper left corner of the
   boilerplate, replacing the "Network Working Group" string.
   Formatting software can append the words "Working Group" or "Research
   Group", depending on the "submissionType" property of the <rfc>
   element (Section 2.48.12).

   This element can be a child element of <front>.

   Content schema:  text

2.74.  <xref>

   A reference to an anchor in this document.  Formatters that have
   links (such as HTML and PDF) are likely to render <xref> elements as
   internal hyperlinks.  This element is useful for referring to
   references in the "References" section, to specific sections of the
   document, to specific figures, and so on.

   If the "section" attribute is present, this represents a link to a
   specific part of a document that appears in a <reference> element.
   Formatters that have links (such as HTML and PDF) render <xref>
   elements with "section" attributes as external hyperlinks to the
   specified part of the reference, creating the link target by
   combining the base URI from the <reference> element with the
   "relative" attribute from this element.  The "target" attribute is
   required, and it must be the anchor of a <reference> element.

   If the reference is not an RFC or Internet-Draft that is in the v3
   format, the element needs to have a "relative" attribute; in this
   case, the value of the "section" attribute is used to render the text
   of the external link.

   If the "section" attribute is present, the rendering will for most
   combinations of the "format" and "sectionFormat" have two links; one
   external link to the specific part of the referenced document, and
   one internal link to the <reference> entry.

   The attribute "format" affect the internal link rendering only, and
   the "sectionFormat" affects the rendering of the external link and
   its textual relationship to the internal link only.

   This element can be a child element of <annotation>, <blockquote>,
   <cref>, <dd>, <dt>, <em>, <li>, <name>, <strong>, <sub>, <sup>, <t>,
   <td>, <th>, <tt>, .

   Content schema:  ( text | em | strong | sub | sup | tt )*

2.74.1.  "format" Attribute

   Possible values:  ( "default" | "title" | "counter" | "none" )
   Default value:  "default"

   This attribute signals to formatters what the desired format of the
   internal link to the relevant <reference> should be.

   "default"
      If the element has no content, the "derivedContent" attribute will
      contain a text fragment that describes the referenced part
      completely, such as "XML" for a target that is a <reference>, or
      "Section 2" or "Table 4" for a target to a non-reference.

   "title"
      If the target is a <reference> element, the "derivedContent"
      attribute will contain the name of the reference, extracted from
      the <title> child of the <front> child of the reference.  Or, if
      the target element has a <name> child element, the
      "derivedContent" attribute will contain the text content of that
      <name> element concatenated with the text content of each
      descendant node of <name> (that is, stripping out all of the XML
      markup, leaving only the text).  Or, if the target element does
      not contain a <name> child element, the "derivedContent" attribute
      will contain the name of the "anchor" attribute of that element
      with no other adornment.

   "counter"
      The "derivedContent" attribute will contain just a counter.  This
      is used for targets that are <section>, <figure>, <table>, or
      items in an ordered list.  Using "format='counter'" where the
      target is any other type of element is an error.

   "none"
      There will be no autogenerated text for the xref.  When this value
      is used, it expected that the <xref> element will have explicit
      text content.

2.74.2.  "relative" Attribute (New)

   Specifies a relative reference from the URI in the target reference.
   This value must include whatever leading character is needed to
   create the relative reference; typically, this is "#" for HTML
   documents.

2.74.3.  "section" Attribute (New)

   Specifies a section of the target reference.  If the reference is not
   an RFC or Internet-Draft in the v3 format, and no "relative"
   attribute has been provided, it is an error.

2.74.4.  "sectionFormat" Attribute (New)

   Possible values:  ( "of" | "comma" | "parens" | "bare" )
   Default value:  "of"

   This attribute is used to signal formatters what the desired format
   of the external reference should be.  Formatters for document types
   that have linking capability should wrap each part of the displayed
   text in hyperlinks.  If there is content in the <xref> element, that
   content will be used when rendering the internal link part of the
   <xref> rendering, but will not affect the external link.

   "of"
      The <xref> element will be displayed as an external link followed
      by an internal link, separated by the work 'of'.  The external
      link will have as its display text the word "Section" followed by
      a space and the contents of the "section" attribute.  This will be
      followed by a space, the word "of", another space, and an internal
      link to the relevant <reference> entry, formatted based on the
      "format" attribute.

   "comma"
      The <xref> element will be displayed as an internal link followed
      by an external link, separated by a comma.  The external link will
      have as its display text the word "Section" followed by a space
      and the contents of the "section" attribute.  The internal link
      will point to the relevant <reference> entry, and will be rendered
      according to the "format" attribute.

   "parens"
      The <xref> element will be displayed as an internal link followed
      by an external link within parentheses.  The external link will
      have as its display text the word "Section" followed by a space
      and the contents of the "section" attribute.  The internal link
      will point to the relevant <reference> entry, and will be rendered
      according to the "format" attribute.

   "bare"
      The <xref> element will be displayed as an external link, possibly
      followed by the same link within parentheses.  The first external
      link will have as its display text only contents of the "section"
      attribute; the second link will be present within parentheses only
      if the <xref> element has any text content, and will then have the
      text content as its display text.

      This value for the "sectionFormat" attribute is useful when it is
      desired to express for instance "Sections 3.2 and 3.3 of
      [RFC7997]".

2.74.5.  "target" Attribute (Required)

   Identifies the document component being referenced.  The value needs
   to match the value of the "anchor" attribute of an element in the
   document; otherwise, it is an error.

3.  Deprecated Elements and Attributes

3.1.  Elements from v2 that have been Deprecated

   The following elements from v2 have been deprecated:

   *  <c>
   *  <facsimile>
   *  <format>
   *  <list>
   *  <postamble>
   *  <preamble>
   *  <relref>
   *  <spanx>
   *  <texttable>
   *  <ttcol>
   *  <vspace>

3.2.  Attributes from v2 that have been Deprecated

   The following attributes from v2 have been deprecated.  Only
   attributes of elements that have not themselves been deprecated are
   listed:

   <artwork>:
      *  "height"
      *  "width"

   <figure>:
      *  "align"
      *  "alt"
      *  "height"
      *  "src"
      *  "suppress-title"
      *  "title"
      *  "width"

   <note>:
      *  "title"

   <references>:
      *  "title"

   <section>:
      *  "title"

   <seriesInfo>:
      *  "status"
      *  "stream"

   <t>:
      *  "hangText"

4.  References

   [BCP14]    Best Current Practice 14,
              <https://www.rfc-editor.org/bcp/bcp14.txt>.
              At the time of writing, this BCP comprises the following:

              Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

              Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [IDGUIDE]  Housley, R., "Guidelines to Authors of Internet-Drafts",
              December 2010,
              <https://www.ietf.org/id-info/guidelines.html>.

   [INTRO-TO-V3]
              Levkowetz, H., "Introduction to xml2rfc Version 3", 20
              February 2019,
              <https://tools.ietf.org/src/xml2rfc/trunk/cli/doc/
              xml2rfc3.html>.

   [LINKRELATIONS]
              IANA, "Link Relations", <https://www.iana.org/assignments/
              link-relations/link-relations.xhtml>.

   [RFC2026]  Bradner, S., "The Internet Standards Process -- Revision
              3", BCP 9, RFC 2026, DOI 10.17487/RFC2026, October 1996,
              <https://www.rfc-editor.org/info/rfc2026>.

   [RFC2397]  Masinter, L., "The "data" URL scheme", RFC 2397,
              DOI 10.17487/RFC2397, August 1998,
              <https://www.rfc-editor.org/info/rfc2397>.

   [RFC3339]  Klyne, G. and C. Newman, "Date and Time on the Internet:
              Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
              <https://www.rfc-editor.org/info/rfc3339>.

   [RFC3966]  Schulzrinne, H., "The tel URI for Telephone Numbers",
              RFC 3966, DOI 10.17487/RFC3966, December 2004,
              <https://www.rfc-editor.org/info/rfc3966>.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, January 2005,
              <https://www.rfc-editor.org/info/rfc3986>.

   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/info/rfc5234>.

   [RFC6068]  Duerst, M., Masinter, L., and J. Zawinski, "The 'mailto'
              URI Scheme", RFC 6068, DOI 10.17487/RFC6068, October 2010,
              <https://www.rfc-editor.org/info/rfc6068>.

   [RFC6087]  Bierman, A., "Guidelines for Authors and Reviewers of YANG
              Data Model Documents", RFC 6087, DOI 10.17487/RFC6087,
              January 2011, <https://www.rfc-editor.org/info/rfc6087>.

   [RFC7322]  Flanagan, H. and S. Ginoza, "RFC Style Guide", RFC 7322,
              DOI 10.17487/RFC7322, September 2014,
              <https://www.rfc-editor.org/info/rfc7322>.

   [RFC7669]  Levine, J., "Assigning Digital Object Identifiers to
              RFCs", RFC 7669, DOI 10.17487/RFC7669, October 2015,
              <https://www.rfc-editor.org/info/rfc7669>.

   [RFC7841]  Halpern, J., Ed., Daigle, L., Ed., and O. Kolkman, Ed.,
              "RFC Streams, Headers, and Boilerplates", RFC 7841,
              DOI 10.17487/RFC7841, May 2016,
              <https://www.rfc-editor.org/info/rfc7841>.

   [RFC7991]  Hoffman, P., "The "xml2rfc" Version 3 Vocabulary",
              RFC 7991, DOI 10.17487/RFC7991, December 2016,
              <https://www.rfc-editor.org/info/rfc7991>.

   [RFC7996]  Brownlee, N., "SVG Drawings for RFCs: SVG 1.2 RFC",
              RFC 7996, DOI 10.17487/RFC7996, December 2016,
              <https://www.rfc-editor.org/info/rfc7996>.

   [RFC7997]  Flanagan, H., Ed., "The Use of Non-ASCII Characters in
              RFCs", RFC 7997, DOI 10.17487/RFC7997, December 2016,
              <https://www.rfc-editor.org/info/rfc7997>.

   [RFC7998]  Hoffman, P. and J. Hildebrand, ""xml2rfc" Version 3
              Preparation Tool Description", RFC 7998,
              DOI 10.17487/RFC7998, December 2016,
              <https://www.rfc-editor.org/info/rfc7998>.

   [RNC]      Clark, J., "RELAX NG Compact Syntax", <https://www.oasis-
              open.org/committees/relax-ng/compact-20021121.html>.

Appendix A.  RELAX NG Schema

   <CODE BEGINS> file "v3.rnc"
   namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"

   # xml2rfc Version 3 grammar

   rfc =
     element rfc {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute number { text }?,
       [ a:defaultValue = "" ] attribute obsoletes { text }?,
       [ a:defaultValue = "" ] attribute updates { text }?,
       attribute category {
         "std" | "bcp" | "exp" | "info" | "historic"
       }?,
       attribute mode { text }?,
       [ a:defaultValue = "false" ]
       attribute consensus { "no" | "yes" | "false" | "true" }?,
       attribute seriesNo { text }?,
       attribute ipr { text }?,
       attribute iprExtract { xsd:IDREF }?,
       [ a:defaultValue = "IETF" ]
       attribute submissionType {
         "IETF" | "IAB" | "IRTF" | "independent" | "editorial"
       }?,
       attribute docName { text }?,
       [ a:defaultValue = "false" ]
       attribute sortRefs { "true" | "false" }?,
       [ a:defaultValue = "true" ]
       attribute symRefs { "true" | "false" }?,
       [ a:defaultValue = "true" ]
       attribute tocInclude { "true" | "false" }?,
       [ a:defaultValue = "3" ] attribute tocDepth { text }?,
       attribute prepTime { text }?,
       [ a:defaultValue = "true" ]
       attribute indexInclude { "true" | "false" }?,
       attribute version { text }?,
       [ a:defaultValue = "Common,Latin" ] attribute scripts { text }?,
       attribute expiresDate { text }?,
       link*,
       front,
       middle,
       back?
     }

   link =
     element link {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute href { text },
       attribute rel { text }?
     }

   front =
     element front {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       title,
       seriesInfo*,
       author+,
       date?,
       area*,
       workgroup*,
       keyword*,
       abstract?,
       note*,
       boilerplate?,
       toc?
     }

   title =
     element title {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute abbrev { text }?,
       attribute ascii { text }?,
       (text | br)*
     }

   author =
     element author {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute initials { text }?,
       attribute asciiInitials { text }?,
       attribute surname { text }?,
       attribute asciiSurname { text }?,
       attribute fullname { text }?,
       attribute role { "editor" }?,
       attribute asciiFullname { text }?,
       organization?,
       address?
     }

   contact =
     element contact {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute initials { text }?,
       attribute asciiInitials { text }?,
       attribute surname { text }?,
       attribute asciiSurname { text }?,
       attribute fullname { text }?,
       attribute asciiFullname { text }?,
       organization?,
       address?
     }

   organization =
     element organization {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute abbrev { text }?,
       attribute ascii { text }?,
       attribute asciiAbbrev { text }?,
       [ a:defaultValue = "true" ]
       attribute showOnFrontPage { "true" | "false" }?,
       text
     }

   address =
     element address {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       postal?,
       phone?,
       facsimile?,
       email*,
       uri?
     }

   postal =
     element postal {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (( city | cityarea | code | country | extaddr | pobox | region
          | sortingcode | street)*
        | postalLine+)
     }

   extaddr =
     element extaddr {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   pobox =
     element pobox {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   street =
     element street {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   cityarea =
     element cityarea {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   city =
     element city {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   region =
     element region {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   code =
     element code {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   sortingcode =
     element sortingcode {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   country =
     element country {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   postalLine =
     element postalLine {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   phone =
     element phone {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   facsimile =
     element facsimile {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   email =
     element email {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute ascii { text }?,
       text
     }

   uri =
     element uri {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   date =
     element date {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute day { text }?,
       attribute month { text }?,
       attribute year { text }?,
       text
     }

   area =
     element area {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   workgroup =
     element workgroup {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   keyword =
     element keyword {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   abstract =
     element abstract {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       (dl | ol | t | ul)+
     }

   note =
     element note {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute title { text }?,
       attribute pn { xsd:ID }?,
       [ a:defaultValue = "false" ]
       attribute removeInRFC { "true" | "false" }?,
       name?,
       (dl | ol | t | ul)+
     }

   boilerplate =
     element boilerplate {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       section+
     }

   toc =
     element toc {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       section*
     }

   middle =
     element middle {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       section+
     }

   section =
     element section {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       attribute title { text }?,
       [ a:defaultValue = "true" ]
       attribute numbered { "true" | "false" }?,
       [ a:defaultValue = "default" ]
       attribute toc { "include" | "exclude" | "default" }?,
       [ a:defaultValue = "false" ]
       attribute removeInRFC { "true" | "false" }?,
       name?,
       (artset
        | artwork
        | aside
        | author
        | blockquote
        | contact
        | dl
        | figure
        | iref
        | ol
        | sourcecode
        | t
        | table
        | texttable
        | ul)*,
       section*
     }

   name =
     element name {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute slugifiedName { xsd:ID }?,
       (text
        | bcp14
        | br
        | cref
        | em
        | eref
        | iref
        | relref
        | strong
        | sub
        | sup
        | tt
        | xref)*
     }

   br =
     element br {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       empty
     }

   t =
     element t {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       attribute hangText { text }?,
       [ a:defaultValue = "0" ]
       attribute indent { text }?,
       [ a:defaultValue = "false" ]
       attribute keepWithNext { "true" | "false" }?,
       [ a:defaultValue = "false" ]
       attribute keepWithPrevious { "true" | "false" }?,
       (text
        | bcp14
        | br
        | contact
        | cref
        | em
        | eref
        | iref
        | \list
        | relref
        | spanx
        | strong
        | sub
        | sup
        | tt
        | u
        | vspace
        | xref)*
     }

   aside =
     element aside {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       (artset
        | artwork
        | blockquote
        | dl
        | figure
        | iref
        | ol
        | t
        | table
        | ul)*

     }

   blockquote =
     element blockquote {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       attribute cite { text }?,
       attribute quotedFrom { text }?,
       ((artset | artwork | dl | figure | ol | sourcecode | t | ul)+
        | (text
           | bcp14
           | br
           | cref
           | em
           | eref
           | iref
           | relref
           | strong
           | sub
           | sup
           | tt
           | u
           | xref)+)
     }

   \list =
     element list {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       [ a:defaultValue = "empty" ] attribute style { text }?,
       attribute hangIndent { text }?,
       attribute counter { text }?,
       attribute pn { xsd:ID }?,
       t+
     }

   ol =
     element ol {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       [ a:defaultValue = "1" ] attribute type { text }?,
       [ a:defaultValue = "1" ] attribute start { text }?,
       attribute group { text }?,
       [ a:defaultValue = "normal" ]
       attribute spacing { "normal" | "compact" }?,
       [ a:defaultValue = "adaptive" ]
       attribute indent { text | "adaptive" }?,
       attribute pn { xsd:ID }?,
       li+
     }

   ul =
     element ul {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       [ a:defaultValue = "normal" ]
       attribute spacing { "normal" | "compact" }?,
       ([ a:defaultValue = "false" ]
        attribute empty { "true" | "false" },
        [ a:defaultValue = "false" ]
        attribute bare { "true" | "false" }?)?,
       [ a:defaultValue = "3" ]
        attribute indent { text }?,
        attribute pn { xsd:ID }?,
       li+
     }

   li =
     element li {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute derivedCounter { text }?,
       attribute pn { xsd:ID }?,
       (( artset
          | artwork
          | blockquote
          | dl
          | figure
          | ol
          | sourcecode
          | t
          | table
          | ul)+
        | (text
           | bcp14
           | br
           | cref
           | em
           | eref
           | iref
           | relref
           | strong
           | sub
           | sup
           | tt
           | u
           | xref)+)
     }

   dl =
     element dl {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       [ a:defaultValue = "normal" ]
       attribute spacing { "normal" | "compact" }?,
       [ a:defaultValue = "false" ]
       attribute newline { "true" | "false" }?,
       [ a:defaultValue = "3" ]
       attribute indent { text }?,
       attribute pn { xsd:ID }?,
       (dt, dd)+
     }

   dt =
     element dt {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       (text
        | bcp14
        | br
        | cref
        | em
        | eref
        | iref
        | relref
        | strong
        | sub
        | sup
        | tt
        | xref)*
     }

   dd =
     element dd {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       (( artset
          | artwork
          | aside
          | dl
          | figure
          | ol
          | sourcecode
          | t
          | table
          | ul)+
        | (text
           | bcp14
           | br
           | cref
           | em
           | eref
           | iref
           | relref
           | strong
           | sub
           | sup
           | tt
           | u
           | xref)+)
     }

   xref =
     element xref {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute target { xsd:IDREF },
       [ a:defaultValue = "false" ]
       attribute pageno { "true" | "false" }?,
       [ a:defaultValue = "default" ]
       attribute format { "default" | "title" | "counter" | "none" }?,
       attribute derivedContent { text }?,
       [ a:defaultValue = "of" ]
       attribute sectionFormat { "of" | "comma" | "parens" | "bare" }?,
       attribute section { text }?,
       attribute relative { text }?,
       attribute derivedLink { text }?,
       (text | em | strong | sub | sup | tt)*
     }

   relref =
     element relref {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute target { xsd:IDREF },
       [ a:defaultValue = "of" ]
       attribute displayFormat { "of" | "comma" | "parens" | "bare" }?,
       attribute derivedContent { text }?,
       attribute section { text },
       attribute relative { text }?,
       attribute derivedLink { text }?,
       text
     }

   eref =
     element eref {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       [ a:defaultValue = "none" ]
       attribute brackets { "none" | "angle" }?,
       attribute target { text },
       text
     }

   iref =
     element iref {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute item { text },
       [ a:defaultValue = "" ] attribute subitem { text }?,
       [ a:defaultValue = "false" ]
       attribute primary { "true" | "false" }?,
       attribute pn { xsd:ID }?,
       empty
     }

   cref =
     element cref {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute source { text }?,
       [ a:defaultValue = "true" ]
       attribute display { "true" | "false" }?,
       (text
        | br
        | em
        | eref
        | relref
        | strong
        | sub
        | sup
        | tt
        | xref)*
     }

   tt =
     element tt {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | br
        | cref
        | em
        | eref
        | iref
        | relref
        | strong
        | sub
        | sup
        | xref)*
     }

   strong =
     element strong {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | br
        | cref
        | em
        | eref
        | iref
        | relref
        | sub
        | sup
        | tt
        | xref)*
     }

   em =
     element em {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | br
        | cref
        | eref
        | iref
        | relref
        | strong
        | sub
        | sup
        | tt
        | xref)*
     }

   sub =
     element sub {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | cref
        | em
        | eref
        | iref
        | relref
        | strong
        | sub
        | sup
        | tt
        | xref)*
     }

   sup =
     element sup {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | cref
        | em
        | eref
        | iref
        | relref
        | strong
        | sub
        | sup
        | tt
        | xref)*
     }

   spanx =
     element spanx {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       [ a:defaultValue = "preserve" ]
       attribute xml:space { "default" | "preserve" }?,
       [ a:defaultValue = "emph" ] attribute style { text }?,
       text
     }

   vspace =
     element vspace {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       [ a:defaultValue = "0" ] attribute blankLines { text }?,
       empty
     }

   figure =
     element figure {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       [ a:defaultValue = "" ] attribute title { text }?,
       [ a:defaultValue = "false" ]
       attribute suppress-title { "true" | "false" }?,
       attribute src { text }?,
       attribute originalSrc { text }?,
       [ a:defaultValue = "left" ]
       attribute align { "left" | "center" | "right" }?,
       [ a:defaultValue = "" ] attribute alt { text }?,
       [ a:defaultValue = "" ] attribute width { text }?,
       [ a:defaultValue = "" ] attribute height { text }?,
       name?,
       iref*,
       preamble?,
       (artset | artwork | sourcecode)+,
       postamble?
     }

   table =
     element table {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       [ a:defaultValue = "center" ]
       attribute align { "left" | "center" | "right" }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       name?,
       iref*,
       thead?,
       tbody+,
       tfoot?
     }

   preamble =
     element preamble {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | cref
        | em
        | eref
        | iref
        | relref
        | spanx
        | strong
        | sub
        | sup
        | tt
        | u
        | xref)*
     }

   artset =
     element artset {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       artwork+
     }


   artwork =
     element artwork {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       attribute xml:space { text }?,
       [ a:defaultValue = "" ] attribute name { text }?,
       [ a:defaultValue = "" ] attribute type { text }?,
       attribute src { text }?,
       [ a:defaultValue = "left" ]
       attribute align { "left" | "center" | "right" }?,
       [ a:defaultValue = "" ] attribute alt { text }?,
       [ a:defaultValue = "" ] attribute width { text }?,
       [ a:defaultValue = "" ] attribute height { text }?,
       attribute originalSrc { text }?,
       (text* | svg)
     }
   include "SVG-1.2-RFC.rnc"

   sourcecode =
     element sourcecode {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       attribute pn { xsd:ID }?,
       [ a:defaultValue = "" ] attribute name { text }?,
       [ a:defaultValue = "" ] attribute type { text }?,
       [ a:defaultValue = "false" ]
       attribute markers { "true" | "false" }?,
       attribute src { text }?,
       attribute originalSrc { text }?,
       text
     }

   thead =
     element thead {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       tr+
     }

   tbody =
     element tbody {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       tr+
     }

   tfoot =
     element tfoot {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       tr+
     }

   tr =
     element tr {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       (td | th)+
     }

   td =
     element td {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       [ a:defaultValue = "1" ] attribute colspan { text }?,
       [ a:defaultValue = "1" ] attribute rowspan { text }?,
       [ a:defaultValue = "left" ]
       attribute align { "left" | "center" | "right" }?,
       ((artset | artwork | dl | figure | ol | sourcecode | t | ul)+
        | (text
           | bcp14
           | br
           | cref
           | em
           | eref
           | iref
           | relref
           | strong
           | sub
           | sup
           | tt
           | u
           | xref)*)
     }

   th =
     element th {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       [ a:defaultValue = "1" ] attribute colspan { text }?,
       [ a:defaultValue = "1" ] attribute rowspan { text }?,
       [ a:defaultValue = "left" ]
       attribute align { "left" | "center" | "right" }?,
       ((artset | artwork | dl | figure | ol | sourcecode | t | ul)+
        | (text
           | bcp14
           | br
           | cref
           | em
           | eref
           | iref
           | relref
           | strong
           | sub
           | sup
           | tt
           | u
           | xref)*)
     }

   postamble =
     element postamble {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text | cref | eref | iref | spanx | xref)*
     }

   texttable =
     element texttable {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID }?,
       [ a:defaultValue = "" ] attribute title { text }?,
       [ a:defaultValue = "false" ]
       attribute suppress-title { "true" | "false" }?,
       [ a:defaultValue = "center" ]
       attribute align { "left" | "center" | "right" }?,
       [ a:defaultValue = "full" ]
       attribute style { "all" | "none" | "headers" | "full" }?,
       name?,
       preamble?,
       ttcol+,
       c*,
       postamble?
     }

   ttcol =
     element ttcol {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute width { text }?,
       [ a:defaultValue = "left" ]
       attribute align { "left" | "center" | "right" }?,
       (cref | eref | iref | xref | text)*
     }

   c =
     element c {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text | cref | eref | iref | spanx | xref)*
     }

   bcp14 =
     element bcp14 {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       text
     }

   back =
     element back {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       displayreference*,
       references*,
       section*
     }

   displayreference =
     element displayreference {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute target { xsd:IDREF },
       attribute to { text }
     }

   references =
     element references {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute pn { xsd:ID }?,
       attribute anchor { xsd:ID }?,
       attribute title { text }?,
       name?,
       (references+ | (reference | referencegroup)*)
     }

   reference =
     element reference {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID },
       attribute derivedAnchor { text }?,
       attribute target { text }?,
       [ a:defaultValue = "true" ]
       attribute quoteTitle { "true" | "false" }?,
       attribute quote-title { "true" | "false" }?,
       stream?,
       front,
       (annotation | format | refcontent | seriesInfo)*
     }

   stream =
     element stream {
       ( "IETF" | "IAB" | "IRTF" | "independent" | "editorial" )?
   }

   referencegroup =
     element referencegroup {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute anchor { xsd:ID },
       attribute derivedAnchor { text }?,
       attribute target { text }?,
       reference+
     }

   seriesInfo =
     element seriesInfo {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute name { text },
       attribute value { text },
       attribute asciiName { text }?,
       attribute asciiValue { text }?,
       attribute status { text }?,
       attribute stream {
         "IETF" | "IAB" | "IRTF" | "independent"  | "editorial"
       }?,
       empty
     }

   format =
     element format {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       attribute target { text }?,
       attribute type { text },
       attribute octets { text }?,
       empty
     }

   annotation =
     element annotation {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text
        | bcp14
        | cref
        | em
        | eref
        | iref
        | relref
        | spanx
        | strong
        | sub
        | sup
        | tt
        | u
        | xref)*
     }

   refcontent =
     element refcontent {
       attribute xml:base { text }?,
       attribute xml:lang { text }?,
       (text | bcp14 | em | strong | sub | sup | tt)*
     }

   u =
     element u {
       attribute anchor { xsd:ID }?,
       attribute ascii { text }?,
       [ a:defaultValue = "lit-name-num" ]
       attribute format { text }?,
       attribute pn { xsd:ID }?,
       text
     }

   start |= rfc
   <CODE ENDS>

Appendix B.  xml2rfc Command-line Options

   The following command-line options are available.  Long options may
   be shortened to the shortest substring that still makes the option
   string unique, when given on the command line.  In config files, the
   full long option string must be used.

B.1.  Positional arguments

   source
      Input XML file to render to one or more of the available formats.

B.2.  Documentation options

   Some options to generate built-in documentation.  The group has 9
   options.

   --help, -h
      Show a help message and exit.

   --docfile
      Generate a documentation XML file ready for formatting.

      The --docfile and --manpage switches takes input from 5 places:

      *  The v3.rng file distributed as part of the xml2rfc package,
         which is also used to validate and process v3 XML input.
      *  A rfc7991.rng file distributed as part of the xml2rfc package,
         which holds the schema defined in [RFC7991].  This is used in
         determining elements and attributes that are new in the current
         v3.rng schema, compared to the RFC7991 schema.
      *  Lists of deprecated elements and attributes, which are part of
         the xml2rfc source.
      *  A YAML file doc.yaml that contains XML snippets with
         descriptions of elements, attributes, attribute values, and
         switches, from the same directory as doc.xml.
      *  An XML template file doc.xml, by default taken from the
         templates directory of the xml2rfc package (but this can be
         changed with the --templates-dir switch).  The 4 preceding
         sources provide content that is used to expand the template
         file when generating the --docfile and --manpage output.

   --manpage
      Show paged text documentation.

      Generates on-the-fly paged text documentation for the v3 schema
      elements and attributes from the v3 RelaxNG schema file which is
      part of the xml2rfc distribution, and YAML and XML files that
      provide the text content and formatting.  See the --docfile switch
      for more details.

   --country-help
      Show the recognized <country> strings.

   --pdf-help
      Show pdf generation requirements.

   --template-dir
      Directory to pull the doc.xml and doc.yaml templates from.  The
      default is the "templates" directory of the xml2rfc package.

      This is used to find the templates used by the --docfile and
      --manpage commands and for legacy .html template and .dtd files.

      A consequence of being able to specify a different template
      directory than the default is that it's possible to use the
      --docfile command to generate additional documentation XML files
      based on the current V3 grammar file.  The default template and
      snippets file does not include documentation for deprecated
      elements and attributes, for instance; but if it is desired to
      generate such documentation from the distributed V3 RelaxNg
      schema, it should be straightforward.  The templating system used
      is Jinja2; the snippets file is YAML with extra support for some
      escape sequences: '\ <' and '\ >'.

   --values
      Show option values and from where they come.

      This shows (in order):

      *  Command line arguments
      *  Config file settings, per config file
      *  Default values
      *  Config file search path

   --version, -V
      Display the version number and exit.

      With the --verbose switch, the versions of the external python
      modules used will also be shown.

   --warn-bare-unicode
      Warn use of bare Unicode in tags where bare use of Unicode should
      be closely inspected.

B.3.  Format selection

   One or more of the following output formats may be specified.  The
   default is --text.  The destination filename will be based on the
   input filename, unless --out=FILE or --basename=BASE is used.  The
   group has 10 options.

   --text
      Outputs formatted text to file, with proper page breaks.

   --html
      Outputs formatted HTML to file.

   --nroff
      Outputs formatted nroff to file (only v2 input).

   --pdf
      Outputs formatted PDF to file.

   --raw
      Outputs formatted text to file, unpaginated (only v2 input).

   --expand
      Outputs XML to file with all references expanded.

   --v2v3
      Convert vocabulary version 2 XML to version 3.

   --preptool
      Run preptool on the input.

   --unprep
      Reduce prepped xml to unprepped.

   --info
      Generate a JSON file with anchor to section lookup information.

B.4.  Generic Switch Options

   --clear-cache, -C
      Purge the cache and exit.

   --debug
      Show debugging output.

   --no-network, -N
      Don't use the network to resolve references.

   --no-org-info, -O
      Don't show author organization info on page one (legacy only).

   --quiet, -q
      Don't print anything while working.

   --skip-config-files
      Ignore config file settings.

      Use this to ignore values in config files, even if there are
      config files in the search path.  Somewhat ironically, this option
      can itself be set in a config file, and cause all other config
      file settings to be ignored.

   --allow-local-file-access
      Allow local file system references.

   --remove-pis, -r
      Remove XML processing instructions.

   --utf8, -u
      Generate utf8 output.

   --verbose, -v
      Print extra information.

B.5.  Generic Options with Values

   --basename, -b = NAME
      Specify the base name for output files.

   --cache, -c = PATH
      Specify a primary cache directory to write to; default: try [
      /var/cache/xml2rfc, ~/.cache/xml2rfc ].

   --config-file = FILE
      Specify a configuration file.

      This argument can be repeated, to read multiple explicitly
      specified config files.  They will be read after any config files
      found in 'standard' locations have been read.  Run xml2rfc
      --values to see the default search path for config files.

   --dtd, -d = DTDFILE
      Specify an alternate dtd file.

      This option can be negated with --no-dtd.

   --date, -D = DATE
      Run as if the date is DATE (format: yyyy-mm-dd).  Default: Today's
      date.

   --filename, -f = FILE
      Deprecated.  The same as -o.

   --indent, -i = INDENT
      With some v3 formatters: Indentation to use when pretty-printing
      XML.

   --out, -o = FILE
      Specify an explicit output filename.

   --path, -p = PATH
      Specify the directory path for output files.

   --silence, -s = STRING
      Silence any warning beginning with the given string.

      Specifies a string prefix or a regular expression to match against
      warning messages.  Any warning message that matches is silenced.
      Example:

      xml2rfc --silence='The document date' draft-foo-bar.xml

      This will not show any message about the document date being too
      far from the current date.  The option can be repeated with
      different prefix strings or regular expressions in order to
      silence multiple warning messages.

      Alternatively, instead of indicating this on the command line, an
      xml2rfc-specific PI (processing instruction) is available for use
      in XML input files.  This will have the same effect as the example
      above, except when processing prepped drafts; running the preptool
      on a file will strip XML PIs before writing the prepped file:

      <?v3xml2rfc silence="The document date" ?>

B.6.  Generic Format Options

   --v3
      With --text and --html: use the v3 formatter, rather than the
      legacy one.

      This is the default.  With both v2 schema and v3 schema XML input
      files, use the v3 output formatters.  Input with deprecated v2
      elements will be converted to v3 on the fly.  This means some loss
      of functionality and exact control of the output, due to the
      intermediary conversion step.

   --v2, --legacy
      With --text and --html: use the legacy output formatters, rather
      than the v3 ones.

      Invokes the legacy (schema v2) validator and output formatters,
      instead of the default schema v3 output formatters.  This can only
      be used with pure v2 input files.

   --id-is-work-in-progress
      In references, refer to Internet-Drafts as "Work in Progress".

B.7.  Text Format Options

   --no-headers
      Calculate page breaks, and emit form feeds and page top spacing,
      but omit headers and footers from the paginated format.

   --legacy-list-symbols
      Use the legacy list bullet symbols, rather than the new ones.

   --legacy-date-format
      Use the legacy date format, rather than the new one.

      This option can be negated with --no-legacy-date-format.

   --list-symbols = 4*CHAR
      Use the characters given as list bullet symbols.

   --BOM, --bom
      Add a BOM (unicode byte order mark) to the start of text files.

   --pagination, --paginate
      Do pagination.

      By default, drafts are paginated, but not RFCs.  Use this switch
      if you want to force pagination of all text output.

      This option can be negated with --no-pagination.

   --table-hyphen-breaks
      More easily do line breaks after hyphens in table cells to give a
      more compact table.

   --table-borders

      Default value: full

      The style of table borders to use for text output; one of
      full/light/minimal.

      Examples (these will only have visible differences in text mode):

      "full":
                               +=====+=====+=====+
                               | A   | B   | C   |
                               +=====+=====+=====+
                               | a   | b   | c   |
                               +-----+-----+-----+
                               | aa  | ba  | ca  |
                               +-----+-----+-----+
                               | ab  | bb  | cb  |
                               +=====+=====+=====+
                               | AA  | BB  | CC  |
                               +=====+=====+=====+
                               | aaa | bba | cca |
                               +-----+-----+-----+
                               | aab | bbb | ccb |
                               +-----+-----+-----+

                                     Table 2

      "light":
                               +-----+-----+-----+
                               | A   | B   | C   |
                               +-----+-----+-----+
                               | a   | b   | c   |
                               | aa  | ba  | ca  |
                               | ab  | bb  | cb  |
                               +-----+-----+-----+
                               | AA  | BB  | CC  |
                               +-----+-----+-----+
                               | aaa | bba | cca |
                               | aab | bbb | ccb |
                               +-----+-----+-----+

                                     Table 3

      "minimal":
                                ----- ----- ----- 
                                 A     B     C    
                                ----- ----- ----- 
                                 a     b     c    
                                 aa    ba    ca   
                                 ab    bb    cb   
                                ----- ----- ----- 
                                 AA    BB    CC   
                                ----- ----- ----- 
                                 aaa   bba   cca  
                                 aab   bbb   ccb  
                                ----- ----- ----- 

                                     Table 4

   --rfc-html-archive-url

      Default value: https://www.rfc-editor.org/rfc/

      URL for HTML file archive of RFCs.

   --id-html-archive-url

      Default value: https://www.ietf.org/archive/id/

      URL for HTML file archive Internet-Drafts.

B.8.  Html Format Options

   --css = FILE
      Use the given CSS file instead of the builtin.

   --external-css
      Place css in external files.

      This option can be negated with --no-external-css.

   --external-js
      Place js in external files.

      This option can be negated with --no-external-js.

   --rfc-base-url

      Default value: https://www.rfc-editor.org/rfc/

      Base URL for RFC links.

   --id-base-url

      Default value: https://datatracker.ietf.org/doc/html/

      Base URL for Internet-Draft links.

   --rfc-reference-base-url

      Default value: https://rfc-editor.org/rfc/

      Base URL for RFC reference targets, replacing the target="..."
      value given in the reference entry.

   --id-reference-base-url

      Default value: https://datatracker.ietf.org/doc/html/

      Base URL for I-D reference targets.

   --metadata-js-url

      Default value: metadata.min.js

      URL for the metadata script.

   --no-rfc-local
      Do not link to rfc-local.css.

B.9.  V2-V3 Converter Options

   --add-xinclude
      Replace reference elements with RFC and Internet-Draft seriesInfo
      with the appropriate XInclude element.

   --draft-revs, --draft-revisions
      Reference explicit draft revisions when inserting XIncludes for
      draft references.

   --strict
      Be strict about stripping some deprecated attributes.

B.10.  Preptool Options

   --accept-prepped
      Accept already prepped input.

Appendix C.  xml2rfc Configuration Files

   Most options have built-in defaults, and the command-line switches
   above can be used to override those.  Additionally, xml2rfc will look
   for config files in some standard file locations.  The option
   --values will show the places xml2rfc will look for config files on
   your system (among other information).  Any settings in config files
   will override the program defaults, but will in turn be overridden by
   command-line options.

   The config files are expected to contain lines with option value
   assignments.  Lines with '#' as the first character are considered
   comments.  Here is an example:

   # ----
   legacy-date-format = true
   add-xinclude = true
   external-js = false
   # ----

   The complete long option names must be used in configuration files;
   abbreviations will not be recognised (in contrast with how
   abbreviations are handled during command-line option processing).

Appendix D.  xml2rfc Documentation Template Variables

   The following variables are available for use in an xml2rfc manpage
   Jinja2 template, as of xml2rfc version 3.23.1:

   {{ bare_latin_tags }}:

   {{ descriptions }}:
      The descriptions read from the doc.yaml file

   {{ element_tags }}:
      A list of all the element tags in the XML schema

   {{ elements }}:
      A list of dictionaries, each with information about one schema
      element: {"attributes": ..., "children": ..., "deprecated": ...,
      "deprecated_attributes": ..., "description": ..., "new": ...,
      "parents": ..., "rnc": ..., "tag": ..., }

   {{ options }}:
      A list of dictionaries describing the command-line options

   {{ schema }}:
      The full RelaxNG Compact representation of the schema in text form

   {{ toc_depth }}:
      ToC depth setting; 1 when running --man, 2 otherwise

   {{ v3_element_tags }}:
      A list of v3 element tags, excluding deprecated tags

   {{ version }}:
      The xml2rfc version number

Author's Address

   xml2rfc(1)
