<?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.2 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wilaw-moq-catalogformat-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title>Common Catalog Format for moq-transport</title>
    <seriesInfo name="Internet-Draft" value="draft-wilaw-moq-catalogformat-02"/>
    <author fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author fullname="Will Law">
      <organization>Akamai</organization>
      <address>
        <email>wilaw@akamai.com</email>
      </address>
    </author>
    <author fullname="Mo Zanaty">
      <organization>Cisco</organization>
      <address>
        <email>mzanaty@cisco.com</email>
      </address>
    </author>
    <date year="2023" month="November" day="30"/>
    <area>Applications and Real-Time</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>moq</keyword>
    <keyword>warp</keyword>
    <keyword>catalog</keyword>
    <abstract>
      <?line 65?>

<t>This specification defines a Common Catalog specification for streaming formats implementing the MOQ Transport Protocol <xref target="MoQTransport"/>. Media over QUIC Transport (MOQT) defines a publish/subscribe based unified media delivery protocol for delivering media for streaming and interactive applications over QUIC. The catalog describes the content made available by a publisher, including information necessary for subscribers to select, subscribe and initialize tracks.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://wilaw.github.io/catalog-format/draft-wilaw-moq-catalogformat.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wilaw-moq-catalogformat/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wilaw/catalog-format"/>.</t>
    </note>
  </front>
  <middle>
    <?line 70?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>MOQT <xref target="MoQTransport"/> defines a transport protocol that utilizes the QUIC network protocol [QUIC] and WebTransport[WebTrans] to move objects between publishers, subscribers and intermediaries. Tracks are identified using a tuple of the Track Namespace and the Track Name. A MOQT Catalog is a specialized track which captures details of all the tracks output by a publisher, including the identities, media profiles, initialization data and inter-track relationships. The mapping of media characteristics of objects with the tracks, as well as relative prioritization of those objects, are captured in separate MoQ Streaming Format specifications. This specification defines a JSON encoded catalog.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119].</t>
    </section>
    <section anchor="catalog">
      <name>Catalog</name>
      <t>A Catalog is a MOQT Object that provides information about tracks from a given publisher. A Catalog is used by publishers for advertising their output and for subscribers in consuming that output. The payload of the Catalog object is opaque to Relays and can be end-to-end encrypted. The Catalog provides the names and namespaces of the tracks being produced, along with the relationship between tracks, properties of the tracks that consumers may use for selection and any relevant initialization data.</t>
      <t>A special case of the catalog exists which describes other catalogs instead of tracks. A catalog might describe tracks, or catalogs, but never both at the same time.</t>
      <section anchor="catalogversion">
        <name>Catalog version</name>
        <t>Versions of this catalog specification are defined using monotonically increasing integers. There is no guarantee that future catalog versions are backwards compatible and field definitions and interpretation may change between versions. A subscriber MUST NOT attempt to parse a catalog version which it does not understand.</t>
        <t>This document defines version 1.</t>
      </section>
      <section anchor="catalog-fields">
        <name>Catalog Fields</name>
        <t>A catalog is a JSON <xref target="JSON"/> document, comprised of a series of mandatory and optional fields. At a minimum, a catalog MUST provide all mandatory fields and one of either a 'tracks' field or a 'catalogs' field.  A producer MAY add additional fields to the ones described in this draft. Custom field names MUST NOT collide with field names described in this draft. To prevent custom field name collisions with future versions, custom field names SHOULD be prefixed using reverse domain name notation e.g "com.example-size". The order of field names within the JSON document is not important. Any track or catalog field declared at the root level is inherited by all tracks or catalogs. Any track or catalog field declared within a track or catalog object overwrites any inherited value.</t>
        <t>A parser MUST ignore fields it does not understand.</t>
        <t>Table 1 provides an overview of all fields defined by this document.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Name</th>
              <th align="left">Required</th>
              <th align="left">Location</th>
              <th align="left">JSON type</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Catalog version</td>
              <td align="left">version</td>
              <td align="left">yes</td>
              <td align="left">R</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="catalogversion"/></td>
            </tr>
            <tr>
              <td align="left">Streaming format</td>
              <td align="left">streamingFormat</td>
              <td align="left">yes</td>
              <td align="left">RC</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="streamingformat"/></td>
            </tr>
            <tr>
              <td align="left">Streaming format version</td>
              <td align="left">streamingFormatVersion</td>
              <td align="left">yes</td>
              <td align="left">RC</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="streamingformatversion"/></td>
            </tr>
            <tr>
              <td align="left">Tracks</td>
              <td align="left">tracks</td>
              <td align="left">opt</td>
              <td align="left">R</td>
              <td align="left">Array</td>
              <td align="left">
                <xref target="tracks"/></td>
            </tr>
            <tr>
              <td align="left">Catalogs</td>
              <td align="left">catalogs</td>
              <td align="left">opt</td>
              <td align="left">R</td>
              <td align="left">Array</td>
              <td align="left">
                <xref target="catalogs"/></td>
            </tr>
            <tr>
              <td align="left">Track namespace</td>
              <td align="left">namespace</td>
              <td align="left">opt</td>
              <td align="left">RTC</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="tracknamespace"/></td>
            </tr>
            <tr>
              <td align="left">Track name</td>
              <td align="left">name</td>
              <td align="left">yes</td>
              <td align="left">TC</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="trackname"/></td>
            </tr>
            <tr>
              <td align="left">Packaging</td>
              <td align="left">packaging</td>
              <td align="left">yes</td>
              <td align="left">RT</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="packaging"/></td>
            </tr>
            <tr>
              <td align="left">Track operation</td>
              <td align="left">operation</td>
              <td align="left">yes</td>
              <td align="left">RT</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="trackoperations"/></td>
            </tr>
            <tr>
              <td align="left">Track label</td>
              <td align="left">label</td>
              <td align="left">opt</td>
              <td align="left">RT</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="tracklabel"/></td>
            </tr>
            <tr>
              <td align="left">Render group</td>
              <td align="left">renderGroup</td>
              <td align="left">opt</td>
              <td align="left">RT</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="rendergroup"/></td>
            </tr>
            <tr>
              <td align="left">Alternate group</td>
              <td align="left">altGroup</td>
              <td align="left">opt</td>
              <td align="left">RT</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="altgroup"/></td>
            </tr>
            <tr>
              <td align="left">Initialization data</td>
              <td align="left">initData</td>
              <td align="left">opt</td>
              <td align="left">RT</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="initdata"/></td>
            </tr>
            <tr>
              <td align="left">Initialization track</td>
              <td align="left">initTrack</td>
              <td align="left">opt</td>
              <td align="left">RT</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="inittrack"/></td>
            </tr>
            <tr>
              <td align="left">Selection parameters</td>
              <td align="left">selectionParams</td>
              <td align="left">opt</td>
              <td align="left">RT</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="selectionparameters"/></td>
            </tr>
            <tr>
              <td align="left">Dependencies</td>
              <td align="left">depends</td>
              <td align="left">opt</td>
              <td align="left">T</td>
              <td align="left">Array</td>
              <td align="left">
                <xref target="dependencies"/></td>
            </tr>
            <tr>
              <td align="left">Temporal ID</td>
              <td align="left">temporalId</td>
              <td align="left">opt</td>
              <td align="left">T</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="temporalid"/></td>
            </tr>
            <tr>
              <td align="left">Spatial ID</td>
              <td align="left">spatialId</td>
              <td align="left">opt</td>
              <td align="left">T</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="spatialid"/></td>
            </tr>
            <tr>
              <td align="left">Codec</td>
              <td align="left">codec</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="codec"/></td>
            </tr>
            <tr>
              <td align="left">Mime type</td>
              <td align="left">mimeType</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="mimetype"/></td>
            </tr>
            <tr>
              <td align="left">Framerate</td>
              <td align="left">framerate</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="framerate"/></td>
            </tr>
            <tr>
              <td align="left">Bitrate</td>
              <td align="left">bitrate</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="bitrate"/></td>
            </tr>
            <tr>
              <td align="left">Width</td>
              <td align="left">width</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="width"/></td>
            </tr>
            <tr>
              <td align="left">Height</td>
              <td align="left">height</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="height"/></td>
            </tr>
            <tr>
              <td align="left">Audio sample rate</td>
              <td align="left">samplerate</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="audiosamplerate"/></td>
            </tr>
            <tr>
              <td align="left">Channel configuration</td>
              <td align="left">channelConfig</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="channelconfiguration"/></td>
            </tr>
            <tr>
              <td align="left">Display width</td>
              <td align="left">displayWidth</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="displaywidth"/></td>
            </tr>
            <tr>
              <td align="left">Display height</td>
              <td align="left">displayHeight</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">Number</td>
              <td align="left">
                <xref target="displayheight"/></td>
            </tr>
            <tr>
              <td align="left">Language</td>
              <td align="left">lang</td>
              <td align="left">opt</td>
              <td align="left">S</td>
              <td align="left">String</td>
              <td align="left">
                <xref target="language"/></td>
            </tr>
          </tbody>
        </table>
        <t>Required: 'yes' indicates a mandatory field  in non-patch catalogs, 'opt' indicates an optional field</t>
        <t>Location:</t>
        <ul spacing="normal">
          <li>
            <t>'R' - the field is located in the Root of the JSON object.</t>
          </li>
          <li>
            <t>'RC' - the field may be located in either the Root or a Catalog object.</t>
          </li>
          <li>
            <t>'RTC' - the field may be located in either the Root, or a Track object or a Catalog object.</t>
          </li>
          <li>
            <t>'TC' - the field may be located in either a Track object or a Catalog object.</t>
          </li>
          <li>
            <t>'RT' - the field may be located in either the Root or a Track object.</t>
          </li>
          <li>
            <t>'T' - the field is located in a Track object.</t>
          </li>
          <li>
            <t>'S' - the field is located in the Selection Parameters object.</t>
          </li>
        </ul>
        <section anchor="streamingformat">
          <name>Streaming format</name>
          <t>A number indicating the streaming format type. Every MoQ Streaming Format normatively referencing this catalog format MUST register itself in the "MoQ Streaming Format Type" table. See <xref target="iana"/> for additional details.</t>
        </section>
        <section anchor="streamingformatversion">
          <name>Streaming format version</name>
          <t>A string indicating the version of the streaming format to which this catalog applies. The structure of the version string is defined by the streaming format.</t>
        </section>
        <section anchor="tracks">
          <name>Tracks</name>
          <t>An array of track objects <xref target="trackobject"/>. If the 'tracks' field is present then the 'catalog' field MUST NOT be present.</t>
        </section>
        <section anchor="catalogs">
          <name>Catalogs</name>
          <t>An array of catalog objects <xref target="catalogobject"/>. If the 'catalogs' field is present then the 'tracks' field MUST NOT be present. A catalog MUST NOT list itself in the catalog array.</t>
        </section>
        <section anchor="catalogobject">
          <name>Catalog object</name>
          <t>A catalog object is a collection of fields whose location is specified as 'RC', 'TC' or 'RTC' in Table 1.</t>
        </section>
        <section anchor="trackobject">
          <name>Tracks object</name>
          <t>A track object is a collection of fields whose location is specified as 'RT', 'TC' or 'RTC' in Table 1.</t>
        </section>
        <section anchor="tracknamespace">
          <name>Track namespace</name>
          <t>The name space under which the track name is defined. See section 2.3 of <xref target="MoQTransport"/>. If the track namespace is declared in the root of the JSON document, then its value is inherited by all tracks and catalogs and it does not need to be re-declared within each track or catalog object. A namespace declared in a track object or catalog object overwrites any inherited name space. The track namespace is optional. If it is not declared at the root or track level, then each track MUST inherit the namespace of the catalog track.</t>
        </section>
        <section anchor="trackname">
          <name>Track name</name>
          <t>A string defining the name of the track. See section 2.3 of <xref target="MoQTransport"/>. Within the catalog, track names MUST be unique per namespace.</t>
        </section>
        <section anchor="packaging">
          <name>Packaging</name>
          <t>A string defining the type of payload encapsulation. Allowed values are strings as defined in Table 2.</t>
          <t>Table 2: Allowed packaging values</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Value</th>
                <th align="left">Draft</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">CMAF</td>
                <td align="left">"cmaf"</td>
                <td align="left">See RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">LOC</td>
                <td align="left">"loc"</td>
                <td align="left">See RFC XXXX</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="trackoperations">
          <name>Track operations</name>
          <t>Each track description can specify an optional operation value that identifies
