<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-asdf-sdf-compact-05" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="OneDM SDF compact">Semantic Definition Format (SDF) for Data and Interactions of Things: Compact Notation</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-asdf-sdf-compact-05"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization ascii="Universitaet Bremen TZI">Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Applications</area>
    <workgroup>T2TRG</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 62?>

<t>The Semantic Definition Format (SDF) is a format for domain experts to
use in the creation and maintenance of data and interaction models in
the Internet of Things.  It was created as a common language for use
in the development of the One Data Model liaison organization (OneDM)
definitions.  Tools convert this format to database formats and other
serializations as needed.</t>
      <t>The SDF format is mainly intended for interchange between machine
generation and machine processing.  However, there is often a need for
humans to look at and edit SDF models.</t>
      <t>Similar to the way Relax-NG as defined in ISO/IEC 19757-2 has an XML
format and a compact format (Annex C), this specification defines a
compact format to go along SDF's JSON format.</t>
      <t>The present version of this document is mostly a proof of concept, but
was deemed useful to obtain initial feedback on the approach taken.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bormann-asdf-sdf-compact/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        A Semantic Definition Format for Data and Interactions of Things (asdf) Working Group mailing list (<eref target="mailto:asdf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/asdf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/asdf/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 94?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) is a format for domain experts to
use in the creation and maintenance of data and interaction models in
the Internet of Things.  It was created as a common language for use
in the development of the One Data Model liaison organization (OneDM)
definitions.  Tools convert this format to database formats and other
serializations as needed.</t>
      <t>The SDF format is mainly intended for interchange between machine
generation and machine processing.  However, there is often a need for
humans to look at and edit SDF models.</t>
      <t>Similar to the way Relax-NG as defined in ISO/IEC 19757-2 has an XML
format and a compact format (Annex C), this specification defines a
compact format to go along SDF's JSON format.</t>
      <t>The present version of this document is mostly a proof of concept, but
was deemed useful to obtain initial feedback on the approach taken.</t>
      <t>(References: <xref target="I-D.ietf-asdf-sdf"/>, <xref target="RELAXNG"/>.)</t>
      <t>The intention is to be able to bidirectionally translate between
compact and JSON form, without appreciable semantic losses.  This will
allow viewing SDF in compact form, apply edits if needed, and then
continuing processing it in JSON form.  As a limitation of this
approach, it will be difficult to always recreate the order of map
entries (members of JSON objects) in the JSON form; this order is
essentially arbitrary as maps (JSON objects) in JSON are unordered.
(In the long run, it may be useful to define a canonical presentation order in the
SDF specification or here.)</t>
      <t>An initial prototype of a converter from compact form to JSON form was
constructed during the ASDF/WISHI hackathon preceding IETF110.
A more complete, bidirectionally operating version of this tool is
planned for release soon.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The SDF compact format is a YAML file <xref target="YAML"/>; a good part of the work
needed for a compact representation is already done by the increased
user-friendliness of YAML over JSON.</t>
      <t>In addition, all the sections defined with <tt>named&lt;...&gt;</tt> in the CDDL
definition of SDF have been compacted into map entries with
space-separated keys, giving the kind first and the name next.
This saves the need for another level of hierarchy and reminds the
reader of the kind of item being specified.</t>
      <t>The map key <tt>description</tt> is replaced by <tt>:</tt>, which also is rendered
in the most compact form possible in YAML.</t>
      <t>The dataqualities readable, writable, and observable, together with
optionality, are compressed into a four-character map key:  The first
three are translated into <tt>rwo</tt> when set (default in SDF) and into
<tt>---</tt> when not set.  The fourth character is <tt>?</tt> for optional and <tt>!</tt>
for required.</t>
      <t>The value of this abbreviated key is a CDDL <xref target="RFC8610"/> rendition of the
attributes defined in the <tt>jsonschema</tt> production in <xref section="A" sectionFormat="of" target="I-D.ietf-asdf-sdf"/>.  To further reduce noise, a top-level array
production in the CDDL can be represented as an array in the YAML
(i.e., does not require additional quotes).</t>
      <section anchor="ex-compact">
        <name>Example Definition</name>
        <t>This is an SDF-compact version of a slightly modified copy of the
<tt>sdfobject-cadence.sdf.json</tt> model found at the time of writing in
OneDM's SDF playground.
(This example was chosen more or less randomly; better examples can
probably be found.  The modification is the addition of a <tt>unit</tt> quality.)</t>
        <sourcecode type="sdfc"><![CDATA[
info:
  copyright: Copyright 2018-2019 Open Connectivity Foundation, Inc.
    All rights reserved.
  version: '2019-06-11'
  title: Cadence
  license:
    https://github.com/one-data-model/oneDM/blob/master/LICENSE

object cadence:
  :: This Resource describes the cadence, which is the number of
     revolutions of crank per minute when cyclists pedal the
     pedals. The unit, which is the default unit, is rpm. The cadence
     Property is a read-only value that is provided by the
     server. When range (from "oic. r. baseresource") is omitted the
     default is 0 to +MAXFLOAT.
  property cadence:
    r-o!: integer .ge 0
    unit: 1/min
    :: This Property describes the rate at which a cyclist is
       pedaling/turning the pedals.
  property range:
    r-o?: [2*2 integer]
    :: The valid range for the Property in the Resource
       as an integer.
       The first value in the array is the minimum value,
       the second value in the array is the maximum value.
  property step:
    r-o?: integer
    :: Step value across the defined range when the range is an 
       integer.  This is the increment for valid values across the
       range; so if range is 0..10 and step is 2 then valid values
       are 0,2,4,6,8,10.
]]></sourcecode>
        <t>The result of automatically converting this YAML file using the
prototype <tt>sdfc</tt> tool back into the JSON form of SDF is given in
<xref target="ex-json"/>.
Except for the <tt>unit</tt> addition, it is semantically identical to the
<tt>sdfobject-cadence.sdf.json</tt>.
Differences are visible in the order of map entries (members in JSON
objects); a future version of the <tt>sdfc</tt> tool could attempt to
preserve more of this order, even though the order does not carry semantics.</t>
      </section>
    </section>
    <section removeInRFC="true" anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not make any requests of IANA.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TBD, like all alternative formats.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="I-D.ietf-asdf-sdf">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>PassiveLogic</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="1" month="October" year="2023"/>
            <abstract>
              <t>   The Semantic Definition Format (SDF) is a format for domain experts
   to use in the creation and maintenance of data and interaction models
   that describe Things, i.e., physical objects that are available for
   interaction over a network.  An SDF specification describes
   definitions of SDF Objects and their associated interactions (Events,
   Actions, Properties), as well as the Data types for the information
   exchanged in those interactions.  Tools convert this format to
   database formats and other serializations as needed.


   // The present revision (-16) addresses the Working Group Last Call
   // comments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-16"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="dot Net" fullname="Ingy dot Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <seriesInfo name="Revision" value="1.2.2"/>
        </reference>
        <reference anchor="RELAXNG">
          <front>
            <title>Information technology — Document Schema Definition Language (DSDL) — Part 2: Regular-grammar-based validation — RELAX NG</title>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="2008" month="December" day="15"/>
          </front>
          <seriesInfo name="ISO/IEC" value="19757-2"/>
        </reference>
      </references>
    </references>
    <?line 214?>

<section anchor="ex-json">
      <name>Example in SDF JSON format</name>
      <sourcecode type="application/sdf+json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "info": {
    "title": "Cadence",
    "license": "https://github.com/one-data-model/oneDM/blob/master/\
                                                            LICENSE",
    "version": "2019-06-11",
    "copyright": "Copyright 2018-2019 Open Connectivity Foundation, \
                                           Inc. All rights reserved."
  },
  "sdfObject": {
    "cadence": {
      "description": "This Resource describes the cadence, which is \
the number of revolutions of crank per minute when cyclists pedal \
the pedals. The unit, which is the default unit, is rpm. The \
cadence Property is a read-only value that is provided by the server\
. When range (from \"oic. r. baseresource\") is omitted the default \
                                                 is 0 to +MAXFLOAT.",
      "sdfProperty": {
        "step": {
          "type": "integer",
          "writable": false,
          "description": "Step value across the defined range when \
the range is an integer.  This is the increment for valid values \
across the range; so if range is 0..10 and step is 2 then valid \
                                            values are 0,2,4,6,8,10."
        },
        "range": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "maxItems": 2,
          "minItems": 2,
          "writable": false,
          "description": "The valid range for the Property in the \
Resource as an integer. The first value in the array is the minimum \
          value, the second value in the array is the maximum value."
        },
        "cadence": {
          "type": "integer",
          "minimum": 0,
          "writable": false,
          "description": "This Property describes the rate at which \
                          a cyclist is pedalling/turning the pedals."
        }
      },
      "sdfRequired": [
        "#/sdfObject/cadence/sdfProperty/cadence"
      ]
    }
  }
}
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The idea for this draft originated at the IETF110 ASDF/WISHI hackathon.
The author would like to thank the attendees for initial feedback.</t>
      <!--  LocalWords:  SDF namespace defaultNamespace instantiation OMA
 -->
