<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-demos-ra-mtsv-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="MTSV">Multi-Sheet Tab-Separated Values (MTSV)</title>
    <seriesInfo name="Internet-Draft" value="draft-demos-ra-mtsv-00"/>
    <author fullname="Demos Ra">
      <organization/>
      <address>
        <email>demos_ra@hotmail.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="15"/>
    <keyword>tsv</keyword>
    <keyword>tabular data</keyword>
    <keyword>media type</keyword>
    <abstract>
      <?line 74?>

<t>This document defines Multi-Sheet Tab-Separated Values (MTSV), a text
format that carries one or more sheets of tab-separated values in a
single file. MTSV is TSV with one additional dimension: sheets are
separated by the ASCII form feed (FF) character. A TSV file that
contains no FF, and no CR other than in CRLF line breaks, is an MTSV
file. This document also registers the text/prs.mtsv media type.</t>
    </abstract>
  </front>
  <middle>
    <?line 84?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The tab-separated values format <xref target="TSV"/> encodes one set of records per
file. Fields are separated by a tab, and records are separated by line
breaks.</t>
      <t>Both separators are ASCII format effectors <xref target="RFC20"/>. HT moves "to the
next in a series of predetermined positions along the printing line",
and LF moves "to the next printing line". MTSV adds FF, the format
effector for the next larger unit, which moves "to the first
pre-determined printing line on the next form or page". Tab gives the
next field, line feed gives the next record, and form feed gives the
next sheet.</t>
      <section anchor="relationship">
        <name>Relationship to TSV</name>
        <t>MTSV keeps the separators and structure of TSV, and adds only one
separator, FF, and a name for each sheet.</t>
        <t>MTSV does not carry over these restrictions of the TSV grammar:</t>
        <ul spacing="normal">
          <li>
            <t>A field can be empty, and a record can consist of a single field, as
in <xref target="RFC4180"/>.</t>
          </li>
          <li>
            <t>A sheet can consist of a header with no records, or of no lines at
all, as a sheet can have no rows in <xref target="OOXML"/>.</t>
          </li>
        </ul>
        <t>A TSV file that contains no FF, and no CR other than in CRLF line
breaks, is an MTSV file (<xref target="data-model"/>).</t>
      </section>
      <section anchor="out-of-scope">
        <name>Out of Scope</name>
        <t>This document does not define data types, formulas, formatting, cell
references, or metadata. Conversion to and from spreadsheet formats such
as <xref target="ODF"/> and <xref target="OOXML"/> is also out of scope.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The grammar in this document uses ABNF <xref target="RFC5234"/>, including its core
rules HTAB, LF, and CRLF.</t>
      <t>In examples, <tt>&lt;TAB&gt;</tt> denotes the tab character (%x09), as in <xref target="TSV"/>,
and <tt>&lt;FF&gt;</tt> denotes the form feed character (%x0C). Line breaks are
shown as line breaks; every line shown, including the last, ends with a
line break.</t>
      <t>This document uses the following terms:</t>
      <dl>
        <dt>field:</dt>
        <dd>
          <t>A text value, as defined in <xref target="TSV"/>.</t>
        </dd>
        <dt>record:</dt>
        <dd>
          <t>A sequence of fields on one line, as defined in <xref target="TSV"/>.</t>
        </dd>
        <dt>header:</dt>
        <dd>
          <t>The first record of a sheet, which contains the name of each field,
as defined in <xref target="TSV"/>.</t>
        </dd>
        <dt>sheet:</dt>
        <dd>
          <t>A header followed by zero or more records, or no lines at all (an
empty sheet). The term matches the corresponding structure in
<xref target="OOXML"/>.</t>
        </dd>
        <dt>sheet name:</dt>
        <dd>
          <t>The text that follows an FF on the same line.</t>
        </dd>
        <dt>unnamed sheet:</dt>
        <dd>
          <t>The sheet formed by the lines before the first FF, or by all lines of
a file that contains no FF. It exists only if there is at least one
such line.</t>
        </dd>
        <dt>MTSV file:</dt>
        <dd>
          <t>A sequence of sheets, conforming to <xref target="syntax"/>.</t>
        </dd>
        <dt>TSV file:</dt>
        <dd>
          <t>A file conforming to <xref target="TSV"/>.</t>
        </dd>
        <dt>generator:</dt>
        <dd>
          <t>An implementation that writes MTSV files.</t>
        </dd>
        <dt>parser:</dt>
        <dd>
          <t>An implementation that reads MTSV files.</t>
        </dd>
      </dl>
    </section>
    <section anchor="data-model">
      <name>Data Model</name>
      <t>A field is text. A record is an ordered sequence of fields. A sheet is a
