Network Working Group | J. Reschke |
Internet-Draft | greenbytes |
Obsoletes: 2629 (if approved) | November 26, 2013 |
Intended status: Standards Track | |
Expires: May 30, 2014 |
This document defines the 'XML2RFC' version 2 vocabulary; an XML-based language used for writing Internet-Drafts and RFCs. This vocabulary is used for current processing of XML into RFCs. A future version of this vocabulary will be used as the canonical version of RFCs.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as “work in progress”.¶
This Internet-Draft will expire on May 30, 2014.¶
Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
Discussion of this draft takes place on the XML2RFC mailing list (xml2rfc@ietf.org), which has its home page at <https://www.ietf.org/mailman/listinfo/xml2rfc>.¶
This document describes version 2 ('v2') of the 'XML2RFC' vocabulary; an XML (Extensible Markup Language) language ([XML]) used for writing RFCs ([RFCSTYLE]) and Internet-Drafts ([IDGUIDE]).¶
It obsoletes the original version ("v1") [RFC2629], which contained the original language definition, and which was subsequently extended ("v2"). Furthermore, it discusses potential extensions in a future revision ("v3").¶
Note that not the vocabulary contains certain constructs that might not be used when generating the final text; however, they can provide useful data for other uses (such index generation, populating a keyword database, or syntax checks).¶
The XML vocabulary here is defined in prose, based on the Relax NG schema ([RNC]) contained in Appendix C (specified in Relax NG Compact Notation, "RNC").¶
Each element description also contains the RNC fragment for that specific element in a slightly simplified form (for instance, leaving out defaults). This is included as alternative for readers who prefer formal syntax over prose. [rfc.comment.1: This information is redundant with the prose *and* repeated in the index; I'd like to hear feedback whether it's more useful than distracting.] ¶
Note that the schema can be used for automated validity checks, but certain constraints are only described in prose (example: the conditionally required presence of the "abbrev" attribute).¶
[rfc.comment.2: In the section below, some elements/attributes do not have a prose description yet. This is because this is work-in-progress; feedback with accurate descriptions is appreciated.] ¶
Contains the abstract of the document. The abstract ought to be self-contained and thus should not contain references or unexpanded abbreviations. See Section 4.3 of [RFCSTYLE] for more information.¶
This element appears as child element of: <front> (Section 2.19).¶
Content model:¶
One or more <t> elements (Section 2.38)¶
abstract = element abstract { t+ }
Provides address information for the author.¶
This element appears as child element of: <author> (Section 2.6).¶
Content model:¶
Provides additional prose augmenting a bibliographical reference.¶
For instance:
<annotation> Latest version available at <eref target='http://www.w3.org/TR/xml'/>. </annotation>
...will generate the text used in the reference for [XML].
This element appears as child element of: <reference> (Section 2.30).¶
Content model:¶
In any order: ¶
Provides information about the IETF area this document applies to (currently not used when generating documents).¶
This element appears as child element of: <front> (Section 2.19).¶
Content model: only text content.¶
area = element area { CTEXT }
This element allows the inclusion of "artwork" into the document.¶
<artwork> is the only element in the vocabulary that provides full control of horizontal whitespace and line breaks, and thus is used for a variety of things, such as: ¶
Alternatively, the "src" attribute allows referencing an external graphics file, such as a bitmap or a vector drawing. In this case, the textual content ought to contain either a "line art" variant of the graphics, or otherwise prose that describes the included image in sufficient detail. Note that RFCs occasionally are published with enhanced diagrams; a recent example is [RFC5598].¶
This element appears as child element of: <figure> (Section 2.17).¶
Content model:¶
Text¶
(optional)¶
Controls whether the artwork appears left (default), centered, or right.¶
Allowed values: ¶
(optional)¶
Alternative text description of the artwork (not just the caption).¶
(optional)¶
The suggested height of the graphics included using the "src" attribute.¶
This attribute is format-dependent and ought to be avoided.¶
When generating HTML output, current implementations copy the attribute "as is". For other output formats it is usually ignored.¶
(optional)¶
A filename suitable for the contents (such as for extraction to a local file).¶
This attribute generally isn't used for document generation, but it can be helpful for other kinds of tools (such as automated syntax checkers which work by extracting the source code).¶
(optional)¶
The URI of a graphics file.¶
(optional)¶
Specifies the type of the artwork.¶
The value either is a well-known keyword (such as "abnf"), or an Internet Media Type (see [RFC2046]).¶
How it is used depends on context and application. For instance, a formatter can attempt to syntax-highlight code in certain known languages.¶
(optional)¶
The suggested width of the graphics included using the "src" attribute.¶
This attribute is format-dependent and ought to be avoided.¶
When generating HTML output, current implementations copy the attribute "as is". For other output formats it is usually ignored.¶
(optional)¶
Determines whitespace handling.¶
"preserve" is both the default value and the only meaningful setting anyway (because that's what the <artwork> element is for).¶
See also Section 2.10 of [XML].¶
Allowed values: ¶
artwork = element artwork { attribute xml:space ( "default" | "preserve" )?, attribute name { ATEXT }?, attribute type { ATEXT }?, attribute src { URI }?, attribute align ( "left" | "center" | "right" )?, attribute alt { ATEXT }?, attribute width { ATEXT }?, attribute height { ATEXT }?, TEXT* }
Contains the "back" part of the document: the references and appendices.¶
This element appears as child element of: <rfc> (Section 2.33).¶
Content model:¶
back = element back { references*, section* }
Provides the content of a cell in a table.¶
This element appears as child element of: <texttable> (Section 2.39).¶
Content model:¶
In any order: ¶
Gives the city name in a postal address.¶
This element appears as child element of: <postal> (Section 2.27).¶
Content model: only text content.¶
city = element city { CTEXT }
Gives the postal region code.¶
This element appears as child element of: <postal> (Section 2.27).¶
Content model: only text content.¶
code = element code { CTEXT }
Gives the country in a postal address.¶
This element appears as child element of: <postal> (Section 2.27).¶
Content model: only text content.¶
country = element country { CTEXT }
Represents a comment.¶
Comments can be used in a document while it is work-in-progress. They usually appear either visually highlighted, at the end of the document (depending on file format and settings of the formatter), or not at all (when generating an RFC).¶
This element appears as child element of: <annotation> (Section 2.3), <c> (Section 2.8), <postamble> (Section 2.28), <preamble> (Section 2.29), and <t> (Section 2.38).¶
Content model: only text content.¶
(optional)¶
[element.cref.attribute.anchor.missing: attribute description missing] ¶
(optional)¶
Holds the "source" of a comment, such as the name or the initials of the person who made the comment.¶
cref = element cref { attribute anchor { xsd:ID }?, attribute source { ATEXT }?, CTEXT }
Provides information about the publication date.¶
Note that this element is used both for the boilerplate of the document being produced, and also inside bibliographic references.¶
In the first case, it defines the publication date, which, when producing Internet-Drafts, will be used for computing the expiration date (see Section 8 of [IDGUIDE]). When "year", "month" or "day" are left out, the processor will attempt to use the current system date if the attributes that are specified do match the system date. Note that month names need to match the full (English) month name ("January", "February", "March", "April", "May, "June", "July", "August", "September", "October", "November", or "December") in order for expiration calculations to work.¶
In the second case, the date information will be embedded as-is into the reference text. Therefore, also vague dates ("ca. 2000"), date ranges, and so on, are allowed.¶
This element appears as child element of: <front> (Section 2.19).¶
Content model: this element does not have any contents.¶
(optional)¶
Day of publication.¶
(optional)¶
Month of publication.¶
(optional)¶
Year of publication.¶
date = element date { attribute day { DAY }?, attribute month { MONTH }?, attribute year { YEAR }?, empty }
Provides an email address.¶
The value is expected to be the scheme-specific part of a "mailto" URI (so does not include the prefix "mailto:"). See Section 2 of [RFC6068] for details.¶
This element appears as child element of: <address> (Section 2.2).¶
Content model: only text content.¶
email = element email { CTEXT }
Represents an "external" link (as specified in the "target" attribute).¶
If the element has text content, that content will be used. Otherwise, the value of the target attribute will be inserted in angle brackets ([RFC3986], Appendix C).¶
This element appears as child element of: <annotation> (Section 2.3), <c> (Section 2.8), <postamble> (Section 2.28), <preamble> (Section 2.29), and <t> (Section 2.38).¶
Content model: only text content.¶
(mandatory)¶
eref = element eref { attribute target { URI }, CTEXT }
Represents the phone number of a fax machine.¶
The value is expected to be the scheme-specific part of a "tel" URI (so does not include the prefix "tel:"), using the "global numbers" syntax. See Section 3 of [RFC3966] for details.¶
This element appears as child element of: <address> (Section 2.2).¶
Content model: only text content.¶
facsimile = element facsimile { CTEXT }
[element.figure.missing: element description missing] ¶
This element appears as child element of: <section> (Section 2.34), and <t> (Section 2.38).¶
Content model:¶
(optional)¶
[element.figure.attribute.align.missing: attribute description missing] ¶
Allowed values: ¶
(optional)¶
[element.figure.attribute.alt.missing: attribute description missing] ¶
(optional)¶
[element.figure.attribute.anchor.missing: attribute description missing] ¶
(optional)¶
[element.figure.attribute.height.missing: attribute description missing] ¶
(optional)¶
[element.figure.attribute.src.missing: attribute description missing] ¶
(optional)¶
Figures that have an "anchor" attribute will automatically get an autogenerated title (such as "Figure 1"). Setting this attribute to "false" will prevent this.¶
Allowed values: ¶
(optional)¶
[element.figure.attribute.title.missing: attribute description missing] ¶
(optional)¶
[element.figure.attribute.width.missing: attribute description missing] ¶
figure = element figure { attribute anchor { xsd:ID }?, attribute title { ATEXT }?, attribute suppress-title ( "true" | "false" )?, attribute src { URI }?, attribute align ( "left" | "center" | "right" )?, attribute alt { ATEXT }?, attribute width { ATEXT }?, attribute height { ATEXT }?, iref*, preamble?, artwork, postamble? }
Provides a link to an additional format variant for a reference.¶
Note that these additional links are neither used in published RFCs, nor supported by all tools. If the goal is to provide a single URI for a reference, the "target" attribute on <reference> can be used instead.¶
This element appears as child element of: <reference> (Section 2.30).¶
Content model: this element does not have any contents.¶
(optional)¶
Octet length of linked-to document.¶
(optional)¶
URI of document.¶
[rfc.comment.3: Why is this optional?] ¶
(mandatory)¶
The type of the linked-to document, such as "TXT", "HTML", or "PDF".¶
format = element format { attribute target { URI }?, attribute type { ATEXT }, attribute octets { NUMBER }?, empty }
Represent the "front matter": metadata (such as author information), abstract, and additional notes.¶
This element appears as child element of: <reference> (Section 2.30), and <rfc> (Section 2.33).¶
Content model:¶
Provides terms for the document's index.¶
Index entries can be either single items (when just the "item" attribute is given) or nested items (by specifying "subitem" as well).¶
For instance:
<iref item="Grammar" subitem="item"/>
will produce an index entry for "Grammar, item".
This element appears as child element of: <annotation> (Section 2.3), <c> (Section 2.8), <figure> (Section 2.17), <postamble> (Section 2.28), <preamble> (Section 2.29), <section> (Section 2.34), and <t> (Section 2.38).¶
Content model: this element does not have any contents.¶
(mandatory)¶
The item to include.¶
(optional)¶
Setting this to "true" declares the occurrence as "primary", which might cause it to be highlighted in the index.¶
Allowed values: ¶
(optional)¶
The subitem to include.¶
iref = element iref { attribute item { ATEXT }, attribute subitem { ATEXT }?, attribute primary ( "true" | "false" )?, empty }
Specifies a keyword applicable to the document.¶
Note that each element should only contain a single keyword; for multiple keywords, the element can simply be repeated.¶
Keywords are used both in the RFC Index and in the metadata of generated document formats.¶
This element appears as child element of: <front> (Section 2.19).¶
Content model: only text content.¶
keyword = element keyword { CTEXT }
Delineates a text list.¶
This element appears as child element of: <t> (Section 2.38).¶
Content model:¶
One or more <t> elements (Section 2.38)¶
(optional)¶
[element.list.attribute.counter.missing: attribute description missing] ¶
(optional)¶
[element.list.attribute.hangIndent.missing: attribute description missing] ¶
(optional)¶
[element.list.attribute.style.missing: attribute description missing] ¶
\list = element \list { attribute style { ATEXT }?, attribute hangIndent { NUMBER }?, attribute counter { ATEXT }?, t+ }
Represents the main content of the document.¶
This element appears as child element of: <rfc> (Section 2.33).¶
Content model:¶
One or more <section> elements (Section 2.34)¶
middle = element middle { section+ }
Creates an unnumbered section that appears after the abstract.¶
It is usually used for additional information to reviewers (working group information, mailing list, ...), or for additional publication information such as "IESG Notes".¶
This element appears as child element of: <front> (Section 2.19).¶
Content model:¶
One or more <t> elements (Section 2.38)¶
(mandatory)¶
The title of the note.¶
note = element note { attribute title { ATEXT }, t+ }
Specifies the affiliation of an author.¶
This information appears in both the "Author's Address" section and on the front page ([RFCSTYLE], Section 4.1.2). If the value is long, an abbreviated variant can be specified in the "abbrev" attribute.¶
This element appears as child element of: <author> (Section 2.6).¶
Content model: only text content.¶
(optional)¶
Abbreviated variant.¶
organization = element organization { attribute abbrev { ATEXT }?, CTEXT }
Represents a phone number.¶
The value is expected to be the scheme-specific part of a "tel" URI (so does not include the prefix "tel:"), using the "global numbers" syntax. See Section 3 of [RFC3966] for details.¶
This element appears as child element of: <address> (Section 2.2).¶
Content model: only text content.¶
phone = element phone { CTEXT }
Contains child elements providing postal information.¶
This element appears as child element of: <address> (Section 2.2).¶
Content model:¶
Gives text that appears at the bottom of a figure or table.¶
This element appears as child element of: <figure> (Section 2.17), and <texttable> (Section 2.39).¶
Content model:¶
In any order: ¶
Gives text that appears at the top of a figure or table.¶
This element appears as child element of: <figure> (Section 2.17), and <texttable> (Section 2.39).¶
Content model:¶
In any order: ¶
Represents a bibliographical reference.¶
This element appears as child element of: <references> (Section 2.31).¶
Content model:¶
(optional)¶
[element.reference.attribute.anchor.missing: attribute description missing] ¶
(optional)¶
Holds the URI for the reference.¶
Note that depending on the <seriesInfo> element, a URI might not be needed, nor desirable, as it can be automatically generated (for instance, for RFCs).¶
reference = element reference { attribute anchor { xsd:ID }?, attribute target { URI }?, front, seriesInfo*, format*, annotation* }
Contains a set of bibliographical references.¶
In the early days of the RFC series, there was only one "References" section per RFC. This convention was later changed to group references into two sets, "Normative" and "Informative"; see item x of Section 4.8 of [RFCSTYLE]). This vocabulary supports the split with the "title" attribute.¶
This element appears as child element of: <back> (Section 2.7).¶
Content model:¶
One or more <reference> elements (Section 2.30)¶
(optional)¶
Provides the title for the References section (defaulting to "References").¶
In general, the title should be either "Normative References" or "Informative References".¶
references = element references { attribute title { ATEXT }?, reference+ }
Provides the region name in a postal address.¶
This element appears as child element of: <postal> (Section 2.27).¶
Content model: only text content.¶
region = element region { CTEXT }
This is the root element of the xml2rfc vocabulary.¶
Processors distinguish between RFC mode ("number" attribute being present) and Internet-Draft mode ("docName" attribute being present): it is invalid to specify both. Setting neither "number" nor "docName" can be useful for producing other types of document but is out-of-scope for this specification.¶
Content model:¶
(optional)¶
Document category (see Appendix A.1).¶
Allowed values: ¶
(optional)¶
Affects the generated boilerplate.¶
Allowed values: ¶
(optional)¶
For Internet-Drafts, this specifies the draft name (which appears below the title).¶
Note that the file extension is not part of the draft, so in general it should end with the current draft number ("-", plus two digits).¶
Furthermore, it is good practice to disambiguate current editor copies from submitted drafts (for instance, by replacing the draft number with the string "latest").¶
(optional)¶
Represents the Intellectual Property status of the document. See Appendix A.2 for details.¶
Allowed values: ¶
(optional)¶
Identifies a Section within the document for which extraction "as-is" is explicitly allowed (only relevant for historic values of the "ipr" attribute).¶
(optional)¶
The number of the RFC to be produced.¶
(optional)¶
A comma-separated list of RFC numbers or Internet-Draft names.¶
(optional)¶
When producing a document within document series (such as "STD"): the number within that series.¶
(optional)¶
The document stream.¶
Allowed values: ¶
(optional)¶
A comma-separated list of RFC numbers or Internet-Draft names.¶
(optional)¶
The natural language used in the document (defaults to "en").¶
See Section 2.12 of [XML] for more information.¶
rfc = element rfc { attribute number { NUMBER }?, attribute obsoletes { NUMBERS }?, attribute updates { NUMBERS }?, attribute category ( "std" | "bcp" | "info" | "exp" | "historic" )?, attribute consensus ( "no" | "yes" )?, attribute seriesNo { NUMBER }?, attribute ipr ( "full2026" | "noDerivativeWorks2026" | "none" | "full3667" | "noModification3667" | "noDerivatives3667" | "full3978" | "noModification3978" | "noDerivatives3978" | "trust200811" | "noModificationTrust200811" | "noDerivativesTrust200811" | "trust200902" | "noModificationTrust200902" | "noDerivativesTrust200902" | "pre5378Trust200902" )?, attribute iprExtract { xsd:IDREF }?, attribute submissionType ( "IETF" | "IAB" | "IRTF" | "independent" )?, attribute docName { ATEXT }?, attribute xml:lang { ATEXT }?, front, middle, back? }
Represents a section (when inside a <middle> element) or an appendix (when inside a <back> element).¶
Sub-sections are created by nesting <section> elements inside <section> elements.¶
This element appears as child element of: <back> (Section 2.7), <middle> (Section 2.23), and <section> (Section 2.34).¶
Content model:¶
(optional)¶
[element.section.attribute.anchor.missing: attribute description missing] ¶
(mandatory)¶
The title of the section.¶
(optional)¶
Determines whether the section is included in the Table Of Contents.¶
[rfc.comment.4: Need to consider inheritance.] ¶
Allowed values: ¶
Specifies the document series in which this document appears, and also specifies an identifier within that series.¶
This element appears as child element of: <reference> (Section 2.30).¶
Content model: this element does not have any contents.¶
(mandatory)¶
The name of the series.¶
The following names trigger specific processing (such as for auto-generating links, and adding descriptions such as "work in progress"): "BCP", "FYI", "Internet-Draft", "RFC", and "STD".¶
(mandatory)¶
The identifier within the series specified by the "name" attribute.¶
For BCPs, FYIs, RFCs, and STDs this is the number within the series. For Internet-Drafts, it is the full draft name (ending with the two-digit version number).¶
seriesInfo = element seriesInfo { attribute name { ATEXT }, attribute value { ATEXT }, empty }
[element.spanx.missing: element description missing] ¶
This element appears as child element of: <annotation> (Section 2.3), <c> (Section 2.8), <postamble> (Section 2.28), <preamble> (Section 2.29), and <t> (Section 2.38).¶
Content model: only text content.¶
(optional)¶
[element.spanx.attribute.style.missing: attribute description missing] ¶
(optional)¶
Determines whitespace handling.¶
The default value is "preserve", but that value isn't really suitable for the use cases <spanx> is defined for (so this might change in future versions).¶
See also Section 2.10 of [XML].¶
Allowed values: ¶
spanx = element spanx { attribute xml:space ( "default" | "preserve" )?, attribute style { ATEXT }?, CTEXT }
Provides a street address.¶
This element appears as child element of: <postal> (Section 2.27).¶
Content model: only text content.¶
street = element street { CTEXT }
Contains a paragraph of text.¶
This element appears as child element of: <abstract> (Section 2.1), <list> (Section 2.22), <note> (Section 2.24), and <section> (Section 2.34).¶
Content model:¶
In any order: ¶
(optional)¶
[element.t.attribute.anchor.missing: attribute description missing] ¶
(optional)¶
[element.t.attribute.hangText.missing: attribute description missing] ¶
Contains a table, consisting of an optional preamble, a header line, rows, and an optional postamble.¶
This element appears as child element of: <section> (Section 2.34).¶
Content model:¶
(optional)¶
Determines the horizontal alignment of the table.¶
Allowed values: ¶
(optional)¶
[element.texttable.attribute.anchor.missing: attribute description missing] ¶
(optional)¶
[element.texttable.attribute.style.missing: attribute description missing] ¶
Allowed values: ¶
(optional)¶
[element.texttable.attribute.suppress-title.missing: attribute description missing] ¶
Allowed values: ¶
(optional)¶
[element.texttable.attribute.title.missing: attribute description missing] ¶
Represents the document title.¶
When this element appears in the <front> element of the current document, the title might also appear in page headers or footers. If it's long (~40 characters), the "abbrev" attribute is used to specified an abbreviated variant.¶
This element appears as child element of: <front> (Section 2.19).¶
Content model: only text content.¶
(optional)¶
Specifies an abbreviated variant of the document title.¶
title = element title { attribute abbrev { ATEXT }?, CTEXT }
Contains a column heading in a table.¶
This element appears as child element of: <texttable> (Section 2.39).¶
Content model: only text content.¶
(optional)¶
Determines the horizontal alignment within the table column.¶
Allowed values: ¶
(optional)¶
[element.ttcol.attribute.width.missing: attribute description missing] ¶
ttcol = element ttcol { attribute width { ATEXT }?, attribute align ( "left" | "center" | "right" )?, CTEXT }
Contains a web address associated with the author.¶
This element appears as child element of: <address> (Section 2.2).¶
Content model: only text content.¶
uri = element uri { CTEXT }
[element.vspace.missing: element description missing] ¶
This element appears as child element of: <t> (Section 2.38).¶
Content model: this element does not have any contents.¶
(optional)¶
[element.vspace.attribute.blankLines.missing: attribute description missing] ¶
vspace = element vspace { attribute blankLines { NUMBER }?, empty }
This element is used to specify the Working Group the document originates from, if any. The recommended format is the official name of the Working Group (with some capitalization), plus the string "Working Group".¶
In Internet-Drafts, this is used in the upper left corner of the boilerplate, replacing the "Network Working Group" string.¶
This element appears as child element of: <front> (Section 2.19).¶
Content model: only text content.¶
workgroup = element workgroup { CTEXT }
[element.xref.missing: element description missing] ¶
This element appears as child element of: <annotation> (Section 2.3), <c> (Section 2.8), <postamble> (Section 2.28), <preamble> (Section 2.29), and <t> (Section 2.38).¶
Content model: only text content.¶
(optional)¶
[element.xref.attribute.format.missing: attribute description missing] ¶
Allowed values: ¶
(optional)¶
Unused.¶
It's unclear what the purpose of this attribute is; processors seem to ignore it and it never was documented.¶
Allowed values: ¶
(mandatory)¶
[element.xref.attribute.target.missing: attribute description missing] ¶
xref = element xref { attribute target { xsd:IDREF }, attribute pageno ( "true" | "false" )?, attribute format ( "counter" | "title" | "none" | "default" )?, CTEXT }
[rfc.comment.5: Explain those code points where the processors implement something special, such as "nbsp".] ¶
[rfc.comment.6: TBD] ¶
[rfc.comment.7: TBD] ¶
[rfc.comment.8: Register application/xml2rfc+xml.] ¶
Thanks to everybody who reviewed this document and provided feedback and/or specification text, in particular Brian Carpenter and Paul Hoffman.¶
We also thank Marshall T. Rose for both the original design and the reference implementation of the "xml2rfc" formatter.¶
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 as "Intended Status". Supplying this information can be useful to reviewers.¶
This attribute value can take a long list of values, each of which describes an IPR policy for the document. This attribute's values are not the result of a grand plan, but remain 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.¶
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>.¶
For the current "Status Of This Memo" text, the submissionType attribute determines whether a statement about "Code Components" is inserted (which is the case for the value "IETF", which is the default). Other values, such as "independent", suppress this part of the text.¶
The name for these values refers to the "IETF TRUST Legal Provisions Relating to IETF Documents", sometimes simply called the "TLP, that went into effect on February 15, 2009 ([TLP2.0]). Updates to this document were published on September 12, 2009 ([TLP3.0]) and on December 28, 2009 ([TLP4.0]), modifying the license for code components (see <http://trustee.ietf.org/license-info/> for further information). The actual text is located in Section 6 ("Text To Be Included in IETF Documents") of these documents.¶
The tools will automatically produce the "correct" text depending on the document's date information (see above):¶
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.¶
This produces 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.¶
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.¶
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.¶
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>.¶
The attribute values "full3978", "noModification3978" and "noDerivatives3978" are similar to their counterparts above, except that they use text specified in RFC 3978 (March 2005).¶
The attribute values "full3667", "noModification3667" and "noDerivatives3667" are similar to their counterparts above, except that they use text specified in RFC 3667 (February 2004).¶
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.¶
Many attributes have lost their "default" value; this is to avoid having document semantics differ based on whether a DTD was specified and evaluated. Processors will handle absent values the way the default value was specified before.¶
<artwork>: Has a set of new attributes: "name", "type", "src", "align", "alt", "width", and "height". (Section 2.5)¶
<author>: The <organization> element is now optional. The "role" attribute was added. (Section 2.6)¶
<date>: All attributes are now optional. (Section 2.13)¶
<figure>: Has a set of new attributes: "suppress-title", "src", "align", "alt", "width", and "height". (Section 2.17)¶
<iref>: Has a new "primary" attribute. (Section 2.20)¶
<list>: The "style" attribute isn't restricted to a set of enumerated values anymore. The "hangIndent" and "counter" attributes have been added. (Section 2.22)¶
<rfc>: The "ipr" attribute has gained additional values. The attributes "consensus", "iprExtract", "submissionType", and "xml:lang" have been added. (Section 2.33)¶
<reference>: <annotation> allows adding prose to a reference. (Section 2.30)¶
<references>: Can now appear multiple times, and carry a "title" attribute (so that normative and informative references can be split). (Section 2.31)¶
<section>: The new "toc" attribute controls whether it will appear in the Table Of Contents. <iref> can now appear as direct child element. (Section 2.34)¶
<t>: The "anchor" attribute can now be used as well, however there are restrictions on how they can be referred to. (Section 2.38)¶
The following elements have been added: <annotation> (Section 2.3), <c> (Section 2.8), <cref> (Section 2.12), <format> (Section 2.18), <spanx> (Section 2.36), <texttable> (Section 2.39).¶
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" NUMBER = string NUMBERS = string DAY = string MONTH = string YEAR = string URI = string ATEXT = string CTEXT = text TEXT = text rfc = element rfc { attribute number { NUMBER }?, [ a:defaultValue = "" ] attribute obsoletes { NUMBERS }?, [ a:defaultValue = "" ] attribute updates { NUMBERS }?, attribute category { "std" | "bcp" | "info" | "exp" | "historic" }?, attribute consensus { "no" | "yes" }?, attribute seriesNo { NUMBER }?, attribute ipr { "full2026" | "noDerivativeWorks2026" | "none" | "full3667" | "noModification3667" | "noDerivatives3667" | "full3978" | "noModification3978" | "noDerivatives3978" | "trust200811" | "noModificationTrust200811" | "noDerivativesTrust200811" | "trust200902" | "noModificationTrust200902" | "noDerivativesTrust200902" | "pre5378Trust200902" }?, attribute iprExtract { xsd:IDREF }?, [ a:defaultValue = "IETF" ] attribute submissionType { "IETF" | "IAB" | "IRTF" | "independent" }?, attribute docName { ATEXT }?, [ a:defaultValue = "en" ] attribute xml:lang { ATEXT }?, front, middle, back? } front = element front { title, author+, date, area*, workgroup*, keyword*, abstract?, note* } title = element title { attribute abbrev { ATEXT }?, CTEXT } author = element author { attribute initials { ATEXT }?, attribute surname { ATEXT }?, attribute fullname { ATEXT }?, attribute role { "editor" }?, organization?, address? } organization = element organization { attribute abbrev { ATEXT }?, CTEXT } address = element address { postal?, phone?, facsimile?, email?, uri? } postal = element postal { street+, (city | region | code | country)* } street = element street { CTEXT } city = element city { CTEXT } region = element region { CTEXT } code = element code { CTEXT } country = element country { CTEXT } phone = element phone { CTEXT } facsimile = element facsimile { CTEXT } email = element email { CTEXT } uri = element uri { CTEXT } date = element date { attribute day { DAY }?, attribute month { MONTH }?, attribute year { YEAR }?, empty } area = element area { CTEXT } workgroup = element workgroup { CTEXT } keyword = element keyword { CTEXT } abstract = element abstract { t+ } note = element note { attribute title { ATEXT }, t+ } middle = element middle { section+ } section = element section { attribute anchor { xsd:ID }?, attribute title { ATEXT }, [ a:defaultValue = "default" ] attribute toc { "include" | "exclude" | "default" }?, (t | figure | texttable | iref)*, section* } t = element t { attribute anchor { xsd:ID }?, attribute hangText { ATEXT }?, (TEXT | \list | figure | xref | eref | iref | cref | spanx | vspace)* } \list = element list { attribute style { ATEXT }?, attribute hangIndent { NUMBER }?, attribute counter { ATEXT }?, t+ } xref = element xref { attribute target { xsd:IDREF }, [ a:defaultValue = "false" ] attribute pageno { "true" | "false" }?, [ a:defaultValue = "default" ] attribute format { "counter" | "title" | "none" | "default" }?, CTEXT } eref = element eref { attribute target { URI }, CTEXT } iref = element iref { attribute item { ATEXT }, [ a:defaultValue = "" ] attribute subitem { ATEXT }?, [ a:defaultValue = "false" ] attribute primary { "true" | "false" }?, empty } cref = element cref { attribute anchor { xsd:ID }?, attribute source { ATEXT }?, CTEXT } spanx = element spanx { [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?, [ a:defaultValue = "emph" ] attribute style { ATEXT }?, CTEXT } vspace = element vspace { [ a:defaultValue = "0" ] attribute blankLines { NUMBER }?, empty } figure = element figure { attribute anchor { xsd:ID }?, [ a:defaultValue = "" ] attribute title { ATEXT }?, [ a:defaultValue = "false" ] attribute suppress-title { "true" | "false" }?, attribute src { URI }?, [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?, [ a:defaultValue = "" ] attribute alt { ATEXT }?, [ a:defaultValue = "" ] attribute width { ATEXT }?, [ a:defaultValue = "" ] attribute height { ATEXT }?, iref*, preamble?, artwork, postamble? } preamble = element preamble { (TEXT | xref | eref | iref | cref | spanx)* } artwork = element artwork { [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?, [ a:defaultValue = "" ] attribute name { ATEXT }?, [ a:defaultValue = "" ] attribute type { ATEXT }?, attribute src { URI }?, [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?, [ a:defaultValue = "" ] attribute alt { ATEXT }?, [ a:defaultValue = "" ] attribute width { ATEXT }?, [ a:defaultValue = "" ] attribute height { ATEXT }?, TEXT* } postamble = element postamble { (TEXT | xref | eref | iref | cref | spanx)* } texttable = element texttable { attribute anchor { xsd:ID }?, [ a:defaultValue = "" ] attribute title { ATEXT }?, [ a:defaultValue = "false" ] attribute suppress-title { "true" | "false" }?, [ a:defaultValue = "center" ] attribute align { "left" | "center" | "right" }?, [ a:defaultValue = "full" ] attribute style { "all" | "none" | "headers" | "full" }?, preamble?, ttcol+, c*, postamble? } ttcol = element ttcol { attribute width { ATEXT }?, [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?, CTEXT } c = element c { (TEXT | xref | eref | iref | cref | spanx)* } back = element back { references*, section* } references = element references { [ a:defaultValue = "References" ] attribute title { ATEXT }?, reference+ } reference = element reference { attribute anchor { xsd:ID }?, attribute target { URI }?, front, seriesInfo*, format*, annotation* } seriesInfo = element seriesInfo { attribute name { ATEXT }, attribute value { ATEXT }, empty } format = element format { attribute target { URI }?, attribute type { ATEXT }, attribute octets { NUMBER }?, empty } annotation = element annotation { (TEXT | xref | eref | iref | cref | spanx)* } start = rfc
[rfc.comment.9: The list below is just a starting point, see <https://www.rfc-editor.org/rse/wiki/doku.php?id=design:xml-tags> for more.] ¶
If contact information is changed to allow non-ASCII characters: add a place for a ASCII fallback (probably just for the author names).¶
The content model for <postal> ought to be more strict to allow at most one of <city>, <region>, <code>, and <country>.¶
<facsimile> looks outdated, while a container for IM (messaging) URIs is missing. Maybe this area needs to be aligned with vCard.¶
Section 4.8 of [RFCSTYLE] hints at a "Contributors" Section that could supply contact information similar to the one in the auto-generated "Authors' Address" Section. Consider how to capture contributor contact information (probably not using <author> to avoid confusion). Furthermore, consider ways to augment the contact information section with prose.¶
For artwork that consists of a sequence of items (such as messages in a protocol example), it would be good if a <figure> element could contain multiple <artwork> elements (to assist code to find good places for page breaks).¶
Extend <figure> to support different types of artwork (such as by specifying certain type attribute values, see <http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#artwork.types>), and also avoid having to markup code (such as ABNF) as "artwork".¶
It would be good if "code components" could be marked as such.¶
Finally, even in preformatted text use of markup could be useful to support (a) references, or (b) highlighting the important bits (<http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#ext-rfc2629.artwork>).¶
Extend <xref> so that subsection/anchors can be specified (see <http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#ext-rfc2629.xref>). Remove the "pageno" attribute which seems to be both undocumented and non-functional.¶
Allow multiple paragraphs in list items; eliminating the need to use <vspace> (see <http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#ext.element.lt>).¶
Allow overriding the "anchor" attribute of an included <reference> element.¶
Add a way to add prose to a reference that avoids abuse of <seriesInfo>.¶
Deprecate or remove the <format> element; right now it's not used for the generation of the plain text document anyway.¶
It is unclear why the "anchor" attribute is optional.¶
When this vocabulary becomes the canonical RFC format, it will need to be able to capture all generated information, such as section/figure/table numbers, plus any auto-generated boilerplate (copyright statements etc.).¶
Extend the concept of language tagging to at least examples and contact information to address potential japanese/chinese font confusion.¶
Provide a way to indicate the intended level on the standards track.¶
Include feedback information in a way so that generated documents can provide usable feedback links (see <http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#ext.element.feedback>).¶
<spanx> has both a weird whitespace model ("preserve") and problematic styling. Consider to deprecate it in favor of elements such as <em> and <code> (where the name "code" is already in use for region codes).¶
Indented paragraphs currently can be created by abusing the <list>. It would be good to have a special element for this purpose.¶
Provide a special element for generating citations.¶
With comments being stripped; using "diff -C100" to add change marks.¶
(from Appendix B of [RFC2629], converted using "trang" into Relag NG Compact Notation [RNC])¶
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" NUMBER = string NUMBERS = string DAY = string MONTH = string YEAR = string URI = string ATEXT = string CTEXT = text TEXT = text rfc = element rfc { attribute number { NUMBER }?, [ a:defaultValue = "" ] attribute obsoletes { NUMBERS }?, [ a:defaultValue = "" ] attribute updates { NUMBERS }?, - [ a:defaultValue = "info" ] attribute category { "std" | "bcp" | "info" | "exp" | "historic" }?, attribute seriesNo { NUMBER }?, ! attribute ipr { "full2026" | "noDerivativeWorks2026" | "none" }?, attribute docName { ATEXT }?, front, middle, back? } front = element front { title, author+, date, area*, workgroup*, keyword*, abstract?, note* } title = element title { attribute abbrev { ATEXT }?, CTEXT } author = element author { attribute initials { ATEXT }?, attribute surname { ATEXT }?, attribute fullname { ATEXT }?, ! organization, address? } organization = element organization { attribute abbrev { ATEXT }?, CTEXT } address = element address { postal?, phone?, facsimile?, email?, uri? } postal = element postal { street+, (city | region | code | country)* } street = element street { CTEXT } city = element city { CTEXT } region = element region { CTEXT } code = element code { CTEXT } country = element country { CTEXT } phone = element phone { CTEXT } facsimile = element facsimile { CTEXT } email = element email { CTEXT } uri = element uri { CTEXT } date = element date { attribute day { DAY }?, ! attribute month { MONTH }, ! attribute year { YEAR }, empty } area = element area { CTEXT } workgroup = element workgroup { CTEXT } keyword = element keyword { CTEXT } abstract = element abstract { t+ } note = element note { attribute title { ATEXT }, t+ } middle = element middle { section+ } section = element section { attribute anchor { xsd:ID }?, attribute title { ATEXT }, ! (t | figure | section)* } t = element t { attribute hangText { ATEXT }?, ! (TEXT | \list | figure | xref | eref | iref | vspace)* } \list = element list { ! [ a:defaultValue = "empty" ] ! attribute style { "numbers" | "symbols" | "hanging" | "empty" }?, t+ } xref = element xref { attribute target { xsd:IDREF }, [ a:defaultValue = "false" ] attribute pageno { "true" | "false" }?, CTEXT } eref = element eref { attribute target { URI }, CTEXT } iref = element iref { attribute item { ATEXT }, [ a:defaultValue = "" ] attribute subitem { ATEXT }?, empty } vspace = element vspace { [ a:defaultValue = "0" ] attribute blankLines { NUMBER }?, empty } figure = element figure { attribute anchor { xsd:ID }?, [ a:defaultValue = "" ] attribute title { ATEXT }?, preamble?, artwork, postamble? } ! preamble = element preamble { (TEXT | xref | eref | iref)* } artwork = element artwork { [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?, TEXT* } ! postamble = element postamble { (TEXT | xref | eref | iref)* } ! back = element back { references?, section* } ! references = element references { reference+ } reference = element reference { attribute anchor { xsd:ID }?, attribute target { URI }?, front, ! seriesInfo* } seriesInfo = element seriesInfo { attribute name { ATEXT }, attribute value { ATEXT }, empty } start = rfc
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" NUMBER = string NUMBERS = string DAY = string MONTH = string YEAR = string URI = string ATEXT = string CTEXT = text TEXT = text rfc = element rfc { attribute number { NUMBER }?, [ a:defaultValue = "" ] attribute obsoletes { NUMBERS }?, [ a:defaultValue = "" ] attribute updates { NUMBERS }?, attribute category { "std" | "bcp" | "info" | "exp" | "historic" }?, + attribute consensus { "no" | "yes" }?, attribute seriesNo { NUMBER }?, ! attribute ipr { ! "full2026" ! | "noDerivativeWorks2026" ! | "none" ! | "full3667" ! | "noModification3667" ! | "noDerivatives3667" ! | "full3978" ! | "noModification3978" ! | "noDerivatives3978" ! | "trust200811" ! | "noModificationTrust200811" ! | "noDerivativesTrust200811" ! | "trust200902" ! | "noModificationTrust200902" ! | "noDerivativesTrust200902" ! | "pre5378Trust200902" ! }?, ! attribute iprExtract { xsd:IDREF }?, ! [ a:defaultValue = "IETF" ] ! attribute submissionType { ! "IETF" | "IAB" | "IRTF" | "independent" ! }?, attribute docName { ATEXT }?, + [ a:defaultValue = "en" ] attribute xml:lang { ATEXT }?, front, middle, back? } front = element front { title, author+, date, area*, workgroup*, keyword*, abstract?, note* } title = element title { attribute abbrev { ATEXT }?, CTEXT } author = element author { attribute initials { ATEXT }?, attribute surname { ATEXT }?, attribute fullname { ATEXT }?, ! attribute role { "editor" }?, ! organization?, address? } organization = element organization { attribute abbrev { ATEXT }?, CTEXT } address = element address { postal?, phone?, facsimile?, email?, uri? } postal = element postal { street+, (city | region | code | country)* } street = element street { CTEXT } city = element city { CTEXT } region = element region { CTEXT } code = element code { CTEXT } country = element country { CTEXT } phone = element phone { CTEXT } facsimile = element facsimile { CTEXT } email = element email { CTEXT } uri = element uri { CTEXT } date = element date { attribute day { DAY }?, ! attribute month { MONTH }?, ! attribute year { YEAR }?, empty } area = element area { CTEXT } workgroup = element workgroup { CTEXT } keyword = element keyword { CTEXT } abstract = element abstract { t+ } note = element note { attribute title { ATEXT }, t+ } middle = element middle { section+ } section = element section { attribute anchor { xsd:ID }?, attribute title { ATEXT }, ! [ a:defaultValue = "default" ] ! attribute toc { "include" | "exclude" | "default" }?, ! (t | figure | texttable | iref)*, ! section* } t = element t { + attribute anchor { xsd:ID }?, attribute hangText { ATEXT }?, ! (TEXT ! | \list ! | figure ! | xref ! | eref ! | iref ! | cref ! | spanx ! | vspace)* } \list = element list { ! attribute style { ATEXT }?, ! attribute hangIndent { NUMBER }?, ! attribute counter { ATEXT }?, t+ } xref = element xref { attribute target { xsd:IDREF }, [ a:defaultValue = "false" ] attribute pageno { "true" | "false" }?, + [ a:defaultValue = "default" ] + attribute format { "counter" | "title" | "none" | "default" }?, CTEXT } eref = element eref { attribute target { URI }, CTEXT } iref = element iref { attribute item { ATEXT }, [ a:defaultValue = "" ] attribute subitem { ATEXT }?, + [ a:defaultValue = "false" ] + attribute primary { "true" | "false" }?, empty } + cref = + element cref { + attribute anchor { xsd:ID }?, + attribute source { ATEXT }?, + CTEXT + } + spanx = + element spanx { + [ a:defaultValue = "preserve" ] + attribute xml:space { "default" | "preserve" }?, + [ a:defaultValue = "emph" ] attribute style { ATEXT }?, + CTEXT + } vspace = element vspace { [ a:defaultValue = "0" ] attribute blankLines { NUMBER }?, empty } figure = element figure { attribute anchor { xsd:ID }?, [ a:defaultValue = "" ] attribute title { ATEXT }?, + [ a:defaultValue = "false" ] + attribute suppress-title { "true" | "false" }?, + attribute src { URI }?, + [ a:defaultValue = "left" ] + attribute align { "left" | "center" | "right" }?, + [ a:defaultValue = "" ] attribute alt { ATEXT }?, + [ a:defaultValue = "" ] attribute width { ATEXT }?, + [ a:defaultValue = "" ] attribute height { ATEXT }?, + iref*, preamble?, artwork, postamble? } ! preamble = ! element preamble { (TEXT | xref | eref | iref | cref | spanx)* } artwork = element artwork { [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?, + [ a:defaultValue = "" ] attribute name { ATEXT }?, + [ a:defaultValue = "" ] attribute type { ATEXT }?, + attribute src { URI }?, + [ a:defaultValue = "left" ] + attribute align { "left" | "center" | "right" }?, + [ a:defaultValue = "" ] attribute alt { ATEXT }?, + [ a:defaultValue = "" ] attribute width { ATEXT }?, + [ a:defaultValue = "" ] attribute height { ATEXT }?, TEXT* } ! postamble = ! element postamble { (TEXT | xref | eref | iref | cref | spanx)* } ! texttable = ! element texttable { ! attribute anchor { xsd:ID }?, ! [ a:defaultValue = "" ] attribute title { ATEXT }?, ! [ a:defaultValue = "false" ] ! attribute suppress-title { "true" | "false" }?, ! [ a:defaultValue = "center" ] ! attribute align { "left" | "center" | "right" }?, ! [ a:defaultValue = "full" ] ! attribute style { "all" | "none" | "headers" | "full" }?, ! preamble?, ! ttcol+, ! c*, ! postamble? ! } ! ttcol = ! element ttcol { ! attribute width { ATEXT }?, ! [ a:defaultValue = "left" ] ! attribute align { "left" | "center" | "right" }?, ! CTEXT ! } ! c = element c { (TEXT | xref | eref | iref | cref | spanx)* } ! back = element back { references*, section* } ! references = ! element references { ! [ a:defaultValue = "References" ] attribute title { ATEXT }?, ! reference+ ! } reference = element reference { attribute anchor { xsd:ID }?, attribute target { URI }?, front, ! seriesInfo*, ! format*, ! annotation* } seriesInfo = element seriesInfo { attribute name { ATEXT }, attribute value { ATEXT }, empty } + format = + element format { + attribute target { URI }?, + attribute type { ATEXT }, + attribute octets { NUMBER }?, + empty + } + annotation = + element annotation { (TEXT | xref | eref | iref | cref | spanx)* } start = rfc