<!--  LocalWords:  affordances ZigBee LWM OCF sdfObject sdfThing
 -->
<!--  LocalWords:  idempotency Thingness sdfProperty sdfEvent sdfRef
 -->
<!--  LocalWords:  namespaces sdfRequired Optionality sdfAction
 -->
<!--  LocalWords:  sdfProduct dereferenced dereferencing atomicity
 -->
<!--  LocalWords:  interworking
 -->

</section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA6Va23YbtxV9x1cg9IOlhkNKtOPYzK2MJCdqJSvLUpfTWOki
OAOSiIbAZC6SGFVdfegn9Au6+if9k3xJ9zkAhqQsp7arldjUYHBwrvvsAzpJ
EnE5lI9E6jJjZ0PZ1NPkqRC1qXM9lF8KKU/1QtnapHJfT401tXFWPnflQtVy
63T/+baculLuq1pJZTN5aGtdqpTeqqSbyrM5xFZDyNlziwIL8oWrFS0LNZmU
GoefWL1/LCFKpv4VkbnUqgXOz0o1rZMJnWZtoqpsmtD/4b0kV7WuapHir5kr
l0Np7NSJqpksTFXhiHpZQMjhwdlzIVSp1VCOiiI3KZ9fiStXXsxK1xRDeTY4
e/mNuNBLPMuG3gqr62SfFMDmpp67kqxIpNdsT5VVra382uuGFSldCQf+yZpL
XVam/s+/a/l1qRd46eyHw/iCqlJj1t5S+o23qrrUuh7K71xVT1U6l48e7Tx+
vMNrqalhpt/gH7gM2uwng6ePPnkWnjS2Jmd8o0m1JT8s5s7ivY8fP0seD3aT
we7T5MmjZ4NdXkSATT6UqZq439e/mB7U5OeloxzQmaldKaSwHHToTX54+Xzv
6ZPdHezKshy/Hyb7PaORPDFIQ4k/BAVkbdefR8dHQ5Zdq3JGRs7ruqiG/f5S
LXI6uF8VOu3v9ga9Qd+/6DORdsqRsQ9reazKi6aQR8rOGjXTcovWfv3Hv7Yl
uxTpie28dxW2VeBOSoqatskfzYXZWNnLIVgeXCqkxvrzQztbyr/KzCF3dc1L
GTJuKAc7cOXuTrLj3Vjp0uiKLPYnwkn60pBCQ8kGkdsOjkbfv/hmuG7al+Ht
w+grWFDrdG5d7nDyr3//p9x3aYOI1/I0nSNa66W4csP+6f7RNr0e5H2nyloO
VrrMGhiYzEq1WODviap0Ji9VbjJ/JJ3D6skX39zjPU7uw9OT/uHB3oYPdp4m
u4Nk95O3+CBsgQueffrJp8lAPPDPR9bqa7k3HLaHtghRLW2troWAwZTuQRCQ
6ODo+VB2XiP3ku/x82NHiEttG06tUMij38Krd0AquUUJvA2Bvijot99TYnNV
iCRJpJqgQgmmxOu/4PNu8mP4NGg/PWo/PW4/4T1vytlc/29QNZVUcrpSO3PQ
x0p9XeiyrmTtWFRTaWCerCExBb6xGLKN3gU6KZtqMi2LNpuVzXIB5MgrPPK5
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
Kd2xt7b/FxFPAQKFJAAA

-->

</rfc>