header and an ordered sequence of zero or more records. Every record in
a sheet has as many fields as the header of that sheet. A sheet with no
lines is an empty sheet; it has neither a header nor records.</t>
      <t>An MTSV file is an ordered sequence of sheets. The order of the sheets is
the order in which they appear in the file.</t>
      <t>Every sheet has a sheet name, except the unnamed sheet. An MTSV file has
an unnamed sheet only if the file contains at least one line before the
first FF. An empty sheet name is permitted. Sheet names are not required
to be unique.</t>
      <t>A TSV file that contains no FF, and no CR other than in CRLF line
breaks, is an MTSV file that consists of exactly one unnamed sheet.</t>
    </section>
    <section anchor="syntax">
      <name>Syntax</name>
      <section anchor="encoding">
        <name>Character Encoding</name>
        <t>An MTSV file is text in the character set identified by the charset
parameter (<xref target="media-type"/>). If the parameter is absent, the character set
is UTF-8 <xref target="RFC3629"/>. The grammar below is expressed in terms of
characters after decoding.</t>
      </section>
      <section anchor="separators">
        <name>Separators</name>
        <t>MTSV uses three separators, all of which are ASCII format effectors
<xref target="RFC20"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Separator</th>
              <th align="left">Character</th>
              <th align="left">Separates</th>
              <th align="left">Source</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">tab</td>
              <td align="left">HT (%x09)</td>
              <td align="left">fields</td>
              <td align="left">
                <xref target="TSV"/></td>
            </tr>
            <tr>
              <td align="left">line break</td>
              <td align="left">LF (%x0A) or CRLF (%x0D.0A)</td>
              <td align="left">records</td>
              <td align="left">
                <xref target="TSV"/></td>
            </tr>
            <tr>
              <td align="left">form feed</td>
              <td align="left">FF (%x0C)</td>
              <td align="left">sheets</td>
              <td align="left">
                <xref target="RFC20"/></td>
            </tr>
          </tbody>
        </table>
        <t>An FF appears only at the start of a line.</t>
      </section>
      <section anchor="sheet-name">
        <name>Sheet Name</name>
        <t>A sheet name is written on the line that begins with an FF, directly
after the FF, and ends at the line break. A sheet name follows the same
rules as a field: it cannot contain HT, LF, FF, or CR.</t>
      </section>
      <section anchor="grammar">
        <name>Grammar</name>
        <sourcecode type="abnf"><![CDATA[
mtsv-file     = unnamed-sheet *named-sheet
unnamed-sheet = sheet-body
named-sheet   = FF sheet-name eol sheet-body
sheet-body    = [header *record]
header        = record
record        = field *(HTAB field) eol
field         = *field-char
sheet-name    = *field-char
field-char    = %x00-08 / %x0B / %x0E-10FFFF
                ; any character except HTAB, LF, FF, and CR
FF            = %x0C
eol           = LF / CRLF
]]></sourcecode>
        <t>In addition to matching the grammar, each record in a sheet <bcp14>MUST</bcp14> have
the same number of fields as the header of that sheet, as required by
<xref target="TSV"/>.</t>
      </section>
    </section>
    <section anchor="parsers">
      <name>Parsers</name>
      <t>An MTSV parser <bcp14>MUST</bcp14> accept every MTSV file that conforms to <xref target="syntax"/>.</t>
      <t>A parser <bcp14>MUST</bcp14> treat the lines before the first FF, if any, as the
unnamed sheet, and each line that begins with an FF as the start of a
new sheet.</t>
      <t>A parser <bcp14>MUST</bcp14> accept both LF and CRLF as line breaks, consistent with
the default line terminators in <xref target="CSVW"/>. A parser <bcp14>MAY</bcp14> accept a final
record that is not followed by a line break, consistent with <xref target="RFC4180"/>.</t>
      <t>A parser <bcp14>MAY</bcp14> ignore a byte order mark at the start of a file, consistent
with <xref section="8.1" sectionFormat="of" target="RFC8259"/>.</t>
      <t>A parser <bcp14>MAY</bcp14> accept input that does not conform to this document.</t>
      <t>An implementation <bcp14>MAY</bcp14> set limits on the size of files, the number of
sheets, records, and fields, and the length of fields and sheet names,
consistent with <xref section="9" sectionFormat="of" target="RFC8259"/>.</t>
    </section>
    <section anchor="generators">
      <name>Generators</name>
      <t>An MTSV generator <bcp14>MUST</bcp14> produce MTSV files that conform to <xref target="syntax"/>.</t>
      <t>A generator <bcp14>MUST</bcp14> end every record with a line break. A generator
