Network Working Group | H. Levkowetz |
Internet-Draft | Elf Tools AB |
Intended status: Informational | November 17, 2018 |
Expires: May 21, 2019 |
Implementation notes for RFC7991,
"The 'xml2rfc' Version 3 Vocabulary"
draft-levkowetz-xml2rfc-v3-implementation-notes-06
This memo documents issues and observations found while implementing RFC 7991. Individual notes are organised into separate sections, depending on their character.
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 https://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 21, 2019.
Copyright (c) 2018 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 (https://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.
Implementation of tool support for [RFC7991] and related specifications has been done during 2017 and 2018, split in the following individual parts, all implemented as individual modes of the python-based xml2rfc processor [XML2RFC]:
During the implementation work, a number of issues with the specification has been found (this was expected at the outset by all parties) and a number of observations has been made about limitations of the specification and vocabulary version 3 schema, and also limitations in the specification of the work to be done.
The purpose of this memo is to collect those issues and observations in one place.
When this memo says 'the current version of xml2rfc', it refers to the latest release of the xml2rfc processor available from the PyPi package repository at the date this document was published, as given above. As of 28 Sep. 2018, this was version 2.10.3.
The introduction to [RFC7991] states:
However, an unstated assumption seems to have been that the new tools and formatters would be used primarily to produce HTML output, in order to transition to publication of renderings of RFCs in more modern formats than plain-text ASCII.
This is a reasonable and worthwhile goal, but as a result, the schema as specified in [RFC7991] has some drawbacks compared with the version 2 vocabulary when used to produce Internet-Drafts in the text format common within the IETF (Internet Engineering Task Force) at this time.
Lack of pagination has little impact on direct online readability, but when comparing the output of the new text formatter with the old one, one aspect leaps out: Since there is no pagination, the table of contents simply lists the section headers to a certain depth, without any accompanying page numbers. This makes a surprising difference in how useful the table of contents is in getting an initial feel for the document. The at-a-glance information which lets a reader know if this is a document of 10 pages or 100 is simply lacking.
The specification [RFC7998] says that an error should be generated if a <date> specification is found with missing elements; but the RFC Editor publishes documents (except for April 1st RFCs) with only year and month, no day of month. The specification disallows this, and in effect makes it impossible for the RFC Editor to publish documents according to the current policy regarding publication date format.
Given the existing use of "name" on <seriesInfo>, this attribute name has a semantic dissonance.
This issue is tracked as github issue #36
The schema permits <list> inside <aside>, but <list> is deprecated, and <aside> is a new vocabulary v3 element, so they should never be able to occur together, it seems to me.
A number of elements permits a mixed content model (see Section 3.1.8.2): <li>, <blockquote>, <dd>, <td>, and <th>. However, when using the simpler of the two content schemas, two of them (<td> and <th>) permit inline line breaks through the use of <br> elements; the others do not. This seems terribly arbitrary.
This issue is tracked as github issue #37
The current specification says:
This does not match established typographic terminology. In typographic terminology, "hanging indent" describes the case where the indentation of the second and subsequent lines of a paragraph is greater than the indentation of the first line. Whether the definition in a definition list starts on the first line or not has nothing to do with the presence of hanging indent; our definition lists will always have hanging indent.
The 'hanging' attribute also describes something different from what the term has been used to describe in the version 2 vocabulary. This will be confusing to users.
A more descriptive name for the attribute we're talking about would be 'start-definition-on-first-line', but that's unwieldy. Maybe 'newline="false"' to start the definition on the first line, or something like 'definition-start="first"'?
This issue is tracked as github issue #38
The deprecation of the "hangIndent" attribute on <list> leaves no opportunity to control the size of the hanging indent. In some definition lists, it is desirable to have a wide indentation, in order to clearly show the terms, in other cases it is more important to allow for a larger text volume than the width of the terms would allow.
This issue is tracked as github issue #39
The version 3 schema deprecates the previously available 'align' attribute for the tables, and the V2 to V3 converter will remove this attributes if used. This makes a previous feature that was appreciated by some authors unavailable. In the text formatter, the effect is simply to make all tables left-aligned, which may not be the most readable and polished output, but for the HTML formatter it also potentially removes the option of letting text flow around smaller tables in a controlled way.
This issue is tracked as github issue #40
In HTML5, <span> may not be placed directly inside a table. RFC 7992 specifies that <iref> should be rendered as a <span>, and also specifies that <table> is directly rendered as its HTML counterpart. This results in generating invalid HTML. Suggest disallowing <iref> as a direct child of <table> (but still permitting it within <th> and <td>).
When <li> is used with <ul empty="true">, the rendering is under-specified (the specification says 'no label will be shown", but doesn't say whether list indentation (leading white-space) should be eliminated or not.
If the intention is to make it possible to render unordered lists with arbitrary symbols, chosen on a per-list-item basis, the current attributes of <li> are insufficient to indent and line-wrap list items properly with <ul empty='true'>.
It is not possible, for instance, to use <ul> lists to generate XML for a table of content, since if the width of the bullet (the section number, in this case) is unknown, the proper indentation and line wrapping cannot be determined.
This issue is tracked as github issue #45
The mixed content model for <li> —- either text and inline elements like sub, sup, bcp14, or <t>, <ul>, <figure> etc, is non-intuitive and may be hard for users to keep straight.
This would apply also to other elements that today have alternative content models: <blockquote>, <dd>, <td>, and <th>.
This issue is tracked as github issue #46
So the <name> element can contain text or <tt>, and <tt> can contain other markup like <sub> and <sup> etc., but why cannot <name> contain <sup> etc. directly?
This issue is tracked as github issue #47
The schema provides for extra attributes: "ascii" and "abbrev". Why no "asciiAbbrev" for the case when the name and abbreviation has non-ascii characters?
The enhancement to <postal>, adding a <postalLine> element, is a fair step on the way to permitting better representation of the wealth of postal addresses around the globe which don't match the American postal addresses.
Unfortunately, it manages to throw the baby out with the bathwater by constraining postalLine to be used only if none of the other elements are used. This makes it impossible to apply hCard labels (based on vCard [RFC6350] properties) to the elements of an address. Applying the schema from RFC 7991 would make country information and hCard tags unavailable for any locality with a postal address scheme that needs to use <postalLine> because it does not match the American scheme. This would make statistics such as the author origin statistics either miss authors with such addresses, or make the statistics harder to compile than is necessary, and make for instance the data on this page skewed: <https://datatracker.ietf.org/stats/document/yearly/continent/>
The current implementation maps <postalLine> to the hCard property "extended-address", and permits it to be used together with other elements, in particular <country>, <region>, and <city>. This is a change to the schema.
The version two xml2rfc processors already support the attribute "quote-title". The attribute name change introduces an incompatibility. This in particular impacts existing bibxml reference files, which should work with both version 2 and 3 vocabulary documents.
This issue is tracked as github issue #48
The v3 schema cannot properly model multiple reference subsections contained within one numbered section. The v2 formatter handled this by silently inserting an enclosing section, but with the introduction of the preptool, which in theory should produce a master file from which various formatters would produce equivalent results, this becomes troublesome, as the automatic insertion of a container section is specified for the html formatter, in section 9.8. of RFC 7992, but not for the text formatter. It would be much better to make the prepped xml explicitly show exactly what should be rendered, and not rely on formatters silently insert elements.
This issue is tracked as github issue #49
Changing the "category" attribute of <rfc> to a name value in an additional <seriesInfo> makes it much harder than it needs to be to look it up. It also makes the semantics of <seriesInfo> less clear.
Changing the "docName" attribute of <rfc> to a name value in an additional <seriesInfo> makes it much harder than it needs to be to look it up. It also makes the semantics of <seriesInfo> even less clear. See also Section 4.4.23.
The RFC number attribute in the <rfc> element is used as a switch to control whether an RFC or an Internet-Draft is produced. Moving what is effectively an important controlling switch for the operation of the formatters from the main element down into what is arguably an obscure combination of attribute values on a <seriesInfo> element several levels down from the main element feels wrong.
The specification is not clear on emitting <CODE BEGINS> and <CODE ENDS> automatically when rendering <sourcecode>. In some cases it would be helpful, in others not.
Why keepWithNext only on <t>? It would be very natural to expect to be able to say keepWithNext for 2 tables, or 2 figures, or 2 lists?
keepWithNext on one element is equivalent with keepWithPrevious on the following element, provided the following element can have a keepWithPrevious attribute. Providing both violates both KISS [KISS] and DRY (Don't Repeat Yourself) [DRY].
Thinking about being able to issue warnings both during xml2rfc processing and when running idnits, it seems very hard to distinguish between intentional and non-intentional inclusion of non-ASCII characters in document text.
In addition to the problem of correctly detecting non-intentional use of Unicode characters, there is also the issue (for authors) of correctly converting given Unicode characters to one of the forms recommended in [RFC7997], and the issue (for idnits) of verifying that any Unicode characters or strings are correctly represented as Unicode code-point values next to the literal character or string.
One solution to this could be to not try to guess, or establish heuristics, but instead use a v3 schema element with preptool validation to ensure a straightforward solution to all the issues, as follows:
The <u> element contains a Unicode string which will be rendered according to one of the 6 methods of Unicode renderings listed in [RFC7997], Section 3.4.
In xml2rfc vocabulary version 3, the elements <author>, <organisation>, <street>, <city>, <region>, <code>, <country>, <postalLine>, <email>, and <seriesInfo> may contain non-ascii characters for the purpose of rendering author names, addresses, and reference titles correctly. They also have an additional "ascii" attribute for the purpose of proper rendering in ascii-only media.
However, in order to insert Unicode characters in any other context, xml2rfc vocabulary v3 requires that the Unicode string be enclosed within an <u> element. The element will be expanded inline based on the value of an attribute named "expansion" as follows. Given an element <u expansion="...">Δ</u> in an example sentence:
If the <u> element encloses a Unicode string, the rendering reflects this. The element <u expansion="numeric-literal">ᏚᎢᎵᎬᎢᎬᏒ</u> will be expanded to 'the characters U+13DA U+13A2 U+13B5 U+13AC U+13A2 U+13AC U+13D2 ("ᏚᎢᎵᎬᎢᎬᏒ")'
Unicode characters which are not enclosed in one of the elements mentioned above will be replaced with a question mark (?) and a warning will be issued.
In v2, this results in a list using space as the bullet, thus each list entry is indented as with other bullet symbols. However, this leaves no way to get list entries with arbitrary text that are not indented, in order to produce lists such as that used in Table of Content and Index.
Furthermore, the specification does not indicate if <ul empty="true"> should be rendered with space as a bullet, or without any bullet and indentation. A clarification would be good.
For items in an ordered list, the "derivedContent" attribute should be set to the counter value for the item. But that counter value is only known during rendering. How is this supposed to work?
The [RFC7991] text seems to be based on a misunderstanding of the purpose of the <format> element in pointing to alternative representations of a reference. There seems to be no reason in removing this ability. The current implementation does not remove alternative <format> entries when converting v2 to v3. The RFC 7991 text should be adjusted accordingly, and in RFC 7992 it should be specified how to render links to alternative formats for a reference.
This causes capability loss. The "hangIndent" attribute did not only signal that hanging indent should be used, but also gave the size of the indent. No equivalent control has been provided for the <dl> element in the version 3 vocabulary.
The "colspan" attribute is given a default value of "0", this should be "1". "0" is not otherwise defined in the text, and the only reasonable interpretation would be to hide the cell (make it occupy zero columns).
The "rowspan" attribute is given a default value of "0", this should be "1". "0" is not otherwise defined in the text, and the only reasonable interpretation would be to hide the cell (make it occupy zero rows).
The classical meaning of this term is a a monotonically increasing sequence of integers, globally unique or unique within a context. In this document, it is instead meant to indicate section, table, figure numbers, which for sections are not plain counters.
To make more interesting, in other contexts in the document, the notation "-nnn", which also would normally indicate a dash followed by digits, i.e., a counter, is also re-interpreted to include section numbers; strings of numbers including embedded period signs. This is bad terminology.
The <seriesInfo> "stream" attribute has a default value of "IETF". The effect of setting default values after the XInclude processing is to set stream="IETF" on all reference <seriesInfo> which don't have a stream set. This is probably not right.
Some attribute validation beyond what the schema enforces is possible and desirable. One example of this is to validate that all attributes which are expected to have integer values actually does so. A section on this should be added. The current implementation adds integer attribute validation.
The list of elements that are given p- or paragraph tags is severely limited, and since the presence of a pn= attribute is required in order to make internal <xref> instances work, this limits the elements to which it is possible to reference with html fragment identifiers. Why?
Why is <dt> and <li> present, but not <ol>, <dl>, <ul>?
In generated HTML, the values set for "pn" and "slugifiedName" will be used as link targets, which makes a type of xsd:ID appropriate in the input format.
Additionally, if Table of Contents and Index is generated internally as XML, and rendered by the various renderers to appropriate formats, the <xref> entries will have target values (defined as type xsd:IDREF) referencing "pn" and "slugifiedName" values, which means that the XML will be invalid if these are not of type xsd:ID.
The v3 schema does not require the 'type' attribute on <artwork> to have a value, which makes sense when there's no <artwork> 'src' attribute to include. But if there is a 'src' attribute, but no value for 'type', how should the 'src' value be handled?
The easiest and most explicit handling would be to require a 'type' value if there is a 'src' attribute; a more doubtful alternative would be to use something like the Linux file magic command to try to guess at the content type that 'src' points at.
The RFC Series Editor has not yet provided such a table. It is definitely desired, in order to be able to deal correctly with plain-text output.
There is no guidance on the structure of an index, if one is to be generated by the preptool.
It is not up to the format definition to set policy for acceptance or rejection of draft submissions. The matter is more complex than the text assumes, see for instance datatracker issue #2422. In addition to being inappropriate, this text also quietly changes policy from +/- 3 days to +/- 0 days, without saying that it updates RFC 4228 [RFC4228], which is the current specification of permissible dates in draft submissions. Finally, enforcing this would cause a lot of grief and problems.
The text regarding prose text for month and year in bibliographic references is not workable. How should month and year be combined? Some bibliographic references may have date text which requires year first, others year last, and so on. Mixing the described fuzziness into the otherwise strict year, month, date format makes little sense when the result of combining the year, month and date attributes cannot be predictably and correctly rendered.
Section 5.1 of RFC 7992 says in part:
This is rather vital information regarding the content of the prepped xml when building a formatter, unfortunately it is not mentioned in RFC 7991.
The possible and forbidden combinations of attributes for this element has now become so convoluted that it's really hard to understand how to use it correctly. This needs a serious reconsideration. New usages, with the purpose of replacing various attributes on the <rfc> element, have been added without any consistent pattern or table of permitted and forbidden combinations of values and attributes.
The 'name' attribute is mandatory, and only 3 values are permitted: "RFC", "Interned-Draft", and "DOI", according to RFC 7991. But it is also mandatory to set the name to "" for a <seriesInfo> with a status attribute. Hmm...
So there are 4, not 3 permitted values: "RFC", "Internet-Draft", "DOI", and "".
This means that all reference files which has things like name="ISO", name="W3C Recommendation", etc., etc., in the current reference library have have become illegal.
The placement of <seriesInfo> elements within <reference> has changed in the v3 schema, in that it has been pulled into <front>, and the v2 placement has been deprecated. But this makes 'bibxml' reference files produced according to the v3 schema incompatible with v2 processors, and would require us to maintain 2 separate quotation libraries.
The v3 specification in [RFC7991] introduces two new attributes with semantic content, in addition to the ASCII versions of the pre-existing "name" and "value" attributes: "stream" and "status".
The intention seems to be to deprecate attributes on <rfc>. However, these attributes cannot have multiple values for a do
The number of issues introduced with the move of the <seriesInfo> element and its re-purposing in order to fill functionality in the front of a document is wholly disproportionate with any added functionality. The specification [RFC7991] does not provide any rationale for the changes, and this author cannot see any benefits to the new schema.
There are discrepancies between the specified switch-over dates in the specification, and those given by the Trust statements:
RFC 7991 also states this about the pre5378 text: this text appears under "Copyright Notice", unless the document was published before November 2009, in which case it appears under "Status of This Memo". This does not agree at all with what actual RFCs contain; they seem to consistently have this text under Copyright Notice.
The current specification says:
However, this will result in counting up the part numbers for invisible parts, when numbered elements are contained within enclosing numbered block elements.
The current implementation instead uses the same "pn" numbering scheme as Julian Reschke's vocabulary v3 XSLT processor, with hierarchical subsection element numbering. For instance, the first dt element within a dl in Section 2.1 would have a pn number of "section-2.1-2.1".
The current specification says:
But I believe html5 does not permit more than one "id" attribute per element, which begs the question of how <section> will use multiple instances of identifiers?
Typo:
OLD: <seriesInfo> element's "name" attributes
NEW: <seriesInfo> elements' "name" attributes
This is incomplete. It gives an example, but does not specify how it is to be filled in.
Is the formatter expected to fill out the cells, based on the pattern given, or is that supposed to happen magically based on WD-css3-page-20130314 ?
If the cell content is supposed to be provided by the formatter, it would be good to have a bit more specification than the example; if not, it would be nice for that to be stated explicitly.
The mention of the '[Page]' placeholder could be taken as an indication that all cell content shown are placeholders, but are they, really?
This information seems to be scrambled and incomplete. It suggests the use of 'Status:' for what is otherwise called 'Category:'. It simplifies the presentation of series information to the point that no clue is given of how to handle the two bits of information related to series name and series number -- the example shows 'Series:' 'Internet-Draft', which gives no guidance at all. There is no mention of whether to display 'Obsoletes:' and 'Updates:' information or not.
On a more general note, this is the second section where an incomplete example is provided instead of specification. Examples are however not replacements for proper specification; they are at best a help in making a specification real to the user. Both this section and Section 4.2.3 needs to be expanded to provide a complete specification.
Styling query: The example gives the style of the element that holds author initials the class 'initial' while the attribute is appropriately named 'initials'. Is the difference in attribute and style names intentional? In any case, 'initials' would be more appropriate.
The index has an extra <div> enclosing the contents, starting directly after <h2>, while sections explicitly does not have a div here. This irregularity seems quite unnecessary, but makes the formatter code more complex than need be. Could we please align the two?
RFC 7991 [RFC7991] specifies an attribute "slugifiedName" on <name>, but does not specify how it is to be used. RFC 7998 [RFC7998] specifies how to create these, but not how they should be used. In RFC 7992, slugified names, with an "n-" (or "name-") prefix, are sometimes used on sections, sometimes not. "s-" (or "section-") IDs are sometimes used on <h2> and other header elements, sometimes on paragraph, divs, asides, blockquotes etc. Section 9.33 of [RFC7992] even uses a reference to an "n-" ID that doesn't exist, although it clearly should, based on the section name. This is a mess.
The example reiterates an abbreviated form of the xml given under <author>, as if there was no difference between the rendering of <address> and <author>. Furthermore, the example shows only rendering of elements which are not part of <address>; any rendering of the elements contained within <address> is omitted. This is misleading, in particular since rendering of the individual child elements (<postal>, <phone> , <facsimile> , <email>, and <uri>) has been specified to have explicit renderings.
Given that the specification text is reasonable for author name and org, but nonsense for the <address> element, the following text has been assumed during implementation:
The <address> element will be rendered as a sequence of <div> elements, each corresponding to a child element of <address>, and enclosed in the same <address> element as the name, role, and organization information. Element classes will be taken from hCard [HCARD], as specified on <http://microformats.org/wiki/hcard>.
RFC 7997 gives the text separating the ASCII and non-ASCII address information as "Additional contact information:".
RFC 7997 manages to convey the desired rendering order of ASCII and non-ASCII address information without any americentric language, but RFC 7992 talks about the non-ASCII version as 'fallback'. As a non-native English speaker raised speaking and writing 2 languages that both have alphabets with non-ASCII letters, the author of this memo finds the language in RFC 7992 somewhat offensive, and suggests that it be removed from the document.
The current xml2rfc implementation uses the layout and wording given in RFC 7997, not RFC 7992.
Furthermore, the document also says:
This is in conflict with [RFC7997], Section 3.2, which indicates that the determining factor for displaying both non-ASCII and ASCII author information is whether a script outside the Unicode Latin blocks is used for the primary information. The current implementation checks for this, rather than going by the presence of attributes with an 'ascii' prefix.
Information is completely missing on how to render non-ascii name information in references.
The text does not mention how to deal with <cref>s with display="false". Presumably by not displaying them; but if there exists internal links to the <cref> anchor, completely omitting the rendering could cause breakage. The current xml2rfc implementation handles this by inserting an empty HTML <span> with the appropriate id attribute.
No handling is provided for the case where the <eref> element is empty, which would result in an empty (and invisible) HTML <a> element. The current implementation in this case instead inserts a span containing '<', an <a> with appropriate href and the target URL as text, and '>'.
The specified html rendering will result in a figure title text which links to itself. With the caption placed below the figure, this means that if you click on the title, the figure will scroll up above the browser window. This is not particularly useful.
The current implementation instead inserts an empty <span> as the first element of the figure, and gives it an id attribute with the value set to the slugifiedName attribute of the <name> element, in order to make the link from the figure caption text useful.
The text refers to the "irefid" attribute. Interpreted as meaning the "pn" attribute, as the schema has no "irefid" attribute.
Typo: s/"yes"/"true"/
The <ol> element has no "style" attribute. The implementation assumes "type" instead.
The text here is in conflict with RFC 7997 with respect to rendering the Authors' Addresses section. RFC 7997 describes rendering two sets of full information, one ASCII and one non-ASCII, not a single <div> where the non-ASCII name is given first, followed by the ASCII version as needed.
The text here is in conflict with the use of 'type' in vCard and hCard. Telephone number type annotations identify things like 'Home' and 'Work'. The current implementation does not add the uppercase VOICE type annotation.
The current specification says:
Handling <postalLine> elements this way violates the hCard specification. They will instead be rendered as hCard elements with class "extended-address" within the same <div> with CSS class "adr" as other <postal> sub-elements.
The specification continues to enforce American postal address structure on addresses that don't use <postalLine>. This has been changed in the current implementation; instead of using the fixed American layout for all countries, the formatting has been adapted to use country-specific formatting for all recognised country names and codes.
( The implementer considered applying a non-US postal address layout for all US addresses, to see how swiftly this would raise hue and cry and be labelled a bug, but in the interest of not causing unnecessary upset resisted the urge. )
Section 9.41 of [RFC7992] shows <referencegroup> being rendered as <dt>, <dd>, while the example for this section shows one reference being rendered as <dl> <dt> <dd> </dl>. This is contradictory. Which one is right? The CSS class on <dl>, which is specified as class="reference" points in the direction that each individual <reference> entry should be rendered as one <dl> with one set of <dt> <dd>, while it would seem much more logical to render the list of references as one single list holding all the references.
The current xml2rfc implementation renders <references> as a section containing one <dl>, and each individual <reference> or <referencegroup> as a <dt> <dd> pair within that list. To match this, the CSS class used is 'references' rather than 'reference'.
There is no mention in the description of the html rendering of <reference> of the effects of <displayreference>, which definitely needs to be considered. Emitting the original anchor value from the reference entry (which often comes from the bibxml reference library) would make the emitted reference labels wrong when there is a <displayreference> entry for the reference. The most straightforward approach would be to add an attribute "derivedAnchor" to <reference> and have the preptool set it.
The example shows the 'and' between author names within a span (unclear why) but does not show how to handle commas separating authors. The style examples on github do not enclose commas or 'and' in a span, which seems reasonable. Going with the style example files here. Section 9.7.3 of RFC 7992 gives an example without 'and' enclosed in a span, contradicting Section 9.40 of the same RFC.
Trying to sort out the rendering of author names in references by looking at other sources than RFC 7992 reveals that the CSS samples show dual reference entries, one with ascii names and another with non-ascii names. This contradicts RFC 7997, which shows a single reference entry where the non-ascii author names are given with the ascii equivalent in parentheses.
The current implementation follows RFC 7997 in this respect, not RFC 7992.
This element is a sibling to <reference>, and <reference> is described as being rendered as a <dl> with one set of <dt>, <dd> child elements.
However, <referencegroup> is specified to be rendered as a <dt>, <dd> set, without any containing <dl>. The individual reference entries are then specified to be rendered as <div>s inside the <dd>
The specification says that this is to be rendered as a <section>. However, if <reference>s and <referencegroup>s are to be rendered as <dt>, <dd>, then this element needs to be rendered as <section> <dl> ... </dl> </section>
RFC 7992 says: "This element is directly rendered as its HTML counterpart."
This ignores the special processing needed to insert a <caption> element. The current implementation handles this appropriately. The specification should be updated.
RFC 7992 says: "This element is directly rendered as its HTML counterpart."
However, that is not correct. An appropriate style class needs to be inserted to honour the "align" attribute. The classes "alignLeft", "alignCenter", and "alignRight" of the provided CSS are geared towards block alignment; here text alignment is needed. The current implementation uses "text-left", "text-center", and "text-right", and provides appropriate CSS entries. (These attribute names matches the equivalent bootstrap names.)
RFC 7992 says: "This element is directly rendered as its HTML counterpart."
However, that is not correct. An appropriate style class needs to be inserted to honour the "align" attribute. The classes "alignLeft", "alignCenter", and "alignRight" of the provided CSS are geared towards block alignment; here text alignment is needed. The current implementation uses "text-left", "text-center", and "text-right", and provides appropriate CSS entries. (These attribute names matches the equivalent bootstrap names.)
This section completely lacks specification on how to render title elements with non-Latin content and an "ascii" attribute.
The specification says:
However, inspection of actual usage indicates that a better rendering would be to surround the generated <a> with square brackets only for empty <xref> elements; when there is content, usage indicates that authors provide enclosing parentheses or not depending on circumstances. Since in HTML rendering the brackets are not necessary to provide a clue that this refers to other content (unlike the text case), the square brackets could be omitted when the <xref> element contains text. The current implementation does so.
Error if any of year, month, day is missing:
It is an unnecessary and unwanted restriction when not in RFC processing mode to given an error for missing date elements. Missing date elements have been permitted because they make it easier for draft authors to rev drafts without having to pay attention to the date values every time they generate new output. This requirement should apply only to RFC prepping mode, and only in part:
In RFC processing mode, this implicitly changes the RFC-Editor policy regarding publication dates, which earlier have specified only year and month (except for April 1st RFCs). Is this intentional?
This is under-specified, given the detailed requirements on the <date> attributes. Should probably be specified as format according to [RFC3339], with year, month, day, hour, minute, and second.
All the default values in 7991 are also expressed in the v3.rnc schema. Remove text indicating otherwise. And by the way, it was very helpful to extract these from the schema programmatically; having them specified otherwise would make it much harder to follow a changing schema.
A number of attributes which are deprecated have default values. The current specification will cause those to be inserted, even if they have been removed earlier by the v2v3 converter because they are deprecated. This seems inconsistent.
It's specified that sections with <boilerplate> ancestors should have toc="exclude", but this won't then affect <boilerplate> sections which are inserted as part of the processing in 5.4.2. It would make more sense to move this processing to after 5.4.2.
The logic in the second bullet is flawed. First it says to set elements with children with toc="include" to "include", but then it says that it is an error if they are set to "exclude". Either there should be a warning, and the toc= attribute should be updated, or there should be an error and termination. Not both.
This potentially inserts a new <t> element, but after the default setting in 5.2.6.
Is that 'in' a direct descendant relationship, or any descendant? I.e., does this affect <date> elements in included <reference> elements? Unclear. (RFC7991 is much clearer on this point, but that's not an excuse for being unclear here).
The uppercasing of 'ascii' in the section <name> is incorrect in this case; the attribute name is explicitly 'ascii', not 'ASCII'. The section name should be '"ascii" Attribute Processing'.
After the earlier XInclude processing, this will include all the author elements in the included references, which the document author should not normally change in any way. Was this the intention?
<title> and <postalLine> also has an "ascii" attribute — is it a mistake that they are not mentioned here? Assuming so, for the preptool implementation.
What about the ascii* attributes on author? Assuming they should be processed the same way.
Should this be done in both I-D mode and RFC mode? The trouble is that the following subsections only describes the boilerplate relevant to an RFC; there's additional boilerplate that is needed for drafts. I don't think it's reasonable to have a draft with only parts of the boilerplate contained in a boilerplate section.
This section also specifies an error message to be used verbatim; the troublesome thing is that it's not clear what it means. The message is: "Existing boilerplate being removed. Other tools, specifically the draft submission tool, will treat this condition as an error". What is it that the draft submission tool is going to treat as an error? The presence of boilerplate? Why? The removal of boilerplate? How is that related to draft submission? This is very jumbled.
This comes too late. It is specified that if either is missing, it should be added. But the default attribute setting earlier has set stream="IETF" on all <seriesInfo> elements that didn't have it. If a document is read without submissionType, and stream set correctly to something else than "IETF" on one of the <seriesInfo> elements, then the default-setting will have created a conflict which cannot be resolved purely from the document at this point.
Furthermore, it doesn't seem like a good fit to have tag attributes that all have to be set to the same value. This is not according to [DRY], and unnecessarily introduces the possibility of conflict, as a result of multiple <seriesInfo> elements being permitted (Relevant to the v3 schema, not the preptool).
It specifies that one should consider both submissionType and <seriesInfo> stream value; but those have just been set equal in 5.4.2.1.
It is indicated that the rfc-editor will provide the URL patterns. What are they?
In the formatter, the order of <seriesInfo> determines the rendering order. The insertion should probably be done in the desired rendering order.
The 'n-' prefix for slugs is unnecessarily opaque.
Should the slugs be unique? Assuming yes, but guidance would be good. The current version of xml2rfc enforces unique slugs, with the following algorithm:
What does 'pn' mean? Cryptic is never good when humans have to deal with it. At least explain as "part number" in text. Possibly even change pn="" to part="".
<back><section> is not mentioned. Assuming numbering as section-appendix.1.2
<iref> elements are not mentioned (but covered in 7991). Should be listed in 7998.
The numbering scheme is inconsistent between notes/boilerplate and other sections, in that if attempting to split a pn on dashes (which external tools might want to do) the boilerplate/note sections contain an additional dash.
The anchor prefixes described unnecessarily break with existing links to document sections. Wikipedia has (2018-02-19) about 84 000 pages that link to RFCs; with most pages having multiple links. A small manual sampling indicates that about 1 link in 10 has a #section- fragment identifier. All of these will break if the new tools are used to generated content linked from these pages.
How much larger than Wikipedia is the whole of the internet, in terms of links to RFCs? Hard to tell (though searching for 'rfc' on Google indicates 'about 10 000 000 results). In any case, we are talking about breaking a substantial number of links using fragment identifiers of the format #section- and #appendix- if the new tools are used to replace the old html content that sites currently point to.
Numbering of <iref> talks about setting the 'pn' attribute. Mixed into this is a mention of 'irefid', which isn't a valid attribute. The current implementation assumes that 'pn' is meant.
The item and sub-item text is not constrained to slug format; in order to deliver useful pn values, slugification should be done. On the other hand, the explicit prescription of how to ensure uniqueness clashes with the total lack of uniqueness attention under 5.4.4.
There's a formatting mistake:
The last sentence of the last bullet ("Issue a warning...") should not be part of the bullet, but a separate final paragraph for the Section.
RFC791 specifies that the <artwork> content is a fallback if there is external <svg> content, but 7998 says to drop the fallback and insert the external <svg>. This deletes information, and makes the fallback unavailable. This needs a better handling.
List item 4 says:
However, we have no particular reason to assume that the content of the "src" URL is XML. Quite to the contrary, it would be a very natural and common use case that the external content is a source code file.
It is not clear from the description if the derived content text should contain square brackets when an <xref> would be rendered with square brackets in current output formats.
It is not clear if the derived content should include the 'Figure', or 'Table' label when pointing to such objects. When rendering such a reference in the current output formats, the generated text would include the label, but the current text seems to lean towards not making this part of the derived content, which would cause incompatibility with the output of v2 formatters.
The purpose of this is insufficiently explained. If the intention is to use this when generating derived formats, there are problems: If, for instance, the derived format with a <reference> target is set to 'RFC1234', the text inserted in a derived format should have surrounding square brackets; but if the target is a section, it should not. If on the other hand the derived format includes the square brackets when appropriate, the link in a derived format with internal link capability will use the whole of the bracketed string, rather than the more appropriate text within the brackets.
Why doesn't <relref> have the same format options as <xref>? Surely they must be just as relevant here. But more importantly, <relref> overlaps <xref> so much that it would be better to just add section, relative, and displayFormat to <xref>. Maybe change displayFormat to the earlier proposed 'sectionFormat'.
RFC7998 does not say anything about inserting xml for the index, if one is requested, but it seems counter-intuitive not to produce xml for the index as part of the preptool processing, given all the other prepping that's being done. What's more, in Section 2.27 of RFC 7991 there's this text:
Bullet 4.: Bad grammar: s/RFC the form/RFC, in the form/
Bullet 4.: Hmm. The <link rel="convertedFrom" href="draft-..."> should ideally be created automatically, but there is no clear path of how to do that.
Using the W3C validator to validate the V3 output, there are some errors; all of them with the same basic complaint: The values prescribed for the <link> "rel" attribute (derivedFrom, describedBy, and item) are not permitted values. The permitted values are given here: <https://html.spec.whatwg.org/multipage/links.html#linkTypes>.
This document does not introduce any security considerations on its own.
[DRY] | Wikipedia, "Don't repeat yourself", 2018. |
[HCARD] | Celik, T., "hCard 1.0", 2015. |
[KISS] | Wikipedia, "KISS Principle", 2018. |
[RFC3339] | Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002. |
[RFC4228] | Rousskov, A., "Requirements for an IETF Draft Submission Toolset", RFC 4228, DOI 10.17487/RFC4228, December 2005. |
[RFC6350] | Perreault, S., "vCard Format Specification", RFC 6350, DOI 10.17487/RFC6350, August 2011. |
[RFC7749] | Reschke, J., "The "xml2rfc" Version 2 Vocabulary", RFC 7749, DOI 10.17487/RFC7749, February 2016. |
[RFC7991] | Hoffman, P., "The "xml2rfc" Version 3 Vocabulary", RFC 7991, DOI 10.17487/RFC7991, December 2016. |
[RFC7992] | Hildebrand, J. and P. Hoffman, "HTML Format for RFCs", RFC 7992, DOI 10.17487/RFC7992, December 2016. |
[RFC7993] | Flanagan, H., "Cascading Style Sheets (CSS) Requirements for RFCs", RFC 7993, DOI 10.17487/RFC7993, December 2016. |
[RFC7994] | Flanagan, H., "Requirements for Plain-Text RFCs", RFC 7994, DOI 10.17487/RFC7994, December 2016. |
[RFC7995] | Hansen, T., Masinter, L. and M. Hardy, "PDF Format for RFCs", RFC 7995, DOI 10.17487/RFC7995, December 2016. |
[RFC7996] | Brownlee, N., "SVG Drawings for RFCs: SVG 1.2 RFC", RFC 7996, DOI 10.17487/RFC7996, December 2016. |
[RFC7997] | Flanagan, H., "The Use of Non-ASCII Characters in RFCs", RFC 7997, DOI 10.17487/RFC7997, December 2016. |
[RFC7998] | Hoffman, P. and J. Hildebrand, ""xml2rfc" Version 3 Preparation Tool Description", RFC 7998, DOI 10.17487/RFC7998, December 2016. |
[RFC8407] | Bierman, A., "Guidelines for Authors and Reviewers of Documents Containing YANG Data Models", BCP 216, RFC 8407, DOI 10.17487/RFC8407, October 2018. |
[XML2RFC] | Levkowetz, H., "xml2rfc", 2018. |