| rfc8790xml2.original.xml | rfc8790.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="utf-8"?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
| <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.12 --> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| ]> | ||||
| <?rfc toc="yes"?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <?rfc tocompact="yes"?> | ||||
| <?rfc tocdepth="3"?> | ||||
| <?rfc tocindent="yes"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc comments="yes"?> | ||||
| <?rfc inline="yes"?> | ||||
| <?rfc strict="no"?> | ||||
| <?rfc compact="no"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <rfc ipr="trust200902" docName="draft-ietf-core-senml-etch-07" category="std"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" | |||
| docName="draft-ietf-core-senml-etch-07" category="std" obsoletes="" | ||||
| updates="" submissionType="IETF" xml:lang="en" tocInclude="true" | ||||
| tocDepth="3" symRefs="true" sortRefs="true" consensus="true" version="3" nu | ||||
| mber="8790"> | ||||
| <!-- xml2rfc v2v3 conversion 2.41.0 --> | ||||
| <front> | <front> | |||
| <title abbrev="FETCH & PATCH with SenML">FETCH & PATCH with Sensor M | <title abbrev="FETCH and PATCH with SenML">FETCH and PATCH with Sensor Measu | |||
| easurement Lists (SenML)</title> | rement Lists (SenML)</title> | |||
| <seriesInfo name="RFC" value="8790"/> | ||||
| <author initials="A." surname="Keranen" fullname="Ari Keranen"> | <author initials="A." surname="Keränen" fullname="Ari Keränen"> | |||
| <organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
| <address> | <address> | |||
| <postal> | ||||
| <street/> | ||||
| <city>Jorvas</city><code>02420</code> | ||||
| <country>Finland</country> | ||||
| </postal> | ||||
| <email>ari.keranen@ericsson.com</email> | <email>ari.keranen@ericsson.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="M." surname="Mohajer" fullname="Mojan Mohajer"> | <author initials="M." surname="Mohajer" fullname="Mojan Mohajer"> | |||
| <organization></organization> | <organization/> | |||
| <address> | <address> | |||
| <email>mojanm@hotmail.com</email> | <email>mojanm@hotmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="June" year="2020"/> | ||||
| <date year="2020"/> | <keyword>CoAP</keyword> | |||
| <keyword>IoT</keyword> | ||||
| <keyword>Internet-Draft</keyword> | <keyword>data model</keyword> | |||
| <abstract> | <abstract> | |||
| <t>The Sensor Measurement Lists (SenML) media type and data model can be | ||||
| <t>The Sensor Measurement Lists (SenML) media type and data model can be | used to send collections of resources, such as batches of sensor data or | |||
| used to send collections of resources, such as batches of sensor data or | configuration parameters. The Constrained Application Protocol (CoAP) | |||
| configuration parameters. The CoAP FETCH, PATCH, and iPATCH methods | FETCH, PATCH, and iPATCH methods enable accessing and updating parts of | |||
| enable accessing and updating parts of a resource or multiple resources | a resource or multiple resources with one request. This document defines | |||
| with one request. This document defines new media types for the CoAP | new media types for the CoAP FETCH, PATCH, and iPATCH methods for | |||
| FETCH, PATCH, and iPATCH methods for resources represented with the SenML | resources represented using the SenML data model.</t> | |||
| data model.</t> | ||||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="intro" numbered="true" toc="default"> | ||||
| <section anchor="intro" title="Introduction"> | <name>Introduction</name> | |||
| <t>The Sensor Measurement Lists (SenML) media type <xref target="RFC8428" | ||||
| <t>The Sensor Measurement Lists (SenML) media type <xref target="RFC8428"/> and | format="default"/> and data | |||
| data | ||||
| model can be used to transmit collections of resources, such as | model can be used to transmit collections of resources, such as | |||
| batches of sensor data or configuration parameters.</t> | batches of sensor data or configuration parameters.</t> | |||
| <t>An example of a SenML collection is shown below:</t> | ||||
| <t>An example of a SenML collection is shown below:</t> | <sourcecode name="" type="json"><![CDATA[ | |||
| <figure><artwork><![CDATA[ | ||||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":true}, | {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":true}, | |||
| {"n":"5851", "v":42}, | {"n":"5851", "v":42}, | |||
| {"n":"5750", "vs":"Ceiling light"} | {"n":"5750", "vs":"Ceiling light"} | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t>Here, three resources, "3311/0/5850", "3311/0/5851", and "3311/0/5750", | ||||
| <t>Here three resources “3311/0/5850”, “3311/0/5851”, and “3311/0/5750”, | of a dimmable light smart object <xref target="IPSO" format="default"/> are repr | |||
| of an IPSO dimmable light smart object <xref target="IPSO"/> are represented usi | esented using | |||
| ng | ||||
| a single SenML Pack with three SenML Records. All resources share the | a single SenML Pack with three SenML Records. All resources share the | |||
| same base name “2001:db8::2/3311/0/”, hence full names for resources | same base name "2001:db8::2/3311/0/"; hence, full names for the resources | |||
| are “2001:db8::2/3311/0/5850”, etc.</t> | are "2001:db8::2/3311/0/5850", etc.</t> | |||
| <t>The CoAP <xref target="RFC7252" format="default"/> FETCH, PATCH, and iP | ||||
| <t>The CoAP <xref target="RFC7252"/> FETCH, PATCH, and iPATCH methods <xref targ | ATCH methods <xref target="RFC8132" format="default"/> | |||
| et="RFC8132"/> | ||||
| enable accessing and updating parts of a resource or multiple resources | enable accessing and updating parts of a resource or multiple resources | |||
| with one request.</t> | with one request.</t> | |||
| <t>This document defines two new media types, one using the JavaScript | ||||
| <t>This document defines two new media types, one using the JavaScript | Object Notation (JSON) <xref target="RFC8259" format="default"/> and one using t | |||
| Object Notation (JSON) <xref target="RFC8259"/> and one using the Concise Binary | he Concise Binary | |||
| Object Representation (CBOR) <xref target="RFC7049"/>, which can be used with th | Object Representation (CBOR) <xref target="RFC7049" format="default"/>, which ca | |||
| e | n be used with the | |||
| CoAP FETCH, PATCH, and iPATCH methods for resources represented with the | CoAP FETCH, PATCH, and iPATCH methods for resources represented using the | |||
| SenML data model (i.e., for both SenML and Sensor Streaming Measurement | SenML data model (i.e., for both SenML and Sensor Streaming Measurement | |||
| Lists (SenSML) data). The rest of the document uses term “(i)PATCH” when | Lists (SenSML) data). The rest of the document uses the term "(i)PATCH" when | |||
| referring to both methods as the semantics of the new media types are the | referring to both methods as the semantics of the new media types are the | |||
| same for the CoAP PATCH and iPATCH methods.</t> | same for the CoAP PATCH and iPATCH methods.</t> | |||
| </section> | ||||
| </section> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <section anchor="terminology" title="Terminology"> | <name>Terminology</name> | |||
| <t> | ||||
| <t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| “OPTIONAL” in this document are to be interpreted as described in | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, th | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| ey appear in | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
| all capitals, as shown here.</t> | to be interpreted as described in BCP 14 <xref target="RFC2119"/> | |||
| <xref target="RFC8174"/> when, and only when, they appear in all capitals, | ||||
| <t>Readers should also be familiar with the terms and concepts discussed | as shown here. | |||
| in <xref target="RFC8132"/> and <xref target="RFC8428"/>. The following addition | </t> | |||
| al terms are used in | <t>Readers should also be familiar with the terms and concepts discussed | |||
| in <xref target="RFC8132" format="default"/> and <xref target="RFC8428" format=" | ||||
| default"/>. The following additional terms are used in | ||||
| this document:</t> | this document:</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t><list style="hanging"> | <dt>Fetch Record:</dt> | |||
| <t hangText='Fetch Record:'> | <dd> | |||
| One set of parameters that is used to match SenML Record(s).</t> | One set of parameters that is used to match SenML Record(s).</dd> | |||
| <t hangText='Fetch Pack:'> | <dt>Fetch Pack:</dt> | |||
| One or more Fetch Records in an array structure.</t> | <dd> | |||
| <t hangText='Patch Record:'> | One or more Fetch Records in an array structure.</dd> | |||
| <dt>Patch Record:</dt> | ||||
| <dd> | ||||
| One set of parameters similar to Fetch Record but also containing | One set of parameters similar to Fetch Record but also containing | |||
| instructions on how to change existing SenML Pack(s).</t> | instructions on how to change existing SenML Pack(s).</dd> | |||
| <t hangText='Patch Pack:'> | <dt>Patch Pack:</dt> | |||
| One or more Patch Records in an array structure.</t> | <dd> | |||
| <t hangText='Target Record:'> | One or more Patch Records in an array structure.</dd> | |||
| <dt>Target Record:</dt> | ||||
| <dd> | ||||
| A Record in a SenML Pack that matches the selection criteria of | A Record in a SenML Pack that matches the selection criteria of | |||
| a Fetch or Patch Record and hence is a target for a Fetch or Patch | a Fetch or Patch Record and hence is a target for a Fetch or Patch | |||
| operation.</t> | operation.</dd> | |||
| <t hangText='Target Pack:'> | <dt>Target Pack:</dt> | |||
| A SenML Pack that is a target for a Fetch or Patch operation.</t> | <dd> | |||
| <t hangText='(i)PATCH:'> | A SenML Pack that is a target for a Fetch or Patch operation.</dd> | |||
| A term that refers to both CoAP “PATCH” and “iPATCH” methods when | <dt>(i)PATCH:</dt> | |||
| there is no difference in this specification in which one is used.</t> | <dd> | |||
| </list></t> | A term that refers to both CoAP "PATCH" and "iPATCH" methods when | |||
| there is no difference in this specification as to which one is used.</dd> | ||||
| </section> | </dl> | |||
| <section anchor="using-fetch-and-ipatch-with-senml" title="Using FETCH and (i)PA | </section> | |||
| TCH with SenML"> | <section anchor="using-fetch-and-ipatch-with-senml" numbered="true" toc="def | |||
| ault"> | ||||
| <t>The FETCH/(i)PATCH media types for SenML are modeled as extensions to the | <name>Using FETCH and (i)PATCH with SenML</name> | |||
| SenML media type to enable re-use of existing SenML parsers and | <t>The FETCH/(i)PATCH media types for SenML are modeled as extensions to t | |||
| he | ||||
| SenML media type to enable reuse of existing SenML parsers and | ||||
| generators, in particular on constrained devices. Unless mentioned | generators, in particular on constrained devices. Unless mentioned | |||
| otherwise, FETCH and PATCH Packs are constructed with the same rules and | otherwise, FETCH and PATCH Packs are constructed with the same rules and | |||
| constraints as SenML Packs.</t> | constraints as SenML Packs.</t> | |||
| <t>The key differences from the SenML media type are allowing the use of a | ||||
| <t>The key differences to the SenML media type are allowing the use of a | "null" value for removing Records with the (i)PATCH method and the lack of | |||
| “null” value for removing records with the (i)PATCH method and lack of | value fields in Fetch Records. Also, the Fetch and Patch Records do not | |||
| value fields in Fetch Records. Also the Fetch and Patch Records do not | have a default time or base version when the fields are omitted.</t> | |||
| have default time or base version when the fields are omitted.</t> | <section anchor="senml-fetch" numbered="true" toc="default"> | |||
| <name>SenML FETCH</name> | ||||
| <section anchor="senml-fetch" title="SenML FETCH"> | <t>The FETCH method can be used to select and return a subset of Records | |||
| , in | ||||
| <t>The FETCH method can be used to select and return a subset of records, in | ||||
| sequence, of one or more SenML Packs. The SenML Records are selected by | sequence, of one or more SenML Packs. The SenML Records are selected by | |||
| giving a set of names that, when resolved, match resolved names in a | giving a set of names that, when resolved, match resolved names in a | |||
| Target SenML Pack. The names for a Fetch Pack are given using the SenML | Target SenML Pack. The names for a Fetch Pack are given using the SenML | |||
| “name” and/or “base name” fields. The names are resolved by concatenating | "name" and/or "base name" fields. The names are resolved by concatenating | |||
| the base name with the name field as defined in <xref target="RFC8428"/>.</t> | the base name with the name field as defined in <xref target="RFC8428" format="d | |||
| efault"/>.</t> | ||||
| <t>A Fetch Pack MUST contain at least one Fetch Record. A Fetch Record MUST | <t>A Fetch Pack <bcp14>MUST</bcp14> contain at least one Fetch Record. A | |||
| contain a name and/or a base name field.</t> | Fetch Record <bcp14>MUST</bcp14> | |||
| contain a name and/or base name field.</t> | ||||
| <t>For example, to select the IPSO resources “5850” and “5851” from the | <t>For example, to select the resources "5850" and "5851" from the | |||
| example in <xref target="intro"/>, the following Fetch Pack can be used:</t> | example in <xref target="intro" format="default"/>, the following Fetch Pack can | |||
| be used:</t> | ||||
| <figure><artwork><![CDATA[ | <sourcecode name="" type="json"><![CDATA[ | |||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850"}, | {"bn":"2001:db8::2/3311/0/", "n":"5850"}, | |||
| {"n":"5851"} | {"n":"5851"} | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t>The result to a FETCH request with the example above would be:</t> | ||||
| <figure><artwork><![CDATA[ | <t>The result of a FETCH request with the example above would be:</t> | |||
| <sourcecode name="" type="json"><![CDATA[ | ||||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":true}, | {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":true}, | |||
| {"n":"5851", "v":42}, | {"n":"5851", "v":42}, | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t>The SenML time and unit fields can be used in a Fetch Record to furth | ||||
| <t>The SenML time and unit fields can be used in a Fetch Record to further | er | |||
| narrow the selection of matched SenML Records. When no time or unit is | narrow the selection of matched SenML Records. When no time or unit is | |||
| given in a Fetch Record, all SenML Records with the given name are | given in a Fetch Record, all SenML Records with the given name are | |||
| matched (i.e., unlike with SenML Records, lack of time field in a Fetch | matched (i.e., unlike with SenML Records, the lack of time field in a Fetch | |||
| Record does not imply time value zero). When time is given in the Fetch | Record does not imply a time value of zero). | |||
| Record, only the SenML Records (if any) with equal resolved time value | ||||
| and name are matched. Similarly, when unit is given, only the SenML | When time is given in the Fetch | |||
| Records with equal resolved unit and name are matched. If both time and | Record, a Target Record is matched only when its resolved time value and name | |||
| unit are given in the Fetch Record, both MUST to match for the SenML | are equal to those of the Fetch Record. Similarly, when unit is given, a | |||
| Record to match. Each Target Record MUST be included in the response at | Target Record is matched only when its resolved unit and name are equal to | |||
| those of the Fetch Record. If both the time and unit are given in the Fetch | ||||
| Record, a Target Record is matched only when both are equal to those of the | ||||
| Fetch Record. Each Target Record <bcp14>MUST</bcp14> be included in the response | ||||
| at | ||||
| most once, even if multiple Fetch Records match with the same Target | most once, even if multiple Fetch Records match with the same Target | |||
| Record.</t> | Record.</t> | |||
| <t>For example, if the resource "5850" had multiple sensor | ||||
| <t>For example, if the IPSO resource “5850” would have multiple sensor | readings (SenML Records) with different time values, the following Fetch | |||
| readings (SenML Records) with different time values, the following Fetch | Pack can be used to retrieve the Record with time "1.276020091e+09":</t> | |||
| Pack can be used to retrieve the Record with time “1.276020091e+09”:</t> | <sourcecode name="" type="json"><![CDATA[ | |||
| <figure><artwork><![CDATA[ | ||||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850", "t":1.276020091e+09} | {"bn":"2001:db8::2/3311/0/", "n":"5850", "t":1.276020091e+09} | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t>The resolved form of Records (<xref target="RFC8428" | ||||
| <t>The resolved form of records (Section 4.6 of <xref target="RFC8428"/>) is use | sectionFormat="of" section="4.6"/>) is used when | |||
| d when | ||||
| comparing the names, times, and units of the Target and Fetch Records to | comparing the names, times, and units of the Target and Fetch Records to | |||
| accommodate for differences in use of the base values. In resolved form | accommodate differences in the use of the base values. In the resolved form, | |||
| the SenML name in the example above becomes “2001:db8::2/3311/0/5850”. | the SenML name in the example above becomes "2001:db8::2/3311/0/5850". | |||
| Since there is no base time in the Pack, the time in resolved form is | Since there is no base time in the Pack, the time in resolved form is | |||
| equal to the time in the example.</t> | equal to the time in the example.</t> | |||
| <t>If no SenML Records match, an empty SenML Pack (i.e., array with no | ||||
| <t>If no SenML Records match, empty SenML Pack (i.e., array with no | ||||
| elements) is returned as a response.</t> | elements) is returned as a response.</t> | |||
| <t>Fetch Records <bcp14>MUST NOT</bcp14> contain other fields than | ||||
| <t>Fetch Records MUST NOT contain other fields than name, base name, time, | name, base name, time, | |||
| base time, unit, and base unit. Implementations MUST reject and generate | base time, unit, and base unit. Implementations <bcp14>MUST</bcp14> reject and g | |||
| an error for a Fetch Pack with other fields. <xref target="RFC8132"/> Section 2. | enerate | |||
| 2 | an error for a Fetch Pack with other fields. <xref target="RFC8132" | |||
| provides guidance for FETCH request error handling, e.g., using the 4.22 | sectionFormat="comma" section="2.2"/> provides guidance for FETCH request error | |||
| handling, e.g., using the 4.22 | ||||
| (Unprocessable Entity) CoAP error response code.</t> | (Unprocessable Entity) CoAP error response code.</t> | |||
| </section> | ||||
| </section> | <section anchor="senml-ipatch" numbered="true" toc="default"> | |||
| <section anchor="senml-ipatch" title="SenML (i)PATCH"> | <name>SenML (i)PATCH</name> | |||
| <t>The (i)PATCH method can be used to change the fields of SenML Records | ||||
| <t>The (i)PATCH method can be used to change the fields of SenML Records, to | , to | |||
| add new Records, and to remove existing Records. The names, times, and | add new Records, and to remove existing Records. The names, times, and | |||
| units of the Patch Records are given and matched in same way as for the | units of the Patch Records are given and matched in the same way as for the | |||
| Fetch Records, except each Patch Record MUST match at most one Target | Fetch Records, except each Patch Record <bcp14>MUST</bcp14> match at most one Ta | |||
| rget | ||||
| Record. A Patch Record matching more than one Target Record is considered | Record. A Patch Record matching more than one Target Record is considered | |||
| invalid (patching multiple Target Records with one Patch Record would | invalid (patching multiple Target Records with one Patch Record would | |||
| result in multiple copies of the same record). Patch Packs can also | result in multiple copies of the same Record). Patch Packs can also | |||
| include new values and other SenML fields for the Records. Application of | include new values and other SenML fields for the Records. Application of | |||
| Patch Packs is idempotent; hence PATCH and iPATCH methods for SenML Packs | Patch Packs is idempotent; hence, the PATCH and iPATCH methods for SenML Packs | |||
| are equivalent.</t> | are equivalent.</t> | |||
| <t>When the name in a Patch Record matches with the name in an existing | ||||
| <t>When the name in a Patch Record matches with the name in an existing | ||||
| Record, the resolved time values and units (if any) are compared. If the | Record, the resolved time values and units (if any) are compared. If the | |||
| time values and units either do not exist in both Records or are equal, | time values and units either do not exist in both Records or are equal, | |||
| the Target Record is replaced with the contents of the Patch Record. All | the Target Record is replaced with the contents of the Patch Record. All | |||
| Patch Records MUST contain at least a SenML Value or Sum field.</t> | Patch Records <bcp14>MUST</bcp14> contain at least a SenML Value or Sum field.</ | |||
| t> | ||||
| <t>If a Patch Record contains a name, or combination of a time value, unit, | <t>If a Patch Record contains a name, or the combination of a time value | |||
| and a name, that do not exist in any existing Record in the Pack, the | , unit, | |||
| and name, that does not exist in any existing Record in the Pack, the | ||||
| given Record, with all the fields it contains, is added to the Pack.</t> | given Record, with all the fields it contains, is added to the Pack.</t> | |||
| <t>If a Patch Record has a value ("v") field with a null value, it <bcp1 | ||||
| <t>If a Patch Record has a value (“v”) field with value null, it MUST NOT be | 4>MUST NOT</bcp14> be | |||
| added but the matched Record (if any) is removed from the Target Pack.</t> | added, but the matched Record (if any) is removed from the Target Pack.</t> | |||
| <t>The Patch Records <bcp14>MUST</bcp14> be applied in the same | ||||
| <t>The Patch Records MUST be applied in the same sequence they are in the | sequence as they are in the | |||
| Patch Pack. If multiple Patch Packs are being processed at the same time, | Patch Pack. If multiple Patch Packs are being processed at the same time, | |||
| the result MUST be equivalent to applying them in one sequence.</t> | the result <bcp14>MUST</bcp14> be equivalent to applying them in one sequence.</ | |||
| t> | ||||
| <t>Implementations MUST reject and generate an error for Patch Packs with | <t>Implementations <bcp14>MUST</bcp14> reject and generate an error for | |||
| Patch Packs with | ||||
| invalid Records. If a Patch Pack is rejected, the state of the Target | invalid Records. If a Patch Pack is rejected, the state of the Target | |||
| Pack is not changed, i.e., either all or none of the Patch Records are | Pack is not changed, i.e., either all or none of the Patch Records are | |||
| applied. <xref target="RFC8132"/> Section 3.4 provides guidance for error handli ng | applied. <xref target="RFC8132" sectionFormat="comma" section="3.4"/> provides g uidance for error handling | |||
| with PATCH and iPATCH requests, e.g., using the 4.22 (Unprocessable | with PATCH and iPATCH requests, e.g., using the 4.22 (Unprocessable | |||
| Entity) and 4.09 (Conflict) CoAP error response codes.</t> | Entity) and 4.09 (Conflict) CoAP error response codes.</t> | |||
| <t>For example, the following document could be given as an (i)PATCH pay | ||||
| <t>For example, the following document could be given as an (i)PATCH payload | load | |||
| to change/set values of two SenML Records for the example in | to change/set the values of two SenML Records for the example in | |||
| <xref target="intro"/>:</t> | <xref target="intro" format="default"/>:</t> | |||
| <sourcecode name="" type="json"><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":false}, | {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":false}, | |||
| {"n":"5851", "v":10} | {"n":"5851", "v":10} | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t>If the request is successful, the resulting representation of the | ||||
| <t>If the request is successful, the resulting representation of the | ||||
| example SenML Pack would be as follows:</t> | example SenML Pack would be as follows:</t> | |||
| <sourcecode name="" type="json"><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":false}, | {"bn":"2001:db8::2/3311/0/", "n":"5850", "vb":false}, | |||
| {"n":"5851", "v":10}, | {"n":"5851", "v":10}, | |||
| {"n":"5750", "vs":"Ceiling light"} | {"n":"5750", "vs":"Ceiling light"} | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t>As another example, the following document could be given as an (i)PA | ||||
| <t>As another example, the following document could be given as an (i)PATCH | TCH | |||
| payload to remove the two SenML Records:</t> | payload to remove the two SenML Records:</t> | |||
| <sourcecode name="" type="json"><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| [ | [ | |||
| {"bn":"2001:db8::2/3311/0/", "n":"5850", "v":null}, | {"bn":"2001:db8::2/3311/0/", "n":"5850", "v":null}, | |||
| {"n":"5851", "v":null} | {"n":"5851", "v":null} | |||
| ] | ] | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | <section anchor="fragment-identification" numbered="true" toc="default"> | |||
| <section anchor="fragment-identification" title="Fragment Identification"> | <name>Fragment Identification</name> | |||
| <t>Fragment identification for Records of Fetch and Patch Packs uses the | ||||
| <t>Fragment identification for Records of Fetch and Patch Packs uses the | same mechanism as SenML JSON/CBOR fragment identification (see <xref | |||
| same mechanism as SenML JSON/CBOR fragment identification (see Section 9 | target="RFC8428" sectionFormat="of" section="9"/>), i.e., the "rec" scheme follo | |||
| of <xref target="RFC8428"/>), i.e., “rec” scheme followed by a comma-separated l | wed by a comma-separated list of | |||
| ist of | ||||
| Record positions or range(s) of Records. For example, to select the 3rd | Record positions or range(s) of Records. For example, to select the 3rd | |||
| and 5th Record of a Fetch or Patch Pack, a fragment identifier “rec=3,5” | and 5th Record of a Fetch or Patch Pack, a fragment identifier "rec=3,5" | |||
| can be used in the URI of the Fetch or Patch Pack resource.</t> | can be used in the URI of the Fetch or Patch Pack resource.</t> | |||
| </section> | ||||
| </section> | <section anchor="extensibility" numbered="true" toc="default"> | |||
| <section anchor="extensibility" title="Extensibility"> | <name>Extensibility</name> | |||
| <t>The SenML mandatory-to-understand field extensibility mechanism (see | ||||
| <t>The SenML mandatory to understand fields extensibility mechanism (see | <xref target="RFC8428" sectionFormat="of" section="4.4"/>) does not apply to Pat | |||
| section 4.4 in <xref target="RFC8428"/>) does not apply to Patch Packs, i.e., un | ch Packs, i.e., unknown | |||
| known | fields <bcp14>MUST NOT</bcp14> generate an error, but such fields are treated li | |||
| fields MUST NOT generate an error but such fields are treated like any | ke any | |||
| other field (e.g., added to Patch target records where applicable).</t> | other field (e.g., added to Patch target Records where applicable).</t> | |||
| <t>This specification allows only a small subset of SenML fields in Fetch | ||||
| <t>This specification allows only a small subset of SenML fields in Fetch | Records, but future specifications may enable new fields for Fetch Records | |||
| Records but future specifications may enable new fields for Fetch Records | ||||
| and possibly also new fields for selecting targets for Patch Records.</t> | and possibly also new fields for selecting targets for Patch Records.</t> | |||
| </section> | ||||
| </section> | <section anchor="seccons" numbered="true" toc="default"> | |||
| <section anchor="seccons" title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t>The security and privacy considerations of SenML also apply to the | ||||
| <t>The security and privacy considerations of SenML apply also with the | FETCH and (i)PATCH methods. CoAP's security mechanisms are used to | |||
| FETCH and (i)PATCH methods. CoAP’s security mechanisms are used to | ||||
| provide security for the FETCH and (i)PATCH methods.</t> | provide security for the FETCH and (i)PATCH methods.</t> | |||
| <t>In FETCH and (i)PATCH requests, the client can pass arbitrary names to | ||||
| <t>In FETCH and (i)PATCH requests, the client can pass arbitrary names to | ||||
| the target resource for manipulation. The resource implementer must take | the target resource for manipulation. The resource implementer must take | |||
| care to only allow access to names that are actually part of (or | care to only allow access to names that are actually part of (or | |||
| accessible through) the target resource. In particular the receiver needs | accessible through) the target resource. In particular, the receiver needs | |||
| to ensure that any input does not lead to uncontrolled special | to ensure that any input does not lead to uncontrolled special | |||
| interpretation by the system.</t> | interpretation by the system.</t> | |||
| <t>If the client is not allowed to do a GET or PUT on the full target | ||||
| <t>If the client is not allowed to do a GET or PUT on the full target | ||||
| resource (and thus all the names accessible through it), access | resource (and thus all the names accessible through it), access | |||
| control rules must be evaluated for each record in the pack.</t> | control rules must be evaluated for each Record in the Pack.</t> | |||
| </section> | ||||
| </section> | <section anchor="iana" numbered="true" toc="default"> | |||
| <section anchor="iana" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t>This document registers two new media types and CoAP Content-Format IDs | ||||
| <t>This document registers two new media types and CoAP Content-Format IDs | ||||
| for both media types.</t> | for both media types.</t> | |||
| <section anchor="coap-content-format-registration" numbered="true" toc="de | ||||
| <t>Note to RFC Editor: Please replace all occurrences of “RFC-AAAA” with | fault"> | |||
| the RFC number of this document.</t> | <name>CoAP Content-Format Registration</name> | |||
| <t>IANA has assigned CoAP Content-Format IDs for the SenML PATCH | ||||
| <section anchor="coap-content-format-registration" title="CoAP Content-Format Re | and FETCH media types in the "CoAP Content-Formats" subregistry, within | |||
| gistration"> | the "Constrained RESTful Environments (CoRE) Parameters" registry <xref target=" | |||
| RFC7252" format="default"/>. The assigned IDs are shown in | ||||
| <t>IANA is requested to assign CoAP Content-Format IDs for the SenML PATCH | <xref target="tbl-coap-content-formats" format="default"/>.</t> | |||
| and FETCH media types in the “CoAP Content-Formats” sub-registry, within | <table anchor="tbl-coap-content-formats" align="center"> | |||
| the “CoRE Parameters” registry <xref target="RFC7252"/>. The assigned IDs are sh | <name>CoAP Content-Format IDs</name> | |||
| own in | <thead> | |||
| <xref target="tbl-coap-content-formats"/>.</t> | <tr> | |||
| <th align="left">Media Type</th> | ||||
| <texttable title="CoAP Content-Format IDs" anchor="tbl-coap-content-formats"> | <th align="left">Encoding</th> | |||
| <ttcol align='left'>Media type</ttcol> | <th align="left">ID</th> | |||
| <ttcol align='left'>Encoding</ttcol> | </tr> | |||
| <ttcol align='left'>ID</ttcol> | </thead> | |||
| <c>application/senml-etch+json</c> | <tbody> | |||
| <c>-</c> | <tr> | |||
| <c>TBD-320</c> | <td align="left">application/senml-etch+json</td> | |||
| <c>application/senml-etch+cbor</c> | <td align="left">-</td> | |||
| <c>-</c> | <td align="left">320</td> | |||
| <c>TBD-322</c> | </tr> | |||
| </texttable> | <tr> | |||
| <td align="left">application/senml-etch+cbor</td> | ||||
| </section> | <td align="left">-</td> | |||
| <section anchor="senml-etchjson-media-type" title="senml-etch+json Media Type"> | <td align="left">322</td> | |||
| </tr> | ||||
| <t>Type name: application</t> | </tbody> | |||
| </table> | ||||
| <t>Subtype name: senml-etch+json</t> | </section> | |||
| <section anchor="senml-etchjson-media-type" numbered="true" | ||||
| <t>Required parameters: N/A</t> | toc="default"> | |||
| <name>senml-etch+json Media Type</name> | ||||
| <t>Optional parameters: N/A</t> | <dl newline="false"> | |||
| <dt>Type name:</dt><dd>application</dd> | ||||
| <t>Encoding considerations: binary</t> | <dt>Subtype name:</dt><dd>senml-etch+json</dd> | |||
| <dt>Required parameters:</dt><dd>N/A</dd> | ||||
| <t>Security considerations: See <xref target="seccons"/> of RFC-AAAA.</t> | <dt>Optional parameters:</dt><dd>N/A</dd> | |||
| <dt>Encoding considerations:</dt><dd>binary</dd> | ||||
| <t>Interoperability considerations: N/A</t> | <dt>Security considerations:</dt><dd>See <xref target="seccons" format="default" | |||
| /> of RFC 8790.</dd> | ||||
| <t>Published specification: RFC-AAAA</t> | <dt>Interoperability considerations:</dt><dd>N/A</dd> | |||
| <dt>Published specification:</dt><dd>RFC 8790</dd> | ||||
| <t>Applications that use this media type: Applications that use the | <dt>Applications that use this media type:</dt><dd>Applications that use the | |||
| SenML media type for resource representation.</t> | SenML media type for resource representation.</dd> | |||
| <dt>Fragment identifier considerations:</dt><dd>Fragment identification for | ||||
| <t>Fragment identifier considerations: Fragment identification for | ||||
| application/senml-etch+json is supported by using fragment identifiers as | application/senml-etch+json is supported by using fragment identifiers as | |||
| specified by RFC AAAA.</t> | specified by <xref target="fragment-identification"/> of RFC 8790.</dd> | |||
| <dt>Additional information:</dt> | ||||
| <t>Additional information:</t> | <dd><t><br/></t> | |||
| <dl> | ||||
| <t>Deprecated alias names for this type: N/A</t> | <dt>Deprecated alias names for this type:</dt><dd>N/A</dd> | |||
| <dt>Magic number(s):</dt><dd>N/A</dd> | ||||
| <t>Magic number(s): N/A</t> | <dt>File extension(s):</dt><dd>senml-etchj</dd> | |||
| <dt>Windows Clipboard Name:</dt><dd>"SenML FETCH/PATCH format"</dd> | ||||
| <t>File extension(s): senml-etchj</t> | <dt>Macintosh file type code(s):</dt><dd>N/A</dd> | |||
| <dt>Macintosh Universal Type Identifier code:</dt><dd><t><br/>org.ietf.senml-e | ||||
| <t>Windows Clipboard Name: “SenML FETCH/PATCH format”</t> | tch-json | |||
| conforms to public.text</t></dd> | ||||
| <t>Macintosh file type code(s): N/A</t> | </dl> | |||
| </dd> | ||||
| <t>Macintosh Universal Type Identifier code: org.ietf.senml-etch-json | <dt>Person & email address to contact for further | |||
| conforms to public.text</t> | information:</dt><dd><t><br/><contact fullname="Ari Keränen"/> <ari.keranen@e | |||
| ricsson.com></t></dd> | ||||
| <t>Person & email address to contact for further information: | <dt>Intended usage:</dt><dd>COMMON</dd> | |||
| Ari Keranen ari.keranen@ericsson.com</t> | <dt>Restrictions on usage:</dt><dd>N/A</dd> | |||
| <dt>Author:</dt><dd><t><contact fullname="Ari Keränen"/> <ari.keranen@ericsso | ||||
| <t>Intended usage: COMMON</t> | n.com></t></dd> | |||
| <dt>Change controller:</dt><dd>IESG</dd> | ||||
| <t>Restrictions on usage: N/A</t> | </dl> | |||
| </section> | ||||
| <t>Author: Ari Keranen ari.keranen@ericsson.com</t> | <section anchor="senml-etchcbor-media-type" numbered="true" | |||
| toc="default"> | ||||
| <t>Change controller: IESG</t> | <name>senml-etch+cbor Media Type</name> | |||
| <dl newline="false"> | ||||
| </section> | <dt>Type name:</dt><dd>application</dd> | |||
| <section anchor="senml-etchcbor-media-type" title="senml-etch+cbor Media Type"> | <dt>Subtype name:</dt><dd>senml-etch+cbor</dd> | |||
| <dt>Required parameters:</dt><dd>N/A</dd> | ||||
| <t>Type name: application</t> | <dt>Optional parameters:</dt><dd>N/A</dd> | |||
| <dt>Encoding considerations:</dt><dd>binary</dd> | ||||
| <t>Subtype name: senml-etch+cbor</t> | <dt>Security considerations:</dt><dd>See <xref target="seccons" format="default" | |||
| /> of RFC 8790.</dd> | ||||
| <t>Required parameters: N/A</t> | <dt>Interoperability considerations:</dt><dd>N/A</dd> | |||
| <dt>Published specification:</dt><dd>RFC 8790</dd> | ||||
| <t>Optional parameters: N/A</t> | <dt>Applications that use this media type:</dt><dd>Applications that use the | |||
| SenML media type for resource representation.</dd> | ||||
| <t>Encoding considerations: binary</t> | <dt>Fragment identifier considerations:</dt><dd>Fragment identification for | |||
| <t>Security considerations: See <xref target="seccons"/> of RFC-AAAA.</t> | ||||
| <t>Interoperability considerations: N/A</t> | ||||
| <t>Published specification: RFC-AAAA</t> | ||||
| <t>Applications that use this media type: Applications that use the | ||||
| SenML media type for resource representation.</t> | ||||
| <t>Fragment identifier considerations: Fragment identification for | ||||
| application/senml-etch+cbor is supported by using fragment identifiers as | application/senml-etch+cbor is supported by using fragment identifiers as | |||
| specified by RFC AAAA.</t> | specified by <xref target="fragment-identification"/> of RFC 8790.</dd> | |||
| <dt>Additional information:</dt> | ||||
| <t>Additional information:</t> | <dd><t><br/></t> | |||
| <dl newline="false"> | ||||
| <t>Deprecated alias names for this type: N/A</t> | <dt>Deprecated alias names for this type:</dt><dd>N/A</dd> | |||
| <dt>Magic number(s):</dt><dd>N/A</dd> | ||||
| <t>Magic number(s): N/A</t> | <dt>File extension(s):</dt><dd>senml-etchc</dd> | |||
| <dt>Macintosh file type code(s):</dt><dd>N/A</dd> | ||||
| <t>File extension(s): senml-etchc</t> | <dt>Macintosh Universal Type Identifier code:</dt> | |||
| <dd><t><br/>org.ietf.senml-etch-cbor conforms to public.data</t></dd> | ||||
| <t>Macintosh file type code(s): N/A</t> | </dl> | |||
| </dd> | ||||
| <t>Macintosh Universal Type Identifier code: org.ietf.senml-etch-cbor | <dt>Person & email address to contact for further information:</dt> | |||
| conforms to public.data</t> | <dd><t><br/><contact fullname="Ari Keränen"/> <ari.keranen@ericsson.com></ | |||
| t></dd> | ||||
| <t>Person & email address to contact for further information: | <dt>Intended usage:</dt><dd>COMMON</dd> | |||
| Ari Keranen ari.keranen@ericsson.com</t> | <dt>Restrictions on usage:</dt><dd>N/A</dd> | |||
| <dt>Author:</dt><dd><t><contact fullname="Ari Keränen"/> <ari.keranen@ericsso | ||||
| <t>Intended usage: COMMON</t> | n.com></t></dd> | |||
| <dt>Change controller:</dt><dd>IESG</dd> | ||||
| <t>Restrictions on usage: N/A</t> | </dl> | |||
| </section> | ||||
| <t>Author: Ari Keranen ari.keranen@ericsson.com</t> | </section> | |||
| <t>Change controller: IESG</t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="acks" title="Acknowledgements"> | ||||
| <t>The use of FETCH and (i)PATCH methods with SenML was first introduced by | ||||
| the OMA SpecWorks LwM2M v1.1 specification. This document generalizes the | ||||
| use to any SenML representation. The authors would like to thank Carsten | ||||
| Bormann, Christian Amsuess, Jaime Jimenez, Klaus Hartke, Michael | ||||
| Richardson, and other participants from the IETF CoRE and OMA SpecWorks | ||||
| DMSE working groups who have contributed ideas and reviews.</t> | ||||
| </section> | ||||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8428.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7252.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8132.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8259.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7049.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <references title='Normative References'> | <reference anchor="IPSO" target="http://www.openmobilealliance.org/tech/ | |||
| profiles/lwm2m/3311.xml"> | ||||
| <reference anchor="RFC8428" target='https://www.rfc-editor.org/info/rfc8428'> | <front> | |||
| <front> | <title>IPSO Light Control Smart Object</title> | |||
| <title>Sensor Measurement Lists (SenML)</title> | <author> | |||
| <author initials='C.' surname='Jennings' fullname='C. Jennings'><organization /> | <organization>IPSO</organization> | |||
| </author> | </author> | |||
| <author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></au | <date year="2019"/> | |||
| thor> | </front> | |||
| <author initials='J.' surname='Arkko' fullname='J. Arkko'><organization /></auth | </reference> | |||
| or> | </references> | |||
| <author initials='A.' surname='Keranen' fullname='A. Keranen'><organization /></ | ||||
| author> | ||||
| <author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></ | ||||
| author> | ||||
| <date year='2018' month='August' /> | ||||
| <abstract><t>This specification defines a format for representing simple sensor | ||||
| measurements and device parameters in Sensor Measurement Lists (SenML). Represe | ||||
| ntations are defined in JavaScript Object Notation (JSON), Concise Binary Object | ||||
| Representation (CBOR), Extensible Markup Language (XML), and Efficient XML Inte | ||||
| rchange (EXI), which share the common SenML data model. A simple sensor, such a | ||||
| s a temperature sensor, could use one of these media types in protocols such as | ||||
| HTTP or the Constrained Application Protocol (CoAP) to transport the measurement | ||||
| s of the sensor or to be configured.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='8428'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8428'/> | ||||
| </reference> | ||||
| <reference anchor="RFC7252" target='https://www.rfc-editor.org/info/rfc7252'> | ||||
| <front> | ||||
| <title>The Constrained Application Protocol (CoAP)</title> | ||||
| <author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></au | ||||
| thor> | ||||
| <author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></au | ||||
| thor> | ||||
| <author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></ | ||||
| author> | ||||
| <date year='2014' month='June' /> | ||||
| <abstract><t>The Constrained Application Protocol (CoAP) is a specialized web tr | ||||
| ansfer protocol for use with constrained nodes and constrained (e.g., low-power, | ||||
| lossy) networks. The nodes often have 8-bit microcontrollers with small amount | ||||
| s of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireles | ||||
| s Personal Area Networks (6LoWPANs) often have high packet error rates and a typ | ||||
| ical throughput of 10s of kbit/s. The protocol is designed for machine- to-mach | ||||
| ine (M2M) applications such as smart energy and building automation.</t><t>CoAP | ||||
| provides a request/response interaction model between application endpoints, sup | ||||
| ports built-in discovery of services and resources, and includes key concepts of | ||||
| the Web such as URIs and Internet media types. CoAP is designed to easily inte | ||||
| rface with HTTP for integration with the Web while meeting specialized requireme | ||||
| nts such as multicast support, very low overhead, and simplicity for constrained | ||||
| environments.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='7252'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC7252'/> | ||||
| </reference> | ||||
| <reference anchor="RFC8132" target='https://www.rfc-editor.org/info/rfc8132'> | ||||
| <front> | ||||
| <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</ | ||||
| title> | ||||
| <author initials='P.' surname='van der Stok' fullname='P. van der Stok'><organiz | ||||
| ation /></author> | ||||
| <author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></ | ||||
| author> | ||||
| <author initials='A.' surname='Sehgal' fullname='A. Sehgal'><organization /></au | ||||
| thor> | ||||
| <date year='2017' month='April' /> | ||||
| <abstract><t>The methods defined in RFC 7252 for the Constrained Application Pro | ||||
| tocol (CoAP) only allow access to a complete resource, not to parts of a resourc | ||||
| e. In case of resources with larger or complex data, or in situations where res | ||||
| ource continuity is required, replacing or requesting the whole resource is unde | ||||
| sirable. Several applications using CoAP need to access parts of the resources. | ||||
| </t><t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH | ||||
| , which are used to access and update parts of a resource.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='8132'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8132'/> | ||||
| </reference> | ||||
| <reference anchor="RFC8259" target='https://www.rfc-editor.org/info/rfc8259'> | ||||
| <front> | ||||
| <title>The JavaScript Object Notation (JSON) Data Interchange Format</title> | ||||
| <author initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organizat | ||||
| ion /></author> | ||||
| <date year='2017' month='December' /> | ||||
| <abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, lan | ||||
| guage-independent data interchange format. It was derived from the ECMAScript P | ||||
| rogramming Language Standard. JSON defines a small set of formatting rules for | ||||
| the portable representation of structured data.</t><t>This document removes inco | ||||
| nsistencies 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="RFC7049" target='https://www.rfc-editor.org/info/rfc7049'> | ||||
| <front> | ||||
| <title>Concise Binary Object Representation (CBOR)</title> | ||||
| <author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></ | ||||
| author> | ||||
| <author initials='P.' surname='Hoffman' fullname='P. Hoffman'><organization /></ | ||||
| author> | ||||
| <date year='2013' month='October' /> | ||||
| <abstract><t>The Concise Binary Object Representation (CBOR) is a data format wh | ||||
| ose design goals include the possibility of extremely small code size, fairly sm | ||||
| all message size, and extensibility without the need for version negotiation. T | ||||
| hese design goals make it different from earlier binary serializations such as A | ||||
| SN.1 and MessagePack.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='7049'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC7049'/> | ||||
| </reference> | ||||
| <reference anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'> | ||||
| <front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Levels</title> | ||||
| <author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></ | ||||
| author> | ||||
| <date year='1997' month='March' /> | ||||
| <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 Comm | ||||
| unity, 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" target='https://www.rfc-editor.org/info/rfc8174'> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
| <author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></auth | ||||
| or> | ||||
| <date year='2017' month='May' /> | ||||
| <abstract><t>RFC 2119 specifies common key words that may be used in protocol s | ||||
| pecifications. This document aims to reduce the ambiguity by clarifying that on | ||||
| ly UPPERCASE usage of the key words have the defined special meanings.</t></abs | ||||
| tract> | ||||
| </front> | ||||
| <seriesInfo name='BCP' value='14'/> | ||||
| <seriesInfo name='RFC' value='8174'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8174'/> | ||||
| </reference> | ||||
| </references> | ||||
| <references title='Informative References'> | ||||
| <reference anchor="IPSO" target="http://www.openmobilealliance.org/tech/profiles | ||||
| /lwm2m/3311.xml"> | ||||
| <front> | ||||
| <title>IPSO Light Control Smart Object</title> | ||||
| <author > | ||||
| <organization>IPSO</organization> | ||||
| </author> | ||||
| <date year="2018"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <section anchor="acks" numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t>The use of the FETCH and (i)PATCH methods with SenML was first | ||||
| introduced by the OMA SpecWorks Lightweight Machine to Machine (LwM2M) | ||||
| v1.1 specification. This document generalizes the use to any SenML | ||||
| representation. The authors would like to thank <contact | ||||
| fullname="Carsten Bormann"/>, <contact fullname="Christian Amsüss"/>, | ||||
| <contact fullname="Jaime Jiménez"/>, <contact fullname="Klaus Hartke"/>, | ||||
| <contact fullname="Michael Richardson"/>, and other participants from | ||||
| the IETF CoRE and OMA SpecWorks DMSE working groups who have contributed | ||||
| ideas and reviews.</t> | ||||
| </section> | ||||
| </back> | </back> | |||
| <!-- ##markdown-source: | ||||
| H4sIAPOiZl4AA+1ba28bOZb9zl/BVYCJjZFkW3EmiRYNjOI40+6J7YztTGOx | ||||
| WCyoKspiXK8tVlmtzqR/+94HyWKV5STdgwZ2F9sfOq4qPi7v49xzSWoymQjb | ||||
| qCL9T5WVhZ7Lpm61MFVNf9lmdnj46nAm0jIpVA6f01qtmonRzWqSlLWeWF3k | ||||
| 2UQ3yXpy+ELc6e2mrNO5PCsaXRe6mbzB9iJRzVzaJhWVmQspmzKZy6dbbZ/y | ||||
| Q5lXKml6r1JdNWt488w9myLVRdTEbvNar2z0oqyb/hsYNoc+0RtTZAbXGPo0 | ||||
| taF5i9J1cHLws22X/VeNaTLo/vb05uR7+Qf5foH/bkyzlte6AAHkuVa2rTVO | ||||
| K98Z21i5B1/O3+0LtVzW+v6xvufvRKoaGHp2ODsUqm3WZT0XExAYpF9M5V91 | ||||
| rQpdgExshUVtondlfTuXp7AUa0t81rky2Vyq2kzvuNGftfs6hQX5cc+n8rxc | ||||
| q4+6DuOelx9VEb11I+X4Ov/zumzwmcYoyjpXjbnXaM+rtycvj2cv58IUq/j9 | ||||
| 2fvrS/wXLKjqWw1qXDdNNT842Gw207IC1ymXJtMqy4wqEj2FhRw0OlkfVHW5 | ||||
| gg/2INvks/zg2bOjo+lPecZDsRGe4uCg5Nt1I0/KoqnLTF7nqm7k5fKjTpqn | ||||
| 1NirEv+esKKwHz17jR+9FEJMJhOpluAQYG0hbtb6qyaVuU6Nks220hLiB4dT | ||||
| oKlUZzIBJS61aK1OwXclxEgKzpVlIJYpCyvLlay1Lds60XYMbpaspbJyqSCK | ||||
| NH21PDcNWdYiKYuVuW1rhd1lpWowFsSXnUoU9KRcvGe/GrNbjUkewy4GLddl | ||||
| aoUu1DIDSROY05riltq0FUyBDzBmQzOrIBlMLPM2a0wF3YK4glwWkAJe/Ver | ||||
| bYMyGCsBIFrSUapXEGNWFnoTachKcAzZOGnF16Sl1mFO+KuCBxgd9EnzN2wf | ||||
| Dhun9SkbMTdpmmmw6BMEobpMW1K6/PTE4OPnX2/cT5+cf3/+HAwtYkNLb2jw | ||||
| nsLmpvm6scWjxpaPGluIRSH1TypHg5CpSNZoMgmGsOtyg0Jl5WYuxC+//CL+ | ||||
| XchPo2Uxmo8AzI/m6fLlfD6jmDo4PBiN5Qg/PX/5/BD/vl+O5pgCPo+xl/ty | ||||
| RF9G8+NZ9PqF62Dh4USbDN0ow3AcfRb/QROL73WtwVa1jhxIjtzMfsbuEadB | ||||
| BYdXNIXApRYUtjI1eU5uTBNJS/FeUryDmbAJ2qjWPY9p0d2FkvhP5vxGvlfJ | ||||
| nfcllI/fXmlIainE1SLLIpHtWtFCtLBgDAhUqwkw5SMaXWtAM7lqYRBsNnBn | ||||
| gYPt6uk0Asl0yl5Kkf3p07+A/72YPZ/B2r4aONz65dEzaP37xTyKtyvom005 | ||||
| DPwxdSQbUNj+oO7VdVKbqhEM1PKibNjX9364vrzY90uYPX/lAq4/AIB9YsAA | ||||
| r02h6q0f5Mob3A118vryyg/14vAYhhrLzdpA8MUx68FEfBOGfgMqCfajKBfs | ||||
| mamejqnrsvTZngZ3GHQNtEXluLoIjUSHRtcIRzjgPsM9zNmg1VAXwQCwGtC+ | ||||
| rnM52jP7JPUI1gv0ADiRrmtSXskS+NVAysExLCT5ogF64AcdInfP92MYdyTm | ||||
| oaKmiL43II0pyqy83bI3AzmUyA4BAs4/XN9g7OO/8uKS/r46/duHs6vTN/j3 | ||||
| 9feLd+/CH9xCwMPlh3fuO/7V9Ty5PD8/vXjDneGtHLw6X/wbY4sYXb6/Obu8 | ||||
| WLwbAQmClcReTAst0TkM0lewLpoW1JRqCx67hAdTiNcn7+XRsXOt2dEReqmP | ||||
| uhfH8IBqHzvHzbbuEXS2laqqtKpxEKA84IiVaVQGEaI8bK8BMEF5V1qlgPj4 | ||||
| ss1AgsySVCtwE2BKdZcD0eKWpoKskQBlBlmNTVoLzg1kzKUuAgNqFaUydqYV | ||||
| 5I5yQ9CQpgZDR2V+1NoFCYjb0xOklbdI+B1azsVcXhboR+SWXcICCVWDKcmn | ||||
| xxxzXg9p9+z+1I+GiOzHQhiC6kLG81g0GMSuqmu1ReoOib0ldb1X3yKNNaA9 | ||||
| UB4IEg8rl23DGgYVNsoUmCyAH9P4nMDBLuUG+yVrVdxqyMEQnKizLpXwQliQ | ||||
| XQuJRXx8ITfEkqOVLLyQ2CPOXKTa3HEIjmLPAcBTYb0QveUKkh4vFcSIJSBf | ||||
| 4CQF5lGOnVNsD3sIoOlMRTr5/AIXDyT62mgyHs0DFQ9F4EWDEGLZAFeENCMH | ||||
| aUQPjHvwQEY412DsoABFCTGwgiF4fS7IbaUTszIJpwd4y8kAU4vzUAKtD5Rm | ||||
| uEjDubyMcaVGYEZNDsLnIdN1KA8SURZgGNE/NQD55FNIFkO2iLgmvHdJG2pr | ||||
| kAp9eOBu4NIW9YNodqsL1GdZA4gYIosA5C16OTpCiV4MHg2zp/reQM6ayg8F | ||||
| lFVWYhyDIIASJSpuAwl1HC2bF4V2ZRzgocBPYwJO+aBuM82yhOkaSi2da9hp | ||||
| h/+dZbwO5AMd4ITKwxK2cHpQYlQApRrJe5W12iXjvLzHZrWLrCBcZBl0ElpV | ||||
| hn4KUeH6G51xLPZQBrmfZcn4PemjF74pkJyyEWt1r5H5KCBMUJXmFO3EDe/B | ||||
| Puhm6Jg0kpsLV1ZCfdCwtz1xaye9R27lZR5UFxziJA9kprZGSLDt0iGd0wD6 | ||||
| gbBI00DHY/xQRjAUG0XerAe0l+TjWWDG5VbcGlKu8mjKZBaDdMxrQzKU3et0 | ||||
| 7LDdP7uWiFoeNLqpeeaOGHuQIBhBEWBaGLtjfBx2I+xBCHAAnUaBhI+cduNh | ||||
| uQRwsiy3lB2h2i+I+CJURBw+uAw90Vic81cUOSGLctaEIiwWlwiMSxwSsCsD | ||||
| CteQymOnAp/q5xzsJkI3ntktTEWikTCYIOG9K/zGkSeg0FQWRcUV1RAMk1RR | ||||
| yVVd5oQ1vnKkBXEt/HnM3hlIQLSyyPl+dR05KB5DPejoK8VLiXYnb3dFRWcI | ||||
| L6lalhBhG+JAS/37VLORZOyhFMhUJxVQyLvAjSORLNazJqxl1daIowJKkhq5 | ||||
| Qi8jQ+Rwqk6HZeaPGESQsDx60JzGCo6ABzONERcHMRu0xn3YlWot/Iyu/miL | ||||
| zNzpKI35AcYeFlkI9v9uZuHWmJa4p1OCdGCaLbdlHP1Z1+W+Wwq9hnwa5A8w | ||||
| KvwKiBM3D6Bnz2CVv91nCcEjVNZFcDebQMv4NXqtTuU1c7ts63DJ6ZHlGM4p | ||||
| eqobTEU9d09ytmJC4j1EcNsAWPFyg8GoB6FEIMC+hIqFCV+n8lRBmx4T5P5U | ||||
| liRZm7IPNhxLFWRdkKYReUnAg6CvSZpVV8n3aTRL0U/jPJ8TZog4ZvUQajzS | ||||
| cHRSKgzT8YYWVJ4qBVDxe2p+fmdizwSayLp2Jx6JIR6hsiAD1gYWSh2cmnhJ | ||||
| ONroaDp78adDPLw40n88fDX6LeDRjOaDYYZAxi6DW95RBsblctwfT/+E76P0 | ||||
| sR/KIeKsdLpQ+zRHqWtMC7DjAEGhLHcuge/79mxKoRI87ChxR5vcK6ZZpvAE | ||||
| KuQ9VjZ4dNFfhejiktzfuVkfj5cwLebYR3ewpuLaIPWOGTlNy+jAY6JN2dr+ | ||||
| bV+fAIIcmY4lxn2dPOCmEJIweB9JyL0hCPKq2cYFigNCrrrIVYpSAEbTGREZ | ||||
| hlkVc3UVgmvaL3et9JsWIe8ThfapAtgRo/C4S+Rs1LEIWhiTadnI9BIfwR64 | ||||
| rNxvYrmZav3R0z5H9xEFpYZEUz/kT7xVFwk07W0CeNecTWeiqoE7p2DJ29ak | ||||
| inYsYbR+TuZZYEkp7u+CVqe3mEwCNTuezmZi70MBY+EeI1Uup1BaNIDkVLjx | ||||
| AAGoEqiGYurraTqH1JC0D2Leld8RoQanHiQzDIY0pT2s8A5VR5CRo/+Gcipk | ||||
| 4ZtdwSd6wdcvADrMx6F9pgVPICzdgH+pcODRdx7Q4E+4TyO1IosNOKHDZqzt | ||||
| S8cj+8gMRLLXidrjYojek+91ncLmgaUCDmxd07YQhL8BYlCFvh64e91cfsTh | ||||
| elMS4gtH42DNoXdSVkYHjXF1SF2AHXQ7I0ymcMNFuHRGxmJI4l0z8l62q7Oz | ||||
| T5ldjVZVmS/moaKLh4fVwkrzqgS+3/yr2+Z4bKcyKtapN+3Ng+8bkAe6g6v+ | ||||
| 6Gs4j4hqhwW0HZQRvMPjXS2QnybOG1Hei9A+ECGuuzFBOPKBzrS7jzakMq5L | ||||
| eVaUgLiHNyYCBa9NZWMRJZTOSWpdAReMS3xEOITHXWFAhySiHxi7yyG/c/V3 | ||||
| 4ouo8DYPtc3ZaqhR19+6wmjMh2L50hTe3rjJFBThsJSYoe9B+0hDdYBWh8H/ | ||||
| IBs55u3tRYpAzh1hDh3vsYRj2vBKU3f65wbauag15RRmzHtQfew7pk0z8Gvc | ||||
| 3Bjj8CHBLLXg0XGPEof3UOMGDb5CxkN0S0O9J6PNOrcBs8NWgK4KQ6njlBS3 | ||||
| fgPBbVvXPvVGgUYuGWI/DkBsvtR0wsRZATNq0w3OubDpakEvSRd3VB6CXFuX | ||||
| Z3Kcvyw6wVDH35gsZS9ZxoKi7gMcBmiJbEcZlXT7kfZEOIBtg6P2WJnwLdHh | ||||
| OE1BYyYcLjjRi2D+grZjHkkqwtlid85+Nj2Wu3N2P0vzcd0DxHMp3e5O4rKf | ||||
| xIVP4jjA8fTwldw7KYsVYG7zeGK3D7YqemQ+nLMkrqL3ORShrMv9ldpmpUpF | ||||
| SPgHuPvkMA81txkyPp8duh0OEXY4fuuuwQoy1O5tg6PDUAYwKAeyhNvMLZ21 | ||||
| rtosgD2GCO1Q9g4o2QXCpkx8KO21QxwClWd/l0X8qpP8BdqIE/M/ZV3hrBvx | ||||
| MWL3Q5v+phWP5gihO9dLH/xinsi3tbolYc/wVlk4FwD39R9M7wO5WMikqwc7 | ||||
| w4wnfAjrT0pzje5rbN7thuP59gGeTANK755nz9JdBA74V2JQPXpIGQGvGkkL | ||||
| qSD3JuB9TkWX3tTEajz4wl3czNBpsd9mqEpr3KkWBC9G1x7UPjBNgL8v7DU+ | ||||
| q1PKss8DreBcPDjj4WSqHq4RnAcl/+7Z+PlIDLbUcPwPV2ceGncMGbYe6KDm | ||||
| lM9SluCtzTbev8tBQjwR2aLwbYHnqHi90WdvHfeLbISKFzYU7seDfd/9bgOM | ||||
| 8hIOHpneG6Yt7opyUwg3WUjkD3MRZnS6CxQdDeBFALbZHbbciqiOk3uM2oFt | ||||
| 8OzurC0cf1DJrZgcA4zv+5sa/eMvOl2xvC2m8BYN5KbuJKHHvP3xSNg0Q8FX | ||||
| LR5Y9gfFwnvrD6+Q0UfUvVcCkQuBH4IRcHo8bBk0dzunmJ1oeTbK3N5P0Qcg | ||||
| TtoazXjiqhsnyKcnYEiseNxlL+vb0cw1cIxkGyoiFW5puTM7Mi+JFS517DgP | ||||
| 9DcdKBk+td0cwaWiE3QoSl3i7tr5pPWFsSHBFLu+d5mcODowBoRdhed/Fmdd | ||||
| mqZWEADuuKYkrhU8xe3f4fwQK6ZqMz6Q9ZdL+LPx7ErjjSDAkEbdaQhaviLB | ||||
| noNe5C4X4cvudIiP8JIGSg1oV9ElrZXcK2vhriKhjzTrumxv1/tyh3S0NRWd | ||||
| ZnIqTTRkFKBQWoMX0UkpXpdxMwK5N0XVNl2gQvGRMggkfD8Uj2HJZ1Umwg0P | ||||
| jogl7w/brW10Pg2Z3enWETvlgBbGTPH44i+nNwRRH27wuJXSIV754rWIoMo9 | ||||
| 2n9YtzZUEu6Q6oEugPwDxvN74YR2J6xkA+TISIQIJYj4KTp0i0uZivn+E3m2 | ||||
| uFg8jAyjCvV5eH2r1reQJujQ/eEFLvI9onwnXA1O3tIdX3n2xopwrSnqALNf | ||||
| QPGNagL8lKepATiey/dYDGpfZDIfTiAY3DYlOMgImk8W8N+IqTlV/DBC0eZL | ||||
| sDulhkhs3kfaJdkVrad2OZ0UQSyewoYNCJFibovH1tXfo2cuTbjlz2c77Ti1 | ||||
| j3aMZEeIqhPWbr3lcpJu01D7q1PANH89ZSR9M047fN+Pg5JlBblRMjqjpctC | ||||
| RHObZTZJSlVNXKk+4QvYlo4q/yHPu2P1h//9Q55CaOAePfx59sa9hF6q2105 | ||||
| 6C74//GjBTeHppNugJvXbybPZodf6pUsQZe7es2g16e5fPLYEvBiq/1ulMls | ||||
| xJe+v9ulZFQK8FTyhaGsvPobWD14POqAb7lHggpx3S6b7tNgBLyKBUVpDbrv | ||||
| bhLN5cXBQojLyl2XevAlaLWfY+ZyyVcWRUhcwwbXGq8b++z1mYiZiwnKBjAJ | ||||
| 3aBx9GXYnWZ/3y6B9K091vn8PA8jAZvvFOAAG08IKLg6157Lx5rtuLcS34wc | ||||
| lDrTHaxa1w9k/wLzFl/yRyq6qqqs+c6CK2t3cE+8lSKcSrgpYotT7aK7/RZ+ | ||||
| wwA6E+INriUhwFWZASbf3VsgfbGmSPHn6tYkDqyAVbu3b02mu5s/9L5bwkch | ||||
| fjRFimTsJDPVslQA5BfkiaPobsgB532Wa4QzJZC/SovsEbMHWgAL8G7WrsWH | ||||
| ApOmhYVRBJzFFkhhnrK+neLPeabRL3nI9fEeeokXAQEtK/SpZNrAOsDBYDhQ | ||||
| /B/41yHISGvHAGhfLOGrX+5EvK/O6Hcrj/88hfy8SOnmtroFEfEq5+UFxiL/ | ||||
| YMffynOfacEL/qGH/LYZTvgkIfAC6Hh2ev2XIYgQdP1TIIIj/D+I/E8GEbLx | ||||
| /2oQSX5/QCA33gEI9FOY/9uAIBcJ1vRQO9zyUTGQaCz5XW3pjtYfr+LiKzcb | ||||
| 3NIzNR1H8E+T+J4dEsLL84W8Bsf6sazvrHy3OZ+dy/uj6VE/AIe/tuKNhcz8 | ||||
| 7HaeKLZKqoZ4ykEYMZ8k1Vi300i7DXR8oYo7eaJAPF2I12ijohjLk3WNRyZQ | ||||
| XS5yC/wZqs4fFB6+/AD/K/TPY/nXTEFt8z1Ua3d6LM8N1L86E1f4L1Tqpb8L | ||||
| T8bnms5UChUZjirOTm/eSiLE2LKnCfHm/PoUfzZwhxF5C2VShdscJV85IXuZ | ||||
| ZYuRBUGqrLsdeW/0BusQ+kXYEswl/htdm7HZ6DoAAA== | ||||
| </rfc> | </rfc> | |||
| End of changes. 64 change blocks. | ||||
| 656 lines changed or deleted | 375 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||