<bcp14>SHOULD</bcp14> encode MTSV files in UTF-8, consistent with <xref target="RFC2277"/>, and <bcp14>MUST
NOT</bcp14> add a byte order mark, consistent with <xref section="8.1" sectionFormat="of" target="RFC8259"/>.</t>
      <t>A field or sheet name that contains HT, LF, FF, or CR cannot be
represented in MTSV, as with fields that contain a tab in <xref target="TSV"/>. A
generator <bcp14>MUST NOT</bcp14> write such a value. How a generator handles such
values is out of scope.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="single-sheet">
        <name>Single Sheet</name>
        <t>This is the example from <xref target="TSV"/>. It is both a TSV file and an MTSV file
with one unnamed sheet.</t>
        <artwork><![CDATA[
Name<TAB>Age<TAB>Address
Paul<TAB>23<TAB>1115 W Franklin
Bessy the Cow<TAB>5<TAB>Big Farm Way
Zeke<TAB>45<TAB>W Main St
]]></artwork>
      </section>
      <section anchor="multiple-sheets">
        <name>Multiple Sheets</name>
        <t>This MTSV file contains two sheets, named "People" and "Animals".</t>
        <artwork><![CDATA[
<FF>People
Name<TAB>Age<TAB>Address
Paul<TAB>23<TAB>1115 W Franklin
Zeke<TAB>45<TAB>W Main St
<FF>Animals
Name<TAB>Age<TAB>Address
Bessy the Cow<TAB>5<TAB>Big Farm Way
]]></artwork>
      </section>
      <section anchor="empty-sheet">
        <name>Empty Sheet</name>
        <t>This MTSV file contains an unnamed sheet, an empty sheet named "Empty",
and a sheet named "Animals".</t>
        <artwork><![CDATA[
Name<TAB>Age
Paul<TAB>23
<FF>Empty
<FF>Animals
Name<TAB>Age
Bessy the Cow<TAB>5
]]></artwork>
      </section>
    </section>
    <section anchor="interop">
      <name>Interoperability Considerations</name>
      <t><xref target="relationship"/> describes which TSV files are MTSV files. This section
describes how common text processing affects MTSV files.</t>
      <t>MTSV gives structure to four characters: HT, LF, FF, and CR. These
characters also have other standard properties, and text processing
that acts on those properties can change the structure of an MTSV file:</t>
      <dl>
        <dt>Line splitting:</dt>
        <dd>
          <t>FF has the mandatory break class in <xref target="UAX14"/>. An application that
supports only TSV can present a line that begins with an FF either as a
record whose first field begins with FF, or as an empty line followed
by a line that contains the sheet name.</t>
        </dd>
        <dt>Whitespace:</dt>
        <dd>
          <t>HT, LF, FF, and CR have the White_Space property in <xref target="UCD"/>. Trimming
whitespace from a line can remove an FF, which turns a sheet name
into a record, or remove an HT at either end of a line, which removes
empty fields. Splitting a line on runs of whitespace removes empty
fields and splits fields that contain spaces.</t>
        </dd>
        <dt>Tab expansion:</dt>
        <dd>
          <t>Replacing HT with spaces removes the field structure, as it does for
<xref target="TSV"/>.</t>
        </dd>
        <dt>Control characters:</dt>
        <dd>
          <t>FF is a control character. Applications that remove or reject control
characters remove sheet boundaries. <xref target="XML"/> does not permit FF, so an
MTSV file cannot be carried as XML 1.0 character data without an
additional encoding.</t>
        </dd>
        <dt>Line endings:</dt>
        <dd>
          <t>Converting between LF and CRLF does not change the structure of an
MTSV file (<xref target="parsers"/>). Converting line breaks to CR alone produces a
file that does not conform to this document.</t>
        </dd>
        <dt>Concatenation:</dt>
        <dd>
          <t>Concatenating MTSV files produces an MTSV file that contains the
sheets of each file, in order, only if each non-empty file ends with a
line break and each non-empty file after the first begins with an FF.
Otherwise, the unnamed sheet of a later file becomes part of the last
sheet of the file before it.</t>
        </dd>
        <dt>Unchanged structure:</dt>
        <dd>
          <t>Printing, Unicode normalization, and conversion between character
sets do not change the structure of an MTSV file.</t>
        </dd>
        <dt>Spreadsheets:</dt>
        <dd>
          <t>Spreadsheet applications apply their own rules to sheet names, such
as uniqueness and length, and to data types and sizes. These rules are
outside the scope of this document.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>MTSV files are text and contain no executable content. <xref target="TSV"/> lists no
security considerations.</t>
      <t>Applications that import MTSV files into spreadsheets can interpret
