## 1. Introduction

This document describes a set of XSLT transformations that can be used to transform "XML2RFC" XML ([RFC7749], updating [RFC2629]) to various output formats, such as HTML and PDF. The main topics are ¶

- compliance to the xml2rfc XML element set (Section 2),
- support for xml2rfc processing instructions (Section 3),
- the names of anchor elements generated in HTML and PDF output (Section 4),
- various XSLT engines that can be used (Section 5),
- outputting HTML (Section 6) and XHTML (Section 7),
- outputting CHM (Compiled Microsoft Help, Section 8),
- outputting PDF (Section 9),
- outputting ePub (Section 10),
- extensions to the xml2rfc vocabulary (Section 11),
- selected extensions from the proposed xml2rfc V3 vocabulary (Section 12),
- various utilities (Section 13).

The full distribution is available at <https://greenbytes.de/tech/webdav/rfc2629xslt.zip>. A mirror of the non-public source repository can be found at <https://github.com/reschke/xml2rfc>; this is also a good place for reporting issues.¶

Note: RFC 2629 was the initial specification of the XML vocabulary; that's why the "2629" lives on in various parts, such as filenames.¶

## 2. Supported RFC7749 elements

rfc2629.xslt supports both all grammar elements defined in [RFC7749], plus a subset of the new elements defined in [RFC7991bis].¶

### 2.1. Extension elements

rfc2629.xslt supports two kind of extension elements, using different XML namespaces.¶

The first set contains (hopefully) generally useful extensions, see Section 11.¶

The second set is used for change and issue tracking and currently is not documented here. Please email the author in case you're interested in using these extensions.¶

## 3. Processing Instructions

All PIs can be set as XSLT parameter as well, overriding any value that is found in the source file to be transformed.¶

Using processing instructions:

    <?rfc toc="yes"?>
    <?rfc-ext support-rfc2731="no"?>

Using XSLT parameters (Saxon):

    java -cp saxon.jar com.icl.saxon.StyleSheet source.xml rfc2629.xslt \
      xml2rfc-toc=yes xml2rfc-ext-support-rfc2731=no > result.html

Using XSLT parameters (xsltproc):

    xsltproc --param xml2rfc-toc '"yes"' \
       --param xml2rfc-ext-support-rfc2731 '"no"' \
       rfc2629.xslt source.xml > result.html

(note the required quoting of string parameters)

### 3.1. Supported xml2rfc-compatible PIs

PI target | PI pseudo-attribute | XSLT parameter name | default | comment
--- | --- | --- | --- | ---
rfc | authorship | xml2rfc-authorship | "yes" | when set to "no", the "Authors" section is suppressed
rfc | background | xml2rfc-background | (not set) |
rfc | compact | xml2rfc-compact | "no" | only applies to HTML output method when printing
rfc | comments | xml2rfc-comments | "no" ("yes" for v3 documents) |
rfc | docmapping |  | "yes" | This is the default for rfc2629.xslt anyway, and it can not be changed
rfc | editing | xml2rfc-editing | "no" |
rfc | footer | xml2rfc-footer | (not set) |
rfc | header | xml2rfc-header | (not set) |
rfc | include |  |  | only partly supported, use external entities instead (see Appendix C.1) or other tools (Section 13.8) instead
rfc | inline | xml2rfc-inline | "no" ("yes" for v3 documents) |
rfc | iprnotified | xml2rfc-iprnotified | "no" |
rfc | linkmailto | xml2rfc-linkmailto | "yes" |
rfc | multiple-initials | xml2rfc-multiple-initials | "no" | determines whether the processor will attempt to truncate multiple initials to a single one; can be set globally (affecting the front page) but also as child element of <reference>
rfc | private | xml2rfc-private | (not set) |
rfc | refparent | xml2rfc-private | "References" | Title for References sections when automatically inserted
rfc | rfcedstyle | xml2rfc-rfcedstyle | (not set) | (limited support)
rfc | sortrefs | xml2rfc-sortrefs | "no" |
rfc | symrefs | xml2rfc-symrefs | "yes" | The default has changed from "no" to "yes" as of June 6, 2007 and xml2rfc 1.33pre4.
rfc | toc | xml2rfc-toc | "no" ("yes" for documents specifying "3" as vocabulary version) |
rfc | tocdepth | xml2rfc-tocdepth | 99 |
rfc | topblock | xml2rfc-topblock | "yes" |

### 3.2. Unsupported xml2rfc-compatible PIs

PI target | PI pseudo-attribute | comment
--- | --- | ---
rfc | needLines |
rfc | slides |
rfc | strict |
rfc | subcompact |
rfc | tocindent | (defaults to "yes")
rfc | tocompact |

### 3.3. Extension PIs

#### 3.3.1. abort-on - Log Level

PI target
  rfc-ext
PI pseudo-attribute
  abort-on
XSLT parameter name
  xml2rfc-ext-abort-on
default
  "OFF"

Controls at which log level a message causes the XSLT to be aborted (one of "OFF", "FATAL", "ERROR", "WARNING", "INFO", "DEBUG", "TRACE").¶

#### 3.3.2. allow-markup-in-artwork - Allow certain XML elements inside <artwork> and <sourcecode>

PI target
  rfc-ext
PI pseudo-attribute
  allow-markup-in-artwork
XSLT parameter name
  xml2rfc-ext-allow-markup-in-artwork
default
  "no"

Enables support for specific elements inside <artwork> and <sourcecode> elements (using this extension makes the document incompatible to the RFC7749 grammar; see description of conversion XSLT in Section 13.4).¶

#### 3.3.3. authors-section - Placement of 'Authors' Section

PI target
  rfc-ext
PI pseudo-attribute
  authors-section
XSLT parameter name
  xml2rfc-ext-authors-section
default
  "end"

When "before-appendices", place the authors section between references and appendices (this ordering was used a long time ago).¶

#### 3.3.4. css-contents - CSS Contents

PI target
  rfc-ext
PI pseudo-attribute
  css-contents
XSLT parameter name
  xml2rfc-ext-css-contents
default
  none

CSS content to use instead of the built-in (experimental).¶

#### 3.3.5. css-resource - Custom CSS Resource

PI target
  rfc-ext
PI pseudo-attribute
  css-resource
XSLT parameter name
  xml2rfc-ext-css-resource
default
  none

Name of CSS resource (URI or relate reference) to use instead of the built-in (experimental).¶

#### 3.3.6. dark-mode - Switch for Disabling 'Dark Mode' Support

PI target
  rfc-ext
PI pseudo-attribute
  dark-mode
XSLT parameter name
  xml2rfc-ext-dark-mode
default
  "auto"

Set to 'no' to disable "dark mode" CSS support.¶

#### 3.3.7. diff-uri - URI Template for Internet Draft Diff Links

PI target
  rfc-ext
PI pseudo-attribute
  diff-uri
XSLT parameter name
  xml2rfc-ext-diff-uri
default
  "https://www.ietf.org/rfcdiff?url2={internet-draft}"

URI template for Internet Draft Diff links.¶

#### 3.3.8. doi-uri - URI Template for DOI Links

PI target
  rfc-ext
PI pseudo-attribute
  doi-uri
XSLT parameter name
  xml2rfc-ext-doi-uri
default
  "https://dx.doi.org/{doi}"

URI template for DOIs links.¶

#### 3.3.9. duplex - Support Duplex Printing

PI target
  rfc-ext
PI pseudo-attribute
  duplex
XSLT parameter name
  xml2rfc-ext-duplex
default
  "no"

When set to "yes", format printed output for doublesided printing.¶

#### 3.3.10. errata - Embed Errata Information

PI target
  rfc-ext
PI pseudo-attribute
  errata
XSLT parameter name
  xml2rfc-ext-errata
default
  none

Can be used to specify an errata file; output will link to individual errata when possible. See Section 6.6.¶

#### 3.3.11. html-pretty-print - Switch for Enabling Pretty Printing of Code

PI target
  rfc-ext
PI pseudo-attribute
  html-pretty-print
XSLT parameter name
  xml2rfc-ext-html-pretty-print
default
  none

Used to specify a JS-based code pretty-printer; the value is the CSS class name to insert, followed by a blank space, followed by the URI of the JS library. For instance: "prettyprint https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"¶

#### 3.3.12. include-generator - Switch for Disabling Generator Information in Output

PI target
  rfc-ext
PI pseudo-attribute
  include-generator
XSLT parameter name
  xml2rfc-ext-include-generator
default
  "yes"

Set to 'no' in order to disable inclusion of generator version information.¶

#### 3.3.13. include-index - Switch for Disabling Index Generation

PI target
  rfc-ext
PI pseudo-attribute
  include-index
XSLT parameter name
  xml2rfc-ext-include-index
default
  "yes"

When set to "no", no index will be generated.¶

#### 3.3.14. include-references-in-index - Generate Index Entries for References

PI target
  rfc-ext
PI pseudo-attribute
  include-references-in-index
XSLT parameter name
  xml2rfc-ext-include-references-in-index
default
  "no"

When set to "yes", index entries are generated for all references.¶

#### 3.3.15. insert-metadata - Dynamic Metadata Insertion in HTML

PI target
  rfc-ext
PI pseudo-attribute
  insert-metadata
XSLT parameter name
  xml2rfc-ext-insert-metadata
default
  "yes"

When set to "yes", include JS code that fetches current RFC/Internet-Draft metadata and inserts it into the front page (standards track, obsoletion, updates, errata, freshness of draft...).¶

#### 3.3.16. internet-draft-base-uri - base URI for RFC reference files

PI target
  rfc-ext
PI pseudo-attribute
  internet-draft-reference-base-uri
XSLT parameter name
  xml2rfc-ext-internet-draft-reference-base-uri
default
  "https://bib.ietf.org/public/rfc/bibxml-ids/"

Base URI for Internet-Draft referennces included using the "include" processing instruction.¶

#### 3.3.17. internet-draft-uri - URI Template for Interned Drafts

PI target
  rfc-ext
PI pseudo-attribute
  internet-draft-uri
XSLT parameter name
  xml2rfc-ext-internet-draft-uri
default
  "https://datatracker.ietf.org/doc/html/{internet-draft}"

URI template for Internet-Draft links (can be set locally inside the <reference> element as well to override the default).¶

#### 3.3.18. justification - Text Justification

PI target
  rfc-ext
PI pseudo-attribute
  justification
XSLT parameter name
  xml2rfc-ext-justification
default
  "never"

"never": never emit justified text, "always": always emit justified text, "print": only emit justified text for print media.¶

#### 3.3.19. isbn-uri - URI Template for ISBNs

PI target
  rfc-ext
PI pseudo-attribute
  isbn-uri
XSLT parameter name
  xml2rfc-ext-isbn-uri
default
  "https://www.worldcat.org/search?q=isbn:{isbn}"

URI template for ISBN lookup.¶

#### 3.3.20. log-level - Log Level

PI target
  rfc-ext
PI pseudo-attribute
  log-level
XSLT parameter name
  xml2rfc-ext-log-level
default
  "WARNING"

Logging level, one of "OFF", "FATAL", "ERROR", "WARNING", "INFO", "DEBUG", "TRACE".¶

#### 3.3.21. maxwidth - Maximal Text Width in HTML

PI target
  rfc-ext
PI pseudo-attribute
  maxwidth
XSLT parameter name
  xml2rfc-ext-maxwidth
default
  1000

For HTML output: maximal text width in CSS pixels.¶

#### 3.3.22. parse-xml-in-artwork - Parse and Check XML in artwork

PI target
  rfc-ext
PI pseudo-attribute
  parse-xml-in-artwork
XSLT parameter name
  xml2rfc-ext-parse-xml-in-artwork
default
  "no"

May be used to enable parsing of XML content in figures (MSXML only).¶

#### 3.3.23. rfc-errata-uri - URI Template for RFC Errata

PI target
  rfc-ext
PI pseudo-attribute
  rfc-errata-uri
XSLT parameter name
  xml2rfc-ext-rfc-errata-uri
default
  "https://www.rfc-editor.org/errata/rfc{rfc}"

URI template for all RFC Errata for a given RFC ("rfc" is the RFC number).¶

#### 3.3.24. rfc-erratum-uri - URI Template for a specific RFC Erratum

PI target
  rfc-ext
PI pseudo-attribute
  rfc-erratum-uri
XSLT parameter name
  xml2rfc-ext-rfc-erratum-uri
default
  "https://www.rfc-editor.org/errata/eid{eid}"

URI template for a specific RFC erratum ("eid" is the "errata id").¶

#### 3.3.25. rfc-reference--base-uri - base URI for RFC reference files

PI target
  rfc-ext
PI pseudo-attribute
  rfc-reference-base-uri
XSLT parameter name
  xml2rfc-ext-rfc-reference-base-uri
default
  "https://bib.ietf.org/public/rfc/bibxml/"

Base URI for RFC referennces included using the "include" processing instruction.¶

#### 3.3.26. rfc-uri - URI Template for HTML Version of RFCs

PI target
  rfc-ext
PI pseudo-attribute
  rfc-uri
XSLT parameter name
  xml2rfc-ext-rfc-uri
default
  "https://www.rfc-editor.org/rfc/rfc{rfc}.html" (previously "https://tools.ietf.org/html/rfc{rfc}")

URI Template for HTML Version of RFCs.¶

#### 3.3.27. sec-no-trailing-dots - Disable Trailing Dots in Section Numbers

PI target
  rfc-ext
PI pseudo-attribute
  sec-no-trailing-dots
XSLT parameter name
  xml2rfc-ext-sec-no-trailing-dots
default
  none

When set to "no", do not add trailing dots to section numbers (this was the preference in the distant past).¶

#### 3.3.28. std-uri - URI Template for IETF Standards

PI target
  rfc-ext
PI pseudo-attribute
  std-uri
XSLT parameter name
  xml2rfc-ext-std-uri
default
  "https://www.rfc-editor.org/info/std{std}"

URI Template for IETF Standards.¶

#### 3.3.29. support-highwire-press-tags - Support 'Highwire Press' Metadata

PI target
  rfc-ext
PI pseudo-attribute
  support-highwire-press-tags
XSLT parameter name
  xml2rfc-ext-support-highwire-press-tags
default
  "yes"

Decides whether the HTML transformation should generate 'Highwire Press' META tags, as used by Google Scholar.¶

#### 3.3.30. support-open-graph-tags - Support 'Highwire Press' Metadata

PI target
  rfc-ext
PI pseudo-attribute
  support-open-graph-tags
XSLT parameter name
  xml2rfc-ext-support-open-graph-tags
default
  "yes"

Decides whether the HTML transformation should generate 'Open Graph' META tags, as used by Twitter.¶

#### 3.3.31. support-rfc2731 - Support RFC 2731 Metadata

PI target
  rfc-ext
PI pseudo-attribute
  support-rfc2731
XSLT parameter name
  xml2rfc-ext-support-rfc2731
default
  "yes"

Decides whether the HTML transformation should generate META tags according Section 6.4.¶

#### 3.3.32. ucd-file - Filename of Unicode Database