the catalog producer's intent. Track operation is an enumeration of values
as defined below.</t>
          <ul spacing="normal">
            <li>
              <t>Add: Indicates the track is added to the catalog and the consumers of the
 catalog may subscribe to the track.</t>
            </li>
            <li>
              <t>Delete: Indicates that media producer is no longer producing media on the
associated track. Subscribers SHOULD terminate their subscriptions.</t>
            </li>
          </ul>
          <t>A catalog update in which all previously added tracks are deleted SHOULD be interpreted by a subscriber to indicate that the publisher has terminated the broadcast.</t>
          <t>Table 3 defines the numerical values for the track operations.</t>
          <t>Table 3: Allowed track operations</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Value</th>
                <th align="left">Default value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Add</td>
                <td align="left">add</td>
                <td align="left">yes</td>
              </tr>
              <tr>
                <td align="left">Delete</td>
                <td align="left">delete</td>
                <td align="left"> </td>
              </tr>
            </tbody>
          </table>
          <t>The default track operation is 'add'. This value does not need to be declared in the track object.</t>
        </section>
        <section anchor="tracklabel">
          <name>Track label</name>
          <t>A string defining a human-readable label for the track. Examples might be "Overhead camera view" or "Deutscher Kommentar". Note that the <xref target="JSON"/> spec requires UTF-8 support by decoders.</t>
        </section>
        <section anchor="rendergroup">
          <name>Render group</name>
          <t>An integer specifying a group of tracks which are designed to be rendered together. Tracks with the same group number SHOULD be rendered simultaneously, are usually time-aligned and are designed to accompany one another. A common example would be tying together audio and video tracks.</t>
        </section>
        <section anchor="altgroup">
          <name>Alternate group</name>
          <t>An integer specifying a group of tracks which are alternate versions of one-another. Alternate tracks represent the same media content, but differ in their selection properties. Alternate tracks SHOULD have matching framerate <xref target="framerate"/> and media time sequences. A subscriber typically subscribes to one track from a set of tracks specifying the same alternate group number. A common example would be a set video tracks of the same content offered in alternate bitrates.</t>
        </section>
        <section anchor="initdata">
          <name>Initialization data</name>
          <t>A string holding Base64 <xref target="BASE64"/> encoded initialization data for the track.</t>
        </section>
        <section anchor="inittrack">
          <name>Initialization track</name>
          <t>A string specifying the track name of another track which holds initialization data for the current track. Initialization tracks MUST NOT be added to the tracks array <xref target="tracks"/>. They are referenced only via the initialization track field of the track which they initialize.</t>
        </section>
        <section anchor="selectionparameters">
          <name>Selection parameters</name>
          <t>An object holding a series of name/value pairs which a subscriber can use to select tracks for subscription. If present, the selection parameters object MUST NOT be empty. Any selection parameters declared at the root level are inherited by all tracks. A selection parameters object may exist at both the root and track level. Any declaration of a selection parameter at the track level overrides the inherited root value.</t>
        </section>
        <section anchor="dependencies">
          <name>Dependencies</name>
          <t>Certain tracks may depend on other tracks for decoding. Dependencies holds an array of track names <xref target="trackname"/> on which the current track is dependent. Since only the track name is signaled, the namespace of the dependencies is assumed to match that of the track declaring the dependencies.</t>
        </section>
        <section anchor="temporalid">
          <name>Temporal ID</name>
          <t>A number identifying the temporal layer/sub-layer encoding of the track, starting with 0 for the base layer, and increasing with higher temporal fidelity.</t>
        </section>
        <section anchor="spatialid">
          <name>Spatial ID</name>
          <t>A number identifying the spatial layer encoding of the track, starting with 0 for the base layer, and increasing with higher fidelity.</t>
        </section>
        <section anchor="codec">
          <name>Codec</name>
          <t>A string defining the codec used to encode the track.