fields that begin with characters such as "=", "+", "-", or "@" as
formulas. Such applications need to treat imported fields as data.</t>
      <t>Sheet names can contain control characters. Applications that display
sheet names need to take care that such characters do not mislead
users.</t>
      <t>Parsers that do not set limits (<xref target="parsers"/>) can exhaust resources when
reading large files or files with very many sheets.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="media-type">
        <name>Media Type Registration</name>
        <t>This document registers the text/prs.mtsv media type in the personal
tree, according to <xref section="3.3" sectionFormat="of" target="RFC6838"/>, using the template in
<xref section="5.6" sectionFormat="of" target="RFC6838"/>.</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>text</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>prs.mtsv</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>charset. MTSV has no in-band charset information, so a default is
needed; if charset is absent, UTF-8 is assumed, as
<xref section="3" sectionFormat="of" target="RFC6657"/> specifies for text subtypes that define a
default.</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>8bit. As per <xref section="4.1.1" sectionFormat="of" target="RFC2046"/>, this media type uses CRLF to
denote line breaks in transport. Implementations need to be aware
that files often use LF alone.</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See <xref target="security"/>.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>See <xref target="interop"/>.</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>This document.</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Applications that store or exchange multiple sheets of tabular data
as text.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>None</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>None</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.mtsv</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>None</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>Demos Ra (demos_ra@hotmail.com)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>Demos Ra</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>Demos Ra</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC20">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC20"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="TSV" target="https://www.iana.org/assignments/media-types/text/tab-separated-values">
          <front>
            <title>text/tab-separated-values</title>
            <author>
              <organization>University of Minnesota Internet Gopher Team</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC2277">
          <front>
            <title>IETF Policy on Character Sets and Languages</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="January" year="1998"/>
            <abstract>
              <t>This document is the current policies being applied by the Internet Engineering Steering Group (IESG) towards the standardization efforts in the Internet Engineering Task Force (IETF) in order to help Internet protocols fulfill these requirements. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="18"/>
          <seriesInfo name="RFC" value="2277"/>
          <seriesInfo name="DOI" value="10.17487/RFC2277"/>
        </reference>
        <reference anchor="RFC4180">
          <front>
            <title>Common Format and MIME Type for Comma-Separated Values (CSV) Files</title>
            <author fullname="Y. Shafranovich" initials="Y." surname="Shafranovich"/>
            <date month="October" year="2005"/>
            <abstract>
              <t>This RFC documents the format used for Comma-Separated Values (CSV) files and registers the associated MIME type "text/csv". This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4180"/>
          <seriesInfo name="DOI" value="10.17487/RFC4180"/>
        </reference>
        <reference anchor="RFC6657">
          <front>
            <title>Update to MIME regarding "charset" Parameter Handling in Textual Media Types</title>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="July" year="2012"/>
            <abstract>
              <t>This document changes RFC 2046 rules regarding default "charset" parameter values for "text/*" media types to better align with common usage by existing clients and servers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6657"/>
          <seriesInfo name="DOI" value="10.17487/RFC6657"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="CSVW" target="https://www.w3.org/TR/2015/REC-tabular-data-model-20151217/">
          <front>
            <title>Model for Tabular Data and Metadata on the Web</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2015" month="December" day="17"/>
          </front>
        </reference>
        <reference anchor="UAX14" target="https://www.unicode.org/reports/tr14/">
          <front>
            <title>Unicode Line Breaking Algorithm</title>
            <author>
              <organization>Unicode Consortium</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="UCD" target="https://www.unicode.org/ucd/">
          <front>
            <title>Unicode Character Database</title>
            <author>
              <organization>Unicode Consortium</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="XML" target="https://www.w3.org/TR/2008/REC-xml-20081126/">
          <front>
            <title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2008" month="November" day="26"/>
          </front>
        </reference>
        <reference anchor="ODF" target="https://docs.oasis-open.org/office/OpenDocument/v1.3/">
          <front>
            <title>Open Document Format for Office Applications (OpenDocument) Version 1.3</title>
            <author>
              <organization>OASIS</organization>
            </author>
            <date year="2021" month="April" day="27"/>
          </front>
        </reference>
        <reference anchor="OOXML">
          <front>
            <title>Information technology - Document description and processing languages - Office Open XML File Formats - Part 1: Fundamentals and Markup Language Reference</title>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="ISO/IEC" value="29500-1:2016"/>
        </reference>
      </references>
    </references>
    <?line 483?>

<section removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <dl>
        <dt>draft-demos-ra-mtsv-00:</dt>
        <dd>
          <t>Initial version.</t>
        </dd>
      </dl>
    </section>
  </back>
  <!-- ##markdown-source:
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
sVo2AAA=

-->

</rfc>
