RFC2629 through XSLTJ. Reschke
greenbytes
October 2014

Transforming RFC2629-formatted XML through XSLT


Table of Contents


1. Introduction

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

The full distribution is available at <http://greenbytes.de/tech/webdav/rfc2629xslt.zip>.


2. Supported RFC2629 elements

rfc2629.xslt supports both all RFC2629 grammar elements and the extensions implemented in xml2rfc 1.36.

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 targetPI pseudo-attributeXSLT parameter namedefaultcomment
rfcbackground
xml2rfc-background
(not set)
rfccompact
xml2rfc-compact
"no"only applies to HTML output method when printing
rfccomments
xml2rfc-comments
(not set)
rfcediting
xml2rfc-editing
"no"
rfcfooter
xml2rfc-footer
(not set)
rfcheader
xml2rfc-header
(not set)
rfcinline
xml2rfc-inline
(not set)
rfciprnotified
xml2rfc-iprnotified
"no"
rfclinkmailto
xml2rfc-linkmailto
"yes"
rfcprivate
xml2rfc-private
(not set)
rfcrefparent
xml2rfc-private
"References"Title for References sections when automatically inserted
rfcrfcedstyle
xml2rfc-rfcedstyle
(not set)(limited support)
rfcsortrefs
xml2rfc-sortrefs
"no"
rfcsymrefs
xml2rfc-symrefs
"yes"The default has changed from "no" to "yes" as of June 6, 2007 and xml2rfc 1.33pre4.
rfctoc
xml2rfc-toc
"no"
rfctocdepth
xml2rfc-tocdepth
99
rfctopblock
xml2rfc-topblock
"yes"

3.2 Unsupported xml2rfc-compatible PIs

PI targetPI pseudo-attributecomment
rfcinclude
incompatible with XML/XSLT processing model, please use external entities instead (see Appendix C.1)
rfcneedLines
rfcslides
rfcstrict
rfcsubcompact
rfctocindent
(defaults to "yes")
rfctocompact

3.3 Extension PIs

PI targetPI pseudo-attributeXSLT parameter namedefaultdescription
rfc-extallow-markup-in-artwork
xml2rfc-allow-markup-in-artwork
"no"Enables support for specific elements inside abstract elements (using this extension makes the document incompatible to the RFC2629bis DTD; see description of conversion XSLT in Section 13.4).
rfc-extauthors-section
xml2rfc-ext-authors-section
"end"When "before-appendices", place the authors section between references and appendices (this ordering was used a long time ago).
rfc-extduplex
xml2rfc-ext-duplex
noWhen set to "yes", format the PDF output for doublesided printing.
rfc-extinclude-index
xml2rfc-ext-include-index
"yes"When set to "no", no index will be generated.
rfc-extinclude-references-in-index
xml2rfc-ext-include-references-in-index
When set to "yes", index entries are generated for all references.
rfc-extjustification
xml2rfc-ext-justification
"never""never": never emit justified text, "always": always emit justified text, "print": only emit justified text for print media.
rfc-extparse-xml-in-artwork
xml2rfc-parse-xml-in-artwork
"no"May be used to enable parsing of XML content in figures (MSXML only).
rfc-extsupport-rfc2731
xml2rfc-ext-support-rfc2731
"yes"Decides whether the HTML transformation should generate META tags according Section 6.4.
rfc-extsec-no-trailing-dots
xml2rfc-ext-sec-no-trailing-dots
When set to "yes", add trailing dots to section numbers. This seems to be the preferred format in the newest RFCs.

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 nameDescription
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:

5.2 In-Browser Engines

The following browsers seem to work fine:

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 the HTML 4.01 strict DTD [HTML]. This can be checked using the W3C's online validator at <http://validator.w3.org>.

6.3 Standard HTML metadata

The following standard HTML META elements are produced:

META namedescription
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 namedescription
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

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 X(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.

An alternative is PrinceXML (see <http://www.princexml.com/>), which can produce PDF directly from (X)HTML input, based on the CSS printing information.

For instance, PDF output with text justification turned on can be produced with:

saxon input.xml rfc2629toXHTML.xslt xml2rfc-ext-justification=print \
  > output.xhtml
prince output.xhtml 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 <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.4 <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.5 <bc> element

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

11.6 <blockquote> element

This element is like the "blockquote" element in [HTML] (note this is a block-level element!). It should contain one or more <t> child elements.

11.7 <boilerplate> element

Can be used to include boilerplate (status, copyright, ...) into the front or back section. <section> elements within <x:boilerplate> appear as unnumbered sections in the output.

This element currently can not be "down-translated" for use in xml2rfc!

11.8 <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.9 <dfn> element

This element is like the "dfn" element in [HTML].

11.10 <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.11 <h> element

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

11.12 <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.13 <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 <lt> element

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

11.16 <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.17 <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.18 <prose> element

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

11.19 <q> element

This element is like the "q" element in [HTML].

11.20 <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">test</xref>
      <xref target="test">alias1</xref>
      <xref target="test">alias 2</xref>

11.21 <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.

For example:

      ...
      <xref target="RFC2616" x:fmt="of" x:rel="#PUT" />
      ...
    
      <reference target="RFC2616"/>
        ...
        <x:source href="rfc2616.xml"/>
        ...
    

11.22 <sup> element

This element is like the "sup" element in [HTML].

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

11.23 Extensions to Xml2rfc <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".

11.24 Extensions to Xml2rfc <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.25 Extensions to Xml2rfc <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.26 Extensions to Xml2rfc <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.27 Extensions to Xml2rfc <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.28 Extensions to Xml2rfc <xref> element

Three 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.

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

, (Comma)
[reference], Section sec
()
[reference] (Section sec)
anchor
Like the default format, but without brackets.
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 XML2RFCv3 Vocabulary

rfc2629.xslt experimentally supports some elements from the "V3" vocabulary, defined in [XML2RFCV3].

12.1 b Element

12.2 em Element

12.3 i Element

12.4 name Element

See Section 2.33 of [XML2RFCV3]. Currently only supported inside <section>.

12.5 strong Element

12.6 sub Element

12.7 sup Element

12.8 tt Element


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.26).

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 <http://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.


(PNG output obtained from GraphViz)

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 RFC2629bis DTD

clean-for-DTD.xslt can be used to down-convert some extensions to a format that is supported by the base xml2rfc distribution. 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.

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, 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.

14. Informative References

[BCP97]Klensin, J. and S. Hartman, “Handling Normative References to Standards-Track Documents”, BCP 97, RFC 4897, June 2007.
[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/>.
[HTML]Raggett, D., Le Hors, A., and I. Jacobs, “HTML 4.01 Specification”, W3C Recommendation REC-html401-19991224, December 1999, <http://www.w3.org/TR/1999/REC-html401-19991224>.
Latest version available at <http://www.w3.org/TR/html401>.
[RFC2026]Bradner, S., “The Internet Standards Process -- Revision 3”, BCP 9, RFC 2026, October 1996.
[RFC2045]Freed, N. and N. Borenstein, “Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies”, RFC 2045, November 1996.
[RFC2119]Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, March 1997.
[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, June 1999.
[RFC2629]Rose, M., “Writing I-Ds and RFCs using XML”, RFC 2629, June 1999.
[RFC2648]Moats, R., “A URN Namespace for IETF Documents”, RFC 2648, August 1999.
[RFC2731]Kunze, J., “Encoding Dublin Core Metadata in HTML”, RFC 2731, December 1999.
[RFC5234]Crocker, D., Ed. and P. Overell, “Augmented BNF for Syntax Specifications: ABNF”, STD 68, RFC 5234, January 2008.
[RFC5741]Daigle, L. and O. Kolkman, “RFC Streams, Headers, and Boilerplates”, RFC 5741, December 2009.
[RNC]Clark, J., “RELAX NG Compact Syntax”, OASIS, Nov 2002, <http://www.oasis-open.org/committees/relax-ng/compact-20021121.html>.
[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>.
[XML2RFCV3]Hoffman, P., “The 'XML2RFC' version 3 Vocabulary”, Internet-Draft draft-hoffman-xml2rfc-12 (work in progress), October 2014.
[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/>.

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#"

# Include rfc2629bis RNC grammar
include "rfc2629.rnc" {
  
  # Redefine <artwork> to allow markup
  artwork =
    element artwork {
      attlist.artwork,
      (TEXT
        | eref 
        | iref 
        | spanx 
        | xref
        | v3_b
        | v3_em
        | v3_i
        | 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 boilerplate
  back =
    element back {
      attlist.back,
      references*,
      section*,
      x_boilerplate?
    }

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

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

  # Redefine <front> to allow boilerplate
  front =
    element front {
      attlist.front,
      title,
      author+,
      date,
      area*,
      workgroup*,
      keyword*,
      x_boilerplate?,
      abstract?,
      note*
    }
  
  # Redefine <list> element to allow <x:lt> child elements
  \list =
    element list {
      attlist.list,
      (t+ | x_lt+)
    }    
    
  # Redefine <preamble> to allow our extension elements
  preamble =
    element preamble {
      attlist.preamble,
      (TEXT
        | xref
        | eref
        | iref
        | cref
        | spanx
        | v3_b
        | v3_em
        | v3_i
        | v3_strong
        | v3_tt
        | x_anchor-alias
        | x_bcp14)*
  }

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

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

  # Redefine <rfc> to allow our extension elements
  rfc =
    element rfc {
      attlist.rfc,
      x_link*,
      x_feedback?,
      x_assign-section-number*,
      front,
      middle,
      back?
    }

  # Redefine <section> to allow our extension elements
  section =
    element section {
      attlist.x_section,
      (t
       | figure
       | texttable
       | iref
       | section
       | v3_name
       | x_anchor-alias
       | x_blockquote
       | x_include-author
       | x_note
       | 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_b
       | v3_em
       | v3_i
       | v3_strong
       | v3_sub
       | v3_sup
       | v3_tt
       | x_abnf-char-sequence
       | x_anchor-alias
       | x_bcp14
       | x_dfn
       | x_h
       | x_q
       | x_ref
       | x_span
       | x_sup)*
    }
}

# Allow x:indent-with attribute on <artwork>
attlist.artwork &=
  attribute x:indent-with { ATEXT }?,
  attribute x:is-code-component { "no" | "yes" }?

# Allow anchor and x:annotation attributes on <author>
attlist.author &=
  attribute anchor { xsd:ID }?,
  attribute x:annotation { ATEXT }?
  
# Extend attribute set for <c> (see Section 11.24)
attlist.c &=
  attribute anchor { xsd:ID }?

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

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

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

# Extend attribute set for <rfc>
attlist.rfc &=
  attribute grddl:transformation { ATEXT }?,
  attribute x:maturity-level { "proposed" | "draft" | "internet" }?

# Extend/Relax attribute set for <section> (see Section 11.27)
attlist.x_section &=
  attribute anchor { xsd:ID }?,
  attribute title { ATEXT }?,
  attribute toc { "include" | "exclude" | "default" }?,
  attribute x:fixed-section-number { ATEXT }?

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

# Allow x:quotes attribute on <title>
attlist.title &=
  attribute x:quotes { "true" | "false" }?

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

# Extend attribute set for <xref> (see Section 11.28)
attlist.xref &=
  attribute x:fmt  { "()" | "," | "anchor" | "of" | "number" | "sec" |
                     "none" }?,
  attribute x:rel  { ATEXT }?,
  attribute x:sec  { ATEXT }?

# Strongly Emphasized Text (see Section 12.1)
v3_b =
  element b {
    (TEXT
      | xref
      | v3_i
      | x_ref)*
  }

# Emphasized Text (see Section 12.2)
v3_em =
  element em {
    (TEXT
      | xref
      | v3_strong
      | x_ref)*
  }

# Emphasized Text (see Section 12.3)
v3_i =
  element i {
    (TEXT
      | xref
      | v3_b
      | x_ref)*
  }

# Section/Figure/Table Name (see Section 12.4)
v3_name =
  element name {
    (TEXT
      | v3_tt
      | xref)*
  }

# Emphasized Text (see Section 12.5)
v3_strong =
  element strong {
    (TEXT
      | xref
      | v3_em
      | x_ref)*
  }

# Subscript (see Section 12.6)
v3_sub =
  element sub {
    (TEXT)*
  }

# Superscript (see Section 12.7)
v3_sup =
  element sup {
    (TEXT)*
  }

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

# 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
  }

# Supply feedback links (see Section 11.10)
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.4)
x_bb =
  element x:bb {
    (TEXT
      | iref
      | xref
      | x_bb
      | x_bc
      | x_bt
      | x_ref)* 
  }

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

# BCP14/RFC2119 keywords (see Section 11.3)
x_bcp14 =
  element x:bcp14 {
    "MAY"
    | "MUST"
    | "MUST NOT"
    | "NOT RECOMMENDED"
    | "OPTIONAL"
    | "RECOMMENDED"
    | "REQUIRED"
    | "SHALL"
    | "SHALL NOT"
    | "SHOULD"
    | "SHOULD NOT"
  }
  
# Blockquote (see Section 11.6)
x_blockquote =
  element x:blockquote {
    attribute cite { URI }?,
    t+
  }

# Boilerplate (see Section 11.6)
x_boilerplate =
  element x:boilerplate {
    section+
  }

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

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

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

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

# Link (see Section 11.14)
x_link =
  element x:link {
    attribute basename { URI }?,
    attribute href { URI }?,
    attribute title { TEXT }?,
    attribute rel { TEXT },
    empty
  }
  
# Extended list item (see Section 11.15)
x_lt =
  element x:lt {
    attribute anchor { xsd:ID }?,
    attribute hangText { TEXT }?,
    t+
  }

# Note (see Section 11.16)
x_note =
  element x:note {
    t+
  }

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

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

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

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

# source information (see Section 11.21)  
x_source =
  element x:source {
    attribute basename { ATEXT }?,
    attribute href { URI },
    empty
  }

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

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

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

# Embed RDF statements 
rdf_Description =
  element rdf:Description {
    rdf_content
  }
  
rdf_content =
  ( TEXT | element * { rdf_content })*

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:

TypeComment
abnfABNF as per [RFC5234]
abnf2045ABNF as per [RFC2045]
abnf2616ABNF as per [RFC2616], Section 2.1
application/relax-ng-compact-syntaxRelax NG Compact Syntax as per [RNC]
application/xml-dtdXML DTD
codemonospaced text (with outline)
drawingdrawing (with outline)
examplemonospaced text (with outline)
inlinemonospaced text (no outline)
message/http; msgtype="request"HTTP message, as per [RFC2616], Section 19.1
message/http; msgtype="response"HTTP message, as per [RFC2616], Section 19.1

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.3 -->
  <!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 PUBLIC
  "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 PUBLIC "reference.mydraft.xml">
]>

Note: including entities from a remote site will not work in Firefox, see <https://bugzilla.mozilla.org/show_bug.cgi?id=22942>.

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.


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 RFC2629-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.

D.1 The /rfc/@ipr Attribute

As of the time of this writing, this attribute value can take a long list of values. As frequently, this is not the result of a grand plan, but simply for historic reasons. Of these values, only a few are currently in use; all others are supported by the various tools for backwards compatibility with old source files.

Note: some variations of the boilerplate are selected based on the document's date; therefore it is important to specify the "year", "month" and "day" attributes of the <date> element when archiving the XML source of an Internet Draft on the day of submission.

Disclaimer: THIS ONLY PROVIDES IMPLEMENTATION INFORMATION. IF YOU NEED LEGAL ADVICE, PLEASE CONTACT A LAWYER. For further information, refer to <http://trustee.ietf.org/docs/IETF-Copyright-FAQ.pdf>.

Finally, for the current "Status Of This Memo" text, the submissionType attribute determines whether a statement about "Code Components" is inserted (this is the case for the value "IETF", which also happens to be the default). Other values, such as "independent", suppress this part of the text.

D.1.1 Current Values: '*trust200902'

The name for these values refers to the "TLP" ("IETF TRUST Legal Provisions Relating to IETF Documents"), on effect February 15, 2009 (see <http://trustee.ietf.org/license-info/archive/IETF-Trust-License-Policy-20090215.pdf>). Updates to this document were published on September 12, 2009 (TLP 3.0, <http://trustee.ietf.org/license-info/archive/IETF-Trust-License-Policy-20090912.pdf>) and on December 28, 2009 (TLP 4.0, <http://trustee.ietf.org/license-info/archive/IETF-Trust-License-Policy-20091228.pdf>), modifying the license for code components. The actual text is located in Section 6 ("Text To Be Included in IETF Documents") of these documents.

The tools will automatically produce the "right" text depending on the document's date information (see above):

D.1.1.1 trust200902

This should be the default, unless one of the more specific '*trust200902' values is a better fit. It produces the text in Sections 6.a and 6.b of the TLP.

D.1.1.2 noModificationTrust200902

This produces the additional text from Section 6.c.i of the TLP:

This document may not be modified, and derivative works of it may not be created, except to format it for publication as an RFC or to translate it into languages other than English.

Note: this clause is incompatible with RFCs to be published on the Standards Track.

D.1.1.3 noDerivativesTrust200902

This produces the additional text from Section 6.c.ii of the TLP:

This document may not be modified, and derivative works of it may not be created, and it may not be published except as an Internet-Draft.

Note: this clause is incompatible with RFCs.

D.1.1.4 pre5378Trust200902

This produces the additional text from Section 6.c.iii of the TLP, frequently called the "pre-5378 escape clause":

This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.

See Section 4 of <http://trustee.ietf.org/docs/IETF-Copyright-FAQ.pdf> for further information about when to use this value.

Note: this text appears under "Copyright Notice", unless the document was published before November 2009, in which case it appears under "Status Of This Memo".

D.1.2 Historic Values

D.1.2.1 Historic Values: '*trust200811'

The attribute values "trust200811", "noModificationTrust200811" and "noDerivativesTrust200811" are similar to their "trust200902" counterparts, except that they use text specified in <http://trustee.ietf.org/license-info/archive/IETF-Trust-License-Policy_11-10-08.pdf>.

D.1.2.2 Historic Values: '*3978'

The attribute values "full3978", "noModification3978" and "noDerivatives3978" are similar to their counterparts above, except that they use text specified in RFC 3978 (March 2005).

D.1.2.3 Historic Values: '*3667'

The attribute values "full3667", "noModification3667" and "noDerivatives3667" are similar to their counterparts above, except that they use text specified in RFC 3667 (February 2004).

D.1.2.4 Historic Values: '*2026'

The attribute values "full2026" and "noDerivativeWorks2026" are similar to their counterparts above, except that they use text specified in RFC 2026 (October 1996).

The special value "none" was also used back then, and denied the IETF any rights beyond publication as Internet Draft.

D.2 The /rfc/@category Attribute

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

For Internet Drafts, the category attribute is not needed, but will appear on the front page ("Intended Status"). Supplying this information can be useful, because reviewers may want to know.

Note: the Standards Track consists of "Proposed Standard", "Draft Standards", and "Internet Standard". These do not appear in the boilerplate, thus the category attribute doesn't handle them. However, this information can be useful for validity checkers, and thus rfc2629.xslt supports an extension attribute for that purpose (see Section 11.26 for details).

D.3 The /rfc/@submissionType Attribute

The RFC Editor publishes documents from different "document streams", of which the "IETF stream" of course is the most prominent one. Other streams are the "independent stream" (used for things like administrative information or April 1st RFCs), the "IAB stream" (Internet Architecture Board) and the "IRTF stream" (Internet Research Task Force).

Not surprisingly, the values for the attribute are "IETF" (the default value), "independent", "IAB", and "IRTF".

Historically, this did not affect the final appearance of RFCs, except for subtle differences in Copyright notices. Nowadays (as of [RFC5741]), the stream name appears in the first line of the front page, and it also affects the text in the "Status Of This Memo" section.

For current documents, setting submissionType attribute will have the following effect:

  • For RFCs, the stream name appears in the upper left corner of the first page (in Internet Drafts, this is either "Network Working Group", or the value of the <workgroup> element).
  • For RFCs, if affects the whole "Status Of This Memo" section (see Section 3.2.2 of [RFC5741]).
  • For all RFCs and Internet Drafts, it determines whether the "Copyright Notice" mentions the Copyright on Code Components (see TLP, Section "Text To Be Included in IETF Documents").

D.4 The /rfc/@consensus Attribute

For some of the publication streams (see Appendix D.3), the "Status Of This Memo" section depends on whether there was a consensus to publish (again, see Section 3.2.2 of [RFC5741]).

The consensus attribute ("yes"/"no", defaulting to "yes") can be used to supply this information. The effect for the various streams is:

  • "independent" and "IAB": none.
  • "IETF": mention that there was an IETF consensus.
  • "IRTF": mention that there was a research group consensus (where the name of the research group is extracted from the <workgroup> element).

D.5 The /rfc/@number Attribute

For RFCs, this attribute supplies the RFC number.

D.6 The /rfc/@docName Attribute

For Internet Drafts, this specifies the draft name (which appears below the title). The file extension is not part of the draft, so in general it should end with the current draft number ("-", plus two digits).

Note: "Idnits" (<http://tools.ietf.org/tools/idnits/>) checks the in-document draft name for consistency with the filename of the submitted document.

D.7 The /rfc/@obsoletes Attribute

The RFC Editor maintains a database (<http://www.rfc-editor.org/rfc.html>) of all RFCs, including information about which one obsoletes which. Upon publication of an RFC, this database is updated from the data on the front page.

This attribute takes a list of comma-separated RFC numbers. Do not put the string "RFC" here.

D.8 The /rfc/@updates Attribute

This is like obsoletes, but for the "updates" relation.


E. License

Copyright (c) 2006-2010, 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:

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 V X


Author's Address

Julian F. Reschke
greenbytes GmbH
Hafenweg 16
Muenster, NW 48155
Germany
Phone: +49 251 2807760
EMail: julian.reschke@greenbytes.de
URI: http://greenbytes.de/tech/webdav/