PI target
  rfc-ext
PI pseudo-attribute
  ucd-file
XSLT parameter name
  xml2rfc-ext-ucd-file
default
  none

Specifies an external resource containing Unicode character database information, as described in Section 11.24.¶

#### 3.3.33. xml2rfc-backend - Select xml2rfc Target Version

PI target
  rfc-ext
PI pseudo-attribute
  xml2rfc-backend
XSLT parameter name
  xml2rfc-ext-xml2rfc-backend
default
  based on document date

Used in clean-for-DTD.xslt (see Section 13.4).¶

#### 3.3.34. xref-with-text-generate - Default Handling of <xref> with Text Content

PI target
  rfc-ext
PI pseudo-attribute
  xref-with-text-generate
XSLT parameter name
  xml2rfc-ext-xref-with-text-generate
default
  "text"

Determines whether <xref> with text content generates additional text as in traditional text output ("text"), or just generates a link around the text ("nothing"). Note that the default might change in the future in order to achieve compatibility with other formatters.¶

## 4. Anchors

The transformation automatically generates anchors that are supposed to be stable and predictable and that can be used to identify specific parts of the document. Anchors are generated both in HTML and XSL-FO content (but the latter will only be used for PDF output when the XSL-FO engine supports producing PDF anchors).¶

The following anchors get auto-generated:

Anchor name | Description
--- | ---
rfc.abstract | Abstract
rfc.authors | Authors section
rfc.copyright | Copyright section
rfc.copyrightnotice | Copyright notice
rfc.figure.n | Figures (titled)
rfc.figure.u.n | Figures (untitled)
rfc.index | Index
rfc.ipr | Intellectual Property
rfc.iref.n | Internal references
rfc.note.n | Notes (from front section)
rfc.references | References
rfc.references.n | Additional references
rfc.section.n | Section n
rfc.section.n.p.m | Section n, paragraph m
rfc.status | Status of memo
rfc.table.n | Tables (titled)
rfc.table.u.n | Tables (untitled)
rfc.toc | Table of contents
rfc.xref.name.n | References to reference n to name

## 5. Supported XSLT engines

The transformation requires a non-standard extension function (see exsl:node-set) which is however widely available. XSLT processors that do not support this extension (or a functional equivalent, such as msxsl:node-set) currently are not supported.¶

Input documents do not always specify the date completely. In this case, the transformation attempts to let the XSLT engine to compute the system date, using either scripting in Microsoft's XSLT engine, or the exsl:date-time extension function.¶

### 5.1. Standalone Engines

The following XSLT engines are believed to work well: ¶

