<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd"
[
  <!ENTITY RFC2119 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
  <!ENTITY RFC3339 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3339.xml'>
  <!ENTITY RFC6350 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6350.xml'>
  <!ENTITY RFC6473 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6473.xml'>
  <!ENTITY RFC6474 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6474.xml'>
  <!ENTITY RFC6715 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6715.xml'>
  <!ENTITY RFC6869 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6869.xml'>
  <!ENTITY RFC7095 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.7095.xml'>
  <!ENTITY RFC7942 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.7942.xml'>
  <!ENTITY RFC8605 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.8605.xml'>
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>

<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="4"?>
<?rfc compact="yes"?>
<?rfc subcompact="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc iprnotified="no"?>

<rfc category="std" docName="draft-ietf-jmap-jscontact-vcard-03" ipr="trust200902">
  <front>
    <title abbrev="jscontact-vcard">JSContact: Converting from and to vCard</title>
       
    <author fullname="Mario Loffredo" initials="M." surname="Loffredo">
      <organization>IIT-CNR/Registro.it</organization>
      <address>
        <postal>
          <street>Via Moruzzi,1</street>
          <city>Pisa</city>
          <country>IT</country>
          <code>56124</code>
        </postal>
        <email>mario.loffredo@iit.cnr.it</email>
        <uri>http://www.iit.cnr.it</uri>
      </address>
    </author>

    <author fullname="Robert Stepanek" initials="R." surname="Stepanek">
      <organization>FastMail</organization>
      <address>
        <postal>
          <street>PO Box 234, Collins St West</street>
          <city>Melbourne</city>
          <country>AU</country>
          <code>VIC 8007</code>
        </postal>
        <email>rsto@fastmailteam.com</email>
        <uri>https://www.fastmail.com</uri>
      </address>
    </author>

    <date/>
    <area>Applications</area>
    <workgroup>jmap</workgroup>
    <keyword>JSON</keyword>
    <keyword>contacts</keyword>
    <keyword>vCard</keyword>
    <keyword>jCard</keyword>
    
    <abstract>
      <t>This document defines how to convert contact information as defined in the JSContact <xref target="draft-ietf-jmap-jscontact"/> specification from and to vCard.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">

    <section title="Motivation">

      <t>The JSContact specification <xref target="draft-ietf-jmap-jscontact"/> has been defined to represent contact card information as a more efficient alternative to vCard <xref target="RFC6350"/> and its JSON-based version named jCard <xref target="RFC7095"/>.</t>
      <t>While new applications might adopt JSContact as their main format to exchange contact card data, they are likely to interoperate with services and clients that just support vCard/jCard.  Similarly, existing contact data providers and consumers already using vCard/jCard might want to represent their data also according to the JSContact specification.</t>
      <t>To facilitate this, this document defines how to convert contact information as defined in the JSContact <xref target="draft-ietf-jmap-jscontact"/> specification from and to vCard.</t>
    </section>

    <section title="Scope and Caveats">

      <t>JSContact and vCard have a lot of semantics in common, however some differences must be outlined:
       <list style="symbols">
      <t>The JSContact data model defines some contact information that doesn't have a direct mapping with vCard properties.  In particular, unlike vCard, JSContact distinguishes between a single contact card, named JSCard, and a group of contact cards, named JSCardGroup.<vspace blankLines='1' /></t>
      <t>The properties that can be present multiple times in a vCard are represented through different collections in JSContact; mainly as maps, sometimes as lists, in some cases condensed in a single value.</t>
       </list></t>

        <section title="Extensions">
            <t>While translating vCard properties to JSContact, any vCard property that doesn't have a direct counterpart in JSContact MUST be converted into a property whose name is prefixed by &quot;ietf.org/&lt;RFC defining the extension&gt;/&quot;.</t>
            <t>Any custom extension MAY be added and its name MUST be prefixed with a specific domain name to avoid conflict, e.g. &quot;example.com/customprop&quot;.</t>
            <t>Similarly, the reversed rules are applied while translating JSContact properties to vCard.</t>
        </section>

    </section>

      <section title="Conventions Used in This Document">
      	<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>

          <t>In the following of this document, the vCard features, namely properties and parameters, are written in uppercase while the JSCard/JSCardGroup features are written in camel case wrapped in double quotes.</t>
      </section>
   </section>

    <section title="Translating vCard properties to JSContact" anchor="vcard-jscontact-translation">

      <t>This section contains the translation rules from vCard to JSCard/JSCardGroup.  The vCard properties are grouped according to the categories as defined in <xref target="RFC6350"/>.</t>

        <section  title="Common Parameters" anchor="vcard-common-parameters">
          <t>The following mapping rules apply to parameters that are common to most of the vCard properties:</t>
          <t><list style="symbols">
          <t>The generic values of the TYPE parameter are mapped onto the values of the &quot;Context&quot; type as defined in Section 1.5.1 of <xref target="draft-ietf-jmap-jscontact"/>.  The &quot;home&quot; value corresponds to the &quot;private&quot; key.  The mapping of those specific TYPE values used in the TEL and RELATED properties are defined in the following of the document.<vspace blankLines='1'/></t>
          <t>The PREF parameter is mapped onto the &quot;pref&quot; property.<vspace blankLines='1'/></t>
          <t>The MEDIATYPE parameter is mapped onto the &quot;mediaType&quot; property.  As described in Section 5.7 of <xref target="RFC6350"/>, the media type of a resource can be identified by its URI.  For example, &quot;image/gif&quot; can be derived from the &quot;.gif&quot; extension of a GIF image URI.  JSContact producers MAY provide the media type information even when it is not specified in the vCard.<vspace blankLines='1'/></t>
          <t>The ALTID and LANGUAGE parameters are used in combination for associating the language-dependent alternatives with a given property.  Such alternatives are represented by using the &quot;localizations&quot; map of a &quot;LocalizedString&quot; member inside the matching JSContact object.<vspace blankLines='1'/></t>
          <t>The LEVEL parameter as defined in <xref target="RFC6715"/> is directly mapped onto the &quot;level&quot; property of the &quot;PersonalInformation&quot; type apart from when LEVEL is used in the EXPERTISE property; in this case, the values are converted as in the following:
              <list style="symbols">
                  <t>&quot;beginner&quot; is converted into &quot;low&quot;;</t>
                  <t>&quot;average&quot; is converted into &quot;medium&quot;;</t>
                  <t>&quot;expert&quot; is converted into &quot;high&quot;.</t>
              </list>
          </t>
          </list></t>
      </section>

        <section  title="JSContact Id" anchor="jscontact-id">
            <t>The rules to generate a map key of type Id are out of the scope of this document.</t>
        </section>

        <section title="General Properties">

          <section title="BEGIN and END">
              <t>The BEGIN and END properties don't have a direct match with a JSContact feature.</t>
          </section>

          <section title="SOURCE">
          <t>A SOURCE property is represented as an entry of the &quot;online&quot; map (<xref target="source_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;source&quot; and the &quot;resource&quot; member is the SOURCE value.</t>
          <t>The PREF and MEDIATYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

            <figure anchor="source_mapping" title="SOURCE mapping example">
                <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    SOURCE:http://directory.example.com/addressbooks/jdoe/Jean%20Dupont.vcf
    ...
    END:VCARD

    {
    ...
    "online":{
       ...
       "a-source":{
         "type": "uri",
         "label": "source",
         "resource": "http://directory.example.com/addressbooks/jdoe/Jean%20Dupont.vcf"
       },
       ...
    },
    ...
    }
        ]]></artwork>
            </figure>
        </section>

        <section title="KIND">
          <t>The KIND property is mapped onto the &quot;kind&quot; member (<xref target="kind_mapping"/>).  Allowed values are those described in Section 6.1.4 of <xref target="RFC6350"/> and extended with the values declared in <xref target="RFC6473"/> and <xref target="RFC6869"/>.  The value &quot;group&quot; is reserved for a JSCardGroup instance.</t>

            <figure anchor="kind_mapping" title="KIND mapping example">
                <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    KIND:individual
    ...
    END:VCARD

    {
    ...
    "kind": "individual",
    ...
    }
        ]]></artwork>
            </figure>
        </section>

          <section title="XML">
              <t>The XML property doesn't have a direct match with a JSContact feature.</t>
          </section>

      </section>

      <section title="Identification Properties">

          <section title="FN">
              <t>All the FN instances are globally represented through the &quot;fullName&quot; member.  The presence of multiple instances is implicitly associated with the full name translations in various languages regardless of the presence of the ALTID parameter.  Each translation corresponds to a different entry of the &quot;localizations&quot; map (<xref target="fn_n_nickname_mapping"/>).</t>
          </section>

          <section title="N and NICKNAME">
              <t>The N instances are converted into equivalent items of the &quot;name&quot; array (<xref target="fn_n_nickname_mapping"/>): the N components are transformed into related &quot;NameComponent&quot; objects as presented in <xref target="n_components"/>.  Name components SHOULD be ordered such that their values joined by whitespace produce a valid full name of this entity.</t>
              <t>Each NICKNAME instance is mapped onto an item of &quot;nickNames&quot; array.</t>

              <texttable anchor="n_components" title="N components mapping">
                  <ttcol align="left">N component</ttcol>
                  <ttcol align="left">&quot;type&quot; value</ttcol>
                  <c>Honorific Prefixes</c><c>prefix</c>
                  <c>Given Names</c><c>personal</c>
                  <c>Family Names</c><c>surname</c>
                  <c>Additional Names</c><c>additional</c>
                  <c>Honorific Suffixes</c><c>suffix</c>
              </texttable>

              <figure anchor="fn_n_nickname_mapping" title="FN, N, NICKNAME mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    FN:Mr. John Q. Public\, Esq.
    N:Public;John;Quinlan;Mr.;Esq.
    NICKNAME:Johnny
    ...
    END:VCARD

    {
    ...
    "fullName":{ "value": "Mr. John Q. Public, Esq." },
    "name":[
      { "value":"Mr.", "type": "prefix" },
      { "value":"John", "type": "personal" },
      { "value":"Public", "type": "surname" },
      { "value":"Quinlan", "type": "additional" },
      { "value":"Esq.", "type": "suffix" }
    ],
    "nickNames":[
      { "value": "Johnny" }
    ],
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="PHOTO">
              <t>A PHOTO property is represented as an entry of the &quot;photos&quot; map (<xref target="photo_mapping"/>).  The entry value is a &quot;File&quot; object whose &quot;href&quot; member is the PHOTO value.</t>
              <t>The PREF and MEDIATYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="photo_mapping" title="PHOTO mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    PHOTO:http://www.example.com/pub/photos/jqpublic.gif
    ...
    END:VCARD

    {
    ...
    "photos":{
       ...
       "a-photo":{
         "href": "http://www.example.com/pub/photos/jqpublic.gif"
       },
       ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY">
              <t>The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE, DEATHDATE, DEATHPLACE described in <xref target="RFC6350"/> are represented as &quot;Anniversary&quot; objects included in the &quot;anniversaries&quot; array (<xref target="anniversary_mapping"/>):</t>
              <t><list style="symbols">
                  <t>BDAY and BIRTHPLACE are mapped onto &quot;date&quot; and &quot;place&quot; where &quot;type&quot; is set to &quot;birth&quot;;<vspace blankLines='1' /></t>
                  <t>DEATHDATE and DEATHPLACE are mapped onto &quot;date&quot; and &quot;place&quot; where &quot;type&quot; is set to &quot;death&quot;;<vspace blankLines='1' /></t>
                  <t>ANNIVERSARY is mapped onto &quot;date&quot; where &quot;type&quot; is set to &quot;other&quot; and &quot;label&quot; is set to a value describing in detail the kind of anniversary (e.g. &quot;marriage date&quot; for the wedding anniversary).</t>
              </list></t>

              <t>Both birth and death places are represented as instances of the &quot;Address&quot; object.</t>
              <t>The BIRTHPLACE and DEATHPLACE properties that are represented as geo URIs are converted into &quot;Address&quot; instances including only the &quot;coordinates&quot; member.  If the URI value is not a geo URI, the place is ignored.</t>
              <t>The ALTID and LANGUAGE parameters of both BIRTHPLACE and DEATHPLACE properties are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>). The &quot;fullAddress.localizations&quot; includes possible language-dependent alternatives.</t>

              <figure anchor="anniversary_mapping" title="BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    BDAY:19531015T231000Z
    BIRTHPLACE:Mail Drop: TNE QB\n123 Main Street\nAny Town, CA 91921-1234\nU.S.A.
    DEATHDATE:19960415
    DEATHPLACE:4445 Courtright Street\nNew England, ND 58647\nU.S.A.
    ANNIVERSARY:19860201
    ...
    END:VCARD

    {
    ...
    "anniversaries":[
      {
        "type": "birth",
        "date": "1953-10-15T23:10:00Z",
        "place":{
          "fullAddress":{
            "value": "Mail Drop: TNE QB\n123 Main Street\nAny Town, CA 91921-1234\nU.S.A."
          }
        }
      },
      {
        "type": "birth",
        "date": "1953-10-15T23:10:00Z",
        "place":{
          "fullAddress":{
            "value": "4445 Courtright Street\nNew England, ND 58647\nU.S.A."
          }
        }
      },
      {
        "type": "other",
        "label": "marriage date",
        "date": "1986-02-01"
      }
    ],
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="GENDER">
                <t>The GENDER property doesn't have a direct match with a JSContact feature.</t>
          </section>

      </section>

      <section title="Delivery Addressing Properties">

          <section title="ADR">
              <t>An ADR property is represented as an entry of the &quot;addresses&quot; map (<xref target="adr_mapping"/>).  The entry value is an &quot;Address&quot; object.</t>
              <t>The ADR components are transformed into the &quot;Address&quot; members as presented in <xref target="adr_components"/>.</t>

              <texttable anchor="adr_components" title="ADR components mapping">
                  <ttcol align="left">ADR component</ttcol>
                  <ttcol align="left">Address member</ttcol>
                  <c>p.o. box</c><c>postOfficeBox</c>
                  <c>extended address</c><c>extension</c>
                  <c>street address</c><c>street</c>
                  <c>locality</c><c>locality</c>
                  <c>region</c><c>region</c>
                  <c>postal code</c><c>postcode</c>
                  <c>country name</c><c>country</c>
              </texttable>

              <t>The LABEL parameter is converted into the &quot;fullAddress&quot; member.</t>
              <t>The GEO parameter is converted into the &quot;coordinates&quot; member.</t>
              <t>The TZ parameter is converted into the &quot;timeZone&quot; member.</t>
              <t>The CC parameter as defined in <xref target="RFC8605"/> is converted into the &quot;countryCode&quot; member.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>
              <t>The ALTID and LANGUAGE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>). The &quot;fullAddress.localizations&quot; includes possible language-dependent alternatives.</t>

              <figure anchor="adr_mapping" title="ADR mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    ADR;TYPE=work;CC=US:;;54321 Oak St;Reston;VA;20190;USA
    ADR;TYPE=home;CC=US:;;12345 Elm St;Reston;VA;20190;USA
    ...
    END:VCARD

    {
    ...
    "addresses":{
      "work-address" :{
        "contexts":{ "work": true },
        "fullAddress":{
          "value": "54321 Oak St\nReston\nVA\n20190\nUSA"
        },
        "street": "54321 Oak St",
        "locality": "Reston",
        "region": "VA",
        "country": "USA",
        "postcode": "20190",
        "countryCode": "US"
      },
      "private-address":{
        "contexts":{ "private": true },
        "fullAddress":{
          "value": "12345 Elm St\nReston\nVA\n20190\nUSA"
        },
        "street": "12345 Elm St",
        "locality": "Reston",
        "region": "VA",
        "country": "USA",
        "postcode": "20190",
        "countryCode": "US"
      }
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>
      </section>

      <section title="Communications Properties">

          <section title="TEL">
              <t>A TEL property is represented as an entry of the &quot;phones&quot; map (<xref target="tel_mapping"/>).  The entry value is a &quot;Phone&quot; object.  The TEL-specific values of the TYPE parameter are mapped onto the &quot;features&quot; map keys.  The values that don't match a key are represented as comma-separated values of the &quot;label&quot; member.  If the &quot;features&quot; map is empty and the &quot;label&quot; member is not empty, the &quot;other&quot; feature is added.  The &quot;phone&quot; member is set to the TEL value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="tel_mapping" title="TEL mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    TEL;VALUE=uri;PREF=1;TYPE="voice,home":tel:+1-555-555-5555;ext=5555
    TEL;VALUE=uri;TYPE=home:tel:+33-01-23-45-67
    ...
    END:VCARD

    {
    ...
    "phones":{
      "a-phone":{
        "contexts":{ "private": true },
        "features":{ "voice": true },
        "phone": "tel:+1-555-555-5555;ext=5555",
        "pref": 1
      },
      "another-phone":{
        "contexts":{ "private": true },
        "phone": "tel:+33-01-23-45-67"
      }
    ],
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="EMAIL">
              <t>An EMAIL property is represented as an entry of the &quot;emails&quot; map (<xref target="email_mapping"/>).  The entry value is an &quot;EmailAddress&quot; object.  The &quot;email&quot; member is set to the EMAIL value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="email_mapping" title="EMAIL mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    EMAIL;TYPE=work:jqpublic@xyz.example.com
    EMAIL;PREF=1:jane_doe@example.com
    ...
    END:VCARD

    {
    ...
    "emails":{
      "work-email":{
        "contexts":{ "work": true },
        "email": "jqpublic@xyz.example.com"
      },
      "private-email":{
        "contexts":{ "private", true },
        "email": "jane_doe@example.com",
        "pref": 1
      }
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="IMPP">
              <t>An IMPP property is represented as an entry of the &quot;online&quot; map (<xref target="impp_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;username&quot;, the &quot;label&quot; member is set to &quot;XMPP&quot; and the &quot;resource&quot; member is the IMPP value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>
              <figure anchor="impp_mapping" title="IMPP mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    IMPP;PREF=1:xmpp:alice@example.com
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      {
        "type": "username",
        "label": "XMPP",
        "value": "alice@example.com"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="LANG">
              <t>A LANG property is represented as an entry of the &quot;preferredContactLanguages&quot; map (<xref target="lang_mapping"/>).  The entry keys correspond to the language tags, the corresponding entry values are arrays of &quot;ContactLanguage&quot; objects.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>
              <t>If both PREF and TYPE parameters are missing, the array of &quot;ContactLanguage&quot; objects MUST be empty.</t>

              <figure anchor="lang_mapping" title="LANG mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    LANG;TYPE=work;PREF=1:en
    LANG;TYPE=work;PREF=2:fr
    LANG;TYPE=home:fr
    ...
    END:VCARD

    {
    ...
    "preferredContactLanguages":{
      "en":[
        {
          "context": "work",
          "pref": 1
        }
      ],
      "fr":[
        {
          "context": "work",
          "pref": 2
        },
        {
          "context": "private"
        }
      ]
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>
      </section>

      <section title="Geographical Properties">
        <t>The GEO and TZ properties are not directly mapped onto topmost JSCard/JSCardGroup members because the same information is represented through equivalent &quot;Address&quot; members.</t>
          <t>The ALTID parameter is used for associating both GEO and TZ properties with the related address information.  When the ALTID parameter is missing, the matched members SHOULD be included in the first &quot;Address&quot; object.</t>

          <section title="Time Zone Representation">
              <t>As specified in Section 6.5.1 of <xref target="RFC6350"/>, the time zone information can be represented in three ways: as a time zone name, as a UTC offset or as a URI.
                  <list style="symbols">
                      <t>The time zone name is directly matched by the &quot;timeZone&quot; member in JSContact.<vspace blankLines='1'/></t>
                      <t>An UTC offset MUST be converted into the related &quot;Etc/GMT&quot; time zone (e.g. the value &quot;-0500&quot; converts to &quot;Etc/GMT+5&quot;).  If the UTC offset value contains minutes information, it MUST be mapped to the zone &quot;Etc/GMT&lt;sign&gt;&lt;hour&gt;:&lt;minute&gt;&quot;.<vspace blankLines='1'/></t>
                      <t>Since there is no URI scheme defined for time zones <xref target="uri-schemes"/>, any implementation that does use some a custom URI for a time zone is not interoperable anyway.  In this case, if the URI corresponds to an IANA time zone <xref target="time-zones"/>, this latter SHOULD be used.  Otherwise, the URI value is dumped into a string.</t>
                  </list></t>
          </section>

      </section>

      <section title="Organizational Properties">

          <section title="TITLE and ROLE">
              <t>Both TITLE and ROLE properties are represented as entries of the &quot;titles&quot; map (<xref target="title_role_mapping"/>).  The entry value is a &quot;Title&quot; object whose &quot;title&quot; member includes information about the language.</t>
              <t>The ALTID and LANGUAGE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>). The &quot;title.localizations&quot; includes possible language-dependent alternatives.</t>

              <figure anchor="title_role_mapping" title="TITLE and ROLE mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    TITLE:Research Scientist
    ROLE:Project Leader
    ...
    END:VCARD

    {
    ...
    "titles":{
      "a-title":{
        "title":{ "value" : "Project Leader" }
      },
      "another-title":{
        "title":{ "value" : "Research Scientist" }
      }
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="LOGO">
              <t>A LOGO property is represented as an entry of the &quot;online&quot; map (<xref target="logo_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;logo&quot; and the &quot;resource&quot; member is the LOGO value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="logo_mapping" title="LOGO mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    LOGO:http://www.example.com/pub/logos/abccorp.jpg
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "a-logo":{
        "type": "uri",
        "label": "logo",
        "resource": "http://www.example.com/pub/logos/abccorp.jpg"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="ORG">
              <t>An ORG property is represented as an entry of the &quot;organizations&quot; map (<xref target="org_mapping"/>).  The entry value is an &quot;Organization&quot; object whose &quot;name&quot; member contains the organizational name and the &quot;units&quot; member contains the organizational units.</t>
              <t>The ALTID and LANGUAGE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).  The &quot;localizations&quot; maps for both &quot;name&quot; and &quot;units&quot; include possible language-dependent alternatives.</t>

              <figure anchor="org_mapping" title="ORG mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    ORG:ABC\, Inc.;North American Division;Marketing
    ...
    END:VCARD

    {
    ...
    "organizations":{
      "an-organization":{
        "name":{ "value": "ABC, Inc." },
        "units":[
          { "value": "North American Division" },
          { "value": "Marketing" }
        ]
      }
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="MEMBER">
              <t>According to the JSContact specification, a group of contact cards is represented through a JSCardGroup (<xref target="group_example"/>).  The uids of the contact cards composing the group are included in the &quot;members&quot; map.</t>
              <t>In this case, the PREF parameter has not a JSContact counterpart; however, the implementers MAY insert the map entries by order of preference.</t>

              <figure anchor="group_example" title="Group example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    KIND:group
    FN:The Doe family
    MEMBER:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af
    MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
    END:VCARD
    BEGIN:VCARD
    VERSION:4.0
    FN:John Doe
    UID:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af
    END:VCARD
    BEGIN:VCARD
    VERSION:4.0
    FN:Jane Doe
    UID:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
    END:VCARD

    [
      {
        "kind": "group",
        "fullName":{ "value": "The Doe family" },
        "uid": "urn:uuid:ab4310aa-fa43-11e9-8f0b-362b9e155667",
        "members":{
          "urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af": true,
          "urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519": true
        }
      },
      {
        "fullName":{ "value": "John Doe" },
        "uid": "urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af"
      },
      {
        "fullName":{ "value": "Jane Doe" },
        "uid": "urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519"
      }
    ]
        ]]></artwork>
              </figure>
          </section>


          <section title="RELATED">
              <t>All the RELATED instances are globally converted into the &quot;relatedTo&quot; map (<xref target="related_mapping"/>): an entry for each entity the entity described by the JSCard is associated with.  The map keys are the &quot;uid&quot; values of the associated cards.</t>
              <t>Each map value is a &quot;Relation&quot; object including only the &quot;relation&quot; member represented as a set of the RELATED-specific values of the TYPE parameter as defined in Section 6.6.6 of <xref target="RFC6350"/>.</t>
              <t>If the relation type is unspecified, the &quot;relation&quot; member MUST be empty.</t>

              <figure anchor="related_mapping" title="RELATED mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    RELATED;TYPE=friend:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
    RELATED;TYPE=contact:http://example.com/directory/jdoe.vcf
    RELATED;VALUE=text:Please contact my assistant Jane Doe for any inquiries.
    ...
    END:VCARD

    {
    ...
    "relatedTo":{
      {
        "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6":{
          "relation":{ "friend": true }
        }
      },
      {
        "http://example.com/directory/jdoe.vcf":{
          "relation":{ "contact": true }
        }
      },
      {
        "Please contact my assistant Jane Doe for any inquiries.":{
          "relation":{ }
        }
      }
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="CONTACT-URI">
              <t>A CONTACT-URI property as defined in <xref target="RFC8605"/> is represented as an entry of the &quot;online&quot; map (<xref target="contact_uri_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;contact-uri&quot; and the &quot;resource&quot; member is the CONTACT-URI value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="contact_uri_mapping" title="CONTACT-URI mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    CONTACT-URI;PREF=1:mailto:contact@example.com
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "a-contact-uri":{
        "type": "uri",
        "label": "contact-uri",
        "resource": "mailto:contact@example.com",
        "pref": 1
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>
      </section>

      <section title="Personal Information Properties">

          <section title="EXPERTISE">
              <t>An EXPERTISE property as defined in <xref target="RFC6715"/> is represented as a &quot;PersonalInformation&quot; object in the &quot;personalInfo&quot; array (<xref target="expertise_mapping"/>).  The &quot;type&quot; member is set to &quot;expertise&quot;.</t>
              <t>The INDEX parameter is represented as the index of the expertise among the declared expertises.</t>
              <t>The LEVEL parameter is mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="expertise_mapping" title="EXPERTISE mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    EXPERTISE;LEVEL=beginner;INDEX=2:chinese literature
    EXPERTISE;INDEX=1;LEVEL=expert:chemistry
    ...
    END:VCARD

    {
    ...
    "personalInfo":[
      ...
      {
        "type": "expertise",
        "value": "chemistry",
        "level": "high"
      },
      {
        "type": "expertise",
        "value": "chinese literature",
         "level": "low"
      },
      ...
    ],
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="HOBBY">
              <t>A HOBBY property as defined in <xref target="RFC6715"/> is represented as a &quot;PersonalInformation&quot; object in the &quot;personalInfo&quot; array (<xref target="hobby_mapping"/>).  The &quot;type&quot; member is set to &quot;hobby&quot;.</t>
              <t>The INDEX parameter is represented as the index of the hobby among the declared hobbies.</t>
              <t>The LEVEL parameter is mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="hobby_mapping" title="HOBBY mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    HOBBY;INDEX=1;LEVEL=high:reading
    HOBBY;INDEX=2;LEVEL=high:sewing
    ...
    END:VCARD

    {
    ...
    "personalInfo":[
      ...
      {
        "type": "hobby",
        "value": "reading",
        "level": "high"
      },
      {
        "type": "hobby",
        "value": "sewing",
        "level": "high"
      },
      ...
    ],
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="INTEREST">
              <t>An INTEREST property as defined in <xref target="RFC6715"/> is represented as a &quot;PersonalInformation&quot; object in the &quot;personalInfo&quot; array (<xref target="interest_mapping"/>).  The &quot;type&quot; member is set to &quot;interest&quot;.</t>
              <t>The INDEX parameter is represented as the index of the interest among the declared interests.</t>
              <t>The LEVEL parameter is mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="interest_mapping" title="INTEREST mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    INTEREST;INDEX=1;LEVEL=medium:r&b music
    INTEREST;INDEX=2;LEVEL=high:rock ’n’ roll music
    ...
    END:VCARD

    {
    ...
    "personalInfo":[
      ...
      {
        "type": "interest",
        "value": "r&b music",
        "level": "medium"
      },
      {
        "type": "interest",
        "value": "rock ’n’ roll music",
        "level": "high"
      },
      ...
    ],
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="ORG-DIRECTORY">
              <t>An ORG-DIRECTORY property is represented as an entry of the &quot;online&quot; map (<xref target="org_directory_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;org-directory&quot; and the &quot;resource&quot; member is the ORG-DIRECTORY value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>
              <t>The INDEX parameter is represented as the index of the directory among the online resources with the &quot;org-directory&quot; label.</t>

              <figure anchor="org_directory_mapping" title="ORG-DIRECTORY mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    ORG-DIRECTORY;INDEX=1:http://directory.mycompany.example.com
    ORG-DIRECTORY;PREF=1:ldap://ldap.tech.example/o=Example%20Tech,ou=Engineering
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "an-org-directory":{
        "type": "uri",
        "label": "org-directory",
        "resource": "http://directory.mycompany.example.com"
      },
      "another-org-directory":{
        "type": "uri",
        "label": "org-directory",
        "resource": "ldap://ldap.tech.example/o=Example%20Tech,ou=Engineering",
        "pref": 1
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>
      </section>

      <section title="Explanatory Properties">

          <section title="CATEGORIES">
              <t>A CATEGORIES property is converted into a set of entries of the &quot;categories&quot; map (<xref target="categories_mapping"/>). The keys are the comma-separated text values of the CATEGORIES property.</t>
              <t>In this case, the PREF parameter has not a JSContact counterpart; however, implementers MAY use a map preserving the order of insertion and the map entries can be inserted by order of preference.</t>

              <figure anchor="categories_mapping" title="CATEGORIES mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY
    ...
    END:VCARD

    {
    ...
    "categories":{
      "INTERNET": true,
      "IETF": true,
      "INDUSTRY": true,
      "INFORMATION TECHNOLOGY": true
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>


          <section title="NOTE">
              <t>A NOTE property is mapped onto the &quot;notes&quot; property (<xref target="notes_mapping"/>).  All the NOTE instances are condensed in a single note and separated by newline.</t>
              <t>The ALTID and LANGUAGE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).  The &quot;localizations&quot; map includes possible language-dependent alternatives.</t>

              <figure anchor="notes_mapping" title="NOTE mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    NOTE:This fax number is operational 0800 to 1715 EST\, Mon-Fri.
    ...
    END:VCARD

    {
    ...
    "notes": {
        "value": "This fax number is operational 0800 to 1715 EST, Mon-Fri."
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="PRODID">
              <t>The PRODID property is converted into the &quot;prodId&quot; member (<xref target="prodid_mapping"/>).</t>

              <figure anchor="prodid_mapping" title="PRODID mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN
    ...
    END:VCARD

    {
    ...
    "prodId": "-//ONLINE DIRECTORY//NONSGML Version 1//EN",
    ...
    }
        ]]></artwork>
              </figure>
          </section>


          <section title="REV">
              <t>The REV property is transformed into the &quot;updated&quot; member (<xref target="rev_mapping"/>).</t>

              <figure anchor="rev_mapping" title="REV mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    REV:19951031T222710Z
    ...
    END:VCARD

    {
    ...
    "updated": "1995-10-31T22:27:10Z",
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="SOUND">
              <t>A SOUND property is represented as an entry of the &quot;online&quot; map (<xref target="sound_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;sound&quot; and the &quot;resource&quot; member is the SOUND value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="sound_mapping" title="SOUND mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    SOUND:CID:JOHNQPUBLIC.part8.19960229T080000.xyzMail@example.com
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "a-sound":{
        "type": "uri",
        "label": "sound",
        "resource": "CID:JOHNQPUBLIC.part8.19960229T080000.xyzMail@example.com"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="UID">
              <t>The UID property corresponds to the &quot;uid&quot; property (<xref target="uid_mapping"/>).</t>

              <figure anchor="uid_mapping" title="UID mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
    ...
    END:VCARD

    {
    ...
    "uid": "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6",
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="CLIENTPIDMAP and PID Parameter">
              <t>The CLIENTPIDMAP property and the PDI parameter don't have a direct match with a JSCard feature.</t>
          </section>

          <section title="URL">
              <t>An URL property is represented as an entry of the &quot;online&quot; map (<xref target="url_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;url&quot; and the &quot;resource&quot; member is the URL value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="url_mapping" title="URL mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    URL:http://example.org/restaurant.french/~chezchic.html
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "an-url":{
        "type": "uri",
        "label": "url",
        "resource": "http://example.org/restaurant.french/~chezchic.html"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="VERSION">
              <t>The VERSION property doesn't have a direct match with a JSContact feature.</t>
          </section>

      </section>

      <section title="Security Properties">
          <section title="KEY">
              <t>A KEY property is represented as an entry of the &quot;online&quot; map (<xref target="key_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;key&quot; and the &quot;resource&quot; member is the KEY value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="key_mapping" title="KEY mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    KEY:http://www.example.com/keys/jdoe.cer
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "a-key":{
        "type": "uri",
        "label": "key",
        "resource": "http://www.example.com/keys/jdoe.cer"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
         </section>
      </section>


      <section title="Calendar Properties">

          <section title="FBURL">
              <t>An FBURL property is represented as an entry of the &quot;online&quot; map (<xref target="fburl_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;fburl&quot; and the &quot;resource&quot; member is the FBURL value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="fburl_mapping" title="FBURL mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    FBURL;PREF=1:http://www.example.com/busy/janedoe
    FBURL;MEDIATYPE=text/calendar:ftp://example.com/busy/project-a.ifb
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "an-fburl":{
        "type": "uri",
        "label": "fburl",
        "resource": "http://www.example.com/busy/janedoe",
        "pref": 1
      },
      "another-fburl":{
        "type": "uri",
        "label": "fburl",
        "resource": "ftp://example.com/busy/project-a.ifb",
        "mediaType": "text/calendar"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="CALADRURI">
              <t>A CALADRURI property is represented as an entry of the &quot;online&quot; map (<xref target="caladruri_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;caladruri&quot; and the &quot;resource&quot; member is the CALADRURI value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="caladruri_mapping" title="CALADRURI mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    CALADRURI;PREF=1:mailto:janedoe@example.com
    CALADRURI:http://example.com/calendar/jdoe
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "a-caladruri":{
        "type": "uri",
        "label": "caladruri",
        "resource": "mailto:janedoe@example.com",
        "pref": 1
      },
      "another-caladruri":{
        "type": "uri",
        "label": "caladruri",
        "resource": "http://example.com/calendar/jdoe"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>

          <section title="CALURI">
              <t>A CALURI property is represented as an entry of the &quot;online&quot; map (<xref target="caluri_mapping"/>).  The entry value is a &quot;Resource&quot; object whose &quot;type&quot; member is set to &quot;uri&quot;, the &quot;label&quot; member is set to &quot;caluri&quot; and the &quot;resource&quot; member is the CALURI value.</t>
              <t>The PREF and TYPE parameters are mapped according to the rules as defined in (<xref target="vcard-common-parameters"/>).</t>

              <figure anchor="caluri_mapping" title="CALURI mapping example">
                  <artwork xml:space="preserve"><![CDATA[
    BEGIN:VCARD
    VERSION:4.0
    ...
    CALURI;PREF=1:http://cal.example.com/calA
    CALURI;MEDIATYPE=text/calendar:ftp://ftp.example.com/calA.ics
    ...
    END:VCARD

    {
    ...
    "online":{
      ...
      "a-caluri":{
        "type": "uri",
        "label": "caluri",
        "resource": "http://cal.example.com/calA",
        "pref": 1
      },
      "another-caluri":{
        "type": "uri",
        "label": "caluri",
        "resource": "ftp://ftp.example.com/calA.ics",
        "mediaType": "text/calendar"
      },
      ...
    },
    ...
    }
        ]]></artwork>
              </figure>
          </section>
      </section>

        <section title="vCard Unmatched Properties">
            <t>The unmatched vCard properties MAY be converted into JSContact properties whose name contains the prefix &quot;ietf.org/RFC6350/&quot; followed by property name in uppercase (i.e. ietf.org/RFC6350/GENDER&quot;).</t>
        </section>

        <section title="JSCard Required Properties">
            <t>While converting a vCard into a JSCard/JSCardGroup, only the topmost &quot;uid&quot; member is mandatory.  Implementers are REQUIRED to set it when it is missing.</t>
        </section>

    </section>

  <section title="Translating JSContact properties to vCard">
      <t>In most of the cases, the rules about the translation from JSCard/JSCardGroup to vCard can be derived by reversing the rules presented in <xref target="vcard-jscontact-translation"/>.  The remaining cases are treated in the following of this section.</t>

      <section title="Id">
          <t>Where a map key is of type Id, implementers are free to either ignore it or preserve it as a vCard information (e.g. a vCard parameter).</t>
      </section>

      <section title="Localizations">
         <t>A LocalizedString object is converted in multiple instances of the same vCard property having different values of the LANGUAGE parameter.  Implementers MAY set the ALTID parameter to couple language-based alternatives of the same value.</t>
         <t>Note also that the components of some vCard values and their related alternatives are split into different JSContact values.  For example, the &quot;name&quot; and &quot;units&quot; values for a given language must be grouped to make a single ORG value where components are separated by &quot;;&quot;.</t>
      </section>

      <section title="Date and Time Representations">
          <t>The JSContact spec defines the &quot;UTCDateTime&quot; type to represent <xref target="RFC3339"/> &quot;date-time&quot; format with further restrictions.  This means that the matched vCard format for a &quot;UTCDateTime&quot; value MUST be one of the formats shown in Section 4.3.5 of <xref target="RFC6350"/> (i.e. &quot;19961022T140000Z&quot;).</t>
          <t>In addition to such format, the &quot;date&quot; member of the &quot;Anniversary&quot; type allows specifying both a date without the time and a partial date.  In this case, the corresponding vCard format is that defined in Section 4.3.1.</t>
      </section>

      <section title="Time Zone">
          <t>The time zone name as represented by the &quot;timeZone&quot; property is mapped onto the TZ parameter.</t>
          <t>Implementers MAY map an &quot;Etc/GMT&quot; time zone either preserving the time zone name or converting it into a UTC offset.</t>
      </section>

      <section title="JSContact Types Matching Multiple vCard Properties">
          <section title="Title">
              <t>The &quot;titles&quot; property contains information about the job, the position or the role of the entity the card represents.  In vCard, such information is split into the TITLE and ROLE properties.  This specification defines TITLE as the default target property when converting the &quot;titles&quot; property.</t>
          </section>
          <section title="Resource">
              <t>The &quot;online&quot; property includes resources that are usually represented through different vCard properties.  The matched vCard property of a &quot;Resource&quot; object can be derived from the value of its &quot;label&quot; member.</t>
              <t>Any resource included in the &quot;online&quot; map that doesn't match a vCard property MAY be converted into vCard extended properties.</t>
          </section>
      </section>

      <section title="JSCard Unmatched Properties">
          <t>Both the &quot;preferredContactMethod&quot; and &quot;created&quot; members don't match any vCard property.  Implementers MAY represent them as vCard extended properties.</t>
      </section>

      <section title="vCard Required Properties">
          <t>While converting a JSCard/JSCardGroup into a vCard, only the FN property is required.  Since the &quot;fullName&quot; property is optional, implementers are REQUIRED to generate an FN value when it is missing.</t>
      </section>

  </section>

   <section anchor="IANA-considerations" title="IANA Considerations">
       <t>This document has no actions for IANA.</t>
   </section>

      <section anchor="impl-status" title="Implementation Status">
          <t>NOTE: Please remove this section and the reference to RFC 7942 prior to publication as an RFC.</t>

          <t>This section records the status of known implementations of the protocol as defined in this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.  The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.  Please note that the listing of any individual implementation here does not imply endorsement by the IETF.  Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.  This is not intended as, and must not be construed to be, a catalog of available implementations or their features.  Readers are advised to note that other implementations may exist.</t>

          <t>According to RFC 7942, &quot;this will allow reviewers and working groups to assign due considerationto documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.  It is up to the individual working groups to use this information as they see fit&quot;.</t>

          <section anchor="it-cnr-iit" title="CNR">
              <t><list style="none">
                  <t>Responsible Organization: National Research Council (CNR) of Italy</t>
                  <t>Location: https://github.com/consiglionazionaledellericerche/jscontact-tools</t>
                  <t>Description: This implementation includes tools for JSContact creation, validation, serialization/deserialization, and conversion from vCard, xCard and jCard.</t>
                  <t>Level of Maturity: This is an "alpha" test implementation.</t>
                  <t>Coverage: This implementation includes all of the features described in this specification.</t>
                  <t>Contact Information: Mario Loffredo, mario.loffredo@iit.cnr.it</t>
              </list></t>
          </section>

      </section>

      <section anchor="security-considerations" title="Security Considerations">
       <t>This document doesn't present any security consideration.</t>
   </section>

  </middle>
  <back>
    <references title="Normative References">
      &RFC2119;
      &RFC3339;
      &RFC6350;
      &RFC6473;
      &RFC6474;
      &RFC6715;
      &RFC6869;
      &RFC7095;
      &RFC7942;
      &RFC8605;
    </references>
    
    <references title="Informative References">
      <reference anchor="draft-ietf-jmap-jscontact" target="https://datatracker.ietf.org/doc/draft-ietf-jmap-jscontact/">
        <front><title>JSContact: A JSON representation of contact data</title>
          <author/>
          <date/>
        </front>
      </reference>
        <reference anchor="time-zones" target="https://www.iana.org/time-zones">
            <front><title>Time Zone Database</title>
                <author/>
                <date/>
            </front>
        </reference>
        <reference anchor="uri-schemes" target="https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml">
            <front><title>Uniform Resource Identifier (URI) Schemes</title>
                <author/>
                <date/>
            </front>
        </reference>
    </references>
  </back>
</rfc>
