diff options
Diffstat (limited to 'doc/rfc/rfc7998.txt')
-rw-r--r-- | doc/rfc/rfc7998.txt | 1011 |
1 files changed, 1011 insertions, 0 deletions
diff --git a/doc/rfc/rfc7998.txt b/doc/rfc/rfc7998.txt new file mode 100644 index 0000000..3fb94ae --- /dev/null +++ b/doc/rfc/rfc7998.txt @@ -0,0 +1,1011 @@ + + + + + + +Internet Architecture Board (IAB) P. Hoffman +Request for Comments: 7998 ICANN +Category: Informational J. Hildebrand +ISSN: 2070-1721 Mozilla + December 2016 + + + "xml2rfc" Version 3 Preparation Tool Description + +Abstract + + This document describes some aspects of the "prep tool" that is + expected to be created when the new xml2rfc version 3 specification + is deployed. + +Status of This Memo + + This document is not an Internet Standards Track specification; it is + published for informational purposes. + + This document is a product of the Internet Architecture Board (IAB) + and represents information that the IAB has deemed valuable to + provide for permanent record. It represents the consensus of the + Internet Architecture Board (IAB). Documents approved for + publication by the IAB are not a candidate for any level of Internet + Standard; see Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc7998. + +Copyright Notice + + Copyright (c) 2016 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. + + + + + + + + + +Hoffman & Hildebrand Informational [Page 1] + +RFC 7998 v3 Prep Tool December 2016 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. xml2rfc v3 Prep Tool Usage Scenarios . . . . . . . . . . . . 4 + 3. Internet-Draft Submission . . . . . . . . . . . . . . . . . . 4 + 4. Canonical RFC Preparation . . . . . . . . . . . . . . . . . . 5 + 5. What the v3 Prep Tool Does . . . . . . . . . . . . . . . . . 5 + 5.1. XML Sanitization . . . . . . . . . . . . . . . . . . . . 6 + 5.1.1. XInclude Processing . . . . . . . . . . . . . . . . . 6 + 5.1.2. DTD Removal . . . . . . . . . . . . . . . . . . . . . 6 + 5.1.3. Processing Instruction Removal . . . . . . . . . . . 6 + 5.1.4. Validity Check . . . . . . . . . . . . . . . . . . . 6 + 5.1.5. Check "anchor" . . . . . . . . . . . . . . . . . . . 6 + 5.2. Defaults . . . . . . . . . . . . . . . . . . . . . . . . 6 + 5.2.1. "version" Insertion . . . . . . . . . . . . . . . . . 6 + 5.2.2. "seriesInfo" Insertion . . . . . . . . . . . . . . . 7 + 5.2.3. <date> Insertion . . . . . . . . . . . . . . . . . . 7 + 5.2.4. "prepTime" Insertion . . . . . . . . . . . . . . . . 7 + 5.2.5. <ol> Group "start" Insertion . . . . . . . . . . . . 7 + 5.2.6. Attribute Default Value Insertion . . . . . . . . . . 7 + 5.2.7. Section "toc" attribute . . . . . . . . . . . . . . . 7 + 5.2.8. "removeInRFC" Warning Paragraph . . . . . . . . . . . 8 + 5.3. Normalization . . . . . . . . . . . . . . . . . . . . . . 8 + 5.3.1. "month" Attribute . . . . . . . . . . . . . . . . . . 8 + 5.3.2. ASCII Attribute Processing . . . . . . . . . . . . . 8 + 5.3.3. "title" Conversion . . . . . . . . . . . . . . . . . 9 + 5.4. Generation . . . . . . . . . . . . . . . . . . . . . . . 9 + 5.4.1. "expiresDate" Insertion . . . . . . . . . . . . . . . 9 + 5.4.2. <boilerplate> Insertion . . . . . . . . . . . . . . . 9 + 5.4.2.1. Compare <rfc> "submissionType" and <seriesInfo> + "stream" . . . . . . . . . . . . . . . . . . . . 9 + 5.4.2.2. "Status of this Memo" Insertion . . . . . . . . . 9 + 5.4.2.3. "Copyright Notice" Insertion . . . . . . . . . . 10 + 5.4.3. <reference> "target" Insertion . . . . . . . . . . . 10 + 5.4.4. <name> Slugification . . . . . . . . . . . . . . . . 10 + 5.4.5. <reference> Sorting . . . . . . . . . . . . . . . . . 10 + 5.4.6. "pn" Numbering . . . . . . . . . . . . . . . . . . . 10 + 5.4.7. <iref> Numbering . . . . . . . . . . . . . . . . . . 11 + 5.4.8. <xref> Processing . . . . . . . . . . . . . . . . . . 11 + 5.4.8.1. "derivedContent" Insertion (with Content) . . . . 11 + 5.4.8.2. "derivedContent" Insertion (without Content) . . 11 + 5.4.9. <relref> Processing . . . . . . . . . . . . . . . . . 12 + 5.5. Inclusion . . . . . . . . . . . . . . . . . . . . . . . . 12 + 5.5.1. <artwork> Processing . . . . . . . . . . . . . . . . 12 + 5.5.2. <sourcecode> Processing . . . . . . . . . . . . . . . 14 + + + + + + +Hoffman & Hildebrand Informational [Page 2] + +RFC 7998 v3 Prep Tool December 2016 + + + 5.6. RFC Production Mode Cleanup . . . . . . . . . . . . . . . 14 + 5.6.1. <note> Removal . . . . . . . . . . . . . . . . . . . 14 + 5.6.2. <cref> Removal . . . . . . . . . . . . . . . . . . . 15 + 5.6.3. <link> Processing . . . . . . . . . . . . . . . . . . 15 + 5.6.4. XML Comment Removal . . . . . . . . . . . . . . . . . 15 + 5.6.5. "xml:base" and "originalSrc" Removal . . . . . . . . 15 + 5.6.6. Compliance Check . . . . . . . . . . . . . . . . . . 15 + 5.7. Finalization . . . . . . . . . . . . . . . . . . . . . . 15 + 5.7.1. "scripts" Insertion . . . . . . . . . . . . . . . . . 16 + 5.7.2. Pretty-Format . . . . . . . . . . . . . . . . . . . . 16 + 6. Additional Uses for the Prep Tool . . . . . . . . . . . . . . 16 + 7. Security Considerations . . . . . . . . . . . . . . . . . . . 16 + 8. Informative References . . . . . . . . . . . . . . . . . . . 17 + IAB Members at the Time of Approval . . . . . . . . . . . . . . . 18 + Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 18 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 + +1. Introduction + + As initially described in [RFC6949], the canonical format (the data + that is the authorized, recognized, accepted, and archived version of + the document) of the RFC Series has been plain text to date: it is + now changing to XML (using the xml2rfc v3 vocabulary [RFC7991]). + + However, most people will read RFCs in other formats, such as HTML, + PDF, ASCII text, or other formats not yet in existence. In order to + ensure as much uniformity in text output as possible across formats + (and with the canonical XML itself), there is a desire that the + translation from XML into the other formats will be straightforward + syntactic translation. To make that happen, a good amount of data + will need to be in the XML format that is not there today. That data + will be added by a program called the "prep tool", which will often + run as a part of the xml2rfc process. + + This document specifies the steps that the prep tool will have to + take. When changes to the xml2rfc v3 vocabulary [RFC7991] are made, + this document is likely to be updated at the same time. + + The details (particularly any vocabularies) described in this + document are expected to change based on experience gained in + implementing the new publication toolsets. Revised documents will be + published capturing those changes as the toolsets are completed. + Other implementers must not expect those changes to remain backwards- + compatible with the details described in this document. + + + + + + + +Hoffman & Hildebrand Informational [Page 3] + +RFC 7998 v3 Prep Tool December 2016 + + +2. xml2rfc v3 Prep Tool Usage Scenarios + + The prep tool will have several settings: + + o Internet-Draft preparation + + o Canonical RFC preparation + + There are only a few differences between the two settings: for + example, the boilerplate output and the date output on the front + page. + + Note that this document only describes what the IETF-sponsored prep + tool does. Others might create their own work-alike prep tools for + their own formatting needs. However, an output format developer does + not need to change the prep tool in order to create their own + formatter: they only need to be able to consume prepared text. The + IETF-sponsored prep tool runs in two different modes: "I-D" mode when + the tool is run during Internet-Draft submission and processing and + "RFC production mode" when the tool is run by the RFC Production + Center while producing an RFC. + + This tool is described as if it is a separate tool so that we can + reason about its architectural properties. In actual implementation, + it might be a part of a larger suite of functionality. + +3. Internet-Draft Submission + + When the IETF draft submission tool accepts xml2rfc version 3 + vocabulary [RFC7991] (referred to as "v3" hereafter) as an input + format, the submission tool runs the submitted file through the prep + tool. This is called "I-D mode" in this document. If the tool finds + no errors, it keeps two XML files: the submitted file and the prepped + file. + + The prepped file provides a record of what a submitter was attesting + to at the time of submission. It represents a self-contained record + of what any external references resolved to at the time of + submission. + + The prepped file is used by the IETF formatters to create outputs + such as HTML, PDF, and text (or the tools act in a way + indistinguishable from this). The message sent out by the draft + submission tool includes a link to the submitted XML as well as the + other outputs, including the prepped XML. + + + + + + +Hoffman & Hildebrand Informational [Page 4] + +RFC 7998 v3 Prep Tool December 2016 + + + The prepped XML can be used by tools not yet developed to output new + formats that have as similar output as possible to the current IETF + formatters. For example, if the IETF creates a .mobi output renderer + later, it can run that renderer on all of the prepped XML that has + been saved, ensuring that the content of included external references + and all of the part numbers and boilerplate will be the same as what + was produced by the previous IETF formatters at the time the document + was first uploaded. + +4. Canonical RFC Preparation + + During editing, the RPC will run the prep tool in canonical RFC + production mode and make the results available to the authors during + AUTH48 (see [PUB-PROCESS]) so they can see what the final output + would look like. When the document has passed AUTH48 review, the RPC + runs the prep tool in canonical RFC production mode one last time, + locks down the canonicalized XML, runs the formatters for the + publication formats, and publishes all of those. + + This document assumes that the prep tool will be used by the RPC in + the manner described in this document; they may use something + different or with different configuration. + + Similar to the case for I-Ds, the prepped XML can be used later to + re-render the output formats or to generate new formats. + +5. What the v3 Prep Tool Does + + The steps listed here are in order of processing. In all cases where + the prep tool would "add" an attribute or element, if that attribute + or element already exists, the prep tool will check that the + attribute or element has valid values. If the value is incorrect, + the prep tool will warn with the old and new values, then replace the + incorrect value with the new value. + + Currently, the IETF uses a tool called "idnits" [IDNITS] to check + text input to the Internet-Drafts posting process. idnits indicates + if it encountered anything it considers an error and provides text + describing all of the warnings and errors in a human-readable form. + The prep tool should probably check for as many of these errors and + warnings as possible when it is processing the XML input. For the + moment, tooling might run idnits on the text output from the prepared + XML. The list below contains some of these errors and warnings, but + the deployed version of the prep tool may contain additional steps to + include more or the checks from idnits. + + + + + + +Hoffman & Hildebrand Informational [Page 5] + +RFC 7998 v3 Prep Tool December 2016 + + +5.1. XML Sanitization + + These steps will ensure that the input document is properly formatted + and that all XML processing has been performed. + +5.1.1. XInclude Processing + + Process all <x:include> elements. Note: XML <x:include> elements may + include more <x:include> elements (with relative references resolved + against the base URI potentially modified by a previously inserted + xml:base attribute). The tool may be configurable with a limit on + the depth of recursion. + +5.1.2. DTD Removal + + Fully process any Document Type Definitions (DTDs) in the input + document, then remove the DTD. At a minimum, this entails processing + the entity references and includes for external files. + +5.1.3. Processing Instruction Removal + + Remove processing instructions. + +5.1.4. Validity Check + + Check the input against the RELAX NG (RNG) in [RFC7991]. If the + input is not valid, give an error. + +5.1.5. Check "anchor" + + Check all elements for "anchor" attributes. If any "anchor" + attribute begins with "s-", "f-", "t-", or "i-", give an error. + +5.2. Defaults + + These steps will ensure that all default values have been filled in + to the XML, in case the defaults change at a later date. Steps in + this section will not overwrite existing values in the input file. + +5.2.1. "version" Insertion + + If the <rfc> element has a "version" attribute with a value other + than "3", give an error. If the <rfc> element has no "version" + attribute, add one with the value "3". + + + + + + + +Hoffman & Hildebrand Informational [Page 6] + +RFC 7998 v3 Prep Tool December 2016 + + +5.2.2. "seriesInfo" Insertion + + If the <front> element of the <rfc> element does not already have a + <seriesInfo> element, add a <seriesInfo> element with the name + attribute based on the mode in which the prep tool is running + ("Internet-Draft" for Draft mode and "RFC" for RFC production mode) + and a value that is the input filename minus any extension for + Internet-Drafts, and is a number specified by the RFC Editor for + RFCs. + +5.2.3. <date> Insertion + + If the <front> element in the <rfc> element does not contain a <date> + element, add it and fill in the "day", "month", and "year" attributes + from the current date. If the <front> element in the <rfc> element + has a <date> element with "day", "month", and "year" attributes, but + the date indicated is more than three days in the past or is in the + future, give a warning. If the <front> element in the <rfc> element + has a <date> element with some but not all of the "day", "month", and + "year" attributes, give an error. + +5.2.4. "prepTime" Insertion + + If the input document includes a "prepTime" attribute of <rfc>, exit + with an error. + + Fill in the "prepTime" attribute of <rfc> with the current datetime. + +5.2.5. <ol> Group "start" Insertion + + Add a "start" attribute to every <ol> element containing a group that + does not already have a start. + +5.2.6. Attribute Default Value Insertion + + Fill in any default values for attributes on elements, except + "keepWithNext" and "keepWithPrevious" of <t>, and "toc" of <section>. + Some default values can be found in the RELAX NG schema, while others + can be found in the prose describing the elements in [RFC7991]. + +5.2.7. Section "toc" attribute + + For each <section>, modify the "toc" attribute to be either "include" + or "exclude": + + o for sections that have an ancestor of <boilerplate>, use "exclude" + + + + + +Hoffman & Hildebrand Informational [Page 7] + +RFC 7998 v3 Prep Tool December 2016 + + + o else for sections that have a descendant that has toc="include", + use "include". If the ancestor section has toc="exclude" in the + input, this is an error. + + o else for sections that are children of a section with + toc="exclude", use "exclude". + + o else for sections that are deeper than rfc/@tocDepth, use + "exclude" + + o else use "include" + +5.2.8. "removeInRFC" Warning Paragraph + + In I-D mode, if there is a <note> or <section> element with a + "removeInRFC" attribute that has the value "true", add a paragraph to + the top of the element with the text "This note is to be removed + before publishing as an RFC." or "This section...", unless a + paragraph consisting of that exact text already exists. + +5.3. Normalization + + These steps will ensure that ideas that can be expressed in multiple + different ways in the input document are only found in one way in the + prepared document. + +5.3.1. "month" Attribute + + Normalize the values of "month" attributes in all <date> elements in + <front> elements in <rfc> elements to numeric values. + +5.3.2. ASCII Attribute Processing + + In every <email>, <organization>, <street>, <city>, <region>, + <country>, and <code> element, if there is an "ascii" attribute and + the value of that attribute is the same as the content of the + element, remove the "ascii" element and issue a warning about the + removal. + + In every <author> element, if there is an "asciiFullname", + "asciiInitials", or "asciiSurname" attribute, check the content of + that element against its matching "fullname", "initials", or + "surname" element (respectively). If the two are the same, remove + the "ascii*" element and issue a warning about the removal. + + + + + + + +Hoffman & Hildebrand Informational [Page 8] + +RFC 7998 v3 Prep Tool December 2016 + + +5.3.3. "title" Conversion + + For every <section>, <note>, <figure>, <references>, and <texttable> + element that has a (deprecated) "title" attribute, remove the "title" + attribute and insert a <name> element with the title from the + attribute. + +5.4. Generation + + These steps will generate new content, overriding existing similar + content in the input document. Some of these steps are important + enough that they specify a warning to be generated when the content + being overwritten does not match the new content. + +5.4.1. "expiresDate" Insertion + + If in I-D mode, fill in "expiresDate" attribute of <rfc> based on the + <date> element of the document's <front> element. + +5.4.2. <boilerplate> Insertion + + Create a <boilerplate> element if it does not exist. If there are + any children of the <boilerplate> element, produce a warning that + says "Existing boilerplate being removed. Other tools, specifically + the draft submission tool, will treat this condition as an error" and + remove the existing children. + +5.4.2.1. Compare <rfc> "submissionType" and <seriesInfo> "stream" + + Verify that <rfc> "submissionType" and <seriesInfo> "stream" are the + same if they are both present. If either is missing, add it. Note + that both have a default value of "IETF". + +5.4.2.2. "Status of this Memo" Insertion + + Add the "Status of this Memo" section to the <boilerplate> element + with current values. The application will use the "submissionType", + and "consensus" attributes of the <rfc> element, the <workgroup> + element, and the "status" and "stream" attributes of the <seriesInfo> + element, to determine which boilerplate from [RFC7841] to include, as + described in Appendix A of [RFC7991]. + + + + + + + + + + +Hoffman & Hildebrand Informational [Page 9] + +RFC 7998 v3 Prep Tool December 2016 + + +5.4.2.3. "Copyright Notice" Insertion + + Add the "Copyright Notice" section to the <boilerplate> element. The + application will use the "ipr" and "submissionType" attributes of the + <rfc> element and the <date> element to determine which portions and + which version of the Trust Legal Provisions (TLP) to use, as + described in A.1 of [RFC7991]. + +5.4.3. <reference> "target" Insertion + + For any <reference> element that does not already have a "target" + attribute, fill the target attribute in if the element has one or + more <seriesinfo> child element(s) and the "name" attribute of the + <seriesinfo> element is "RFC", "Internet-Draft", or "DOI" or other + value for which it is clear what the "target" should be. The + particular URLs for RFCs, Internet-Drafts, and Digital Object + Identifiers (DOIs) for this step will be specified later by the RFC + Editor and the IESG. These URLs might also be different before and + after the v3 format is adopted. + +5.4.4. <name> Slugification + + Add a "slugifiedName" attribute to each <name> element that does not + contain one; replace the attribute if it contains a value that begins + with "n-". + +5.4.5. <reference> Sorting + + If the "sortRefs" attribute of the <rfc> element is true, sort the + <reference> and <referencegroup> elements lexically by the value of + the "anchor" attribute, as modified by the "to" attribute of any + <displayreference> element. The RFC Editor needs to determine what + the rules for lexical sorting are. The authors of this document + acknowledge that getting consensus on this will be a difficult task. + +5.4.6. "pn" Numbering + + Add "pn" attributes for all parts. Parts are: + + o <section> in <middle>: pn='s-1.4.2' + + o <references>: pn='s-12' or pn='s-12.1' + + o <abstract>: pn='s-abstract' + + o <note>: pn='s-note-2' + + o <section> in <boilerplate>: pn='s-boilerplate-1' + + + +Hoffman & Hildebrand Informational [Page 10] + +RFC 7998 v3 Prep Tool December 2016 + + + o <table>: pn='t-3' + + o <figure>: pn='f-4' + + o <artwork>, <aside>, <blockquote>, <dt>, <li>, <sourcecode>, <t>: + pn='p-[section]-[counter]' + +5.4.7. <iref> Numbering + + In every <iref> element, create a document-unique "pn" attribute. + The value of the "pn" attribute will start with 'i-', and use the + item attribute, the subitem attribute (if it exists), and a counter + to ensure uniqueness. For example, the first instance of "<iref + item='foo' subitem='bar'>" will have the "irefid" attribute set to + 'i-foo-bar-1'. + +5.4.8. <xref> Processing + +5.4.8.1. "derivedContent" Insertion (with Content) + + For each <xref> element that has content, fill the "derivedContent" + with the element content, having first trimmed the whitespace from + ends of content text. Issue a warning if the "derivedContent" + attribute already exists and has a different value from what was + being filled in. + +5.4.8.2. "derivedContent" Insertion (without Content) + + For each <xref> element that does not have content, fill the + "derivedContent" attribute based on the "format" attribute. + + o For a value of "counter", the "derivedContent" is set to the + section, figure, table, or ordered list number of the element with + an anchor equal to the <xref> target. + + o For format='default' and the "target" attribute points to a + <reference> or <referencegroup> element, the "derivedContent" is + the value of the "target" attribute (or the "to" attribute of a + <displayreference> element for the targeted <reference>). + + o For format='default' and the "target" attribute points to a + <section>, <figure>, or <table>, the "derivedContent" is the name + of the thing pointed to, such as "Section 2.3", "Figure 12", or + "Table 4". + + o For format='title', if the target is a <reference> element, the + "derivedContent" attribute is the name of the reference, extracted + from the <title> child of the <front> child of the reference. + + + +Hoffman & Hildebrand Informational [Page 11] + +RFC 7998 v3 Prep Tool December 2016 + + + o For format='title', if the target element has a <name> child + element, the "derivedContent" attribute is the text content of + that <name> element concatenated with the text content of each + descendant node of <name> (that is, stripping out all of the XML + markup, leaving only the text). + + o For format='title', if the target element does not contain a + <name> child element, the "derivedContent" attribute is the value + of the "target" attribute with no other adornment. Issue a + warning if the "derivedContent" attribute already exists and has a + different value from what was being filled in. + +5.4.9. <relref> Processing + + If any <relref> element's "target" attribute refers to anything but a + <reference> element, give an error. + + For each <relref> element, fill in the "derivedLink" attribute. + +5.5. Inclusion + + These steps will include external files into the output document. + +5.5.1. <artwork> Processing + + 1. If an <artwork> element has a "src" attribute where no scheme is + specified, copy the "src" attribute value to the "originalSrc" + attribute, and replace the "src" value with a URI that uses the + "file:" scheme in a path relative to the file being processed. + See Section 7 for warnings about this step. This will likely be + one of the most common authoring approaches. + + 2. If an <artwork> element has a "src" attribute with a "file:" + scheme, and if processing the URL would cause the processor to + retrieve a file that is not in the same directory, or a + subdirectory, as the file being processed, give an error. If the + "src" has any shellmeta strings (such as "`", "$USER", and so on) + that would be processed, give an error. Replace the "src" + attribute with a URI that uses the "file:" scheme in a path + relative to the file being processed. This rule attempts to + prevent <artwork src='file:///etc/passwd'> and similar security + issues. See Section 7 for warnings about this step. + + 3. If an <artwork> element has a "src" attribute, and the element + has content, give an error. + + + + + + +Hoffman & Hildebrand Informational [Page 12] + +RFC 7998 v3 Prep Tool December 2016 + + + 4. If an <artwork> element has type='svg' and there is an "src" + attribute, the data needs to be moved into the content of the + <artwork> element. + + * If the "src" URI scheme is "data:", fill the content of the + <artwork> element with that data and remove the "src" + attribute. + + * If the "src" URI scheme is "file:", "http:", or "https:", fill + the content of the <artwork> element with the resolved XML + from the URI in the "src" attribute. If there is no + "originalSrc" attribute, add an "originalSrc" attribute with + the value of the URI and remove the "src" attribute. + + * If the <artwork> element has an "alt" attribute, and the SVG + does not have a <desc> element, add the <desc> element with + the contents of the "alt" attribute. + + 5. If an <artwork> element has type='binary-art', the data needs to + be in an "src" attribute with a URI scheme of "data:". If the + "src" URI scheme is "file:", "http:", or "https:", resolve the + URL. Replace the "src" attribute with a "data:" URI, and add an + "originalSrc" attribute with the value of the URI. For the + "http:" and "https:" URI schemes, the mediatype of the "data:" + URI will be the Content-Type of the HTTP response. For the + "file:" URI scheme, the mediatype of the "data:" URI needs to be + guessed with heuristics (this is possibly a bad idea). This also + fails for content that includes binary images but uses a type + other than "binary-art". Note: since this feature can't be used + for RFCs at the moment, this entire feature might be + + 6. If an <artwork> element does not have type='svg' or + type='binary-art' and there is an "src" attribute, the data needs + to be moved into the content of the <artwork> element. Note that + this step assumes that all of the preferred types other than + "binary-art" are text, which is possibly wrong. + + * If the "src" URI scheme is "data:", fill the content of the + <artwork> element with the correctly escaped form of that data + and remove the "src" attribute. + + * If the "src" URI scheme is "file:", "http:", or "https:", fill + the content of the <artwork> element with the correctly + escaped form of the resolved text from the URI in the "src" + attribute. If there is no "originalSrc" attribute, add an + "originalSrc" attribute with the value of the URI and remove + the "src" attribute. + + + + +Hoffman & Hildebrand Informational [Page 13] + +RFC 7998 v3 Prep Tool December 2016 + + +5.5.2. <sourcecode> Processing + + 1. If a <sourcecode> element has a "src" attribute where no scheme + is specified, copy the "src" attribute value to the "originalSrc" + attribute and replace the "src" value with a URI that uses the + "file:" scheme in a path relative to the file being processed. + See Section 7 for warnings about this step. This will likely be + one of the most common authoring approaches. + + 2. If a <sourcecode> element has a "src" attribute with a "file:" + scheme, and if processing the URL would cause the processor to + retrieve a file that is not in the same directory, or a + subdirectory, as the file being processed, give an error. If the + "src" has any shellmeta strings (such as "`", "$USER", and so on) + that would be processed, give an error. Replace the "src" + attribute with a URI that uses the "file:" scheme in a path + relative to the file being processed. This rule attempts to + prevent <sourcecode src='file:///etc/passwd'> and similar + security issues. See Section 7 for warnings about this step. + + 3. If a <sourcecode> element has a "src" attribute, and the element + has content, give an error. + + 4. If a <sourcecode> element has a "src" attribute, the data needs + to be moved into the content of the <sourcecode> element. + + * If the "src" URI scheme is "data:", fill the content of the + <sourcecode> element with that data and remove the "src" + attribute. + + * If the "src" URI scheme is "file:", "http:", or "https:", fill + the content of the <sourcecode> element with the resolved XML + from the URI in the "src" attribute. If there is no + "originalSrc" attribute, add an "originalSrc" attribute with + the value of the URI and remove the "src" attribute. + +5.6. RFC Production Mode Cleanup + + These steps provide extra cleanup of the output document in RFC + production mode. + +5.6.1. <note> Removal + + In RFC production mode, if there is a <note> or <section> element + with a "removeInRFC" attribute that has the value "true", remove the + element. + + + + + +Hoffman & Hildebrand Informational [Page 14] + +RFC 7998 v3 Prep Tool December 2016 + + +5.6.2. <cref> Removal + + If in RFC production mode, remove all <cref> elements. + +5.6.3. <link> Processing + + 1. If in RFC production mode, remove all <link> elements whose "rel" + attribute has the value "alternate". + + 2. If in RFC production mode, check if there is a <link> element + with the current ISSN for the RFC series (2070-1721); if not, add + <link rel="item" href="urn:issn:2070-1721">. + + 3. If in RFC production mode, check if there is a <link> element + with a DOI for this RFC; if not, add one of the form <link + rel="describedBy" href="https://dx.doi.org/10.17487/rfcdd"> where + "dd" is the number of the RFC, such as + "https://dx.doi.org/10.17487/rfc2109". The URI is described in + [RFC7669]. If there was already a <link> element with a DOI for + this RFC, check that the "href" value has the right format. The + content of the href attribute is expected to change in the + future. + + 4. If in RFC production mode, check if there is a <link> element + with the file name of the Internet-Draft that became this RFC the + form <link rel="convertedFrom" + href="https://datatracker.ietf.org/doc/draft-tttttttttt/">. If + one does not exist, give an error. + +5.6.4. XML Comment Removal + + If in RFC production mode, remove XML comments. + +5.6.5. "xml:base" and "originalSrc" Removal + + If in RFC production mode, remove all "xml:base" or "originalSrc" + attributes from all elements. + +5.6.6. Compliance Check + + If in RFC production mode, ensure that the result is in full + compliance to the v3 schema, without any deprecated elements or + attributes and give an error if any issues are found. + +5.7. Finalization + + These steps provide the finishing touches on the output document. + + + + +Hoffman & Hildebrand Informational [Page 15] + +RFC 7998 v3 Prep Tool December 2016 + + +5.7.1. "scripts" Insertion + + Determine all the characters used in the document and fill in the + "scripts" attribute for <rfc>. + +5.7.2. Pretty-Format + + Pretty-format the XML output. (Note: there are many tools that do an + adequate job.) + +6. Additional Uses for the Prep Tool + + There will be a need for Internet-Draft authors who include files + from their local disk (such as for <artwork src="mydrawing.svg"/>) to + have the contents of those files inlined to their drafts before + submitting them to the Internet-Draft processor. (There is a + possibility that the Internet-Draft processor will allow XML files + and accompanying files to be submitted at the same time, but this + seems troublesome from a security, portability, and complexity + standpoint.) For these users, having a local copy of the prep tool + that has an option to just inline all local files would be terribly + useful. That option would be a proper subset of the steps given in + Section 5. + + A feature that might be useful in a local prep tool would be the + inverse of the "just inline" option would be "extract all". This + would allow a user who has a v3 RFC or Internet-Draft to dump all of + the <artwork> and <sourcecode> elements into local files instead of + having to find each one in the XML. This option might even do as + much validation as possible on the extracted <sourcecode> elements. + This feature might also remove some of the features added by the prep + tool (such as part numbers and "slugifiedName" attributes starting + with "n-") in order to make the resulting file easier to edit. + +7. Security Considerations + + Steps in this document attempt to prevent the <artwork> and + <sourcecode> entities from exposing the contents of files outside the + directory in which the document being processed resides. For + example, values starting with "/", "./", or "../" should generate + errors. + + The security considerations in [RFC3470] apply here. Specifically, + processing XML-external references can expose a prep-tool + implementation to various threats by causing the implementation to + access external resources automatically. It is important to disallow + arbitrary access to such external references within XML data from + untrusted sources. + + + +Hoffman & Hildebrand Informational [Page 16] + +RFC 7998 v3 Prep Tool December 2016 + + +8. Informative References + + [IDNITS] IETF Tools, "Idnits Tool", + <https://tools.ietf.org/tools/idnits/>. + + [PUB-PROCESS] + RFC Editor, "Publication Process", + <https://www.rfc-editor.org/pubprocess/>. + + [RFC3470] Hollenbeck, S., Rose, M., and L. Masinter, "Guidelines for + the Use of Extensible Markup Language (XML) within IETF + Protocols", BCP 70, RFC 3470, DOI 10.17487/RFC3470, + January 2003, <http://www.rfc-editor.org/info/rfc3470>. + + [RFC6949] Flanagan, H. and N. Brownlee, "RFC Series Format + Requirements and Future Development", RFC 6949, + DOI 10.17487/RFC6949, May 2013, + <http://www.rfc-editor.org/info/rfc6949>. + + [RFC7669] Levine, J., "Assigning Digital Object Identifiers to + RFCs", RFC 7669, DOI 10.17487/RFC7669, October 2015, + <http://www.rfc-editor.org/info/rfc7669>. + + [RFC7841] Halpern, J., Ed., Daigle, L., Ed., and O. Kolkman, Ed., + "RFC Streams, Headers, and Boilerplates", RFC 7841, + DOI 10.17487/RFC7841, May 2016, + <http://www.rfc-editor.org/info/rfc7841>. + + [RFC7991] Hoffman, P., "The "xml2rfc" Version 3 Vocabulary", + RFC 7991, DOI 10.17487/RFC7991, December 2016, + <http://www.rfc-editor.org/info/rfc7991>. + + + + + + + + + + + + + + + + + + + + +Hoffman & Hildebrand Informational [Page 17] + +RFC 7998 v3 Prep Tool December 2016 + + +IAB Members at the Time of Approval + + The IAB members at the time this memo was approved were (in + alphabetical order): + + Jari Arkko + Ralph Droms + Ted Hardie + Joe Hildebrand + Russ Housley + Lee Howard + Erik Nordmark + Robert Sparks + Andrew Sullivan + Dave Thaler + Martin Thomson + Brian Trammell + Suzanne Woolf + +Acknowledgements + + Many people contributed valuable ideas to this document. Special + thanks go to Robert Sparks for his in-depth review and contributions + early in the development of this document and to Julian Reschke for + his help getting the document structured more clearly. + +Authors' Addresses + + Paul Hoffman + ICANN + + Email: paul.hoffman@icann.org + + + Joe Hildebrand + Mozilla + + Email: joe-ietf@cursive.net + + + + + + + + + + + + + +Hoffman & Hildebrand Informational [Page 18] + |