- Windows: MSXML3 and MSXML4 (<http://msdn.microsoft.com/xml>; command line processor "msxsl" is available from Microsoft Download Center)
- Java: Saxon (<http://saxon.sourceforge.net/>)
- Java: Xalan (<http://xml.apache.org/xalan-j/>)
- C/C++: xsltproc (libxslt) (<http://xmlsoft.org/XSLT/>, make sure that you have a current version, also: does not support inclusion of "https" resources -- <https://bugzilla.gnome.org/show_bug.cgi?id=791491>)

### 5.2. In-Browser Engines

The following browsers seem to work fine: ¶

- Internet Explorer 6 and newer

- Firefox 3.0 and newer

  - Be aware that XSLT execution can be suppressed using NoScript
  - There seems to be a new problem in Firefox 4 where it occasionally does the initial rendering with the wrong width (people who can reproduce this problem please comment on <https://bugzilla.mozilla.org/show_bug.cgi?id=640390>.
  - Date computation is available in Firefox starting with Firefox 6 (see <https://bugzilla.mozilla.org/show_bug.cgi?id=603159>)

- Safari 3 (starting with version 3.0.4)

  - Date computation not available (see <https://bugs.webkit.org/show_bug.cgi?id=4079>)

- Google Chrome

  - Date computation not available (see <https://bugs.chromium.org/p/chromium/issues/detail?id=1006210>)

Note that browsers in general do not load external DTDs nor external entities (see, for instance, Mozilla Bug 22942) thus entities like &nbsp; need to be declared in the internal subset (Appendix C.1).¶

The following browsers are known not to work properly: ¶

- Firefox 1.*/2.*: (missing extension function - see change request at Mozilla BugZilla 193678)

- Opera 9.21: execution fails, potentially to a somewhat complex XPath expression (reported to Opera as bug 245725).

- Opera 9.5 and 9.6: transformation appears to work, but CSS isn't getting applied (reported to Opera as bug 337388 on 2008-06-12).

- Safari 2.* supports client-side XSLT as of MacOS X 10.4, but misses required extension functions. A problem with stylesheets producing non-ASCII output (such as NBSP characters) has been fixed as of OSX 10.4.4. Both problems have been reported through Apple's bug tracking system, see <http://drakken.dbc.mtview.ca.us/pipermail/xml2rfc/2005-May/002073.html> and <http://bugs.webkit.org/show_bug.cgi?id=4079>.

## 6. Transforming to HTML

Transformation to HTML can be done inside the browser if it supports XSLT. To enable this, add the following processing instruction to the start of the source file:¶

      <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

(and ensure that rfc2629.xslt is present).¶

### 6.1. HTML compliance

The transformation result is supposed to conform to HTML5 [HTML5]. This can be checked using the W3C's online validator at <http://validator.w3.org>.¶

XSLT 1.0 is not capable to directly emit the HTML doctype declaration, thus uses the SYSTEM ID "about:legacy-compat" instead (see Section 8.1.1 of [HTML5]).¶

When not run in a browser, the doctype declaration can be adjusted using a small script, such as with:¶

    saxon test.xml rfc2629.xslt | awk -f html5doctype.awk

with¶

    #!/usr/bin/awk -f

    # waitfordoctype:
    # 0: wait for line starting with DOCTYPE and eat empty lines
    # 1: wait for line starting with <html
    # 2: afterwards

    BEGIN {
      waitfordoctype = 0;
    }

    /<!DOCTYPE .*/ {
      if (waitfordoctype == 0) {
        waitfordoctype = 1
      }
    }

    /<html.*/ {
      if (waitfordoctype == 1) {
        waitfordoctype = 2
        printf("<!DOCTYPE html>\n")
      }
      else {
        print
      }
    }

    {
      if (waitfordoctype == 0 && $0 != "") {
        print
      }
      else if (waitfordoctype == 2) {
        print
      }
    }

### 6.2. Standard HTML LINK elements

LINK elements exist since HTML 2.0. They can be used to embed content-independant links inside the document. Unfortunately, only few user agents support this element. Firefox users may want to check the Link Widgets extension.¶

The following LINK elements are produced:

LINK type | description
--- | ---
alternate | for RFCs, a link to the authorative ASCII version on the IETF web site
appendic | pointer to all top-level appendics
author | pointer to "authors" section
chapter | pointer to all top-level sections
contents | pointer to table of contents
copyright | pointer to copyright statement
index | pointer to index

The figure below shows how Mozilla Firefox 1.0 displays the Site Navigation Bar for rfc2396.xml.

### 6.3. Standard HTML metadata

The following standard HTML META elements are produced:

META name | description
--- | ---
generator | from XSLT engine version and stylesheet version
keywords | from keyword elements in front section

### 6.4. Dublin Core (RFC2731) metadata

Unless turned off using the "rfc-ext support-rfc2731" processing instruction, the transformation will generate metadata according to [RFC2731] and [DC-HTML].¶

The following DCMI properties are produced:

META name | description
--- | ---
DC.Creator | from author information in front section
DC.Date.Issued | from date information in front section
DC.Description.Abstract | from abstract
DC.Identifier | document URN [RFC2648] from "docName" attribute
DC.isPartOf | RFC ISSN (for RFCs)
DC.Relation.Replaces | from "obsoletes" attribute

### 6.5. Insertion of Live RFC Meta Data

RFCs are immutable; once published, they do not change anymore. What does change though is their status, their relation to subsequent RFCs (such as when they are updated), and errata.¶

rfc2629toXHTML.xslt by default inserts code that will pull the relevant information from <https://tools.ietf.org>. This can be disabled by specifying the parameter "xml2rfc-ext-insert-metadata=no" (or by inserting the equivalent processing instruction into the source code).¶

An example for the generated information can be seen at <https://greenbytes.de/tech/webdav/rfc2616.html#rfc.meta>.¶

Note: the status information really should be available from the RFC Editor, right now it only exists only in HTML form (such as in <https://www.rfc-editor.org/info/rfc2616>. Furthermore, the service provided by <https://tools.ietf.org> is considered experimental, so this feature might be changed or removed without prior notice.¶

...and no, we currently can't obtain the exact list of errata, just a flag indicating whether errata exist.¶

### 6.6. Insertion of RFC Errata Links

Unfortunately, the RFC Editor does not provide errata information in a well-defined machine readable format. What's available is "regular" HTML (and that could be the worst currently in use in standards bodies...).¶

parse-errata.xslt attempts to parse useful information out of these pages.¶

It can be run like that (requires an XSLT2 processor):¶

    # get the raw html and strip form feed characters
    curl -s https://www.rfc-editor.org/errata_search.php?rfc=2616 \
      | tr -d '\f' > rfc2616.rawerrata
    # regexps are your friend
    saxon97he parse-errata.xslt parse-errata.xslt doc=2616 > rfc2616.errata

The code tries to make sense of the HTML, in particular it tries to detect what RFC sections each erratum applies to. The resulting XML format is work-in-progress and just contains the information that will be useful in subsequent formatting of the RFC.¶

When formatting the RFC for HTML output, the errata file can be passed as stylesheet parameter ("xml2rfc-ext-errata"). The output will include errata links at the beginnings of the section they apply to, or at the beginning of Section 1 when the location is unknown.¶

For the sake of embedding, three types of errata are relevant; their type is indicated with a symbol:¶

- "held for update": reviewed and decided to be "held for document update" (these are mostly editorial); "scissors" symbol.
- "submitted": submitted, but not reviewed; "letter" symbol.
- "verified": reviewed and found to be correct; "checkmark" symbol.

To recap: the errata information is passed into the transformation as additional parameter. The errata information will not be automatically retrieved from the RFC Editor web site.¶

Finally, here's an example for inserted errata links: <https://greenbytes.de/tech/webdav/rfc7230.html#transfer.codings>.¶

## 7. Transforming to XHTML

Transforming to XHTML requires slightly different XSLT output options and is implemented by the derived transformation script rfc2629toXHTML.xslt.¶

## 8. Transforming to CHM (Microsoft Compiled Help)

To generate a CHM file using Microsoft's HTML Help Compiler (hhc), three files are required in addition to the HTML file. ¶

1. hhc - table of contents file (HTML)
2. hhk - index file (HTML)
3. hhp - project file (plain text)

The three files are generated with three specific transformations, each requiring the additional XSLT parameter "basename" to specify the filename prefix.¶

Example:

    saxon rfc2616.xml rfc2629toHhp.xslt basename=rfc2616  > rfc2616.hhp
    saxon rfc2616.xml rfc2629toHhc.xslt basename=rfc2616  > rfc2616.hhc
    saxon rfc2616.xml rfc2629toHhk.xslt basename=rfc2616  > rfc2616.hhk
    hhc rfc2616.hhp

## 9. Transforming to PDF

### 9.1. Via XSL-FO

Transformation to XSL-FO [XSL-FO] format is available through rfc2629toFO.xslt (which includes rfc2629.xslt, so keep both in the same folder).¶

Compared to HTML user agents, XSL-FO engines unfortunately either come as open source (for instance, Apache FOP) or feature-complete (for instance, AntennaHouse XSL Formatter), but not both at the same time.¶

As Apache FOP needs special workarounds (index generation), and some popular extensions aren't standardized yet, the translation produces a generic output (hopefully) conforming to [XSL-FO]. Specific backends (xsl11toFop.xslt, xsl11toXep.xslt, xsl11toAn.xslt) then provide post-processing for the individual processors.¶

Note: the output is currently targeted at Apache FOP 1.1.¶

#### 9.1.1. Example: producing output for Apache FOP

Example:

    saxon rfc2616.xml rfc2629toFo.xslt > tmp.fo
    saxon tmp.fo xsl11toFop.xslt > rfc2629.fo

### 9.2. Via HTML

PDF output can also be produced directly from (X)HTML. One simple approach is to rely on the browser's printing function, and to use a printer driver that produces PDF. Depending on the brower's CSS capabilities, the output will behave properly with respect to table breaks etc.¶

Alternatives are tools which can produce PDF directly from (X)HTML input, based on the CSS printing information. For instance: "PrinceXML" (<http://www.princexml.com/>) and "WeasyPrint" (<https://weasyprint.org/>).¶

For instance, PDF output can be produced with:

    saxon input.xml rfc2629.xslt > output.html
    weasyprint output.html output.pdf

## 10. Transforming to ePub

Experimental transformation to ePub format is available through a set of stylesheets, and the Unix Shell script mkepub.sh (which requires that "zip" and either "saxon" or "xsltproc" are installed).¶

For instance, an epub version of rfc2616.xml can be generated like this:

    mkepub.sh rfc2616.xml

## 11. Generic Extensions

This section documents extensions implemented in rfc2629.xslt, using the extension namespace "http://purl.org/net/xml2rfc/ext".¶

### 11.1. <abnf-char-sequence> element

Converts the contained quoted string into a hex-encoded character sequence, for use in case-sensitive ABNF productions.¶

For instance, "<x:abnf-char-sequence>"HTTP"</x:abnf-char-sequence>" gets converted to "%x48.54.54.50".¶

### 11.2. <anchor-alias> element

Using its "value" attribute, this element allows the definition of an internal link target alias for the enclosing element. This alias can then be used with the <ref> element for intra-document references.¶

Note that the anchor alias is not subject to the naming constraints that apply to anchor elements (which are XML names).¶

### 11.3. <bb> element

Marking up a string as <bb> indicates that it represents the bottom line of a box drawing, replacing the "+" and "-" characters accordingly.¶

### 11.4. <bc> element

Marking up a string as <bc> indicates that it represents a center line of a box drawing, replacing the "|" character accordingly.¶

### 11.5. <bcp14> element

This element marks the content as being one of the normative keywords defined in [RFC2119].¶

The DOCTYPE definition below allows using these keywords using XML entity expansion: such as in "...server &MUST; accept...".

    <!DOCTYPE rfc [
     <!ENTITY MAY "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >MAY</bcp14>">
     <!ENTITY MUST "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >MUST</bcp14>">
     <!ENTITY MUST-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >MUST NOT</bcp14>">
     <!ENTITY OPTIONAL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >OPTIONAL</bcp14>">
     <!ENTITY RECOMMENDED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >RECOMMENDED</bcp14>">
     <!ENTITY REQUIRED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >REQUIRED</bcp14>">
     <!ENTITY SHALL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >SHALL</bcp14>">
     <!ENTITY SHALL-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >SHALL NOT</bcp14>">
     <!ENTITY SHOULD "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >SHOULD</bcp14>">
     <!ENTITY SHOULD-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'
       >SHOULD NOT</bcp14>">]>

### 11.6. <blockquote> element

This element is like the <blockquote> element defined in Section 4.4.4 of [HTML5] (note this is a block-level element!). It should contain one or more <t> child elements.¶

### 11.7. <bt> element

Marking up a string as <bt> indicates that it represents the top line of a box drawing, replacing the "+" and "-" characters accordingly.¶

### 11.8. <c> element

Contains mapping information for a single Unicode code points. Attributes are "c" (the actual character), "n" (the code point), and "d" (the name/description).¶

For instance:¶

    <x:u-map>
      <x:c n="8364" c="&#8364;" d="EURO SIGN"/>
    <x:u-map>

(The format is deliberately terse so that the size of a mapping file containing the whole Unicode character database is minimized).¶

### 11.9. <contributor> element

This element can be used to include a contributor's contact information in place where a paragraph (<t>) would be allowed otherwise.¶

See Section 12.8 for a standard alternative.¶

### 11.10. <dfn> element

This element is like the <dfn> element defined in Section 4.5.8 of [HTML5].¶

### 11.11. <feedback> element

This elements allows declaring a feedback link for document reviewers. The template string takes the form of a URI template, such as:¶

    <x:feedback template="mailto:ietf-http-wg@w3.org?subject={docname},%20%22{section}%22&amp;body=&lt;{ref}&gt;:"/>

where "docname" is substituted by the document name, "section" is substituted by section title (number and name), and "ref" is substituted by a URI pointing to the section being referenced.¶

### 11.12. <h> element

This element is like the "h" element in [XHTML2].¶

### 11.13. <highlight> element

Used to highlight text passages, currently only allowed in <artwork>.¶

Note: this is stripped when generating input for xml2rfc, so please use with care.¶

### 11.14. <length-of> element

This element can be used to insert the length of another formatted section (in decimal).¶

Example: computing the Content-Length header value

    <artwork>
    ...
    Content-Length: <x:length-of target="req"/>

    <x:span anchor="req">123456789
    <x:span><artwork/>

The lenght computation counts line ends as two characters (CRLF).¶

Note that indentation characters in artwork will be counted. The "indented" attribute allows to specify the amount of indentation to be substracted from the computed length.¶

### 11.15. <link> element

This element can be added as a top-level child element below <rfc> to indicate additional link information. It's currently used only when generating HTML output, in which case an HTML <link> element with identical attributes gets generated.¶

Example: generating HTML link element

    <x:link xmlns:x="http://purl.org/net/xml2rfc/ext"
        rel="Bookmark"
        title="IETF WEBDAV Working Group"
        href="http://ftp.ics.uci.edu/pub/ietf/webdav/"/>

If the attribute "basename" is present, it is used to compute the target href based on the output format being generated (this is handy for "next"/"prev" links in a series of documents. In this case, the href attribute is not required.¶

For instance:

    <x:link xmlns:x="http://purl.org/net/xml2rfc/ext"
        rel="next"
        title="Part2"
        basename="draft-foobar-protocol-p2-latest"/>

### 11.16. <lt> element

Used for grouping multiple <t> elements into a single list item.¶

### 11.17. <note> element

Can be used to add a note, usually indented by a few characters. It should contain one or more <t> child elements.¶

### 11.18. <parse-xml> element

This element instructs the processor to parse the contents as XML and to warn when there's a problem (requires either MSXML or Saxon8 or newer).¶

### 11.19. <prose> element

This element can be used inside <reference> to add plain text (before the date, when present).¶

See also <refcontent> (Section 12.21). ¶

### 11.20. <q> element

This element is like the <q> element defined in Section 4.5.7 of [HTML5].¶

### 11.21. <ref> element

This element is a simplified variant of the <xref> element, in that no "target" attribute needs to be specified, instead the text contents acts as identifier. That in itself wouldn't be terribly useful, but together with the <anchor-alias>, it allows referring to other parts of the document with minimal additional markup.¶

For instance, given an alias definition such as¶

    <section title="Test" anchor="test">
      <x:anchor-alias value="alias1"/>
      <x:anchor-alias value="alias 2"/>
      ...
    </section>

the following simple references¶

    <x:ref>test</x:ref>
    <x:ref>alias1</x:ref>
    <x:ref>alias 2</x:ref>

are equivalent to...:¶

    <xref target="test" format="none">test</xref>
    <xref target="test" format="none">alias1</xref>
    <xref target="test" format="none">alias 2</xref>

### 11.22. <source> element

Can be used to enhance a <reference> with information about the location for the XML source. This can be used by the <xref> processing code to automatically extract the target section number (see Section 11.32).¶

For example:

    ...
    <xref target="RFC2616" x:fmt="of" x:rel="#PUT" />
    ...

    <reference target="RFC2616"/>
      ...
      <x:source href="rfc2616.xml"/>
      ...

### 11.23. <sup> element

This element is like the <sup> element in Section 4.5.16 of [HTML5].¶

Note: the down conversion to RFC7749 format replaces "xy" by "x^y".¶

See also <sup> (Section 12.30). ¶

### 11.24. <u-map> element

Needed for the lookup of Unicode character database information; this element can either appear in-band in the source document, or off-band as specified using the xml2rfc-ext-ucd-file parameter/PI.¶

Contains multiple <x:c> elements (see Section 11.8).¶

The utility XSLT convert-ucd.xslt can be used to create a mapping file based on the Unicode XML database format, as available from <https://unicode.org/ucd/#UCDinXML>.¶

### 11.25. Extensions to <artwork> element

Sometimes, artwork occurs inside lists. To get it indent properly in xml2rfc's text output, it needs to be indented in the source. This is sub-optimal, as this whitespace will also appear in the HTML output, where it's already indented due to HTML's semantics. As a workaround, a "x:indent-with" attribute can be specified, containing a string that will be prepended to each line when clean-for-DTD.xslt is run (see Section 13.4).¶

Furthermore, documents can contain code that might need to be marked as "code component" (<http://www.ietf.org/iesg/statement/copyright.html>). This can be done using "x:is-code-component".¶

Finally, when allowing pretty-printing of code (see "html-pretty-print" in Section 3.3, the "x:lang" attribute can used to explicitly opt into pretty-printing. If the pretty printer can figure out the code type without assistance, an empty value will be sufficient. Otherwise, the language can be specified in the attribute (such as "html"), which will in turn be coded into the CSS class as "lang-" concatenated with the language name.¶

### 11.26. Extensions to <date> element

The attribute "x:include-day" ("true", "false") can be used to control whether the day-of-month should be included in the output. This can be used to adjust the rendering of dates for April-1st-RFCs to the desired special format, including the "1".¶

In particular: on the front page, the attribute defaults to "true", unless when generating RFCs. The output format also varies depending on RFC-ness: it's "day month year" for RFCs, but "month day, year" otherwise. In references, the attribute defaults to "false", and when set to true, the day is just inserted in front of the month.¶

Furthermore, this implementation supports the extension discussed in in Section 4.1.3.2 of [V3IMPNOTES]: in absence of any attributes, a "vague" date can be given as text content (this also applies to the case where <date> appears below a <reference> element).¶

### 11.27. Extensions to <eref> element

For v3 documents, angle brackets will only be produced if the attribute "brackets" is set to "angle".¶

### 11.28. Extensions to <iref> element

The extension attribute below is allowed on the standard <iref> element: ¶

- x:for-anchor specifies that the <iref> will also be automatically inserted whenever the specified anchor is cross-referenced -- this may save entering lots of <iref> instances. As a special case, a value of "" (empty string) refers to the anchor attribute of the closest ancestor.

### 11.29. Extensions to <list> element

The extension attribute below is allowed on the standard <list> element: ¶

- x:indent specifies the amount of indentation for list items in hanging lists. This can be useful when the output format, such as XSL-FO, does not support automatical formatting. The value takes an XSL-FO width, such as "5em". The default is length of longest label in characters times 0.8em.

Also, the <list> element can take <x:lt> child elements instead of <t>, allowing to insert multiple paragraphs into a single list item.¶

### 11.30. Extensions to <rfc> element

The extension attributes below are allowed on the standard <rfc> element: ¶

- grddl:transformation can be used to reference a GRDDL transform.
- x:maturity-level can be used to specify the IETF Standards Track Maturity Level of "proposed", "draft" or "internet" (see Section 4.1 of [RFC2026]).

### 11.31. Extensions to <section> element

The extension attribute below is allowed on the standard <list> element: ¶

- x:fixed-section-number can be used to specify a fixed section number. This can be useful when formatting historic documents that used a different numbering style.

### 11.32. Extensions to <xref> element

Four extension attributes are allowed on the standard <xref> element: ¶

1. x:sec can be specified to point to a specific section of the referenced document,
2. x:rel may specify a relative reference to use when linking into the referenced document (if linking by section number is not available),
3. x:fmt defines the text format to be used,
4. x:title provided a title for the link (to be used in the HTML title attribute).

The following formats are defined for the x:fmt attribute:¶

, (Comma)
  [reference], Section sec
()
  [reference] (Section sec)
of
  Section sec of [reference]
number
  sec
none
  No output (can be used to have xrefs to references without having them rendered as such)
sec
  Section sec

These extensions are currently only supported for <xref> elements without child nodes.¶

If the processor knows how to reference the target section, it will generate a link directly to the target section, such as in [RFC2119], Section 5.¶

## 12. Experimental Support for RFC7991bis Vocabulary

rfc2629.xslt experimentally supports some elements from the "V3" vocabulary, defined in [RFC7991bis]. This support is experimental, as the "v3" vocabulary is still being developed. ¶

### 12.1. artset Element

See Section 3.1.1 of [V3IMPNOTES].¶

### 12.2. aside Element

See Section 2.7 of [RFC7991bis].¶

### 12.3. bcp14 Element

See Section 2.10 of [RFC7991bis].¶

### 12.4. blockquote Element

See Section 2.11 of [RFC7991bis].¶

### 12.5. boilerplate Element

See Section 2.11 of [RFC7991bis].¶

### 12.6. br Element

### 12.7. cityarea Element

See Section 4.2.7 of [V3IMPNOTES].¶

### 12.8. contact Element

Can be used to embed contact information in a layout similar to the one used for authors; mainly for use in a "Contributors" section.¶

When used in phrase content, only the name or the organization (absent a name) will be displayed.¶

### 12.9. displayreference Element

See Section 2.20 of [RFC7991bis].¶

### 12.10. dd Element

See Section 2.19 of [RFC7991bis].¶

### 12.11. dl Element

See Section 2.21 of [RFC7991bis].¶

### 12.12. dt Element

See Section 2.22 of [RFC7991bis].¶

### 12.13. em Element

See Section 2.23 of [RFC7991bis].¶

### 12.14. extaddr Element

See Section 4.2.7 of [V3IMPNOTES].¶

### 12.15. li Element

See Section 2.31 of [RFC7991bis].¶

### 12.16. link Element

See Section 2.32 of [RFC7991bis].¶

### 12.17. name Element

See Section 2.34 of [RFC7991bis]. Currently only supported inside <references> and <section>.¶

### 12.18. ol Element

See Section 2.36 of [RFC7991bis].¶

### 12.19. pobox Element

See Section 4.2.7 of [V3IMPNOTES].¶

### 12.20. postalLine Element

See Section 2.41 of [RFC7991bis].¶

### 12.21. refcontent Element

See Section 2.42 of [RFC7991bis].¶

### 12.22. Extensions to reference Element

See Section 2.43 of [RFC7991bis].¶

#### 12.22.1. quoteTitle attribute

See Section 2.39.2 of [RFC7991bis-01].¶

### 12.23. referencegroup Element

See Section 2.44 of [RFC7991bis].¶

### 12.24. relref Element

See Section 2.47 of [RFC7991bis].¶

EXPERIMENTAL, might be removed again - see <https://github.com/rfc-format/draft-iab-xml2rfc-v3-bis/issues/26>. ¶

### 12.25. Extensions to section Element

See Section 2.49 of [RFC7991bis].¶

#### 12.25.1. numbered attribute

See Section 2.49.2 of [RFC7991bis].¶

#### 12.25.2. removeInRFC attribute

See Section 2.49.3 of [RFC7991bis].¶

### 12.26. sortingcode Element

See Section 4.2.7 of [V3IMPNOTES].¶

### 12.27. sourcecode Element

See Section 2.52 of [RFC7991bis].¶

### 12.28. strong Element

See Section 2.54 of [RFC7991bis].¶

### 12.29. sub Element

See Section 2.55 of [RFC7991bis].¶

### 12.30. sup Element

See Section 2.56 of [RFC7991bis].¶

### 12.31. svg Element

See Section 4 of [RFC7991bis].¶

### 12.32. table Element

See Section 2.58 of [RFC7991bis].¶

### 12.33. tbody Element

See Section 2.59 of [RFC7991bis].¶

### 12.34. td Element

See Section 2.60 of [RFC7991bis].¶

### 12.35. tfoot Element

See Section 2.61 of [RFC7991bis].¶

### 12.36. th Element

See Section 2.62 of [RFC7991bis].¶

### 12.37. thead Element

See Section 2.63 of [RFC7991bis].¶

### 12.38. tr Element

See Section 2.65 of [RFC7991bis].¶

### 12.39. tt Element

See Section 2.66 of [RFC7991bis].¶

### 12.40. u Element

See Appendix A.1 of [V3IMPNOTES].¶

Note that in this implementation, this element needs mapping information in two cases:¶

1. When in XSLT 1.0: to compute the Unicode code point of a given character (when non-ASCII),
2. In any case: to lookup the Unicode name of a character.

The mapping information can be supplied inline using the <x:u-map> element, or in an external file. See Section 11.24 for details.¶

### 12.41. ul Element

See Section 2.67 of [RFC7991bis].¶

### 12.42. Extensions to xref Element

#### 12.42.1. relative attribute

See Section 11.32, "x:rel" attribute.¶

#### 12.42.2. section attribute

See Section 11.32, "x:sec" attribute.¶

#### 12.42.3. sectionFormat attribute

See Section 11.32, "x:fmt" attribute, where "bare" maps to "sec", "comma" maps to ",", "of" maps to "of", and "parens" maps to "()".¶

### 12.43. xi:include Element

See Appendix B.1 of [RFC7991bis].¶

EXPERIMENTAL and INCOMPLETE - only supported as a child element of <references>, and only supporting parse type "XML". ¶

## 13. Utilities

### 13.1. Checking References

check-references.xslt can be used to check all references to RFC- and ID-series IETF publications and to W3C publications (note this script requires local copies of <ftp://ftp.isi.edu/in-notes/rfc-index.xml> and <http://www.w3.org/2002/01/tr-automation/tr.rdf> and will use the XML status information provided at <http://tools.ietf.org/>).¶

If the document is supposed to be published on the IETF standards track, the desired level can be specified using the parameter intended-level as 'proposed', 'draft' or 'internet'. Alternatively, it can be specified inside the document using the attribute x:maturity-level on the <rfc> element (see Section 11.30).¶

Note: Downward references should be annotated using the <annotate> element, containing an <xref> to [BCP97].¶

When an XSLT 2.0 processor is used, links in the document can be checked as well using the link-check parameter ('yes' or 'no'). Note that this only works for http links to documents of type text/*.¶

For instance, as of 2008-07-12, the script produces for <https://greenbytes.de/tech/webdav/rfc2518.xml>:

    > saxon rfc2518.xml check-references.xslt intended-status=PROPOSED \
      link-check=yes

    Normative References:
    ISO-11578: not checked
    ISO-639: not checked
    ISO-8601: not checked
    REC-xml-19980210: [FirstEdition] obsoleted by REC-xml-20001006
    REC-xml-names-19990114: [FirstEdition] obsoleted by
     REC-xml-names-20060816
    RFC1766: [PROPOSED STANDARD] obsoleted by RFC3066 RFC3282
    RFC2068: [PROPOSED STANDARD] obsoleted by RFC2616
    RFC2069: [PROPOSED STANDARD] obsoleted by RFC2617
    RFC2119: [BEST CURRENT PRACTICE] (-> BCP0014) ok
    RFC2141: [PROPOSED STANDARD] ok
    RFC2277: [BEST CURRENT PRACTICE] (-> BCP0018) ok
    RFC2396: [DRAFT STANDARD] obsoleted by RFC3986
    RFC2279: [DRAFT STANDARD] obsoleted by RFC3629

    Informational References:
    REC-PICS-labels-961031: [REC] ok
    RFC1807: [INFORMATIONAL] ok
    RFC2026: [BEST CURRENT PRACTICE] (-> BCP0009) ok
    RFC2291: [INFORMATIONAL] ok
    RFC2376: [INFORMATIONAL] obsoleted by RFC3023
    RFC2413: [INFORMATIONAL] obsoleted by RFC5013
    USMARC: not checked
    WF: not checked

    Link Targets
    <http://www.w3.org/TR/1998/REC-xml-19980210>: ok
    <http://www.w3.org/TR/1999/REC-xml-names-19990114>: ok
    <http://www.dlib.org/dlib/july96/lagoze/07lagoze.html>: ok
    <http://www.w3.org/pub/WWW/TR/REC-PICS-labels-961031.html>: ok

Recognized formats in the <seriesInfo> element are: ¶

- for RFCs, the name attribute must be "RFC", and the value attribute must be the number of the RFC,
- for Internet Drafs, the name attribute must be "ID" or "Internet-Draft", and the value attribute must be the file name of the draft (including the two-digit running number, but excluding a file extension),
- for W3C documents, the name attribute must be "W3C", must start with "W3C ", or must start with "World Wide Web Consortium ", and the value attribute must be the "shorthand" name of the specification, such as "REC-xml-19980210".

Note: this stylesheet will need network access to check links and status of Internet Drafts. When running a Java-based XSLT engine, you may have to supply Java system properties specifying the HTTP proxy to be used, such as "-Dhttp.proxyHost=hostname -Dhttp.proxyPort=80".¶

### 13.2. Generating Graphs from References

gen-reference-graph.xslt generates a graph of RFC dependencies, using the same base data as in check-references.xslt (see Section 13.1). Its output is a "dot" file, to be processed by GraphViz (see <http://www.graphviz.org/>).¶

The picture below shows the RFC dependencies in RFC2629.

### 13.3. Producing reference entries for books

amazon-asin.xslt uses the Amazon web services to generate a <reference> element for a given ASIN (ISBN).¶

For instance:

    <?xml version="1.0" encoding="utf-8"?>
    <references>
     <reference target="urn:isbn:0134516591">
       <front>
         <title>Simple Book, The: An Introduction to Internet Management,
                   Revised Second Edition</title>
         <author surname="Rose"
                    fullname="Marshall T. Rose" initials="M. T. ">
           <organization/>
         </author>
         <author surname="Marshall"
                    fullname="Rose T. Marshall" initials="R. T.">
           <organization/>
         </author>
         <date year="1996" month="March"/>
       </front>
       <seriesInfo name="Prentice Hall" value=""/>
     </reference>
    </references>

Note that the resulting XML usually requires checking, in this case Amazon's database is playing tricks with Marshall's name...¶

### 13.4. Down-converting to RFC 7749 Grammar

clean-for-DTD.xslt can be used to down-convert some extensions to a format that is supported by the existing xml2rfc formatters, mainly for the purpose of generating plain-text output. Note that these extensions are experimental (feedback appreciated).¶

The following mappings are done: ¶

- <iref> elements inside <artwork> elements are moved in front of the enclosing <figure> element.
- <xref> elements inside <artwork> are expanded just like in regular text (that is, the markup is stripped, but the element is replaced by the applicable replacement text).
- <x:anchor-alias> elements get stripped.
- <x:bcp14> elements get stripped.
- <x:bb>, <x:bc> and <x:bt> elements get stripped.
- <x:blockquote> elements get converted to indented text (through a <list> element).
- <x:dfn> elements get stripped.
- <x:h> elements get stripped.
- <x:link> elements get stripped.
- <x:lt> elements get collapsed into a single <lt> element with added <vspace> added to simulate paragraph breaks.
- <x:note> elements get converted to indented text (through a <list> element).
- <x:q> elements get stripped, with apostrophes added around the text.
- <x:prose> elements are transformed into <seriesInfo> elements (which is an abuse of the element and only a workaround until xml2rfc gets a matching extension).
- <x:ref> elements get replaced by <xref> elements, targetting either the anchor or another anchor with matching <x:anchor-alias> child element.

Note: the above list is known to be incomplete and needs work. For instance, most of the extensions described in Section 12 get some mapping as well.¶

As the output formatters evolve to support the V3 format (proposed in [RFC7991bis]), clean-for-DTD.xslt will start taking advantage of these changes. Right now, it supports three modes, one of which being used for the historic TCL processor, and the other ones being used with xml2rfc 2.5.2 and xml2rfc 2.6.0 (see https://pypi.python.org/pypi/xml2rfc/).¶

The modes can be selected using the xml2rfc-ext-xml2rfc-backend parameter or the rfc-ext/xml2rfc-backend processing instruction. The default mode is "201610" for documents with a publication date between January and May 2017, "201706" for documents newer than May 2017, and "201510" otherwise:¶

201510
  For xml2rfc.tcl and versions of the Python formatter before version 2.5.2.
201610
  Maps the V3 extension for unnumbered section numbers to something the 2.5.2 version of the Python formatter understands (but note https://trac.tools.ietf.org/tools/xml2rfc/trac/ticket/313).
201706
  Copies the V3 extension for unnumbered section numbers to the output.

### 13.5. Extracting artwork

With extract-artwork.xslt, artwork elements named through the "name" attribute can be extracted. This can be used to automatically check their syntax (for instance, when ABNFs appear within a figure element).¶

For instance:

    saxon rfc3986.xml extract-artwork.xslt name=uri.abnf

In addition, artwork of a specific type can be extracted, such as with:¶

    saxon rfc3986.xml extract-artwork.xslt type=abnf

When extracting by type, artwork elements with a specified name can be excluded; this can be handy when the document uses some kind of schema language, and an appendix contains the collected schema, repeating definitions from earlier on. Example:¶

    saxon rfc3986.xml extract-artwork.xslt type=abnf except-name=clschm

### 13.6. GRRDL

rfc2629grddl.xslt extracts RDF information. This is experimental work-in-progress. See <http://www.w3.org/TR/grddl/> for more information.¶

### 13.7. HTML Live Refresh

Experimental ¶

The "HTML Live Refresh" mode allows to run a text editor and a browser side-by-side, with the browser auto-updating every few seconds, displaying the updated HTML, and automatically navigating to the part of the page that changed last.¶

The requirements for this mode are:¶

1. A browser that supports the DOMParser and XSLTProcessor APIs.
2. The ability to reload the source code and the XSLT code from within Javascript; in some browsers this is forbidden for "file:" URIs due to perceived security problems.

This feature is currently tested with:¶

1. Mozilla Firefox (where, to be able to reload from the local filesystem, Firefox needs to be configured with security.fileuri.strict_origin_policy set to false in about:config, see Mozilla documentation), and
2. Google Chome (where, to be able to reload from the local filesystem, Chrome needs to be started with the command line option --allow-file-access-from-files).

Use of this feature requires the inclusion of a processing instruction that holds the name of the XML source, such as:¶

    <?rfc-ext refresh-from="draft-foo-bar-00.xml"?>

The optional parameters refresh-interval and refresh-xslt support changing the refresh interval (in seconds, defaulting to 10), and the name of the XSLT file to use (defaulting to "rfc2629.xslt").¶

To test this feature, start with a minimal source file like this:

    <?xml-stylesheet type='text/xsl' href='rfc2629.xslt'?>
    <?rfc-ext refresh-from="draft-foo-bar-00.xml"?>
    <rfc docName="draft-foo-bar-00" ipr="trust200902">
      <front>
        <title>Title Goes Here</title>
        <abstract>
          <t>Abstract</t>
        </abstract>
      </front>
    </rfc>

...open it in both text editor and browser, start editing and of course ocasionally save. And don't forget to put rfc2629.xslt into the same folder.

### 13.8. Refreshing included material in the XML source

There are many methods for automatic inclusion of material in the XML source, such as the "include" processing instruction (see Section 3.1), external entities (Appendix C.1), or XInclude. In general, those share a common problem: the XML source file isn't self-contained, which makes it harder to submit it as Internet Draft.¶

The tool refresh-inclusions.sh does in-place replacement: it scans the source file for inclusion directives (expressed as XML processing instructions), and refreshes the included text with data from an external file. It will not modify the source file unless included material did actually change. When it does modify the source file, it will copy the original source to a backup file.¶

refresh-inclusions.sh can include both plain text (BEGINESCAPEDINC/ENDESCAPEDINC) and XML (BEGININC/ENDINC). The figure below was inserted using:¶

    <?BEGINESCAPEDINC refresh-inclusions.sh ?>
    ...
    <?ENDSCAPEDINC refresh-inclusions.sh ?>

(note that the SP character at the end of the directive is significant)

refresh-inclusions.sh:

    #!/bin/sh
    # Refresh file inclusions based on XML processing instructions
    #
    # Copyright (c) 2006-2023, Julian Reschke (julian.reschke@greenbytes.de)
    # All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions are met:
    #
    # * Redistributions of source code must retain the above copyright notice,
    #   this list of conditions and the following disclaimer.
    # * Redistributions in binary form must reproduce the above copyright notice,
    #   this list of conditions and the following disclaimer in the documentation
    #   and/or other materials provided with the distribution.
    # * Neither the name of Julian Reschke nor the names of its contributors
    #   may be used to endorse or promote products derived from this software
    #   without specific prior written permission.
    #
    # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    # POSSIBILITY OF SUCH DAMAGE.

    expand() {

      # remember whether we started with CRLF (assumes that we have dos2unix)
      CRLF=$(dos2unix -ic "$1" 2>/dev/null | tr -d ' ')

      cat "$1" | tr -d "\015" | awk '

      function filecontents(filename) {
        while (getline < filename > 0) {
          fc[filename] = fc[filename] $0 "\n"
        }
        return fc[filename]
      }

      BEGIN {
        includefile = "";
        includeescapedfile = "";
      }

      # start include (verbatim mode)
      /<\?BEGININC .* \?>$/ {
        print
        keyword = "<?BEGININC "
        extract = match($0, /<\?BEGININC .* \?>$/)
        includefile = substr($0, RSTART + length(keyword),
                        RLENGTH - 3 - length(keyword))
        output = filecontents(includefile)
        printf("%s", output)
      }

      # start include (escape-for-XML mode)
      /<\?BEGINESCAPEDINC .* \?>$/ {
        print
        keyword = "<?BEGINESCAPEDINC "
        extract = match($0, /<\?BEGINESCAPEDINC .* \?>$/)
        includeescapedfile = substr($0, RSTART + length(keyword),
                               RLENGTH - 3 - length(keyword))
        output = filecontents(includeescapedfile)
        # escape ampersand, less-than, and greater-than
        # when part of a CDATA end marker
        gsub(/&/, "\\&amp;", output)
        gsub(/</, "\\&lt;", output)
        gsub(/]]>/, "]]\\&gt;", output)
        printf("%s", output)
      }

      # end include (verbatim mode)
      /^<\?ENDINC .* \?>/ {
        if ("" == includefile) {
          printf ("unexpected ENDINC, did not see BEGININC for %s\n",
            $2) >> "/dev/stderr"
        } else if ($2 != includefile) {
          printf ("unexpected ENDINC, got %s but expected %s\n", $2,
            includefile) >> "/dev/stderr"
        }
        includefile = "";
      }

      # end include (escape-for-XML mode)
      /^<\?ENDESCAPEDINC .* \?>/ {
        if ("" == includeescapedfile) {
          printf ("unexpected ENDESCAPEDINC, did not see BEGINESCAPEDINC for %s\n",
            $2) >> "/dev/stderr"
        } else if ($2 != includeescapedfile) {
          printf ("unexpected ENDESCAPEDINC, got %s but expected %s\n", $2,
            includeescapedfile) >> "/dev/stderr"
        }
        includeescapedfile = "";
      }

      #default
      {
        if (includefile == "" && includeescapedfile == "") {
          print
        }
      }

      END {
        if (includefile != "") {
          printf ("missing ENDINC for %s\n",
            includefile) >> "/dev/stderr"
        }
        if (includeescapedfile != "") {
          printf ("missing ENDESCAPEDINC for %s\n",
            includeescapedfile) >> "/dev/stderr"
        }
      }

      ' > $$

      # restore CRLF if needed
      if [ -n "$CRLF" ]; then
        FNN=$(echo "$1" | tr -d ' ')
        [ "$FNN" = "$CRLF" ] && unix2dos -q $$
      fi

      # check for changes
      cmp -s "$1" $$ || (
        cp -v "$1" "$1".ri.bak
        cp $$ "$1"
        echo "$1" updated )

      rm -f $$
    }

    [ $# -ne 0 ] || ( echo "refresh-inclusions.sh file..." >&2 ; exit 2 )

    for i in $*
    do
      expand $i
    done

## 14. Informative References

[BCP97]
  Klensin, J. and S. Hartman, “Handling Normative References to Standards-Track Documents”, BCP 97, RFC 4897, June 2007, <https://www.rfc-editor.org/info/bcp97>.
[DC-HTML]
  Johnston, P. and A. Powell, “Expressing Dublin Core metadata using HTML/XHTML meta and link elements”, Dublin Core Metadata Initiative, August 2008, <http://dublincore.org/documents/2008/08/04/dc-html/>.
[HTML5]
  Hickson, I., Berjon, R., Faulkner, S., Leithead, T., Doyle Navara, E., O'Connor, E., and S. Pfeiffer, “HTML5”, W3C Recommendation REC-html5-20141028, October 2014, <http://www.w3.org/TR/2014/REC-html5-20141028/>.
  Latest version available at <http://www.w3.org/TR/html5/>.
[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>.
[RFC2045]
  Freed, N. and N. Borenstein, “Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies”, RFC 2045, DOI 10.17487/RFC2045, November 1996, <https://www.rfc-editor.org/info/rfc2045>.
[RFC2119]
  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>.
[RFC2616]
  Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., Leach, P., and T. Berners-Lee, “Hypertext Transfer Protocol -- HTTP/1.1”, RFC 2616, DOI 10.17487/RFC2616, June 1999, <https://www.rfc-editor.org/info/rfc2616>.
[RFC2629]
  Rose, M., “Writing I-Ds and RFCs using XML”, RFC 2629, DOI 10.17487/RFC2629, June 1999, <https://www.rfc-editor.org/info/rfc2629>.
[RFC2648]
  Moats, R., “A URN Namespace for IETF Documents”, RFC 2648, DOI 10.17487/RFC2648, August 1999, <https://www.rfc-editor.org/info/rfc2648>.
[RFC2731]
  Kunze, J., “Encoding Dublin Core Metadata in HTML”, RFC 2731, DOI 10.17487/RFC2731, December 1999, <https://www.rfc-editor.org/info/rfc2731>.
[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>.
[RFC7230]
  Fielding, R., Ed. and J. Reschke, Ed., “Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing”, RFC 7230, DOI 10.17487/RFC7230, June 2014, <https://www.rfc-editor.org/info/rfc7230>.
[RFC7749]
  Reschke, J., “The "xml2rfc" Version 2 Vocabulary”, RFC 7749, DOI 10.17487/RFC7749, February 2016.
[RFC7991bis]
  Levine, J., Ed., “The "xml2rfc" version 3 Vocabulary”, Internet-Draft draft-iab-rfc7991bis-03 (work in progress), March 2020.
[RFC7991bis-01]
  Hoffman, P., “The "xml2rfc" version 3 Vocabulary”, Internet-Draft draft-iab-rfc7991bis-01 (work in progress), October 2018.
[RNC]
  Clark, J., “RELAX NG Compact Syntax”, OASIS, Nov 2002, <http://www.oasis-open.org/committees/relax-ng/compact-20021121.html>.
[V3IMPNOTES]
  Levkowetz, H., “Implementation notes for RFC7991, "The 'xml2rfc' Version 3 Vocabulary"”, Internet-Draft draft-levkowetz-xml2rfc-v3-implementation-notes-12 (work in progress), December 2020.
[XHTML2]
  Birbeck, M., Gylling, M., McCarron, S., Pemberton, S., Axelsson, J., Dubinko, M., Epperson, B., Ishikawa, M., and A. Navarro, “XHTML(tm) 2.0”, W3C Group Note NOTE-xhtml2-20101216, December 2010, <http://www.w3.org/TR/2010/NOTE-xhtml2-20101216>.
  Latest version available at <http://www.w3.org/TR/xhtml2>.
[XML]
  Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and F. Yergeau, “Extensible Markup Language (XML) 1.0 (Fifth Edition)”, W3C Recommendation REC-xml-20081126, November 2008, <http://www.w3.org/TR/2008/REC-xml-20081126/>.
  Latest version available at <http://www.w3.org/TR/xml>.
[XSL-FO]
  Berglund, A., “Extensible Stylesheet Language (XSL) Version 1.1”, W3C Recommendation REC-xsl11-20061205, December 2006, <http://www.w3.org/TR/2006/REC-xsl11-20061205/>.
  Latest version available at <http://www.w3.org/TR/xsl11/>.

## Appendix A. RELAX NG Compact Schema

The RelaxNG schema ([RNC]) below can be used to validate input documents (for instance, with Jing).¶

Note that this is work in progress, and doesn't yet cover all extensions completely. ¶

    # WORK IN PROGRESS! PLEASE REPORT PROBLEMS TO THE AUTHOR.

    # Define our extension namespace
    namespace x = "http://purl.org/net/xml2rfc/ext"

    # Define GRDDL namespace
    namespace grddl = "http://www.w3.org/2003/g/data-view#"

    # Define RDF namespace
    namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"

    # Define SVG namespace
    namespace svg = "http://www.w3.org/2000/svg"

    # Define XInclude namespace
    namespace xi = "http://www.w3.org/2001/XInclude"

    # Include rfc2629bis RNC grammar
    include "rfc2629.rnc" {

      # Redefine <address> to allow multiple email addresses
      address =
        element address {
          attlist.address,
          postal?,
          phone?,
          facsimile?,
          email*,
          uri?
      }

      # Redefine <annotation> to allow more markup
      annotation =
        element annotation {
          attlist.annotation,
          (TEXT
            | xref
            | eref
            | iref
            | cref
            | spanx
            | v3_tt
            )*
        }

      # Redefine <artwork> to allow markup
      artwork =
        element artwork {
          attlist.artwork,
          attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
          ( v3_svg |
            (TEXT
              | eref
              | iref
              | spanx
              | xref
              | v3_em
              | v3_strong
              | x_abnf-char-sequence
              | x_bb
              | x_bc
              | x_bcp14
              | x_bt
              | x_highlight
              | x_length-of
              | x_parse-xml
              | x_ref
              | x_span
              | x_x)*
            )
        }

      # Redefine <back> to allow displayreference
      back =
        element back {
          attlist.back,
          v3_displayreference*,
          references*,
          section*
        }

      # Redefine <c> to allow our extension elements
      c =
        element c {
          attlist.c,
          (TEXT
            | xref
            | eref
            | iref
            | cref
            | spanx
            | v3_em
            | v3_strong
            | v3_tt
            | x_ref)*
        }

      # Redefine <cref> to allow more child elements
      cref =
        element cref {
          attlist.cref,
          (TEXT
            | eref
            | xref
            | x_ref)*
        }

      # Redefine <date> to allow text content (see Section 11.26)
      date =
        element date {
          attlist.date,
          TEXT?
        }

      # Redefine <figure> to allow more child elements
      figure =
        element figure {
          attlist.figure,
          attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
          v3_name?,
          iref*,
          preamble?,
          (artwork
            | v3_sourcecode
            | v3_artset
          ),
          postamble?
        }

      # Redefine <front> to allow boilerplate
      front =
        element front {
          attlist.front,
          title,
          seriesInfo*,
          author+,
          date?,
          area*,
          workgroup*,
          keyword*,
          abstract?,
          note*,
          v3_boilerplate?
        }

      # Redefine <list> element to allow <x:lt> child elements
      \list =
        element list {
          attlist.list,
          (t+ | x_lt+)
        }

      # Redefine <note> to allow <name> and not require title attribute
      note =
        element note {
          attlist.x_note,
          v3_name?,
          (v3_dl
            | v3_ol
            | t
            | v3_ul)+
        }

      # Redefine <preamble> to allow our extension elements
      preamble =
        element preamble {
          attlist.preamble,
          (TEXT
            | xref
            | eref
            | iref
            | cref
            | spanx
            | v3_em
            | v3_strong
            | v3_tt
            | x_anchor-alias
            | x_bcp14)*
      }

      # Redefine <postal> to allow <postalLine> and new detail elements
      postal =
        element postal {
          (
            (city
              | code
              | country
              | v3_cityarea
              | v3_extaddr
              | v3_pobox
              | v3_sortingcode
              | region
              | street)*
              | (v3_postalLine+,
              country?
              ))
        }

      # Redefine <postamble> to allow our extension elements
      postamble =
        element postamble {
          attlist.postamble,
          (TEXT
            | xref
            | eref
            | iref
            | cref
            | spanx
            | v3_em
            | v3_strong
            | v3_tt
            | x_bcp14)*
        }

      # Redefine <reference> to allow our extension elements
      reference =
        element reference {
          attlist.reference,
          (
            (
              front,
              v3_refcontent?,
              seriesInfo*,
              x_prose?,
              v3_refcontent?,
              format*,
              annotation*,
              x_source?
            ) | (
              v3_refcontent?,
              seriesInfo*,
              x_prose?,
              v3_refcontent?,
              format*,
              annotation*,
              x_source
            )
          )
        }

      # Redefine <references> to allow extension elements and attributes
      references =
        element references {
          attribute title { text }?,
          attribute anchor { xsd:ID }?,
          attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
          v3_name?,
          (references+ # (see [V3IMPNOTES], Section 3.1.16)
           |
            (reference
             | v3_referencegroup
             | xi_include)+
           )
        }

      # Redefine <rfc> to allow our extension elements
      rfc =
        element rfc {
          attribute xml:lang { text }?,
          attribute grddl:transformation { ATEXT }?,
          attribute x:maturity-level { "proposed" | "draft" | "internet" }?,
          attribute category { "std" | "bcp" | "info" | "exp" | "historic" }?,
          attribute consensus { "false" | "true" | "no" | "yes" }?,
          attribute docName { text }?,
          attribute indexInclude { "true" | "false" }?, # (see [RFC7991bis], Section 2.48.4)
          attribute ipr {
            "full2026"
            | "noDerivativeWorks2026"
            | "none"
            | "full3667"
            | "noModification3667"
            | "noDerivatives3667"
            | "full3978"
            | "noModification3978"
            | "noDerivatives3978"
            | "trust200811"
            | "noModificationTrust200811"
            | "noDerivativesTrust200811"
            | "trust200902"
            | "noModificationTrust200902"
            | "noDerivativesTrust200902"
            | "pre5378Trust200902"
          }?,
          attribute iprExtract { xsd:IDREF }?,
          attribute number { text }?,
          attribute obsoletes { text }?,
          attribute tocDepth { text }?, # (see [RFC7991bis], Section 2.48.14)
          attribute tocInclude { "true" | "false" }?, # (see [RFC7991bis], Section 2.48.15)
          attribute scripts { text }?, # (see [RFC7991bis], Appendix B.3)
          attribute seriesNo { text }?,
          attribute sortRefs { "true" | "false" }?, # (see [RFC7991bis], Section 2.48.11)
          attribute submissionType { "IETF" | "IAB" | "IRTF" | "independent" }?,
          attribute symRefs { "true" | "false" }?, # (see [RFC7991bis], Section 2.48.13)
          attribute updates { text }?,
          attribute version { text }?, # (see [RFC7991bis], Section 2.48.13)
          v3_link*,
          x_link*,
          x_feedback?,
          x_assign-section-number*,
          front,
          middle,
          back?
        }

      # Redefine <section> to allow new elements
      section =
        element section {
          attlist.x_section,
          (t
           | artwork
           | figure
           | texttable
           | iref
           | section
           | v3_artset
           | v3_aside
           | v3_blockquote
           | v3_contact
           | v3_dl
           | v3_name
           | v3_ol
           | v3_sourcecode
           | v3_table
           | v3_ul
           | x_anchor-alias
           | x_blockquote
           | x_contributor
           | x_include-author
           | x_note
           | x_u-map
           | rdf_Description)*
        }

      # Redefine <spanx> to allow some markup
      spanx =
        element spanx {
          attlist.spanx,
          (TEXT
            | iref
            | xref
            | x_ref)*
        }

      # Redefine <t> to allow our extension elements
      t =
        element t {
          attlist.t,
          (TEXT
           | \list
           | figure
           | xref
           | eref
           | iref
           | cref
           | spanx
           | vspace
           | v3_bcp14
           | v3_br
           | v3_contact
           | v3_em
           | v3_relref
           | v3_strong
           | v3_sub
           | v3_sup
           | v3_tt
           | v3_u
           | x_abnf-char-sequence
           | x_anchor-alias
           | x_bcp14
           | x_dfn
           | x_h
           | x_q
           | x_ref
           | x_span
           | x_sup)*
        }

      # Redefine <title> to allow <br>
      title =
        element title {
          attlist.title,
          (TEXT
            | v3_br)*
        }

      # Redefine <xref> to allow some markup
      xref =
        element xref {
          attlist.xref,
          (TEXT
            | v3_em
            | v3_strong
            | v3_sub
            | v3_sup
            | v3_tt)*
        }
    }

    # Extend attribute set for <abstract>
    attlist.abstract &=
      attribute anchor { xsd:ID }?, # (see [RFC7991bis], Section 2.1.1)
      attribute pn { text }? # (see [RFC7991bis], Appendix B.2)

    # Allow extension attributes on <artwork> (Section 11.25)
    attlist.artwork &=
      attribute anchor { xsd:ID }?,
      attribute originalSrc { text }?, # (see [RFC7991bis], Appendix B.3)
      attribute x:indent-with { ATEXT }?,
      attribute x:lang { "" }?,
      attribute x:is-code-component { "no" | "yes" }?

    # Allow anchor and x:annotation attributes on <author>
    attlist.author &=
      attribute asciiFullname { ATEXT }?,
      attribute asciiInitials { ATEXT }?,
      attribute asciiSurname { ATEXT }?,
      attribute anchor { xsd:ID }?,
      attribute x:annotation { ATEXT }?

    # Extend attribute set for <c>
    attlist.c &=
      attribute anchor { xsd:ID }?

    # Extend attribute set for <city>
    attlist.city &=
      attribute ascii { ATEXT }?

    # Extend attribute set for <code>
    attlist.code &=
      attribute ascii { ATEXT }?

    # Extend attribute set for <country>
    attlist.country &=
      attribute ascii { ATEXT }?

    # Extend attribute set for <cref> (see Section 2.17.2 of [RFC7991bis])
    attlist.cref &=
      attribute display { "false" | "true" }?

    # Extend attribute set for <date> (see Section 11.26)
    attlist.date &=
      attribute x:include-day { "false" | "true" }?

    # Extend attribute set for <eref> (see Section 11.27)
    attlist.eref &=
      attribute brackets { "none" | "angle" }?

    # Extend attribute set for <iref> (see Section 11.28)
    attlist.iref &=
      attribute x:for-anchor { ATEXT }?

    # Extend attribute set for <list> (see Section 11.29)
    attlist.list &=
      attribute x:indent { ATEXT }?

    # Extend/Relax attribute set for <note>
    attlist.x_note &=
      attribute anchor { xsd:ID }?,
      attribute title { ATEXT }?,
      attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
      attribute removeInRFC { "false" | "true" }? # see Section 12.25.2

    # Extend attribute set for <preamble>
    attlist.preamble &=
      attribute anchor { xsd:ID }?

    # Extend attribute set for <organization>
    attlist.organization &=
      attribute ascii { ATEXT }?,
      attribute showOnFrontPage { "false" | "true" }?

    # Extend attribute set for <reference>
    attlist.reference &=
      attribute quoteTitle { "false" | "true" }?, # (see Section 12.22.1)
      attribute xml:base { text }? # (see [RFC7991bis], Section 2)

    # Extend attribute set for <references>
    attlist.references &=
      attribute pn { text }? # (see [RFC7991bis], Appendix B.2)

    # Extend attribute set for <region>
    attlist.region &=
      attribute ascii { ATEXT }?

    # Extend/Relax attribute set for <section> (see Section 11.31)
    attlist.x_section &=
      attribute anchor { xsd:ID }?,
      attribute title { ATEXT }?,
      attribute toc { "include" | "exclude" | "default" }?,
      attribute numbered { "false" | "true" }?, # see Section 12.25.1
      attribute removeInRFC { "false" | "true" }?, # see Section 12.25.2
      attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
      attribute x:fixed-section-number { ATEXT }?

    # Allow anchor attribute on <spanx>
    attlist.spanx &=
      attribute anchor { xsd:ID }?

    # Extend attribute set for <street>
    attlist.street &=
      attribute ascii { ATEXT }?

    # Extend attribute set for <c> (see Section 11.28)
    attlist.t &=
      attribute indent { text }?,
      attribute keepWithNext { text }?,
      attribute keepWithPrevious { text }?,
      attribute pn { text }? # (see [RFC7991bis], Appendix B.2)

    # Extend attribute set for <texttable>
    attlist.texttable &=
      attribute x:caption-side { ATEXT }?

    # Extend attribute set for <title>
    attlist.title &=
      attribute ascii { ATEXT }?,
      attribute x:quotes { "true" | "false" }? # (deprecated, see Section 12.22.1)

    # Allow annotation attribute on <uri>
    attlist.uri &=
      attribute x:annotation { ATEXT }?

    # Extend attribute set for <xref> (see Section 11.32)
    attlist.xref &=
      attribute derivedContent { text }?, # (see [RFC7991bis], Appendix B.3)
      attribute x:fmt  { "()" | "," | "of" | "number" | "sec" |
                         "none" }?,
      attribute x:rel  { ATEXT }?,
      attribute x:sec  { ATEXT }?,
      attribute x:title  { ATEXT }?,
      attribute relative  { ATEXT }?,
      attribute section  { ATEXT }?,
      attribute sectionFormat  { "bare" | "comma" | "of" | "parens" }?

    # Set of artwork (see Section 12.1)
    v3_artset =
      element artset {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        artwork+
      }

    # Side Note (see Section 12.2)
    v3_aside =
      element aside {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        (artwork
          | figure
          | iref
          | t
          | v3_blockquote
          | v3_dl
          | v3_ol
          | v3_table
          | v3_ul)*
      }

    # BCP14/RFC2119 keywords (see Section 12.3)
    v3_bcp14 =
      element bcp14 {
        TEXT
      }

    # Blockquote (see Section 12.4)
    v3_blockquote =
      element blockquote {
        attribute anchor { xsd:ID }?,
        attribute cite { URI }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        attribute quotedFrom { ATEXT }?,
        (
          (artwork
            | v3_dl
            | figure
            | v3_ol
            | v3_sourcecode
            | t
            | v3_ul)+
        |
          (TEXT
            | v3_bcp14
            | cref
            | v3_em
            | eref
            | iref
            | v3_strong
            | v3_sub
            | v3_sup
            | v3_tt
            | xref)+
        )
      }

    # Boilerplate (see Section 12.4)
    v3_boilerplate =
      element boilerplate {
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        section+
      }

    # Forced Line Break (see Section 12.6)
    v3_br =
      element br {
        empty
      }

    # (see Section 12.7)
    v3_cityarea =
      element cityarea {
        attribute ascii { ATEXT }?,
        TEXT
      }

    # (see Section 12.8)
    v3_contact =
      element contact {
        attribute initials { text }?,
        attribute asciiInitials { text }?,
        attribute surname { text }?,
        attribute asciiSurname { text }?,
        attribute fullname { text }?,
        attribute asciiFullname { text }?,
        organization?,
        address?
      }

    # Mapping of reference names to display names (see Section 12.9)
    v3_displayreference =
      element displayreference {
        attribute target { xsd:IDREF },
        attribute to { ATEXT }
      }

    # Definition List Description Element (see Section 12.10)
    v3_dd =
      element dd {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        ((v3_artset
          | artwork
          | figure
          | t
          | v3_aside
          | v3_dl
          | v3_ol
          | v3_table
          | v3_sourcecode
          | v3_ul)+ |
        (TEXT
          | cref
          | eref
          | iref
          | xref
          | v3_bcp14
          | v3_br
          | v3_em
          | v3_sub
          | v3_sup
          | v3_tt
          | v3_strong
          | v3_u
          | x_ref)*
        )
      }

    # Definition List (see Section 12.11)
    v3_dl =
      element dl {
        attribute anchor { xsd:ID }?, # (see [RFC7991bis], Section 2.21.1)
        attribute indent { text }?,
        attribute newline { "false" | "true" }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        attribute spacing { "normal" | "compact" }?,
        (v3_dt, v3_dd)+
      }

    # Definition List Description Term (see Section 12.12)
    v3_dt =
      element dt {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        (TEXT
          | cref
          | eref
          | iref
          | xref
          | v3_em
          | v3_tt
          | v3_strong)*
      }

    # Emphasized Text (see Section 12.13)
    v3_em =
      element em {
        attribute anchor { xsd:ID }?,
        (TEXT
          | eref
          | iref
          | xref
          | v3_strong
          | x_ref)*
      }

    # Extended Postal Address (see Section 12.14)
    v3_extaddr =
      element extaddr {
        attribute ascii { ATEXT }?,
        TEXT
      }

    # Definition List (see Section 12.15)
    v3_li =
      element li {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        ((v3_artset
          | artwork
          | figure
          | v3_blockquote
          | v3_dl
          | v3_ol
          | t
          | v3_table
          | v3_sourcecode
          | v3_ul
        )+
          |
        (TEXT
          | cref
          | eref
          | iref
          | xref
          | v3_bcp14
          | v3_em
          | v3_strong
          | v3_sub
          | v3_sup
          | v3_tt
          | v3_u
          | x_dfn
          | x_ref)*
        )
      }

    # Container for additional links (see Section 12.16)
    v3_link =
      element link {
        attribute href { text },
        attribute rel { text }?
      }

    # Section/Figure/Table Name (see Section 12.17)
    v3_name =
      element name {
        attribute slugifiedName { text }?, # (see [RFC7991bis], Appendix B.2)
        (TEXT
          | cref
          | v3_br
          | v3_em
          | v3_sup
          | v3_tt
          | xref)*
      }

    # Ordered List (see Section 12.18)
    v3_ol =
      element ol {
        attribute anchor { xsd:ID }?,
        attribute indent { text }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        attribute start { TEXT }?,
        attribute group { TEXT }?,
        attribute type { TEXT }?,
        v3_li+
      }

    # Extended Postal Address (see Section 12.19)
    v3_pobox =
      element pobox {
        attribute ascii { ATEXT }?,
        TEXT
      }

    # Line in postal address (see Section 12.20)
    v3_postalLine =
      element postalLine {
        attribute ascii { TEXT }?,
        TEXT
      }

    # EXPERIMENTAL DO NOT USE YET (see Section 12.24)
    v3_relref =
      element relref {
        attribute derivedLink { text }?, # (see [RFC7991bis], Appendix B.3)
        attribute displayFormat { "of" | "comma" | "parens" | "bare" }?,
        attribute relative { text }?,
        attribute section { text },
        attribute target { xsd:IDREF },
        TEXT
      }

    # additional content for references (see Section 12.21)
    v3_refcontent =
      element refcontent {
        (TEXT
          | v3_em)*
      }

    # reference group (see Section 12.23)
    v3_referencegroup =
      element referencegroup {
        attribute anchor { xsd:ID },
        attribute target { URI }?,
        (reference
          | xi_include)+
      }

    # (see Section 12.26)
    v3_sortingcode =
      element sortingcode {
        attribute ascii { ATEXT }?,
        TEXT
      }

    # Source Code (see Section 12.27)
    v3_sourcecode =
      element sourcecode {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        attribute markers { text }?, #(see [V3IMPNOTES], Section 3.1.22)
        attribute name { text }?,
        attribute src { text }?,
        attribute type { text }?,
        attribute x:lang { "" }?,
        (TEXT
          | iref
          | xref
          | x_ref)*
      }

    # Emphasized Text (see Section 12.28)
    v3_strong =
      element strong {
        attribute anchor { xsd:ID }?,
        (TEXT
          | xref
          | v3_em
          | x_ref)*
      }

    # Subscript (see Section 12.29)
    v3_sub =
      element sub {
        (TEXT
          | v3_sup)*
      }

    # Superscript (see Section 12.30)
    v3_sup =
      element sup {
        (TEXT
          | v3_sub)*
      }

    # Table (see Section 12.32)
    v3_table =
      element table {
        attribute anchor { xsd:ID }?,
        attribute align { "left" | "center" | "right" }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        v3_name?,
        iref*,
        v3_thead?,
        v3_tbody+,
        v3_tfoot?
      }

    # Table Body (see Section 12.33)
    v3_tbody =
      element tbody {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        v3_tr+
      }

    # Table Contents Cell (see Section 12.34)
    v3_td =
      element td {
        attribute anchor { xsd:ID }?,
        attribute align { "left" | "center" | "right" }?,
        attribute colspan { text }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        attribute rowspan { text }?,
        ( (t
           | v3_dl
           | v3_ol
           | v3_sourcecode
           | v3_ul
          )+
          | (TEXT
             | v3_bcp14
             | v3_br
             | cref
             | v3_em
             | eref
             | v3_strong
             | v3_sub
             | v3_sup
             | v3_tt
             | xref)*
        )
      }

    # Table Footer (see Section 12.35)
    v3_tfoot =
      element tfoot {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        v3_tr
      }

    # Table Header Cell (see Section 12.36)
    v3_th =
      element th {
        attribute anchor { xsd:ID }?,
        attribute align { "left" | "center" | "right" }?,
        attribute colspan { text }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        attribute rowspan { text }?,
        ( (t
           | v3_dl
           | v3_ol
           | v3_sourcecode
           | v3_ul
          )+
          | (TEXT
             | v3_bcp14
             | cref
             | v3_em
             | eref
             | v3_strong
             | v3_sub
             | v3_sup
             | v3_tt
             | xref)*
        )
      }

    # Table Head (see Section 12.37)
    v3_thead =
      element thead {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        v3_tr+
      }

    # Table Row (see Section 12.38)
    v3_tr =
      element tr {
        attribute anchor { xsd:ID }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        (
          v3_td
          | v3_th
        )+
      }

    # Monospaced Text (see Section 12.39)
    v3_tt =
      element tt {
        (TEXT
          | xref
          | v3_em
          | x_ref)*
      }

    # Non-ASCII characters (see Section 12.40)
    v3_u =
      element u {
        attribute ascii { text }?,
        attribute format { text }?,
        TEXT
      }

    # Unordered List (see Section 12.41)
    v3_ul =
      element ul {
        attribute anchor { xsd:ID }?,
        attribute bare { "false" | "true" }?, # but see <https://trac.tools.ietf.org/tools/xml2rfc/trac/ticket/547>
        attribute indent { text }?,
        attribute empty { "false" | "true" }?,
        attribute pn { text }?, # (see [RFC7991bis], Appendix B.2)
        v3_li+
      }

    # SVG (see Section 12.31)
    v3_svg =
      element svg:svg {
        (attribute * { text }
            | text
            | anySVGElement)*
      }

     anySVGElement =
        element svg:* {
           (attribute * { text }
            | text
            | anySVGElement)*
        }

    # Conversion to ABNF char sequence (see Section 11.1)
    x_abnf-char-sequence =
      element x:abnf-char-sequence {
        TEXT
      }

    # Aliasing of anchors (see Section 11.2)
    x_anchor-alias =
      element x:anchor-alias {
        attribute value { TEXT },
        empty
      }

    # Contributor information (see Section 11.9)
    # (experimental)
    x_contributor =
      element x:contributor {
        attlist.author,
        organization?,
        address?
      }

    # Supply feedback links (see Section 11.11)
    x_feedback =
      element x:feedback {
        attribute template { TEXT },
        empty
      }

    # Including Author information
    # (experimental)
    x_include-author =
      element x:include-author {
        attribute target { xsd:IDREF }
      }

    # Setting section numbers for internally generated sections
    # (experimental)
    x_assign-section-number =
      element x:assign-section-number {
        attribute builtin-target { "authors" },
        attribute number { TEXT },
        empty
      }

    # Bottom line of box drawing (see Section 11.3)
    x_bb =
      element x:bb {
        (TEXT
          | iref
          | xref
          | x_bb
          | x_bc
          | x_bt
          | x_ref)*
      }

    # Center line of box drawing (see Section 11.4)
    x_bc =
      element x:bc {
        (TEXT
          | iref
          | spanx
          | xref
          | x_bb
          | x_bc
          | x_bt
          | x_ref)*
      }

    # BCP14/RFC2119 keywords (see Section 11.5)
    x_bcp14 =
      element x:bcp14 {
        TEXT
      }

    # Blockquote (see Section 11.6)
    x_blockquote =
      element x:blockquote {
        attribute anchor { xsd:ID }?,
        attribute cite { URI }?,
        t+
      }

    # Top line of box drawing (see Section 11.7)
    x_bt =
      element x:bt {
        (TEXT
          | iref
          | xref
          | x_bb
          | x_bc
          | x_bt
          | x_ref)*
      }

    # Unicode character map entry (see Section 11.8)
    x_c =
      element x:c {
        attribute c { TEXT },
        attribute d { TEXT }?,
        attribute n { TEXT }
      }

    # declaration of definition in external reference
    x_defines =
      element x:defines {
        TEXT
      }

    # Definition (see Section 11.10)
    x_dfn =
      element x:dfn {
        attribute anchor { xsd:ID }?,
        (TEXT
          | iref)*
      }

    # Heading (see Section 11.12)
    x_h =
      element x:h {
        TEXT
      }

    # declaration of anchor in external reference
    x_has =
      element x:has {
        attribute anchor { xsd:ID }?
      }

    # Heading (see Section 11.13)
    x_highlight =
      element x:highlight {
        TEXT
      }

    # Length Measurement (see Section 11.14)
    x_length-of =
      element x:length-of {
        attribute indented { NUMBER }?,
        attribute target { xsd:IDREF },
        empty
      }

    # Link (see Section 11.15)
    x_link =
      element x:link {
        attribute basename { URI }?,
        attribute href { URI }?,
        attribute title { TEXT }?,
        attribute rel { TEXT },
        empty
      }

    # Extended list item (see Section 11.16)
    x_lt =
      element x:lt {
        attribute anchor { xsd:ID }?,
        attribute hangText { TEXT }?,
        t+
      }

    # Note (see Section 11.17)
    x_note =
      element x:note {
        attribute anchor { xsd:ID }?,
        t+
      }

    # Signal XML content (see Section 11.18)
    x_parse-xml =
      element x:parse-xml {
        (TEXT
          | xref)*
      }

    # Inline prose in a reference (see Section 11.19)
    x_prose =
      element x:prose {
        TEXT
      }

    # Inline quote (see Section 11.20)
    x_q =
      element x:q {
        TEXT
      }

    # Anchor reference (see Section 11.21)
    x_ref =
      element x:ref {
        attribute anchor { xsd:ID }?,
        TEXT
      }

    # source information (see Section 11.22)
    x_source =
      element x:source {
        attribute basename { ATEXT }?,
        attribute href { URI },
        x_defines*,
        x_has*
      }

    # superscript (see Section 11.23)
    x_sup =
      element x:sup {
        TEXT
      }

    # Inline Span
    x_span =
      element x:span {
        attribute anchor { xsd:ID }?,
        attribute x:lang { "" }?,
        (TEXT
          | x_parse-xml)*
      }

    # Unicode character map (see Section 11.24)
    x_u-map =
      element x:u-map {
        x_c*
      }

    # Nop (for alignment in source)
    x_x =
      element x:x {
        empty
      }

    # XInclude (see Section 12.43)
    xi_include =
      element xi:include {
        attribute href { text },
        empty
      }

    # Embed RDF statements
    rdf_Description =
      element rdf:Description {
        rdf_content
      }

    rdf_content =
      ( TEXT | element * { rdf_content })*

## Appendix B. Implementation Notes

### B.1. Recognized type attributes for <artwork> element

Specific values in the <artwork> element's "type" attribute are recognized and cause a different visual style to be used:¶

Type | Comment
--- | ---
abnf | ABNF as per [RFC5234]
abnf2045 | ABNF as per [RFC2045]
abnf2616 | ABNF as per [RFC2616], Section 2.1
abnf7230 | ABNF as per [RFC7230], Section 1.2
application/relax-ng-compact-syntax | Relax NG Compact Syntax as per [RNC]
application/xml-dtd | XML DTD
code | monospaced text (with outline)
drawing | drawing (with outline)
example | monospaced text (with outline)
image/* | images (to be used with "src" attribute)
inline | monospaced text (no outline)
message/http; msgtype="request" | HTTP message, as per [RFC7230], Section 8.3.1
message/http; msgtype="response" | HTTP message, as per [RFC7230], Section 8.3.1
pdu | pdu (with outline)
svg and image/svg+xml | SVG

## Appendix C. Examples

### C.1. Using the 'Internal Subset'

The prolog of the XML document can both be used to refer to an external DTD, and also to define internal entities (Section 2.8 of [XML]):¶

    <?xml version="1.0"?>
    <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

    <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

      <!-- use "&MAY;" for a BCP 14 "MAY", see Section 11.5 -->
      <!ENTITY MAY
      "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MAY</bcp14>">

      <!-- re-declare "&nbsp;" as code point 160 (non-breaking space) -->
      <!-- you may need this for UAs that do not read external DTDs -->
      <!ENTITY nbsp
      "&#160;">

      <!-- allow later RFC2616 reference using "&rfc2616;" -->
      <!-- the data will be fetched from xml.resource.org -->
      <!ENTITY rfc2616 SYSTEM
      "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml">

      <!-- allow a custom reference using "&mydraft;" -->
      <!-- the data will be fetched from the same location as the
           source file -->
      <!ENTITY mydraft SYSTEM "reference.mydraft.xml">
    ]>

Note: including entities from a remote site will not work in browsers due to the Same-Origin policy.

### C.2. Customization

The XSLT code can be customized by creating a custom XSLT file that uses <xsl:import> to include the original code, and just overrides particular rules.¶

For instance, the code below overrides several attributes in rfc2629toFO.xslt, changing the color, spacing and font family for headers.

    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                   version="1.0">

      <xsl:import href="rfc2629toFO.xslt"/>

      <xsl:attribute-set name="h1">
        <xsl:attribute name="color">darkblue</xsl:attribute>
        <xsl:attribute name="font-family">sans-serif</xsl:attribute>
        <xsl:attribute name="space-before">24pt</xsl:attribute>
      </xsl:attribute-set>

      <xsl:attribute-set name="h2">
        <xsl:attribute name="color">darkblue</xsl:attribute>
        <xsl:attribute name="font-family">sans-serif</xsl:attribute>
        <xsl:attribute name="space-before">18pt</xsl:attribute>
        <xsl:attribute name="space-after">3pt</xsl:attribute>
      </xsl:attribute-set>

      <xsl:attribute-set name="h3">
        <xsl:attribute name="color">darkblue</xsl:attribute>
        <xsl:attribute name="font-family">sans-serif</xsl:attribute>
        <xsl:attribute name="space-before">16pt</xsl:attribute>
        <xsl:attribute name="space-after">2pt</xsl:attribute>
      </xsl:attribute-set>

    </xsl:transform>

Note: the name for the attribute sets may change in the future as more working is done with respect to customizability. In any case, overriding the settings in a separate file will be easier to maintain. Please contact the author if you find yourself trying to override style definitions that currently do not use attribute sets.¶

Note: the CSS style information used in rfc2629.xslt can be overriden in a similar (but less granular) way: just overwrite the template called "insertCss". As for XSL-FO, the class names may change in future.¶

## Appendix D. Producing the IETF 'Boilerplate'

Various attributes of the <rfc> element plus some child elements of <front> affect the automatically generated parts of the front page, such as the tabular information at the beginning, the "Status Of This Memo", and the "Copyright Notice".¶

When submitting an Internet Draft, this "boilerplate" is checked by "Idnits" (<http://tools.ietf.org/tools/idnits/>) for compliance with the current Intellectual Property rules, and thus it is important to set the correct values.¶

Furthermore, the RFC Production Center uses RFC7749-based tools to generate the final RFC text, so the more accurate the supplied information is, the less additional work is left, and the risk for errors in producing the final (and immutable!) document is reduced.¶

Note: this only applies to the case when IETF documents are produced. The "private" processing instruction allows to switch off most of the autogeneration logic.¶

The individual attributes on the <rfc> element are discussed in detail in Appendix A of [RFC7749].¶

## Appendix E. License

Copyright (c) 2006-2019, Julian Reschke (julian.reschke@greenbytes.de)¶

All rights reserved.¶

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: ¶

- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of Julian Reschke nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.¶

## Index

A B C D E F G H I J K L M N O P Q R S T U V X

- A
  - abnf-char-sequence Extension Element 11.1, A
  - abort-on PI pseudo-attribute 3.3.1
  - allow-markup-in-artwork PI pseudo-attribute 3.3.2
  - alternate HTML LINK element 6.2
  - anchor-alias Extension Element 11.2, A
  - Anchors
    - rfc.abstract 4
    - rfc.authors 4
    - rfc.copyright 4
    - rfc.copyrightnotice 4
    - rfc.figure.n 4, 4
    - rfc.figure.u.n 4, 4
    - rfc.index 4
    - rfc.ipr 4
    - rfc.iref.n 4
    - rfc.note.n 4
    - rfc.references 4, 4
    - rfc.section.n 4
    - rfc.section.n.p.m 4
    - rfc.status 4
    - rfc.toc 4
    - rfc.xref.name.n 4
  - AntennaHouse XSL Formatter 9.1
  - Apache FOP 9.1
  - appendix HTML LINK element 6.2
  - artset V3 Extension Element 12.1, A
  - aside V3 Extension Element 12.2, A
  - assign-section-number Extension Element A
  - author HTML LINK element 6.2
  - authors-section PI pseudo-attribute 3.3.3
  - authorship PI pseudo-attribute 3.1
- B
  - background PI pseudo-attribute 3.1
  - bb Extension Element 11.3, A
  - bc Extension Element 11.4, A
  - bcp14 Extension Element 11.5, A
  - bcp14 V3 Extension Element 12.3, A
  - BCP97 13.1, 14
  - blockquote Extension Element 11.6, A
  - blockquote V3 Extension Element 12.4, A
  - boilerplate V3 Extension Element 12.5, A
  - br V3 Extension Element 12.6
  - bt Extension Element 11.7, A
- C
  - c Extension Element 11.8, A
  - chapter HTML LINK element 6.2
  - CHM format 8
  - cityarea V3 Extension Element 12.7, A
  - comments PI pseudo-attribute 3.1
  - compact PI pseudo-attribute 3.1
  - contact V3 Extension Element 12.8, A
  - contents HTML LINK element 6.2
  - contributor Extension Element 11.9, A
  - copyright HTML LINK element 6.2
  - Creator DCMI property 6.4
  - css-contents PI pseudo-attribute 3.3.4
  - css-resource PI pseudo-attribute 3.3.5
- D
  - dark-mode PI pseudo-attribute 3.3.6
  - Date.Issued DCMI property 6.4
  - DC-HTML 6.4, 14
  - DCMI properties
    - Creator 6.4
    - Date.Issued 6.4
    - Description.Abstract 6.4
    - Identifier 6.4
    - isPartOf 6.4
    - Relation.Replaces 6.4
  - dd V3 Extension Element 12.10, A
  - defines Extension Element A
  - Description.Abstract DCMI property 6.4
  - dfn Extension Element 11.10, A
  - diff-uri PI pseudo-attribute 3.3.7
  - displayreference V3 Extension Element 12.9, A
  - dl V3 Extension Element 12.11, A
  - docmapping PI pseudo-attribute 3.1
  - doi-uri PI pseudo-attribute 3.3.8
  - dt V3 Extension Element 12.12, A
  - duplex PI pseudo-attribute 3.3.9
- E
  - editing PI pseudo-attribute 3.1
  - em V3 Extension Element 12.13, A, A
  - errata PI pseudo-attribute 3.3.10, 6.6
  - extaddr V3 Extension Element 12.14, A, A
  - Extension Elements
    - abnf-char-sequence 11.1, A
    - anchor-alias 11.2, A
    - assign-section-number A
    - bb 11.3, A
    - bc 11.4, A
    - bcp14 11.5, A
    - blockquote 11.6, A
    - bt 11.7, A
    - c 11.8, A
    - contributor 11.9, A
    - defines A
    - dfn 11.10, A
    - feedback 11.11, A
    - h 11.12, A
    - has A
    - highlight 11.13, A
    - include-author A
    - length-of 11.14, A
    - link 11.15, A
    - lt 11.16, A
    - note 11.17, A
    - parse-xml 11.18, A
    - prose 11.19, A
    - q 11.20, A
    - rdf:Description A
    - ref 11.21, A
    - source 11.22, A
    - span A
    - sup 11.23, A
    - u-map 11.24, A
    - x A
- F
  - feedback Extension Element 11.11, A
  - Firefox
    - 1.*/2.* 5.2
    - 3.* 5.2
  - footer PI pseudo-attribute 3.1
- G
  - generator HTML META element 6.3
  - Google Chrome 5.2
  - Grammar A
- H
  - h Extension Element 11.12, A
  - has Extension Element A
  - header PI pseudo-attribute 3.1
  - highlight Extension Element 11.13, A
  - HTML compliance 6.1
  - HTML LINK elements
    - alternate 6.2
    - appendix 6.2
    - author 6.2
    - chapter 6.2
    - contents 6.2
    - copyright 6.2
    - index 6.2
  - HTML META elements
    - generator 6.3
    - keywords 6.3
  - html-pretty-print PI pseudo-attribute 3.3.11
  - HTML5 6.1, 6.1, 11.6, 11.10, 11.20, 11.23, 14
    - Section 4.4.4 11.6
    - Section 4.5.16 11.23
    - Section 4.5.7 11.20
    - Section 4.5.8 11.10
    - Section 8.1.1 6.1
- I
  - Identifier DCMI property 6.4
  - include PI pseudo-attribute 3.1, 13.8
  - include-author Extension Element A
  - include-generator PI pseudo-attribute 3.3.12
  - include-index PI pseudo-attribute 3.3.13
  - include-references-in-index PI pseudo-attribute 3.3.14
  - index HTML LINK element 6.2
  - inline PI pseudo-attribute 3.1
  - insert-metadata PI pseudo-attribute 3.3.15, 6.5
  - Internet Explorer 6 5.2
  - Internet Explorer 7 5.2
  - Internet Explorer 8 5.2
  - Internet Explorer 9 5.2
  - internet-draft-reference-base-uri PI pseudo-attribute 3.3.16
  - internet-draft-uri PI pseudo-attribute 3.3.17
  - iprnotified PI pseudo-attribute 3.1
  - isbn-uri PI pseudo-attribute 3.3.19
  - isPartOf DCMI property 6.4
- J
  - justification PI pseudo-attribute 3.3.18
- K
  - keywords HTML META element 6.3
- L
  - length-of Extension Element 11.14, A
  - li V3 Extension Element 12.15, A
  - link Extension Element 11.15, A
  - link V3 Extension Element 12.16, A
  - linkmailto PI pseudo-attribute 3.1
  - log-level PI pseudo-attribute 3.3.20
  - lt Extension Element 11.16, A
- M
  - maxwidth PI pseudo-attribute 3.3.21
  - Microsoft Help 8
  - Mozilla 5.2, 5.2
  - MSXML3 5.1
  - MSXML4 5.1
  - multiple-initials PI pseudo-attribute 3.1
- N
  - name V3 Extension Element 12.17, A
  - needLines PI pseudo-attribute 3.2
  - NoScript 5.2
  - note Extension Element 11.17, A
- O
  - ol V3 Extension Element 12.18, A
  - Opera 5.2
- P
  - Parameters
    - xml2rfc-authorship 3.1
    - xml2rfc-background 3.1
    - xml2rfc-comments 3.1
    - xml2rfc-compact 3.1
    - xml2rfc-editing 3.1
    - xml2rfc-ext-abort-on 3.3.1
    - xml2rfc-ext-allow-markup-in-artwork 3.3.2
    - xml2rfc-ext-authors-section 3.3.3
    - xml2rfc-ext-css-contents 3.3.4
    - xml2rfc-ext-css-resource 3.3.5
    - xml2rfc-ext-dark-mode 3.3.6
    - xml2rfc-ext-diff-uri 3.3.7
    - xml2rfc-ext-doi-uri 3.3.8
    - xml2rfc-ext-duplex 3.3.9
    - xml2rfc-ext-errata 3.3.10, 6.6
    - xml2rfc-ext-html-pretty-print 3.3.11
    - xml2rfc-ext-include-generator 3.3.12
    - xml2rfc-ext-include-index 3.3.13
    - xml2rfc-ext-include-references-in-index 3.3.14
    - xml2rfc-ext-insert-metadata 3.3.15, 6.5
    - xml2rfc-ext-internet-draft-uri 3.3.17
    - xml2rfc-ext-isbn-uri 3.3.19
    - xml2rfc-ext-justification 3.3.18
    - xml2rfc-ext-log-level 3.3.20
    - xml2rfc-ext-maxwidth 3.3.21
    - xml2rfc-ext-parse-xml-in-artwork 3.3.22
    - xml2rfc-ext-rfc-erratam-uri 3.3.23
    - xml2rfc-ext-rfc-erratum-uri 3.3.24
    - xml2rfc-ext-rfc-reference-base-uri 3.3.16, 3.3.25
    - xml2rfc-ext-rfc-uri 3.3.26
    - xml2rfc-ext-sec-no-trailing-dots 3.3.27
    - xml2rfc-ext-std-uri 3.3.28
    - xml2rfc-ext-support-highwire-press-tags 3.3.29
    - xml2rfc-ext-support-open-graph-tags 3.3.30
    - xml2rfc-ext-support-rfc2731 3.3.31
    - xml2rfc-ext-ucd-file 3.3.32
    - xml2rfc-ext-xml2rfc-backend 3.3.33
    - xml2rfc-ext-xref-with-text-generate 3.3.34
    - xml2rfc-footer 3.1
    - xml2rfc-header 3.1
    - xml2rfc-inline 3.1
    - xml2rfc-iprnotified 3.1
    - xml2rfc-linkmailto 3.1
    - xml2rfc-multiple-initials 3.1
    - xml2rfc-private 3.1
    - xml2rfc-refparent 3.1
    - xml2rfc-rfcedstyle 3.1
    - xml2rfc-sortrefs 3.1
    - xml2rfc-symrefs 3.1
    - xml2rfc-toc 3.1
    - xml2rfc-tocdepth 3.1
    - xml2rfc-topblock 3.1
  - parse-xml Extension Element 11.18, A
  - parse-xml-in-artwork PI pseudo-attribute 3.3.22
  - pobox V3 Extension Element 12.19
  - postalLine V3 Extension Element 12.20, A
  - private PI pseudo-attribute 3.1, D
  - Processing Instruction pseudo attributes
    - abort-on 3.3.1
    - allow-markup-in-artwork 3.3.2
    - authors-section 3.3.3
    - authorship 3.1
    - background 3.1
    - comments 3.1
    - compact 3.1
    - css-contents 3.3.4
    - css-resource 3.3.5
    - dark-mode 3.3.6
    - diff-uri 3.3.7
    - docmapping 3.1
    - doi-uri 3.3.8
    - duplex 3.3.9
    - editing 3.1
    - errata 3.3.10, 6.6
    - footer 3.1
    - header 3.1
    - html-pretty-print 3.3.11
    - include 3.1, 13.8
    - include-generator 3.3.12
    - include-index 3.3.13
    - include-references-in-index 3.3.14
    - inline 3.1
    - insert-metadata 3.3.15, 6.5
    - internet-draft-reference-base-uri 3.3.16
    - internet-draft-uri 3.3.17
    - iprnotified 3.1
    - isbn-uri 3.3.19
    - justification 3.3.18
    - linkmailto 3.1
    - log-level 3.3.20
    - maxwidth 3.3.21
    - multiple-initials 3.1
    - needLines 3.2
    - parse-xml-in-artwork 3.3.22
    - private 3.1, D
    - refparent 3.1
    - rfc-errata-uri 3.3.23
    - rfc-erratum-uri 3.3.24
    - rfc-reference-base-uri 3.3.25
    - rfc-uri 3.3.26
    - rfcedstyle 3.1
    - sec-no-trailing-dots 3.3.27
    - slides 3.2
    - sortrefs 3.1
    - std-uri 3.3.28
    - strict 3.2
    - subcompact 3.2
    - support-highwire-press-tags 3.3.29
    - support-open-graph-tags 3.3.30
    - support-rfc2731 3.3.31
    - symrefs 3.1
    - toc 3.1
    - tocdepth 3.1
    - tocindent 3.2
    - tocompact 3.2
    - topblock 3.1
    - ucd-file 3.3.32
    - xml2rfc-backend 3.3.33
    - xref-with-text-generate 3.3.34
  - prose Extension Element 11.19, A
- Q
  - q Extension Element 11.20, A
- R
  - rdf:Description Extension Element A
  - ref Extension Element 11.21, A
  - refcontent V3 Extension Element 12.21, A
  - reference V3 Extension Element 12.22
  - referencegroup V3 Extension Element 12.23, A
  - refparent PI pseudo-attribute 3.1
  - Relation.Replaces DCMI property 6.4
  - RELAX NG Compact Schema A
  - relref V3 Extension Element 12.24, A
  - rfc-errata-uri PI pseudo-attribute 3.3.23
  - rfc-erratum-uri PI pseudo-attribute 3.3.24
  - rfc-reference-base-uri PI pseudo-attribute 3.3.25
  - rfc-uri PI pseudo-attribute 3.3.26
  - rfc.abstract anchor 4
  - rfc.authors anchor 4
  - rfc.copyright anchor 4
  - rfc.copyrightnotice anchor 4
  - rfc.figure.n anchor 4, 4
  - rfc.figure.u.n anchor 4, 4
  - rfc.index anchor 4
  - rfc.ipr anchor 4
  - rfc.iref.n anchor 4
  - rfc.note.n anchor 4
  - rfc.references anchor 4
  - rfc.references.n anchor 4
  - rfc.section.n anchor 4
  - rfc.section.n.p.m anchor 4
  - rfc.status anchor 4
  - rfc.toc anchor 4
  - rfc.xref.name.n anchor 4
  - RFC2026 11.30, 14
    - Section 4.1 11.30
  - RFC2045 14, B.1
  - RFC2119 11.5, 11.32, 14
    - Section 5 11.32
  - RFC2616 14, B.1
    - Section 2.1 B.1
  - RFC2629 1, 14
  - RFC2648 6.4, 14
  - RFC2731 6.4, 14
  - RFC5234 14, B.1
  - RFC7230 14, B.1, B.1, B.1
    - Section 1.2 B.1
    - Section 8.3.1 B.1, B.1
  - RFC7749 1, 2, 14, D
    - Appendix A D
  - RFC7991bis 2, 12, 12.2, 12.3, 12.4, 12.5, 12.9, 12.10, 12.11, 12.12, 12.13, 12.15, 12.16, 12.17, 12.18, 12.20, 12.21, 12.22, 12.23, 12.24, 12.25, 12.25.1, 12.25.2, 12.27, 12.28, 12.29, 12.30, 12.31, 12.32, 12.33, 12.34, 12.35, 12.36, 12.37, 12.38, 12.39, 12.41, 12.43, 13.4, 14, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A
    - Section 2 A
    - Section 2.1.1 A
    - Section 2.7 12.2
    - Section 2.10 12.3
    - Section 2.11 12.4, 12.5
    - Section 2.17.2 A
    - Section 2.19 12.10
    - Section 2.20 12.9
    - Section 2.21 12.11
    - Section 2.21.1 A
    - Section 2.22 12.12
    - Section 2.23 12.13
    - Section 2.31 12.15
    - Section 2.32 12.16
    - Section 2.34 12.17
    - Section 2.36 12.18
    - Section 2.41 12.20
    - Section 2.42 12.21
    - Section 2.43 12.22
    - Section 2.44 12.23
    - Section 2.47 12.24
    - Section 2.48.4 A
    - Section 2.48.11 A
    - Section 2.48.13 A, A
    - Section 2.48.14 A
    - Section 2.48.15 A
    - Section 2.49 12.25
    - Section 2.49.2 12.25.1
    - Section 2.49.3 12.25.2
    - Section 2.52 12.27
    - Section 2.54 12.28
    - Section 2.55 12.29
    - Section 2.56 12.30
    - Section 2.58 12.32
    - Section 2.59 12.33
    - Section 2.60 12.34
    - Section 2.61 12.35
    - Section 2.62 12.36
    - Section 2.63 12.37
    - Section 2.65 12.38
    - Section 2.66 12.39
    - Section 2.67 12.41
    - Section 4 12.31
    - Appendix B.1 12.43
    - Appendix B.2 A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A
    - Appendix B.3 A, A, A, A
  - RFC7991bis-01 12.22.1, 14
    - Section 2.39.2 12.22.1
  - rfcedstyle PI pseudo-attribute 3.1
  - RNC 14, A, B.1
- S
  - Safari 5.2, 5.2
    - 3.* 5.2
  - Saxon 5.1
  - Schema A
  - sec-no-trailing-dots PI pseudo-attribute 3.3.27
  - section V3 Extension Element 12.25
  - slides PI pseudo-attribute 3.2
  - sortingcode V3 Extension Element 12.26, A
  - sortrefs PI pseudo-attribute 3.1
  - source Extension Element 11.22, A
  - sourcecode V3 Extension Element 12.27, A
  - span Extension Element A
  - std-uri PI pseudo-attribute 3.3.28
  - strict PI pseudo-attribute 3.2
  - strong V3 Extension Element 12.28, A
  - sub V3 Extension Element 12.29, A
  - subcompact PI pseudo-attribute 3.2
  - sup Extension Element 11.23, A
  - sup V3 Extension Element 12.30, A
  - support-highwire-press-tags PI pseudo-attribute 3.3.29
  - support-open-graph-tags PI pseudo-attribute 3.3.30
  - support-rfc2731 PI pseudo-attribute 3.3.31
  - svg V3 Extension Element 12.31, A
  - symrefs PI pseudo-attribute 3.1
- T
  - table V3 Extension Element 12.32, A
  - tbody V3 Extension Element 12.33, A
  - td V3 Extension Element 12.34, A
  - tfoot V3 Extension Element 12.35, A
  - th V3 Extension Element 12.36, A
  - thead V3 Extension Element 12.37, A
  - toc PI pseudo-attribute 3.1
  - tocdepth PI pseudo-attribute 3.1
  - tocindent PI pseudo-attribute 3.2
  - tocompact PI pseudo-attribute 3.2
  - topblock PI pseudo-attribute 3.1
  - tr V3 Extension Element 12.38
  - tre V3 Extension Element A
  - tt V3 Extension Element 12.39, A
- U
  - u V3 Extension Element 12.40, A
  - u-map Extension Element 11.24, A
  - ucd-file PI pseudo-attribute 3.3.32
  - ul V3 Extension Element 12.41, A
- V
  - V3 Extension Elements
    - artset 12.1, A
    - aside 12.2, A
    - bcp14 12.3, A
    - blockquote 12.4, A
    - boilerplate 12.5, A
    - br 12.6, A
    - cityarea 12.7, A
    - contact 12.8, A
    - dd 12.10, A
    - displayreference 12.9, A
    - dl 12.11, A
    - dt 12.12, A
    - em 12.13, A
    - extaddr 12.14, A
    - li 12.15, A
    - link 12.16, A
    - name 12.17, A
    - ol 12.18, A
    - pobox 12.19, A
    - postalLine 12.20, A
    - refcontent 12.21, A
    - reference 12.22
    - referencegroup 12.23, A
    - relref 12.24, A
    - section 12.25
    - sortingcode 12.26, A
    - sourcecode 12.27, A
    - strong 12.28, A
    - sub 12.29, A
    - sup 12.30, A
    - svg 12.31, A
    - table 12.32, A
    - tbody 12.33, A
    - td 12.34, A
    - tfoot 12.35, A
    - th 12.36, A
    - thead 12.37, A
    - tr 12.38, A
    - tt 12.39, A
    - u 12.40, A
    - ul 12.41, A
    - xi:include 12.43
    - xref 12.42
  - V3IMPNOTES 11.26, 12.1, 12.7, 12.14, 12.19, 12.26, 12.40, 14, A, A
    - Appendix A.1 12.40
    - Section 3.1.1 12.1
    - Section 3.1.16 A
    - Section 3.1.22 A
    - Section 4.1.3.2 11.26
    - Section 4.2.7 12.7, 12.14, 12.19, 12.26
- X
  - x Extension Element A
  - Xalan 5.1
  - XHTML2 11.12, 14
  - xi:include Extension Element A
  - xi:include V3 Extension Element 12.43
  - XInclude Extension Elements
    - include A
  - XML 14, C.1
    - Section 2.8 C.1
  - xml-stylesheet PI 6
  - xml2rfc-authorship parameter 3.1
  - xml2rfc-backend PI pseudo-attribute 3.3.33
  - xml2rfc-background parameter 3.1
  - xml2rfc-comments parameter 3.1
  - xml2rfc-editing parameter 3.1, 3.1
  - xml2rfc-ext-abort-on parameter 3.3.1
  - xml2rfc-ext-allow-markup-in-artwork parameter 3.3.2
  - xml2rfc-ext-authors-section parameter 3.3.3
  - xml2rfc-ext-css-contents parameter 3.3.4
  - xml2rfc-ext-css-resource parameter 3.3.5
  - xml2rfc-ext-dark-mode parameter 3.3.6
  - xml2rfc-ext-diff-uri parameter 3.3.7
  - xml2rfc-ext-doi-uri parameter 3.3.8
  - xml2rfc-ext-duplex parameter 3.3.9
  - xml2rfc-ext-errata 6.6
  - xml2rfc-ext-errata parameter 3.3.10
  - xml2rfc-ext-html-pretty-print parameter 3.3.11
  - xml2rfc-ext-include-generator parameter 3.3.12
  - xml2rfc-ext-include-index parameter 3.3.13
  - xml2rfc-ext-include-references-in-index parameter 3.3.14
  - xml2rfc-ext-insert-metadata parameter 3.3.15, 6.5
  - xml2rfc-ext-internet-draft-uri parameter 3.3.17
  - xml2rfc-ext-isbn-uri parameter 3.3.19
  - xml2rfc-ext-justification parameter 3.3.18
  - xml2rfc-ext-log-level parameter 3.3.20
  - xml2rfc-ext-maxwidth parameter 3.3.21
  - xml2rfc-ext-parse-xml-in-artwork parameter 3.3.22
  - xml2rfc-ext-rfc-errata-uri parameter 3.3.23
  - xml2rfc-ext-rfc-erratum-uri parameter 3.3.24
  - xml2rfc-ext-rfc-reference-base-uri 3.3.16, 3.3.25
  - xml2rfc-ext-rfc-uri parameter 3.3.26
  - xml2rfc-ext-sec-no-trailing-dots parameter 3.3.27
  - xml2rfc-ext-std-uri parameter 3.3.28
  - xml2rfc-ext-support-highwire-press-tags parameter 3.3.29
  - xml2rfc-ext-support-open-graph-tags parameter 3.3.30
  - xml2rfc-ext-support-rfc2731 parameter 3.3.31
  - xml2rfc-ext-ucd-file parameter 3.3.32
  - xml2rfc-ext-xml2rfc-backend parameter 3.3.33
  - xml2rfc-ext-xref-with-text-generate parameter 3.3.34
  - xml2rfc-footer parameter 3.1
  - xml2rfc-header parameter 3.1
  - xml2rfc-inline parameter 3.1
  - xml2rfc-iprnotified parameter 3.1
  - xml2rfc-linkmailto parameter 3.1
  - xml2rfc-multiple-initials parameter 3.1
  - xml2rfc-private parameter 3.1
  - xml2rfc-refparent parameter 3.1
  - xml2rfc-rfcedstyle parameter 3.1
  - xml2rfc-sortrefs parameter 3.1
  - xml2rfc-symrefs parameter 3.1
  - xml2rfc-toc parameter 3.1
  - xml2rfc-tocdepth parameter 3.1
  - xml2rfc-topblock parameter 3.1
  - xref V3 Extension Element 12.42
  - xref-with-text-generate PI pseudo-attribute 3.3.34
  - XSL-FO 9.1, 9.1, 14
  - xsltproc 5.1
    - passing parameters 3

## Author's Address