Network Working Group | J. F. Reschke |
Internet-Draft | greenbytes |
Obsoletes: 2629 (if approved) | November 19, 2013 |
Intended status: Standards Track | |
Expires: May 23, 2014 |
The 'XML2RFC' Vocabulary
draft-reschke-xml2rfc-01
This document defines the 'XML2RFC' vocabulary; an XML-based (Extensible Markup Language) language used for writing Internet Drafts and RFCs.
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 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 23, 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.
This document describes version 2 ('v2') of the 'XML2RFC' vocabulary; an XML 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").
The vocabulary is defined in prose, based on the Relax NG schema ([RNC]) contained in Appendix C. Note that the schema can be used for automated validity checks, but certain constraints are only described in prose.
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 [element.front]> (Section 2.19).
one or more <t [element.t]> elements (Section 2.38)
Provides address information for the author.
This element appears as child element of: <author [element.author]> (Section 2.6).
This element appears as child element of: <reference [element.reference]> (Section 2.30).
In any order:
This element appears as child element of: <front [element.front]> (Section 2.19).
text
This element appears as child element of: <figure [element.figure]> (Section 2.17).
(optional)
Allowed values:
(optional)
(optional)
(optional)
(optional)
(optional)
(optional)
(optional)
Allowed values:
text
This element appears as child element of: <front [element.front]> (Section 2.19).
(optional)
(optional)
(optional)
Allowed values:
(optional)
This element appears as child element of: <rfc [element.rfc]> (Section 2.33).
This element appears as child element of: <texttable [element.texttable]> (Section 2.39).
In any order:
This element appears as child element of: <postal [element.postal]> (Section 2.27).
text
This element appears as child element of: <postal [element.postal]> (Section 2.27).
text
This element appears as child element of: <postal [element.postal]> (Section 2.27).
text
This element appears as child element of: <annotation [element.annotation]> (Section 2.3), <c [element.c]> (Section 2.8), <postamble [element.postamble]> (Section 2.28), <preamble [element.preamble]> (Section 2.29), and <t [element.t]> (Section 2.38).
(optional)
(optional)
text
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. 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 thee 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 etc. are allowed.
This element appears as child element of: <front [element.front]> (Section 2.19).
(optional)
(optional)
(optional)
This element appears as child element of: <address [element.address]> (Section 2.2).
text
This element appears as child element of: <annotation [element.annotation]> (Section 2.3), <c [element.c]> (Section 2.8), <postamble [element.postamble]> (Section 2.28), <preamble [element.preamble]> (Section 2.29), and <t [element.t]> (Section 2.38).
(mandatory)
text
This element appears as child element of: <address [element.address]> (Section 2.2).
text
This element appears as child element of: <section [element.section]> (Section 2.34), and <t [element.t]> (Section 2.38).
(optional)
Allowed values:
(optional)
(optional)
(optional)
(optional)
(optional)
Allowed values:
(optional)
(optional)
This element appears as child element of: <reference [element.reference]> (Section 2.30).
(optional)
(optional)
(mandatory)
This element appears as child element of: <reference [element.reference]> (Section 2.30), and <rfc [element.rfc]> (Section 2.33).
This element appears as child element of: <annotation [element.annotation]> (Section 2.3), <c [element.c]> (Section 2.8), <figure [element.figure]> (Section 2.17), <postamble [element.postamble]> (Section 2.28), <preamble [element.preamble]> (Section 2.29), <section [element.section]> (Section 2.34), and <t [element.t]> (Section 2.38).
(mandatory)
(optional)
Allowed values:
(optional)
This element appears as child element of: <front [element.front]> (Section 2.19).
text
This element appears as child element of: <t [element.t]> (Section 2.38).
(optional)
(optional)
(optional)
one or more <t [element.t]> elements (Section 2.38)
This element appears as child element of: <rfc [element.rfc]> (Section 2.33).
one or more <section [element.section]> elements (Section 2.34)
This element appears as child element of: <front [element.front]> (Section 2.19).
(mandatory)
one or more <t [element.t]> elements (Section 2.38)
This element appears as child element of: <author [element.author]> (Section 2.6).
(optional)
text
This element appears as child element of: <address [element.address]> (Section 2.2).
text
This element appears as child element of: <address [element.address]> (Section 2.2).
This element appears as child element of: <figure [element.figure]> (Section 2.17), and <texttable [element.texttable]> (Section 2.39).
In any order:
This element appears as child element of: <figure [element.figure]> (Section 2.17), and <texttable [element.texttable]> (Section 2.39).
In any order:
This element appears as child element of: <references [element.references]> (Section 2.31).
(optional)
(optional)
This element appears as child element of: <back [element.back]> (Section 2.7).
(optional)
one or more <reference [element.reference]> elements (Section 2.30)
This element appears as child element of: <postal [element.postal]> (Section 2.27).
text
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 can be useful for producing other types of document (but is out-of-scope for this specification).
(optional)
Document category (see Appendix A.1).
Allowed values:
(optional)
Affects the generated boilerplate.
See [RFC5741] for more information.
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").
See Section 7 of [IDGUIDE] for further information.
(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.
See Section 2 of [RFC5741] for details.
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.
This element appears as child element of: <back [element.back]> (Section 2.7), <middle [element.middle]> (Section 2.23), and <section [element.section]> (Section 2.34).
(optional)
(mandatory)
(optional)
Allowed values:
Names the document series in which this document appears, and also specifies an identifier within that series.
This element appears as child element of: <reference [element.reference]> (Section 2.30).
(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).
This element appears as child element of: <annotation [element.annotation]> (Section 2.3), <c [element.c]> (Section 2.8), <postamble [element.postamble]> (Section 2.28), <preamble [element.preamble]> (Section 2.29), and <t [element.t]> (Section 2.38).
(optional)
(optional)
Allowed values:
text
This element appears as child element of: <postal [element.postal]> (Section 2.27).
text
This element appears as child element of: <abstract [element.abstract]> (Section 2.1), <list [element.list]> (Section 2.22), <note [element.note]> (Section 2.24), and <section [element.section]> (Section 2.34).
(optional)
(optional)
In any order:
This element appears as child element of: <section [element.section]> (Section 2.34).
(optional)
Allowed values:
(optional)
(optional)
Allowed values:
(optional)
Allowed values:
(optional)
This element appears as child element of: <front [element.front]> (Section 2.19).
(optional)
text
This element appears as child element of: <texttable [element.texttable]> (Section 2.39).
(optional)
Allowed values:
(optional)
text
This element appears as child element of: <address [element.address]> (Section 2.2).
text
This element appears as child element of: <t [element.t]> (Section 2.38).
(optional)
This element appears as child element of: <front [element.front]> (Section 2.19).
text
This element appears as child element of: <annotation [element.annotation]> (Section 2.3), <c [element.c]> (Section 2.8), <postamble [element.postamble]> (Section 2.28), <preamble [element.preamble]> (Section 2.29), and <t [element.t]> (Section 2.38).
(optional)
Allowed values:
(optional)
Allowed values:
(mandatory)
text
We thank Marshall T. Rose for both the original design and the reference implementation of the "xml2rfc" formatter.
[XML] | Maler, E., Yergeau, F., Paoli, J., Sperberg-McQueen, M. and T. Bray, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", W3C Recommendation REC-xml-20081126, November 2008. Latest version available at |
[RFC2026] | Bradner, S., "The Internet Standards Process -- Revision 3", BCP 9, RFC 2026, October 1996. |
[RFC2629] | Rose, M.T., "Writing I-Ds and RFCs using XML", RFC 2629, June 1999. |
[RFC5741] | Daigle, L. and O. Kolkman, "RFC Streams, Headers, and Boilerplates", RFC 5741, December 2009. |
[RNC] | Clark, J., "RELAX NG Compact Syntax", OASIS , November 2002. |
[IDGUIDE] | Housley, R., "Guidelines to Authors of Internet-Drafts", December 2010. |
[RFCSTYLE] | Braden, R., Ginoza, S. and A. Hagens, "RFC Document Style (draft 09)", September 2009. |
[TLP2.0] | IETF Trust, "Legal Provisions Relating to IETF Documents", February 2009. |
[TLP3.0] | IETF Trust, "Legal Provisions Relating to IETF Documents", September 2009. |
[TLP4.0] | IETF Trust, "Legal Provisions Relating to IETF Documents", December 2009. |
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.
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.
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.
The name for these values refers to the "TLP" ("IETF TRUST Legal Provisions Relating to IETF Documents"), on effect 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 "right" text depending on the document's date information (see above):
TLP | starting with publication date |
---|---|
[TLP3.0] | 2009-11-01 |
[TLP4.0] | 2010-04-01 |
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 the additional text from Section 6.c.i of the TLP:
This produces the additional text from Section 6.c.ii of the TLP:
This produces the additional text from Section 6.c.iii of the TLP, frequently called the "pre-5378 escape clause":
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.
The <appendix> element has been removed; to generate an appendix, place a <section [element.section]> inside <back [element.back]>.
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 [element.artwork]>: Has a set of new attributes: "name", "type", "src", "align", "alt", "width", and "height". (Section 2.5)
<author [element.author]>: The <organization [element.organization]> element is now optional. The "role" attribute was added. (Section 2.6)
<date [element.date]>: All attributes are now optional. (Section 2.13)
<figure [element.figure]>: Has a set of new attributes: "suppress-title", "src", "align", "alt", "width", and "height". (Section 2.17)
<iref [element.iref]>: Has a new "primary" attribute. (Section 2.20)
<list [element.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 [element.rfc]>: The "ipr" attribute has gained additional values. The attributes "consensus", "iprExtract", "submissionType", and "xml:lang" have been added. (Section 2.33)
<reference [element.reference]>: <annotation [element.annotation]> allows adding prose to a reference. (Section 2.30)
<references [element.references]>: Can now appear multiple times, and carry a "title" attribute (so that normative and informative references can be split). (Section 2.31)
<section [element.section]>: The new "toc" attribute controls whether it will appear in the Table Of Contents. <iref [element.iref]> can now appear as direct child element. (Section 2.34)
<t [element.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 [element.annotation]> (Section 2.3), <c [element.c]> (Section 2.8), <cref [element.cref]> (Section 2.12), <format [element.format]> (Section 2.18), <spanx [element.spanx]> (Section 2.36), <texttable [element.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
Allow multiple paragraphs in list items; eliminating the need to use <vspace [element.vspace]> (see http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#ext.element.lt).
Make the <date [element.date]> element optional; all of its content is optional already.
Deprecate or remove the <format [element.format]> element; right now it's not used for the generation of the plain text document anyway.
Allow <reference [element.reference]>s that identify a document set such as a BCP.
Allow overriding the "anchor" attribute of an included <reference> element.
Add a way to add prose to a reference that avoids abuse of <seriesInfo>.
Extend <xref [element.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.
Extend <figure [element.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". Also, 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).
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 [element.postal]> ought to be more strict to allow at most one of <city [element.city]>, <region [element.region]>, <code [element.code]>, and <country [element.country]>.
Cleanup the set of overlapping attributes between <figure [element.figure]> and <artwork [element.artwork]>.
<spanx [element.spanx]> has both a weird whitespace model ("preserve") and problematic styling. Consider to deprecate it in favor of elements such as <em> and <code>.
Extend the concept of language tagging to at least examples and contact information to address potential japanese/chinese font confusion.
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