For LOC packaged content, the string codec registrations are defined in Sect 3 and Section 4 of <xref target="WEBCODECS-CODEC-REGISTRY"/>.
For CMAF packaged content, the string codec registrations are defined in XXX.</t>
        </section>
        <section anchor="mimetype">
          <name>Mimetype</name>
          <t>A string defining the mime type <xref target="MIME"/> of the track. This parameter is typically supplied with CMAF packaged content.</t>
        </section>
        <section anchor="framerate">
          <name>Framerate</name>
          <t>A number defining the framerate of the track, expressed as frames per second.</t>
        </section>
        <section anchor="bitrate">
          <name>Bitrate</name>
          <t>A number defining the bitrate of track, expressed in bits second.</t>
        </section>
        <section anchor="width">
          <name>Width</name>
          <t>A number expressing the encoded width of the track content in pixels.</t>
        </section>
        <section anchor="height">
          <name>Height</name>
          <t>A number expressing the encoded height of the video frames in pixels.</t>
        </section>
        <section anchor="audiosamplerate">
          <name>Audio sample rate</name>
          <t>The number of audio frame samples per second. This property SHOULD only accompany audio codecs.</t>
        </section>
        <section anchor="channelconfiguration">
          <name>Channel configuration</name>
          <t>A string specifying the audio channel configuration. This property SHOULD only accompany audio codecs. A string is used in order to provide the flexibility to describe complex channel configurations for multi-channel and Next Generation Audio schemas.</t>
        </section>
        <section anchor="displaywidth">
          <name>Display width</name>
          <t>A number expressing the intended display width of the track content in pixels.</t>
        </section>
        <section anchor="displayheight">
          <name>Display height</name>
          <t>A number expressing the intended display height of the track content in pixels.</t>
        </section>
        <section anchor="language">
          <name>Language</name>
          <t>A string defining the dominant language of the track. The string MUST be one of the standard Tags for Identifying Languages as defined by <xref target="LANG"/>.</t>
        </section>
      </section>
      <section anchor="patch">
        <name>Catalog Patch</name>
        <t>A catalog update might contain incremental changes. This is a useful property if many tracks may be initially declared but then there are small changes to a subset of tracks. The producer can issue a patch to describe these small changes. Changes are described incrementally, meaning that a patch can itself modify a prior patch. Patching leverages JSON PATCH <xref target="JSON-PATCH"/> to modify the catalog.   JSON Patch is a format for expressing a sequence of operations to apply to a target JSON document.</t>
        <t>The following rules MUST be followed in processing patches:</t>
        <ul spacing="normal">
          <li>
            <t>The target JSON to be modified is the JSON document described by the preceding <xref target="MoQTransport"/> Object in the Catalog track, post any patching that may have been applied to that Object.</t>
          </li>
          <li>
            <t>A Catalog Patch is identified by having a single array at the root level, holding a series of JSON objects, each object representing a single operation to be applied to the target JSON document.</t>
          </li>
          <li>
            <t>Operations are applied sequentially in the order they appear in the array.  Each operation in the sequence is applied to the target document; the resulting document becomes the target of the next operation.  Evaluation continues until all operations are successfully applied or until an error condition is encountered.</t>
          </li>
          <li>
            <t>Track namespaces and track names may not be changed across patch updates. To change either namespace or name, remove the track and then add a new track with matching properties and the new namespace and name.</t>
          </li>
          <li>
            <t>Contents of the track selection properties object may not be varied across updates. To adjust a track selection property, the track must first be removed and then added with the new selection properties and a different name.</t>
          </li>
        </ul>
      </section>
      <section anchor="catalog-examples">
        <name>Catalog Examples</name>
        <t>The following section provides non-normative JSON examples of various catalogs compliant with this draft.</t>
        <section anchor="time-aligned-audiovideo-tracks-with-single-quality">
          <name>Time-aligned Audio/Video Tracks with single quality</name>
          <t>This example shows catalog for a media producer capable of sending LOC packaged, time-aligned audio and video tracks.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "namespace": "conference.example.com/conference123/alice",
  "packaging": "loc",
  "renderGroup": 1,
  "tracks": [
    {
      "name": "video",
      "selectionParams":{"codec":"av01.0.08M.10.0.110.09","width":1920,"height":1080,"framerate":30,"bitrate":1500000}
    },
    {
      "name": "audio",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2","bitrate":32000}
    }
   ]
}

]]></sourcecode>
        </section>
        <section anchor="simulcast-video-tracks-3-alternate-qualities-along-with-audio">
          <name>Simulcast video tracks - 3 alternate qualities along with audio</name>
          <t>This example shows catalog for a media producer capable
of sending 3 time-aligned video tracks for high definition, low definition and
medium definition video qualities, along with an audio track. In this example the namesapce is absent, which infers that each track must inherit the namespace of the catalog.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "renderGroup": 1,
  "packaging": "loc",
  "tracks":[
    {
      "name": "hd",
      "selectionParams": {"codec":"av01","width":1920,"height":1080,"bitrate":5000000,"framerate":30},
      "altGroup":1
    },
    {
      "name": "md",
      "selectionParams": {"codec":"av01","width":720,"height":640,"bitrate":3000000,"framerate":30},
      "altGroup":1
    },
    {
      "name": "sd",
      "selectionParams": {"codec":"av01","width":192,"height":144,"bitrate":500000,"framerate":30},
      "altGroup":1
    },
    {
      "name": "audio",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2","bitrate":32000},
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="svc-video-tracks-with-2-spatial-and-2-temporal-qualities">
          <name>SVC video tracks with 2 spatial and 2 temporal qualities</name>
          <t>This example shows catalog for a media producer capable
of sending scalable video codec with 2 spatial and 2 temporal
layers with a dependency relation as shown below:</t>
          <sourcecode type="ascii-figure"><![CDATA[
                  +----------+
     +----------->|  S1T1    |
     |            | 1080p30  |
     |            +----------+
     |                  ^
     |                  |
+----------+            |
|  S1TO    |            |
| 1080p15  |            |
+----------+      +-----+----+
      ^           |  SOT1    |
      |           | 480p30   |
      |           +----------+
      |               ^
+----------+          |
|  SOTO     |         |
| 480p15    |---------+
+----------+
]]></sourcecode>
          <t>The corresponding catalog uses "depends" attribute to
express the track relationships.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "namespace": "conference.example.com/conference123/alice",
  "renderGroup": 1,
  "packaging": "loc",
  "tracks":[
    {
      "name": "480p15",
      "selectionParams": {"codec":"av01.0.01M.10.0.110.09","width":640,"height":480,"bitrate":3000000,"framerate":15},
    },
    {
      "name": "480p30",
      "selectionParams": {"codec":"av01.0.04M.10.0.110.09","width":640,"height":480,"bitrate":3000000,"framerate":30},
      "depends": ["480p15"],
    },
    {
      "name": "1080p15",
      "selectionParams": {"codec":"av01.0.05M.10.0.110.09","width":1920,"height":1080,"bitrate":3000000,"framerate":15},
      "depends":["480p15"]
    },

    {
      "name": "1080p30",
      "selectionParams": {"codec":"av01.0.08M.10.0.110.09","width":1920,"height":1080,"bitrate":5000000,"framerate":30},
      "depends": ["480p30", "1080p15"]
    },
    {
      "name": "audio",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2","bitrate":32000},
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="patch-update-adding-a-track">
          <name>Patch update adding a track</name>
          <t>This example shows catalog for the media producer adding a slide track to an established video conference.</t>
          <sourcecode type="json"><![CDATA[
[
    {
        "op": "add",
        "path": "/tracks/-",
        "value": {
            "name": "slides",
            "selectionParams": {
                "codec": "av01.0.08M.10.0.110.09",
                "width": 1920,
                "height": 1080,
                "framerate": 15,
                "Bitrate": 750000
            },
            "renderGroup": 1
        }
    }
]


]]></sourcecode>
        </section>
        <section anchor="patch-update-removing-a-track">
          <name>Patch update removing a track</name>
          <t>This example shows patch catalog update for a media producer removing the track from an established video conference.</t>
          <sourcecode type="json"><![CDATA[
[
  { "op": "remove", "path": "/tracks/2"}
]
]]></sourcecode>
        </section>
        <section anchor="patch-update-removing-all-tracks-and-terminating-the-broadcast">
          <name>Patch update removing all tracks and terminating the broadcast</name>
          <t>This example shows a patch catalog update for a media producer removing all tracks and terminating the broadcast.</t>
          <sourcecode type="json"><![CDATA[
[
  { "op": "remove", "path": "/tracks/2"},
  { "op": "remove", "path": "/tracks/1"},
  { "op": "remove", "path": "/tracks/0"},
]

]]></sourcecode>
        </section>
        <section anchor="cmaf-tracks-with-multiple-qualities-of-audio-and-video">
          <name>CMAF Tracks with multiple qualities of audio and video</name>
          <t>This example shows catalog for a sports broadcast sending time-aligned audio and video tracks using CMAF packaging. Init segments are delivered as separate tracks.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "namespace": "sports.example.com/games/08-08-23/12345",
  "packaging": "cmaf",
  "renderGroup":1,
  "tracks": [
    {
      "name": "video_4k",
      "selectionParams":{"codec":"avc1.640033","mimeType":"video/mp4","width":3840,"height":2160,"framerate":30,"bitrate":14931538},
      "initTrack":"init_video_4k",
      "altGroup": 1
    },
    {
      "name": "video_1080",
      "selectionParams":{"codec":"avc1.640028","mimeType":"video/mp4","width":1920,"height":1080,"framerate":30,"bitrate":9914554},
      "initTrack":"init_video_1080",
      "altGroup": 1
    },
    {
      "name": "video_720",
      "selectionParams":{"codec":"avc1.64001f","mimeType":"video/mp4","width":1280,"height":720,"framerate":30,"bitrate":4952892},
      "initTrack":"init_video_720",
      "altGroup": 1
    },
    {
      "name": "audio_aac",
      "selectionParams":{"codec":"mp4a.40.5","mimeType":"audio/mp4","samplerate":48000,"channelConfig":"2","bitrate":67071},
      "initTrack":"init_audio_aac",
      "altGroup": 2
    },
    {
      "name": "audio_ec3",
      "selectionParms":{"codec":"ec-3","mimeType":"audio/mp4","samplerate":48000,"channelConfig":"F801","bitrate":256000},
      "initTrack":"init_audio_ec3",
      "altGroup": 2
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="mixed-format-example-cmaf-and-loc-packaging-in-the-same-catalog">
          <name>Mixed format example - CMAF and LOC packaging in the same catalog</name>
          <t>This example shows catalog describing a broadcast with CMAF packaged video and LOC packaged audio.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "namespace": "output.example.com/event/12345",
  "renderGroup":1
  "tracks": [
    {
      "name": "video0",
      "selectionParams":{"codec":"avc1.64001f","mimeType":"video/mp4","width":1280,"height":720,"framerate":30,"bitrate":4952892},
      "initTrack":"init_video_720",
      "packaging":"cmaf",
    },
    {
      "name": "audio",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2","bitrate":32000},
      "packaging": "loc",
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="cmaf-tracks-with-inband-init-segments">
          <name>CMAF Tracks with inband init segments</name>
          <t>This example shows catalog for a sports broadcast sending time-aligned audio and video tracks using CMAF packaging. Init segments are delivered as inband data.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "namespace": "sports.example.com/games/08-08-23/12345",
  "packaging": "cmaf",
  "renderGroup":1,
  "tracks": [
    {
      "name": "video_1080",
      "selectionParams":{"codec":"avc1.640028","mimeType":"video/mp4","width":1920,"height":1080,"framerate":30,"bitrate":9914554},
"initData":"AAAAGGZ0eXBpc282AAAAAWlzbzZkYXNoAAAARWZyZWVJc29NZWRpYSBGaWxlIFByb2R1Y2VkIHdpdGggR1BBQyAxLjAuMS1yZXYwLWdkODUzOGU4YS1tYXN0ZXIAAAADLW1vb3YAAABsbXZoZAAAAADfdnly33Z5cgABX5AAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA4bXZleAAAABBtZWhkAAAAAAPwOXgAAAAgdHJleAAAAAAAAAABAAAAAQAAA+gAAAAAAAEAAAAAAkd0cmFrAAAAXHRraGQAAAAB33Y1w992eXIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAABQAAAAIWAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAAAAAAD6AABAAAAAAG/bWRpYQAAACBtZGhkAAAAAN92NcPfdnlyAABdwAAAAAAVxwAAAAAAQGhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAAAfTWFpbmNvbmNlcHQgVmlkZW8gTWVkaWEgSGFuZGxlcgAAAVdtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAADkc3RibAAAAJhzdHNkAAAAAAAAAAEAAACIYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAUAAhYASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAADJhdmNDAU1AH//hABpnTUAfllKAoAi/NNQYGBkAAAMAAQAAAwAwhAEABWjpCTUgAAAAEHN0dHMAAAAAAAAAAAAAABBzdHNjAAAAAAAAAAAAAAAUc3RzegAAAAAAAAAAAAAAAAAAABBzdGNvAAAAAAAAAAAAAAAzaGRscgAAAAAAAAAAYWxpcwAAAAAAAAAAAAAAAEFsaWFzIERhdGEgSGFuZGxlcgAAAAA6dWR0YQAAABepVElNAAsAADAwOjAwOjAwOjAwAAAADqlUU0MAAgAAMjQAAAANqVRTWgABAAAx"
    },
    {
      "name": "audio_aac",
      "selectionParams":{"codec":"mp4a.40.5","mimeType":"audio/mp4","samplerate":48000,"channelConfig":"2","bitrate":67071},
"initData":"AAAAGGZ0eXBpc282AAAAAWlzbzZkYXNoAAAARWZyZWVJc29NZWRpYSBGaWxlIFByb2R1Y2VkIHdpdGggR1BBQyAxLjAuMS1yZXYwLWdkODUzOGU4YS1tYXN0ZXIAAAACzG1vb3YAAABsbXZoZAAAAADfdnly33Z5cgABX5AAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA4bXZleAAAABBtZWhkAAAAAAPwSAAAAAAgdHJleAAAAAAAAAACAAAAAQAABAAAAAAAAgAAAAAAAeZ0cmFrAAAAXHRraGQAAAAB33Y1w992eXIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAGCbWRpYQAAACBtZGhkAAAAAN92NcPfdnlyAAC7gAAAAAAVxwAAAAAARGhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAAAjTWFpbmNvbmNlcHQgTVA0IFNvdW5kIE1lZGlhIEhhbmRsZXIAAAEWbWluZgAAABBzbWhkAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAACnc3RibAAAAFtzdHNkAAAAAAAAAAEAAABLbXA0YQAAAAAAAAABAAAAAAAAAAAAAgAQAAAAALuAAAAAAAAnZXNkcwAAAAADGQAAAAQRQBUABgAACBXTAATXtwUCEZAGAQIAAAAQc3R0cwAAAAAAAAAAAAAAEHN0c2MAAAAAAAAAAAAAABRzdHN6AAAAAAAAAAAAAAAAAAAAEHN0Y28AAAAAAAAAAAAAADNoZGxyAAAAAAAAAABhbGlzAAAAAAAAAAAAAAAAQWxpYXMgRGF0YSBIYW5kbGVyAAAAADp1ZHRhAAAAF6lUSU0ACwAAMDA6MDA6MDA6MDAAAAAOqVRTQwACAAAyNAAAAA2pVFNaAAEAADE="
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="time-aligned-audiovideo-tracks-with-custom-field-values">
          <name>Time-aligned Audio/Video Tracks with custom field values</name>
          <t>This example shows catalog for a media producer capable of sending LOC packaged, time-aligned audio and video tracks along with custom fields in each track description.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "namespace": "conference.example.com/conference123/alice",
  "packaging": "loc",
  "renderGroup": 1,
  "tracks": [
    {
      "name": "video",
      "selectionParams":{"codec":"av01.0.08M.10.0.110.09","width":1920,"height":1080,"framerate":30,"bitrate":1500000},
      "com.example-billing-code": 3201,
      "com.example-tier": "premium",
      "com.example-debug": "h349835bfkjfg82394d945034jsdfn349fns"
    },
    {
      "name": "audio",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2","bitrate":32000}
    }
   ]
}

]]></sourcecode>
        </section>
        <section anchor="a-catalog-referencing-catalogs-for-two-different-formats">
          <name>A catalog referencing catalogs for two different formats</name>
          <t>This example shows the catalog for a media producer that is outputting two streaming formats simultaneously under different namespaces. Note that each track name referenced points at another catalog object.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "sequence": 0,
  "catalogs": [
    {
      "name": "catalog-for-format-one",
      "namespace": "sports.example.com/games/08-08-23/live",
      "streamingFormat":1,
      "streamingFormatVersion": "0.2"
    },
    {
      "name": "catalog-for-format-five",
      "namespace": "chat.example.com/games/08-08-23/chat",
      "streamingFormat":5,
      "streamingFormatVersion": "1.6.2"
    }
  ]
}

]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The catalog contents MAY be encrypted. The mechanism of encryption and the signaling of the keys are left to the Streaming Format referencing this catalog format.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This section details how the MoQ Streaming Format Type can be registered. The type registry can be updated by incrementally expanding the type space, i.e., by allocating and reserving new type identifiers. As per [RFC8126], this section details the creation of the "MoQ Streaming Format Type" registry.</t>
      <section anchor="moq-streaming-format-type-registry">
        <name>MoQ Streaming Format Type Registry</name>
        <t>This document creates a new registry, "MoQ Streaming Format Type". The registry policy is "RFC Required". The Type value is 2 octets. The range is 0x0000-0xFFFF.The initial entry in the registry is:</t>
        <artwork><![CDATA[
     +--------+-------------+----------------------------------+
     | Type   |     Name    |            RFC                   |
     +--------+-------------+----------------------------------+
     | 0x0000 |   Reserved  |                                  |
     +--------+-------------+----------------------------------+
]]></artwork>
        <t>Every MoQ streaming format draft normatively referencing this catalog format MUST register itself a unique type identifier.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <ul spacing="normal">
        <li>
          <t>Suhas Nandakumar &amp; Mo Zanaty - this <eref target="https://github.com/suhasHere/moq-drafts/tree/master/moq-catalog">draft</eref>.</t>
        </li>
        <li>
          <t>The IETF MoQ mailing lists and discussion groups.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="MoQTransport">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Luke Curley" initials="L." surname="Curley">
            <organization>Twitch</organization>
          </author>
          <author fullname="Kirill Pugin" initials="K." surname="Pugin">
            <organization>Meta</organization>
          </author>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <date day="23" month="October" year="2023"/>
          <abstract>
            <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-01"/>
      </reference>
      <reference anchor="Framemarking">
        <front>
          <title>Video Frame Marking RTP Header Extension</title>
          <author fullname="Mo Zanaty" initials="M." surname="Zanaty">
            <organization>Cisco Systems</organization>
          </author>
          <author fullname="Espen Berger" initials="E." surname="Berger">
            <organization>Cisco Systems</organization>
          </author>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco Systems</organization>
          </author>
          <date day="26" month="July" year="2023"/>
          <abstract>
            <t>   This document describes a Video Frame Marking RTP header extension
   used to convey information about video frames that is critical for
   error recovery and packet forwarding in RTP middleboxes or network
   nodes.  It is most useful when media is encrypted, and essential when
   the middlebox or node has no access to the media decryption keys.  It
   is also useful for codec-agnostic processing of encrypted or
   unencrypted media, while it also supports extensions for codec-
   specific information.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-avtext-framemarking-15"/>
      </reference>
      <reference anchor="WebCodecs" target="https://www.w3.org/TR/webcodecs/">
        <front>
          <title>WebCodecs</title>
          <author>
            <organization/>
          </author>
          <date year="2023" month="July"/>
        </front>
      </reference>
      <reference anchor="WEBCODECS-CODEC-REGISTRY" target="https://www.w3.org/TR/webcodecs-codec-registry/">
        <front>
          <title>WebCodecs Codec Registry</title>
          <author>
            <organization/>
          </author>
          <date year="2023" month="July"/>
        </front>
      </reference>
      <reference anchor="CMAF">
        <front>
          <title>Information technology -- Multimedia application format (MPEG-A) -- Part 19: Common media application format (CMAF) for segmented media</title>
          <author>
            <organization/>
          </author>
          <date year="2020" month="March"/>
        </front>
      </reference>
      <reference anchor="JSON">
        <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="BASE64">
        <front>
          <title>The Base16, Base32, and Base64 Data Encodings</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <date month="October" year="2006"/>
          <abstract>
            <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4648"/>
        <seriesInfo name="DOI" value="10.17487/RFC4648"/>
      </reference>
      <reference anchor="LANG">
        <front>
          <title>Tags for Identifying Languages</title>
          <author fullname="A. Phillips" initials="A." role="editor" surname="Phillips"/>
          <author fullname="M. Davis" initials="M." role="editor" surname="Davis"/>
          <date month="September" year="2009"/>
          <abstract>
            <t>This document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object. It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange. 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="47"/>
        <seriesInfo name="RFC" value="5646"/>
        <seriesInfo name="DOI" value="10.17487/RFC5646"/>
      </reference>
      <reference anchor="MIME">
        <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="JSON-PATCH">
        <front>
          <title>JavaScript Object Notation (JSON) Patch</title>
          <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
          <date month="April" year="2013"/>
          <abstract>
            <t>JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JavaScript Object Notation (JSON) document; it is suitable for use with the HTTP PATCH method. The "application/json-patch+json" media type is used to identify such patch documents.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6902"/>
        <seriesInfo name="DOI" value="10.17487/RFC6902"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
