rfc9555.original.xml   rfc9555.xml 
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [ <!DOCTYPE rfc [
<!ENTITY nbsp "&#160;"> <!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;"> <!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;"> <!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;"> <!ENTITY wj "&#8288;">
]> ]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<?rfc toc="yes"?> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category="
<?rfc tocompact="yes"?> std" consensus="true" docName="draft-ietf-calext-jscontact-vcard-14" number="955
<?rfc tocdepth="4"?> 5" ipr="pre5378Trust200902" tocInclude="true" tocDepth="4" sortRefs="true" symRe
<?rfc compact="yes"?> fs="true" updates="6350" obsoletes="" xml:lang="en" version="3">
<?rfc subcompact="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc iprnotified="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category="
std" consensus="true" docName="draft-ietf-calext-jscontact-vcard-13" ipr="pre537
8Trust200902" tocInclude="true" tocDepth="4" sortRefs="true" symRefs="true" upda
tes="6350" version="3">
<!-- xml2rfc v2v3 conversion 3.12.10 --> <!-- xml2rfc v2v3 conversion 3.12.10 -->
<front> <front>
<title abbrev="jscontact-vcard">JSContact: Converting from and to vCard</tit <title abbrev="JSContact: Converting from and to vCard">JSContact: Convertin
le> g from and to vCard</title>
<seriesInfo name="Internet-Draft" value="draft-ietf-calext-jscontact-vcard-1 <seriesInfo name="RFC" value="9555"/>
3"/>
<author fullname="Mario Loffredo" initials="M." surname="Loffredo"> <author fullname="Mario Loffredo" initials="M." surname="Loffredo">
<organization>IIT-CNR/Registro.it</organization> <organization>IIT-CNR/Registro.it</organization>
<address> <address>
<postal> <postal>
<street>Via Moruzzi,1</street> <street>Via Moruzzi, 1</street>
<city>Pisa</city> <city>Pisa</city>
<country>IT</country> <country>Italy</country>
<code>56124</code> <code>56124</code>
</postal> </postal>
<email>mario.loffredo@iit.cnr.it</email> <email>mario.loffredo@iit.cnr.it</email>
<uri>https://www.iit.cnr.it</uri> <uri>https://www.iit.cnr.it</uri>
</address> </address>
</author> </author>
<author fullname="Robert Stepanek" initials="R." surname="Stepanek"> <author fullname="Robert Stepanek" initials="R." surname="Stepanek">
<organization>Fastmail</organization> <organization>Fastmail</organization>
<address> <address>
<postal> <postal>
<street>PO Box 234, Collins St West</street> <extaddr>PO Box 234</extaddr>
<street>Collins St. West</street>
<city>Melbourne</city> <city>Melbourne</city>
<country>AU</country> <region>VIC</region>
<code>VIC 8007</code> <code>8007</code>
<country>Australia</country>
</postal> </postal>
<email>rsto@fastmailteam.com</email> <email>rsto@fastmailteam.com</email>
<uri>https://www.fastmail.com</uri> <uri>https://www.fastmail.com</uri>
</address> </address>
</author> </author>
<date year="2023" month="September" day="18"/> <date year="2024" month="April"/>
<area>Applications</area> <area>art</area>
<workgroup>calext</workgroup> <workgroup>calext</workgroup>
<keyword>JSON</keyword> <keyword>JSON</keyword>
<keyword>contacts</keyword> <keyword>contacts</keyword>
<keyword>vCard</keyword> <keyword>vCard</keyword>
<keyword>jCard</keyword> <keyword>jCard</keyword>
<abstract> <abstract>
<t>This document defines how to convert contact information between the JS Contact and vCard data formats. To achieve this, it updates RFC I-D.ietf-calext -jscontact (JSContact) by registering new JSContact properties. Similarly, it u pdates RFC 6350 (vCard) by registering new vCard properties and parameters.</t> <t>This document defines how to convert contact information between the JS Contact and vCard data formats. It defines conversion rules for every JSContact and vCard element registered at IANA at the time of publication. It also defin es new JSContact properties as well as vCard properties and parameters, to suppo rt converting arbitrary or unknown JSContact and vCard elements.</t>
</abstract> </abstract>
</front> </front>
<middle> <middle>
<section> <section>
<name>Introduction</name> <name>Introduction</name>
<section> <section>
<name>Motivation</name> <name>Motivation</name>
<t>The JSContact data model and format <xref target="I-D.ietf-calext-jsc <t>The JSContact data model and format <xref target="RFC9553"/> aims to
ontact"/> aims to be an alternative to the widely used vCard <xref target="RFC63 be an alternative to the widely used vCard standard <xref target="RFC6350"/> and
50"/> standard and jCard <xref target="RFC7095"/>.</t> jCard format <xref target="RFC7095"/>.</t>
<t>While applications might prefer JSContact to exchange contact card da <t>While applications might prefer JSContact to exchange contact card da
ta with other systems, they are likely to interoperate with services and clients ta with other systems, they are likely to interoperate with services and clients
that only support vCard or jCard. Similarly, existing contact data providers a that only support vCard or jCard. Similarly, existing contact data providers a
nd consumers already using vCard or jCard might want to represent their contact nd consumers already using vCard or jCard might also want to represent their con
data also in JSContact.</t> tact data in JSContact.</t>
<t>To achieve this, this document defines standard rules to convert cont act data between JSContact and vCard (and consequently jCard). </t> <t>To achieve this, this document defines standard rules to convert cont act data between JSContact and vCard (and consequently jCard). </t>
</section> </section>
<section anchor="notational-conventions" numbered="true" toc="default"> <section anchor="notational-conventions" numbered="true" toc="default">
<name>Notational Conventions</name> <name>Notational Conventions</name>
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp1 4>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "< bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp1 4>" in this document are to be interpreted as described in BCP 14 <xref target=" RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref ta rget="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> wh en, and only when, they appear in all capitals, as shown here.</t> <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp1 4>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "< bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp1 4>" in this document are to be interpreted as described in BCP 14 <xref target=" RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref ta rget="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> wh en, and only when, they appear in all capitals, as shown here.</t>
</section> </section>
<section anchor="abnf-notations"> <section anchor="abnf-notations">
<name>ABNF Notations</name> <name>ABNF Notations</name>
<t>The ABNF definitions in this document use the notations of <xref targ et="RFC5234"/>. ABNF rules not defined in this document either are defined in <x ref target="RFC5234"/> (such as the ABNF for CRLF, WSP, DQUOTE, VCHAR, ALPHA, an d DIGIT) or <xref target="RFC6350"/>. <t>The ABNF definitions in this document use the notations of <xref targ et="RFC5234"/>. ABNF rules not defined in this document are defined in either <x ref target="RFC5234"/> (such as the ABNF for CRLF, WSP, DQUOTE, VCHAR, ALPHA, an d DIGIT) or <xref target="RFC6350"/>.
</t> </t>
</section> </section>
</section> </section>
<section anchor="vcard-jscontact-conversion"> <section anchor="vcard-jscontact-conversion">
<name>Converting vCard to JSContact</name> <name>Converting vCard to JSContact</name>
<t>This section contains the conversion rules from vCard to JSContact Card . It follows the same structure as the <xref target="RFC6350">vCard v4</xref>. Properties and parameters of vCard extension RFCs, including the <xref target=" I-D.ietf-calext-vcard-jscontact-extensions">vCard JSContact Extension</xref> are added to appropriate subsections.</t> <t>This section contains the conversion rules from the vCard to the JSCont act Card. It follows the same structure as vCard v4 <xref target="RFC6350"/>. Properties and parameters of vCard extension RFCs, including those described in "vCard Format Extension for JSContact" <xref target="RFC9554"/>, have been added to the appropriate subsections.</t>
<section> <section>
<name>General rules</name> <name>General Rules</name>
<section> <section>
<name>The <tt>uid</tt> property</name> <name>The Card uid Property</name>
<t>The UID property in vCard is optional, but the <tt>uid</tt> propert <t>The UID property (<xref target="RFC6350" derivedContent="RFC6350" s
y in JSContact is mandatory. Implementations that convert a vCard without UID p ection="6.7.6" sectionFormat="of"/>) in vCard is optional, but the Card object's
roperty <bcp14>MUST</bcp14> generate a unique identifier as a value for the <tt> uid property (<xref target="RFC9553" derivedContent="RFC9553" section="2.1.9" s
uid</tt> property. This value <bcp14>SHOULD</bcp14> be the same when converting ectionFormat="of"/>) is mandatory. Implementations that convert a vCard without
the same vCard multiple times, but how to achieve this is implementation-specif a UID property <bcp14>MUST</bcp14> generate a unique identifier as value for th
ic.</t> e uid property. This value <bcp14>SHOULD</bcp14> be the same when converting th
e same vCard multiple times, but how to achieve this is implementation-specific.
</t>
</section> </section>
<section> <section>
<name>Choosing identifiers</name> <name>Choosing Identifiers</name>
<t>Multivalued properties in JSContact typically are represented as a <t>Multivalued properties in JSContact are typically represented as a
JSON object where the object keys are of the <tt>Id</tt> type and the object val JSON object where the object keys are of the Id type (<xref target="RFC9553" der
ues are the converted vCard property. In absence of the PROP-ID parameter (see ivedContent="RFC9553" section="1.4.1" sectionFormat="of"/>) and the object value
<xref target="vcard-param-propid"/>), implementations are free to choose any ide s are the converted vCard property. In the absence of the PROP-ID parameter (se
ntifier for such entries. Whatever identifier generation scheme implementations e <xref target="vcard-param-propid"/>), implementations are free to choose any i
use, they <bcp14>MUST</bcp14> generate values that are valid according to the d dentifier as key for such entries. Whatever identifier generation scheme implem
efinition of the <tt>Id</tt> type in <xref target="I-D.ietf-calext-jscontact"/>. entations use, they <bcp14>MUST</bcp14> generate values that are valid according
For example, this could be an incrementing number across all <tt>Id</tt>s or o to the definition of the Id type in <xref target="RFC9553"/>. For example, thi
nly unique within one JSON object.</t> s could be an incrementing number across all identifier keys in the Card object
or only unique within one JSON object.</t>
</section> </section>
</section> </section>
<section anchor="vcard-types"> <section anchor="vcard-types">
<name>vCard Value Data Types</name> <name>vCard Value Data Types</name>
<section> <section>
<name>BOOLEAN</name> <name>BOOLEAN</name>
<t>This converts to the JSContact <tt>Boolean</tt> type.</t> <t>The BOOLEAN type (<xref target="RFC6350" derivedContent="RFC6350" s ection="4.4" sectionFormat="of"/>) converts to the JSContact Boolean type (<xref target="RFC9553" derivedContent="RFC9553" section="1.3.2" sectionFormat="of"/>) .</t>
</section> </section>
<section anchor="vcard-type-datetime"> <section anchor="vcard-type-datetime">
<name>DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP</name> <name>DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP</name>
<t>The TIMESTAMP type generally converts to the <tt>UTCDateTime</tt>. <t>The TIMESTAMP type (<xref target="RFC6350" derivedContent="RFC6350"
It converts to the <tt>Timestamp</tt> type for anniversaries.</t> section="4.3.5" sectionFormat="of"/>) converts to the UTCDateTime type (<xref t
<t>The DATE type converts to the <tt>PartialDate</tt> type, which only arget="RFC9553" derivedContent="RFC9553" section="1.4.5" sectionFormat="of"/>),
is relevant for anniversaries. This does not apply to DATE values that only de except for anniversaries. For anniversaries, it converts to the Timestamp type (
fine a month or a day.</t> <xref target="RFC9553" derivedContent="RFC9553" section="2.8.1" sectionFormat="o
<t>The TIME, DATE-TIME, DATE-AND-OR-TIME types and DATE type values th f"/>).</t>
at only define a month or day do not convert to a JSContact datetime type. Inst <t>The DATE type (<xref target="RFC6350" derivedContent="RFC6350" secti
ead, vCard properties or parameters having such values convert to the properties on="4.3.1" sectionFormat="of"/>) converts to a PartialDate object (<xref target=
defined in <xref target="new-jscontact"/>.</t> "RFC9553" derivedContent="RFC9553" section="2.8.1" sectionFormat="of"/>) when us
ed for an anniversary, unless the DATE value only contains a month or a day (but
not both).</t>
<t>The following temporal types do not convert to a JSContact datetime
type. Instead, vCard properties or parameters having such value types convert a
s defined in <xref target="new-jscontact"/>.</t>
<ul>
<li>TIME (<xref target="RFC6350" derivedContent="RFC6350" secti
on="4.3.2" sectionFormat="of"/>)</li>
<li>DATE-TIME (<xref target="RFC6350" derivedContent="RFC6350"
section="4.3.3" sectionFormat="of"/>)</li>
<li>DATE-AND-OR-TIME (<xref target="RFC6350" derivedContent="RF
C6350" section="4.3.4" sectionFormat="of"/>)</li>
<li>DATE type values that only define a month or day (but not b
oth)</li>
</ul>
</section> </section>
<section> <section>
<name>INTEGER</name> <name>INTEGER</name>
<t>This converts to the JSContact <tt>Int</tt> and <tt>UnsignedInt</tt > types.</t> <t>The INTEGER type (<xref target="RFC6350" derivedContent="RFC6350" s ection="4.5" sectionFormat="of"/>) converts to the JSContact Int and UnsignedInt types (<xref target="RFC9553" derivedContent="RFC9553" section="1.4.2" sectionF ormat="of"/>).</t>
</section> </section>
<section> <section>
<name>FLOAT</name> <name>FLOAT</name>
<t>This converts to the JSContact <tt>Number</tt> type.</t> <t>The FLOAT type (<xref target="RFC6350" derivedContent="RFC6350" sec tion="4.6" sectionFormat="of"/>) converts to the JSContact Number type (<xref ta rget="RFC9553" derivedContent="RFC9553" section="1.3.2" sectionFormat="of"/>).</ t>
</section> </section>
<section> <section>
<name>LANGUAGE-TAG</name> <name>LANGUAGE-TAG</name>
<t>This converts to the JSContact <tt>String</tt> type.</t> <t>The LANGUAGE-TAG type (<xref target="RFC6350" derivedContent="RFC63 50" section="4.8" sectionFormat="of"/>) converts to the JSContact String type (< xref target="RFC9553" derivedContent="RFC9553" section="1.3.2" sectionFormat="of "/>). The value <bcp14>MUST</bcp14> be a language tag as defined in <xref targe t="RFC5646"/>.</t>
</section> </section>
<section> <section>
<name>TEXT</name> <name>TEXT</name>
<t>This converts to the JSContact <tt>String</tt> type.</t> <t>The TEXT type (<xref target="RFC6350" derivedContent="RFC6350" sect ion="4.1" sectionFormat="of"/>) converts to the JSContact String type (<xref tar get="RFC9553" derivedContent="RFC9553" section="1.3.2" sectionFormat="of"/>).</t >
</section> </section>
<section> <section>
<name>URI</name> <name>URI</name>
<t>This converts to the JSContact <tt>String</tt> type.</t> <t>The URI type (<xref target="RFC6350" derivedContent="RFC6350" secti on="4.2" sectionFormat="of"/>) converts to the JSContact String type (<xref targ et="RFC9553" derivedContent="RFC9553" section="1.3.2" sectionFormat="of"/>). Th e value <bcp14>MUST</bcp14> be a URI as defined in <xref target="RFC3986" sectio nFormat="of" section="3"/></t>
</section> </section>
<section> <section>
<name>UTC-OFFSET</name> <name>UTC-OFFSET</name>
<t>This either converts to a <tt>String</tt> containing an IANA TimeZo ne Database entry name (see <xref target="vcard-prop-tz"/>), or it does not conv ert to any JSContact type. For the latter, vCard properties or parameters havin g such values <bcp14>MAY</bcp14> convert to JSContact as defined in <xref target ="new-jscontact"/>. </t> <t>The UTC-OFFSET type (<xref target="RFC6350" derivedContent="RFC6350 " section="4.7" sectionFormat="of"/>) either converts to a String value containi ng an IANA Time Zone Database entry name (see <xref target="vcard-prop-tz"/>) or does not convert to any JSContact type. For the latter, vCard properties or pa rameters having such values convert as defined in <xref target="new-jscontact"/> . </t>
</section> </section>
</section> </section>
<section anchor="vcard-parameters"> <section anchor="vcard-parameters">
<name>vCard Parameters</name> <name>vCard Parameters</name>
<t>This section contains the conversion rules for vCard parameters. A r ule typically only applies for specific vCard properties. To convert a vCard pa rameter on an arbitrary vCard property, see <xref target="jscontact-prop-vcardpa rams"/>.</t> <t>This section contains the conversion rules for vCard parameters. A r ule typically applies only for specific vCard properties. To convert a vCard pa rameter on an arbitrary vCard property, see <xref target="jscontact-prop-vcardpa rams"/>.</t>
<section anchor="vcard-param-altid"> <section anchor="vcard-param-altid">
<name>ALTID</name> <name>ALTID</name>
<t>This does not convert to an IANA-registered property in JSContact, but several conversion rules make use of this parameter to combine multiple vCar d properties into a single JSContact object instance. For an example of this se e <xref target="vcard-prop-adr"/>. To preserve the verbatim value of the ALTID parameter, set the JSContact properties defined in <xref target="new-jscontact"/ >.</t> <t>The ALTID parameter (<xref target="RFC6350" derivedContent="RFC6350 " section="5.4" sectionFormat="of"/>) does not convert to an IANA-registered pro perty in JSContact, but several conversion rules make use of this parameter to c ombine multiple vCard properties into a single JSContact object instance. For a n example of this, see <xref target="vcard-prop-adr"/>. To preserve the verbati m value of the ALTID parameter, set the JSContact properties defined in <xref ta rget="new-jscontact"/>.</t>
</section> </section>
<section anchor="vcard-param-author"> <section anchor="vcard-param-author">
<name>AUTHOR</name> <name>AUTHOR</name>
<t>The AUTHOR parameter value of a vCard NOTE property converts to the <t>The AUTHOR parameter (<xref target="RFC9554" derivedContent="RFC9554
<tt>uri</tt> property of the Author object for this note.</t> " section="4.1" sectionFormat="of"/>) on a NOTE property converts to the Author
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc object's uri property (<xref target="RFC9553" derivedContent="RFC9553" section="
ard-jscontact-extensions"/>.</t> 2.8.3" sectionFormat="of"/>). That Author object is set as the value of the Not
e object's author property (<xref target="RFC9553" derivedContent="RFC9553" sect
ion="2.8.3" sectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-author-name"> <section anchor="vcard-param-author-name">
<name>AUTHOR-NAME</name> <name>AUTHOR-NAME</name>
<t>The AUTHOR-NAME parameter value of a vCard NOTE property converts t <t>The AUTHOR-NAME parameter (<xref target="RFC9554" derivedContent="R
o the <tt>name</tt> property of the Author object for this note.</t> FC9554" section="4.2" sectionFormat="of"/>) on a NOTE property converts to the A
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc uthor object's name property (<xref target="RFC9553" derivedContent="RFC9553" se
ard-jscontact-extensions"/>.</t> ction="2.8.3" sectionFormat="of"/>). That Author object is set as the value of
the Note object's author property.</t>
</section> </section>
<section anchor="vcard-param-calscale"> <section anchor="vcard-param-calscale">
<name>CALSCALE</name> <name>CALSCALE</name>
<t>This parameter set on a BDAY, DEATHDATE or ANNIVERSARY property con <t>The CALSCALE parameter (<xref target="RFC6350" derivedContent="RFC6
verts to the <tt>calendarScale</tt> property of the <tt>PartialDate</tt> object 350" section="5.8" sectionFormat="of"/>) set on a BDAY, DEATHDATE, or ANNIVERSAR
type.</t> Y property converts to the PartialDate object's calendarScale property (<xref ta
rget="RFC9553" derivedContent="RFC9553" section="2.8.1" sectionFormat="of"/>).</
t>
</section>
<section anchor="vcard-param-cc">
<name>CC</name>
<t>The CC parameter (<xref target="RFC8605" derivedContent="RFC8605" s
ection="3.1" sectionFormat="of"/>) on an ADR property converts to the Address ob
ject's countryCode property (<xref target="RFC9553" derivedContent="RFC9553" sec
tion="2.5.1.1" sectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-created"> <section anchor="vcard-param-created">
<name>CREATED</name> <name>CREATED</name>
<t>The CREATED parameter value of a vCard NOTE property converts to th <t>The CREATED parameter (<xref target="RFC9554" derivedContent="RFC95
e <tt>created</tt> property of the Note object.</t> 54" section="4.3" sectionFormat="of"/>) on a NOTE property converts to the Note
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc object's created property (<xref target="RFC9553" derivedContent="RFC9553" secti
ard-jscontact-extensions"/>.</t> on="2.8.3" sectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-derived"> <section anchor="vcard-param-derived">
<name>DERIVED</name> <name>DERIVED</name>
<t>If this parameter is set to <tt>true</tt> on a vCard property, then implementations <bcp14>MAY</bcp14> choose to not convert that property. Note: This parameter is defined in <xref target="I-D.ietf-calext-vcard-jscontact-exten sions"/>.</t> <t>The DERIVED parameter (<xref target="RFC9554" derivedContent="RFC95 54" section="4.4" sectionFormat="of"/>) does not convert to JSContact. If the D ERIVED parameter is set to "true" on a vCard property, then implementations <bcp 14>MAY</bcp14> choose not to convert that property.</t>
</section> </section>
<section anchor="vcard-param-geo"> <section anchor="vcard-param-geo">
<name>GEO</name> <name>GEO</name>
<t>This parameter set on an ADR property converts to the JSContact <tt >coordinates</tt> property of the <tt>Address</tt> object that represents the vC ard ADR.</t> <t>The GEO parameter (<xref target="RFC6350" derivedContent="RFC6350" section="5.10" sectionFormat="of"/>) set on an ADR property converts to the Addr ess object's coordinates property (<xref target="RFC9553" derivedContent="RFC955 3" section="2.5.1.1" sectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-group"> <section anchor="vcard-param-group">
<name>GROUP</name> <name>GROUP</name>
<t>This parameter exclusively is for use in jCard (see <xref target="R <t>The GROUP parameter (<xref target="RFC7095" derivedContent="RFC7095
FC7095" section="7.1"/>). It <bcp14>MUST NOT</bcp14> be set in a vCard. Preser " section="7.1" sectionFormat="of"/>) does not convert to JSContact. It exclusi
ving the exact group name when converting from vCard to JSContact and back to vC vely is for use in jCard and <bcp14>MUST NOT</bcp14> be set in a vCard.</t>
ard is not necessary. Any group identifiers will do, as long as the resulting v <t>Preserving the exact group name when converting from vCard to JSContact and b
Card groups its properties equally to the original vCard. Implementations that ack to vCard is not necessary. Any group identifiers will do, as long as the re
still wish to preserve the exact property group name of a vCard property <bcp14 sulting vCard groups its properties equally to the original vCard. Implementati
>MAY</bcp14> set the <tt>group</tt> parameter in the JSContact properties <tt>vC ons that still wish to preserve the exact property group name of a vCard propert
ardProps</tt> or <tt>vCardParams</tt> defined in <xref target="new-jscontact"/>. y <bcp14>MAY</bcp14> set the jCard "group" parameter in the JSContact properties
</t> vCardProps or vCardParams as defined in <xref target="new-jscontact"/>.</t>
<figure anchor="group_conversion_params"> <figure anchor="group_conversion_params">
<name>An example how to preserve the group name in <tt>vCardParams</ <name>Example of How to Preserve the Group Name in vCardParams durin
tt> during conversion.</name> g Conversion</name>
<artwork><![CDATA[
item1.TEL;VALUE=uri:tel:+1-555-555-5555
<sourcecode type="text/plain"><![CDATA[
item1.TEL;VALUE=uri:tel:+1-555-555-5555
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"phones": { "phones": {
"p1": { "p1": {
"number": "tel:+1-555-555-5555", "number": "tel:+1-555-555-5555",
"vCardParams" : { "vCardParams" : {
"group" : "item1" "group" : "item1"
} }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<figure anchor="group_conversion_props"> <figure anchor="group_conversion_props">
<name>An example how to preserve the group name in <tt>vCardProps</t <name>Example of How to Preserve the Group Name in vCardProps during
t> during conversion.</name> Conversion</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
item2.X-FOO:bar item2.X-FOO:bar
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"vCardProps": [ "vCardProps": [
["x-foo", { ["x-foo", {
"group": "item2" "group": "item2"
}, "unknown", "bar"] }, "unknown", "bar"]
] ]
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-param-index"> <section anchor="vcard-param-index">
<name>INDEX</name> <name>INDEX</name>
<t>This parameter set on the EXPERTISE, HOBBY, INTEREST and ORG-DIRECT ORY properties defined in <xref target="RFC6715"/> converts to the JSContact <tt >listAs</tt> property of the <tt>PersonalInfo</tt> and <tt>Directory</tt> object s.</t> <t>The INDEX parameter (<xref target="RFC6715" derivedContent="RFC6715 " section="3.1" sectionFormat="of"/>) set on the EXPERTISE, HOBBY, INTEREST, and ORG-DIRECTORY properties converts to the PersonalInfo (<xref target="RFC9553" d erivedContent="RFC9553" section="2.8.4" sectionFormat="of"/>) and Directory (<xr ef target="RFC9553" derivedContent="RFC9553" section="2.6.2" sectionFormat="of"/ >) objects' listAs property.</t>
</section> </section>
<section anchor="vcard-param-language"> <section anchor="vcard-param-language">
<name>LANGUAGE</name> <name>LANGUAGE</name>
<t>This converts to an entry in the <tt>localizations</tt> property fo r the vCard property that this parameter is set on. The value of the LANGUAGE p arameter defines the language tag key in the <tt>localizations</tt> property.</t > <t>The LANGUAGE parameter (<xref target="RFC6350" derivedContent="RFC6 350" section="5.1" sectionFormat="of"/>) converts to an entry in the Card object 's localizations property (<xref target="RFC9553" derivedContent="RFC9553" secti on="2.7.1" sectionFormat="of"/>) for that vCard property on which this parameter is set on. The value of the LANGUAGE parameter defines the language tag key in the localizations property.</t>
<t>This specification does not define a single standard conversion rul e for how to convert the property values. Instead, building the localizations v alue is implementation-specific.</t> <t>This specification does not define a single standard conversion rul e for how to convert the property values. Instead, building the localizations v alue is implementation-specific.</t>
<t>Two options to populate the localizations property are:</t> <t>Two options to populate the localizations property are:</t>
<ul> <ul>
<li>One Patch Per Property: For each vCard property with a LANGUAGE parameter, set the complete path in the PatchObject to the JSContact property th at the vCard property converts to. The value of the patch is the converted prop erty value. This is simple to process and adequate if the vCard only contains a few properties with LANGUAGE parameter.</li> <li>One Patch per Property: For each vCard property with a LANGUAGE parameter, set the complete path in the PatchObject to the JSContact property th at the vCard property converts to. The value of the patch is the converted prop erty value. This is simple to process and adequate if the vCard only contains a few properties with the LANGUAGE parameter.</li>
<li>Bundle Patches by Parent: If a PatchObject contains multiple pat hs that have the same parent paths, then it might be possible to combine these p atches into one patch that patches the parent property. This is possible if the property in the Card is patched in its entirety.</li> <li>Bundle Patches by Parent: If a PatchObject contains multiple pat hs that have the same parent paths, then it might be possible to combine these p atches into one patch that patches the parent property. This is possible if the property in the Card is patched in its entirety.</li>
</ul> </ul>
<t>Generally, localizations only localize properties that are present in the non-localized version of this Card. <xref target="language-patch-dominan t-language"/> illustrates this.</t> <t>Generally, localizations only localize properties that are present in the non-localized version of this Card. <xref target="language-patch-dominan t-language"/> illustrates this.</t>
<figure anchor="language-patch-dominant-language"> <figure anchor="language-patch-dominant-language">
<name>LANGUAGE conversion example: one dominant language</name> <name>LANGUAGE Conversion Example: One Dominant Language</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
FN;LANGUAGE=EN:John Doe FN;LANGUAGE=EN:John Doe
TITLE;LANGUAGE=EN:Boss TITLE;ALTID=1;LANGUAGE=EN:Boss
TITLE;LANGUAGE=fr:Patron TITLE;ALTID=1;LANGUAGE=fr:Patron
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"language": "en", "language": "en",
"name": { "name": {
"full": "John Doe" "full": "John Doe"
}, },
"titles": { "titles": {
"t1": { "t1": {
"name": "Boss" "name": "Boss"
} }
}, },
"localizations": { "localizations": {
"fr": { "fr": {
"titles/t1/name": "Patron" "titles/t1/name": "Patron"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>As a special case, if one or more vCard properties of the same type do not have the LANGUAGE parameter set, then choose them to the non-localized C ard. Convert any with LANGUAGE parameters to the localizations property. <xref target="language-patch-no-language"/> illustrates this.</t> <t>As a special case, if one or more vCard properties of the same type do not have the LANGUAGE parameter set, add them to the non-localized Card. Co nvert any with LANGUAGE parameters to the localizations property. <xref target= "language-patch-no-language"/> illustrates this.</t>
<figure anchor="language-patch-no-language"> <figure anchor="language-patch-no-language">
<name>LANGUAGE conversion example: property without language</name> <name>LANGUAGE Conversion Example: Property without Language</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
FN:John Doe FN:John Doe
TITLE:Boss TITLE;ALTID=1:Boss
TITLE;LANGUAGE=fr:Patron TITLE;ALTID=1;LANGUAGE=fr:Patron
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"name": { "name": {
"full": "John Doe" "full": "John Doe"
}, },
"titles": { "titles": {
"t1": { "t1": {
"name": "Boss" "name": "Boss"
} }
}, },
"localizations": { "localizations": {
"fr": { "fr": {
"titles/t1/name": "Patron" "titles/t1/name": "Patron"
} }
} }
]]></artwork> ]]></sourcecode>
</figure>
<t>As the least preferred option, <xref target="language-patch-no-domi
nant"/> illustrates how all vCard properties of the same type have the LANGUAGE
parameter set, but none of their language tags match the language of the main Ca
rd. In this case, implementations <bcp14>MAY</bcp14> choose to add the localize
d vCard properties only to the localizations object.</t>
<t>The following example uses non-ASCII characters to demonstrate mult
ilingual content. The ASCII-formatted version of this specification might not s
how the correct characters. Please refer to the HTML or PDF versions instead.</
t>
<figure anchor="language-patch-no-dominant">
<name>LANGUAGE conversion example: conflicting LANGUAGE property and
parameter values</name>
<artwork><![CDATA[
LANGUAGE:es
FN:Gabriel García Márquez
TITLE;LANGUAGE=en:Boss
TITLE;LANGUAGE=fr:Patron
"language": "es",
"name" {
"full": "Gabriel García Márquez"
},
"localizations": {
"en": {
"titles": {
"t1": {
"name": "Novelist"
}
},
"fr": {
"titles": {
"t1": {
"name": "Écrivain"
}
}
}
]]></artwork>
</figure> </figure>
</section> </section>
<section anchor="vcard-param-label">
<name>LABEL</name>
<t>The LABEL parameter (<xref target="RFC6350" derivedContent="RFC6350
" section="6.3.1" sectionFormat="of"/>) on an ADR property converts to the Addre
ss object's full property (<xref target="RFC9553" derivedContent="RFC9553" secti
on="2.5.1.1" sectionFormat="of"/>).</t>
</section>
<section anchor="vcard-param-level"> <section anchor="vcard-param-level">
<name>LEVEL</name> <name>LEVEL</name>
<t>The LEVEL parameter <xref target="RFC6715"/> converts to the <tt>le vel</tt> property of the <tt>PersonalInfo</tt> type. If this parameter is set o n the EXPERTISE property, then its values convert as: <t>The LEVEL parameter (<xref target="RFC6715" derivedContent="RFC6715 " section="3.2" sectionFormat="of"/>) converts to the PersonalInfo object's leve l property (<xref target="RFC9553" derivedContent="RFC9553" section="2.8.4" sect ionFormat="of"/>). If this parameter is set on the EXPERTISE property, then its values convert as follows:
</t> </t>
<ul spacing="compact"> <ul spacing="compact">
<li>"beginner" converts to "low";</li> <li>"beginner" converts to "low";</li>
<li>"average" converts to "medium";</li> <li>"average" converts to "medium"; and</li>
<li>"expert" converts to "high".</li> <li>"expert" converts to "high".</li>
</ul> </ul>
<t>In all other cases the values convert verbatim, but lowercase <bcp1 4>MUST</bcp14> be used for the JSContact value.</t> <t>In all other cases, the values convert verbatim, but lowercase <bcp 14>MUST</bcp14> be used for the JSContact value.</t>
</section> </section>
<section anchor="vcard-param-mediatype"> <section anchor="vcard-param-mediatype">
<name>MEDIATYPE</name> <name>MEDIATYPE</name>
<t>This converts to the <tt>mediaType</tt> property of the <tt>Resourc e</tt> object type.</t> <t>The MEDIATYPE parameter (<xref target="RFC6350" derivedContent="RFC 6350" section="5.7" sectionFormat="of"/>) converts to the Resource object's medi aType property (<xref target="RFC9553" derivedContent="RFC9553" section="1.4.4" sectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-phonetic"> <section anchor="vcard-param-phonetic">
<name>PHONETIC</name> <name>PHONETIC</name>
<t>This parameter as well as the <xref target="vcard-param-script">SCR <t>The PHONETIC parameter (<xref target="RFC9554" derivedContent="RFC95
IPT</xref> parameter set on a N or ADR property convert to JSContact as follows: 54" section="4.6" sectionFormat="of"/>) converts to the Name (<xref target="RFC9
</t> 553" derivedContent="RFC9553" section="2.2.1" sectionFormat="of"/>) and Address
<t>the values of the <tt>phonetic</tt>, <tt>phoneticScript</tt> and <t (<xref target="RFC9553" derivedContent="RFC9553" section="2.5.1" sectionFormat="
t>phoneticSystem</tt> properties of the NameComponent and Name or AddressCompone of"/>) objects' phoneticSystem property unless the parameter value is "script",
nt and Address object types, respectively.</t> in which case the phoneticSystem property is not set.</t>
<t>The value of the SCRIPT parameter converts to the phoneticScript pro
perty (see <xref target="vcard-param-script"/>).</t>
<t>The related N or ADR property is defined by the vCard ALTID paramet er. The conversion rules for the <xref target="vcard-prop-n">N</xref> and <xref target="vcard-prop-adr">ADR</xref> properties define how the vCard components co nvert to JSContact.</t> <t>The related N or ADR property is defined by the vCard ALTID paramet er. The conversion rules for the <xref target="vcard-prop-n">N</xref> and <xref target="vcard-prop-adr">ADR</xref> properties define how the vCard components co nvert to JSContact.</t>
<t>The value of the PHONETIC parameter converts to the <tt>phoneticSys <t>The component values of the property on which the PHONETIC paramete
tem</tt> property unless it is <tt>script</tt>, in which case the <tt>phoneticSy r is set convert to the respective NameComponent or AddressComponent objects' ph
stem</tt> property is not set. The value of the SCRIPT parameter converts to th onetic properties.</t>
e <tt>phoneticScript</tt> property.</t> <t>If more than one property has the PHONETIC parameter set and relate
<t>The values of the components in the property value convert to value s to the same property, then they convert to the Card object's localizations pro
s the <tt>phonetic</tt> properties for the respective NameComponent or AddressCo perty according to their LANGUAGE parameter values as outlined in <xref target="
mponent.</t> vcard-param-language"/>.</t>
<t>If more than one property having the PHONETIC parameter set relates
to the same property, then they convert to the Card <tt>localizations</tt> prop
erty according their LANGUAGE parameter values as outlined in <xref target="vcar
d-param-language"/>.</t>
<figure anchor="phonetic_conversion"> <figure anchor="phonetic_conversion">
<name>PHONETIC conversion example</name> <name>PHONETIC Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
LANGUAGE=zh-Hant LANGUAGE=zh-Hant
N;ALTID=1;LANGUAGE=zh-Hant:孫;中山;文,逸仙;; N;ALTID=1;LANGUAGE=zh-Hant:孫;中山;文,逸仙;;
N;ALTID=1;PHONETIC=jyut; N;ALTID=1;PHONETIC=jyut;
SCRIPT=Latn;LANGUAGE=yue:syun1;zung1saan1;man4,jat6sin1;; SCRIPT=Latn;LANGUAGE=yue:syun1;zung1saan1;man4,jat6sin1;;
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"language": "zh-Hant", "language": "zh-Hant",
"name": { "name": {
"components": [ "components": [
{ "kind": "surname", "value": "孫" }, { "kind": "surname", "value": "孫" },
{ "kind": "given", "value": "中山" }, { "kind": "given", "value": "中山" },
{ "kind": "given2", "value": "文" }, { "kind": "given2", "value": "文" },
{ "kind": "given2", "value": "逸仙" } { "kind": "given2", "value": "逸仙" }
] ]
}, },
"localizations": { "localizations": {
"yue": { "yue": {
"name/phoneticSystem": "jyut", "name/phoneticSystem": "jyut",
"name/phoneticScript": "Latn", "name/phoneticScript": "Latn",
"name/components/0/phonetic": "syun1", "name/components/0/phonetic": "syun1",
"name/components/1/phonetic": "zung1saan1", "name/components/1/phonetic": "zung1saan1",
"name/components/2/phonetic": "man4", "name/components/2/phonetic": "man4",
"name/components/3/phonetic": "jat6sin1" "name/components/3/phonetic": "jat6sin1"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-param-pid"> <section anchor="vcard-param-pid">
<name>PID</name> <name>PID</name>
<t>This converts to an entry in the <tt>vCardParams</tt> property, see <xref target="jscontact-prop-vcardparams"/>.</t> <t>The PID parameter (<xref target="RFC6350" derivedContent="RFC6350" section="5.5" sectionFormat="of"/>) converts to the vCardParams property; see <x ref target="jscontact-prop-vcardparams"/>.</t>
</section> </section>
<section anchor="vcard-param-pref"> <section anchor="vcard-param-pref">
<name>PREF</name> <name>PREF</name>
<t>This converts to the <tt>pref</tt> property.</t> <t>The PREF parameter (<xref target="RFC6350" derivedContent="RFC6350" section="5.3" sectionFormat="of"/>) converts to the pref property of the derive d JSContact object.</t>
</section> </section>
<section anchor="vcard-param-propid"> <section anchor="vcard-param-propid">
<name>PROP-ID</name> <name>PROP-ID</name>
<t>The PROP-ID parameter value of a vCard property converts to the <tt >Id</tt> of the JSContact property to which the vCard property converts.</t> <t>The PROP-ID parameter (<xref target="RFC9554" derivedContent="RFC955 4" section="4.7" sectionFormat="of"/>) converts to the Id-typed key of the deriv ed JSContact object.</t>
<figure anchor="propid_conversion"> <figure anchor="propid_conversion">
<name>PROP-ID conversion example</name> <name>PROP-ID Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
TEL;PROP-ID=PHONE-A;VALUE=uri;PREF=1;TYPE="voice,home" TEL;PROP-ID=PHONE-A;VALUE=uri;PREF=1;TYPE="voice,home"
:tel:+1-555-555-5555;ext=5555 :tel:+1-555-555-5555;ext=5555
TEL;PROP-ID=PHONE-B;VALUE=uri;TYPE=home TEL;PROP-ID=PHONE-B;VALUE=uri;TYPE=home
:tel:+33-01-23-45-67 :tel:+33-01-23-45-67
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"phones": { "phones": {
"PHONE-A": { "PHONE-A": {
"contexts": { "private": true }, "contexts": { "private": true },
"features": { "voice": true }, "features": { "voice": true },
"number": "tel:+1-555-555-5555;ext=5555", "number": "tel:+1-555-555-5555;ext=5555",
"pref": 1 "pref": 1
}, },
"PHONE-B": { "PHONE-B": {
"contexts": { "private": true }, "contexts": { "private": true },
"number": "tel:+33-01-23-45-67" "number": "tel:+33-01-23-45-67"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc ard-jscontact-extensions"/>.</t>
</section> </section>
<section anchor="vcard-param-script"> <section anchor="vcard-param-script">
<name>SCRIPT</name> <name>SCRIPT</name>
<t>See <xref target="vcard-param-phonetic"/>.</t> <t>The SCRIPT parameter (<xref target="RFC9554" derivedContent="RFC955
4" section="4.8" sectionFormat="of"/>) converts to the Name (<xref target="RFC95
53" derivedContent="RFC9553" section="2.2.1" sectionFormat="of"/>) or Address (<
xref target="RFC9553" derivedContent="RFC9553" section="2.5.1" sectionFormat="of
"/>) objects' phoneticScript property.</t>
<t>Also see <xref target="vcard-param-phonetic"/>.</t>
</section> </section>
<section anchor="vcard-param-service-type"> <section anchor="vcard-param-service-type">
<name>SERVICE-TYPE</name> <name>SERVICE-TYPE</name>
<t>This converts to the <tt>service</tt> property of the <tt>OnlineSer vice</tt> object type. Note: This parameter is defined in <xref target="I-D.iet f-calext-vcard-jscontact-extensions"/>.</t> <t>The SERVICE-TYPE parameter (<xref target="RFC9554" derivedContent="R FC9554" section="4.9" sectionFormat="of"/>) converts to the OnlineService object 's service property (<xref target="RFC9553" derivedContent="RFC9553" section="2. 3.2" sectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-sortas"> <section anchor="vcard-param-sortas">
<name>SORT-AS</name> <name>SORT-AS</name>
<t>This converts to the <tt>sortAs</tt> properties defined for the <tt >Name</tt>, <tt>Organization</tt> and <tt>OrgUnit</tt> object types.</t> <t>The SORT-AS parameter (<xref target="RFC6350" derivedContent="RFC63 50" section="5.9" sectionFormat="of"/>) converts to the Name, Organization, and OrgUnit objects' sortAs properties.</t>
</section> </section>
<section anchor="vcard-param-type"> <section anchor="vcard-param-type">
<name>TYPE</name> <name>TYPE</name>
<t>This converts to the <tt>contexts</tt> property as well as property
-specific <tt>kind</tt> property values defined in later sections. If not specif <t>The TYPE parameter (<xref target="RFC6350" derivedContent="RFC6350"
ied otherwise for a specific JSContact property, the vCard <tt>home</tt> and <tt section="5.6" sectionFormat="of"/>) converts to either the contexts property or
>work</tt> parameter values convert to the JSContact <tt>private</tt> and <tt>wo the kind property, as defined in later sections. If not otherwise specified, th
rk</tt> contexts, respectively.</t> e vCard "home" and "work" parameter values convert to the JSContact "private" an
d "work" contexts, respectively.</t>
</section> </section>
<section anchor="vcard-param-tz"> <section anchor="vcard-param-tz">
<name>TZ</name> <name>TZ</name>
<t>This parameter set on an ADR property converts to the JSContact <tt >timeZone</tt> property of the <tt>Address</tt> object that represents the vCard ADR. Also see the conversion of the TZ property in <xref target="vcard-prop-tz "/>.</t> <t>The TZ parameter (<xref target="RFC6350" derivedContent="RFC6350" s ection="5.11" sectionFormat="of"/>) on an ADR property converts to the Address o bject's timeZone property (<xref target="RFC9553" derivedContent="RFC9553" secti on="2.5.1.1" sectionFormat="of"/>). Also see the conversion of the TZ property in <xref target="vcard-prop-tz"/>.</t>
</section> </section>
<section anchor="vcard-param-username"> <section anchor="vcard-param-username">
<name>USERNAME</name> <name>USERNAME</name>
<t>This converts to the <tt>user</tt> property of the <tt>OnlineServic e</tt> object type. Note: This parameter is defined in <xref target="I-D.ietf-c alext-vcard-jscontact-extensions"/>.</t> <t>The USERNAME parameter (<xref target="RFC9554" derivedContent="RFC95 54" section="4.10" sectionFormat="of"/>) converts to the OnlineService object's user property (<xref target="RFC9553" derivedContent="RFC9553" section="2.3.2" s ectionFormat="of"/>).</t>
</section> </section>
<section anchor="vcard-param-value"> <section anchor="vcard-param-value">
<name>VALUE</name> <name>VALUE</name>
<t>This does not convert to an IANA-registered property in JSContact. To preserve properties with experimental values, see <xref target="jscontact-pr op-vcardparams"/> and <xref target="jscontact-prop-vcardprops"/>.</t> <t>The VALUE parameter (<xref target="RFC6350" derivedContent="RFC6350 " section="5.2" sectionFormat="of"/>) does not convert to an IANA-registered pro perty in JSContact. To preserve properties with experimental values, see Sectio ns <xref target="jscontact-prop-vcardprops" format="counter"/> and <xref target= "jscontact-prop-vcardparams" format="counter"/>.</t>
</section> </section>
</section> </section>
<section> <section>
<name>General Properties</name> <name>General Properties</name>
<section> <section>
<name>BEGIN and END</name> <name>BEGIN and END</name>
<t>These do not convert to IANA-registered properties in JSContact.</t > <t>The BEGIN and END properties do not convert to IANA-registered prop erties in JSContact.</t>
</section> </section>
<section anchor="vcard-prop-kind"> <section anchor="vcard-prop-kind">
<name>KIND</name> <name>KIND</name>
<t>The KIND property converts to the <tt>kind</tt> property (<xref tar get="kind_conversion"/>). Allowed values are those described in Section 6.1.4 o f <xref target="RFC6350"/> and extended with the values declared in <xref target ="RFC6473"/> and <xref target="RFC6869"/>.</t> <t>The KIND property (<xref target="RFC6350" derivedContent="RFC6350" section="6.1.4" sectionFormat="of"/>) converts to the kind property (<xref targe t="kind_conversion"/>). Allowed values are those described in <xref target="RFC 6350" sectionFormat="of" section="6.1.4"/> and extended with the values declared in <xref target="RFC6473"/> and <xref target="RFC6869"/>.</t>
<figure anchor="kind_conversion"> <figure anchor="kind_conversion">
<name>KIND conversion example</name> <name>KIND Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
KIND:individual KIND:individual
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"kind": "individual" "kind": "individual"
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-source"> <section anchor="vcard-prop-source">
<name>SOURCE</name> <name>SOURCE</name>
<t>The SOURCE property converts to a Directory object in the <tt>direc <t>The SOURCE property (<xref target="RFC6350" derivedContent="RFC6350
tories</tt> property (<xref target="source_conversion"/>). The <tt>kind</tt> pr " section="6.1.3" sectionFormat="of"/>) converts to a Directory object (<xref ta
operty is set to <tt>entry</tt>. The <tt>uri</tt> property is set to the SOURCE rget="RFC9553" derivedContent="RFC9553" section="2.6.2" sectionFormat="of"/>) in
property value.</t> the Card object's directories property (<xref target="source_conversion"/>). T
<t>The PREF and MEDIATYPE parameters convert according to the rules as he Directory object's kind property is set to "entry". The uri property is set
defined in <xref target="vcard-parameters"/>.</t> to the SOURCE property value.</t>
<t>The PREF and MEDIATYPE parameters convert according to the rules de
fined in <xref target="vcard-parameters"/>.</t>
<figure anchor="source_conversion"> <figure anchor="source_conversion">
<name>SOURCE conversion example</name> <name>SOURCE Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
SOURCE:https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf SOURCE:https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"directories": { "directories": {
"ENTRY-1": { "ENTRY-1": {
"kind": "entry", "kind": "entry",
"uri": "https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf" "uri": "https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-xml"> <section anchor="vcard-prop-xml">
<name>XML</name> <name>XML</name>
<t>This converts to an entry in the <tt>vCardProps</tt> property, see <xref target="jscontact-prop-vcardprops"/>.</t> <t>The XML property (<xref target="RFC6350" derivedContent="RFC6350" s ection="6.1.5" sectionFormat="of"/>) converts to the vCardProps property; see <x ref target="jscontact-prop-vcardprops"/>.</t>
</section> </section>
</section> </section>
<section> <section>
<name>Identification Properties</name> <name>Identification Properties</name>
<section anchor="vcard-prop-anniversary"> <section anchor="vcard-prop-anniversary">
<name>BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY</name> <name>ANNIVERSARY, BDAY, BIRTHPLACE, DEATHDATE, and DEATHPLACE</name>
<t>The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE, <t>The following properties all convert to Anniversary objects in the Car
DEATHDATE, DEATHPLACE described in <xref target="RFC6474"/> are represented as < d object's anniversaries property (<xref target="anniversary_conversion"/>):</t>
tt>Anniversary</tt> objects included in the <tt>anniversaries</tt> property (<xr <ul spacing="compact">
ef target="anniversary_conversion"/>):</t> <li>ANNIVERSARY (<xref target="RFC6350" derivedContent="R
<ul spacing="compact"> FC6350" section="6.2.6" sectionFormat="of"/>)</li>
<li> <li>BDAY (<xref target="RFC6350" derivedContent="RFC6350"
<t>BDAY and BIRTHPLACE convert to <tt>date</tt> and <tt>place</tt> section="6.2.5" sectionFormat="of"/>)</li>
where <tt>kind</tt> is set to "birth";</t> <li>BIRTHPLACE (<xref target="RFC6474" derivedContent="RF
<t/> C6474" section="2.1" sectionFormat="of"/>)</li>
</li> <li>DEATHDATE (<xref target="RFC6474" derivedContent="RFC
<li> 6474" section="2.3" sectionFormat="of"/>)</li>
<t>DEATHDATE and DEATHPLACE convert to <tt>date</tt> and <tt>place <li>DEATHPLACE (<xref target="RFC6474" derivedContent="RF
</tt> where <tt>kind</tt> is set to "death";</t> C6474" section="2.2" sectionFormat="of"/>)</li>
<t/> </ul>
</li>
<li>ANNIVERSARY converts to <tt>date</tt> where <tt>kind</tt> is "we <t>BDAY and BIRTHPLACE convert to an Anniversary object (<xref targe
dding".</li> t="RFC9553" derivedContent="RFC9553" section="2.8.1" sectionFormat="of"/>) havin
</ul> g the date and place properties set. The kind poperty is set to "birth".
<t>Both birth and death places are represented as instances of the <tt </t>
>Address</tt> object.</t> <t>DEATHDATE and DEATHPLACE convert to an Anniversary object having
<t>The BIRTHPLACE and DEATHPLACE properties that are represented as ge the date and place properties set. The Anniversary object's kind property is se
o URIs convert to <tt>Address</tt> instances including only the <tt>coordinates< t to "death".
/tt> property. If the URI value is not a geo URI, the place is ignored.</t> </t>
<t>The ALTID and LANGUAGE parameters of both BIRTHPLACE and DEATHPLACE <t>ANNIVERSARY converts to the Anniversary object's date property.
properties convert according to the rules as defined in <xref target="vcard-par The Anniversary object's kind property is set to "wedding".</t>
ameters"/>.</t> <t>If the BIRTHPLACE or DEATHPLACE property value is of type URI using
the "geo:" URI scheme, then it converts to the Address object's coordinates pro
perty. If the value type is TEXT, then it converts to the Address object's full
property. Otherwise, it converts to the vCardProps property; see <xref target=
"jscontact-prop-vcardprops"/>.</t>
<t>The ALTID and LANGUAGE parameters of both the BIRTHPLACE and DEATHP
LACE properties convert according to the rules defined in <xref target="vcard-pa
rameters"/>.</t>
<figure anchor="anniversary_conversion"> <figure anchor="anniversary_conversion">
<name>BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY conversio <name>ANNIVERSARY, BDAY, BIRTHPLACE, DEATHDATE, and DEATHPLACE Conve
n example</name> rsion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
BDAY:19531015T231000Z BDAY:19531015T231000Z
BIRTHPLACE: BIRTHPLACE:
123 Main Street\nAny Town, CA 91921-1234\nU.S.A. 123 Main Street\nAny Town, CA 91921-1234\nU.S.A.
DEATHDATE:19960415 DEATHDATE:19960415
DEATHPLACE: DEATHPLACE:
5 Court Street\nNew England, ND 58647\nU.S.A. 5 Court Street\nNew England, ND 58647\nU.S.A.
ANNIVERSARY:19860201 ANNIVERSARY:19860201
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"anniversaries": { "anniversaries": {
"ANNIVERSARY-1" : { "ANNIVERSARY-1" : {
"kind": "birth", "kind": "birth",
"date": { "date": {
"@type": "Timestamp", "@type": "Timestamp",
"utc": "1953-10-15T23:10:00Z" "utc": "1953-10-15T23:10:00Z"
}, },
"place": { "place": {
"full": "full":
"123 Main Street\nAny Town, CA 91921-1234\nU.S.A." "123 Main Street\nAny Town, CA 91921-1234\nU.S.A."
skipping to change at line 505 skipping to change at line 494
}, },
"ANNIVERSARY-3" : { "ANNIVERSARY-3" : {
"kind": "wedding", "kind": "wedding",
"date": { "date": {
"year": 1986, "year": 1986,
"month": 2, "month": 2,
"day": 1 "day": 1
} }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-fn"> <section anchor="vcard-prop-fn">
<name>FN</name> <name>FN</name>
<t>The FN property converts to the Name object in the <tt>name</tt> pr operty. Its value converts to the Name object <tt>full</tt> property (<xref tar get="fn_conversion"/>). If the LANGUAGE parameter is set, then the FN property converts as outlined in <xref target="vcard-param-language"/>. In the unexpecte d case that the vCard contains more than one FN property without LANGUAGE parame ter, then convert the FN property that has the least parameters set to the <tt>f ull</tt> property. If multiple such FN properties are present, choose any of th em. All other FN properties convert to the <xref target="jscontact-prop-vcardpr ops"><tt>vCardProps</tt></xref> property.</t> <t>The FN property (<xref target="RFC6350" derivedContent="RFC6350" se ction="6.2.1" sectionFormat="of"/>) converts to the Name object's full property (<xref target="fn_conversion"/>). If the LANGUAGE parameter is set, then the FN property converts as outlined in <xref target="vcard-param-language"/>. In the unexpected case where the vCard contains more than one FN property without the LANGUAGE parameter, convert the FN property that has the least parameters. If m ultiple such FN properties are present, choose any of them. All other FN proper ties convert to the <xref target="jscontact-prop-vcardprops">vCardProps</xref> p roperty.</t>
<figure anchor="fn_conversion"> <figure anchor="fn_conversion">
<name>FN conversion example</name> <name>FN Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
FN:John Q. Public, Esq. FN:John Q. Public, Esq.
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"name": { "name": {
"full": "John Q. Public, Esq.", "full": "John Q. Public, Esq."
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-gender"> <section anchor="vcard-prop-gender">
<name>GENDER</name> <name>GENDER</name>
<t>This does not map to an IANA-registered property in JSContact. To convert this property, see <xref target="jscontact-prop-vcardprops"/>. Note the alternative JSContact <tt>speakToAs</tt> property which defines how to address and refer to an individual represented by the card, as do the newly defined vCar d GRAMGENDER and PRONOUNS properties of <xref target="I-D.ietf-calext-vcard-jsco ntact-extensions"/>.</t> <t>The GENDER property (<xref target="RFC6350" derivedContent="RFC6350 " section="6.2.7" sectionFormat="of"/>) does not convert to an IANA-registered p roperty in JSContact. To convert this property, see <xref target="jscontact-pro p-vcardprops"/>. Alternatively, the Card object's speakToAs property defines ho w to address and refer to an individual represented by the Card, as do the newly defined vCard GRAMGENDER and PRONOUNS properties of <xref target="RFC9554"/>.</ t>
</section> </section>
<section anchor="vcard-prop-gramgender"> <section anchor="vcard-prop-gramgender">
<name>GRAMGENDER and PRONOUNS</name> <name>GRAMGENDER and PRONOUNS</name>
<t>The GRAMGENDER property converts to the <tt>grammaticalGender</tt> <t>The GRAMGENDER property (<xref target="RFC9554" derivedContent="RFC
property of the <tt>SpeakToAs</tt> object (<xref target="grammatical_gender_pron 9554" section="3.2" sectionFormat="of"/>) converts to the SpeakToAs object's gra
ouns_conversion"/>).</t> mmaticalGender property (<xref target="grammatical_gender_pronouns_conversion"/>
<t>The PRONOUNS property converts to an entry in the <tt>pronouns</tt> ).</t>
property of the <tt>SpeakToAs</tt> object (<xref target="grammatical_gender_pro <t>The PRONOUNS property (<xref target="RFC9554" derivedContent="RFC95
nouns_conversion"/>).</t> 54" section="3.4" sectionFormat="of"/>) converts to the SpeakToAs object's prono
uns property (<xref target="grammatical_gender_pronouns_conversion"/>).</t>
<figure anchor="grammatical_gender_pronouns_conversion"> <figure anchor="grammatical_gender_pronouns_conversion">
<name>GRAMGENDER and PRONOUNS conversion example</name> <name>GRAMGENDER and PRONOUNS Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
GRAMGENDER:NEUTER GRAMGENDER:NEUTER
PRONOUNS;PREF=2:they/them PRONOUNS;PREF=2:they/them
PRONOUNS;PREF=1:xe/xir PRONOUNS;PREF=1:xe/xir
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"speakToAs": { "speakToAs": {
"grammaticalGender": "neuter", "grammaticalGender": "neuter",
"pronouns": { "pronouns": {
"PRONOUNS-1": { "PRONOUNS-1": {
"pronouns": "they/them", "pronouns": "they/them",
"pref": 2 "pref": 2
}, },
"PRONOUNS-2": { "PRONOUNS-2": {
"pronouns": "xe/xir", "pronouns": "xe/xir",
"pref": 1 "pref": 1
} }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-n"> <section anchor="vcard-prop-n">
<name>N</name> <name>N</name>
<t>The N property converts to the Name object in the <tt>name</tt> pro <t>The N property (<xref target="RFC6350" derivedContent="RFC6350" sec
perty. Each component in the N property structured value converts to a NameComp tion="6.2.2" sectionFormat="of"/>) converts to a Name object (<xref target="RFC9
onent in the Name <tt>components</tt> property. The following table shows this 553" derivedContent="RFC9553" section="2.2.1" sectionFormat="of"/>) in the Card
relation:</t> object's name property.
Each component in the N property structured value converts to a NameCom
ponent in the Name object's components property. The following table shows this
relation:</t>
<table anchor="n_kind_conversion"> <table anchor="n_kind_conversion">
<name>N components conversion</name> <name>N Components Conversion</name>
<thead> <thead>
<tr> <tr>
<th align="left">N component</th> <th align="left">N component</th>
<th align="left">NameComponent kind</th> <th align="left">NameComponent kind</th>
<th align="left">Remarks</th> <th align="left">Remarks</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td align="left">Family name</td> <td align="left">Family name</td>
<td align="left">surname</td> <td align="left">surname</td>
<td align="left">To vCard: add any <tt>surname2</tt> NameCompone nt value in here, after all <tt>surname</tt> values.<br/>From vCard: ignore any value that also occurs in the Secondary surname component.</td> <td align="left">To vCard: add any "surname2" NameComponent to t he Family name component, after all "surname" values.<br/>From vCard: ignore any value that also occurs in the Secondary surname component.</td>
</tr> </tr>
<tr> <tr>
<td align="left">Given name</td> <td align="left">Given name</td>
<td align="left">given</td> <td align="left">given</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">Additional name</td> <td align="left">Additional name</td>
<td align="left">given2</td> <td align="left">given2</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">Honorific prefix</td> <td align="left">Honorific prefix</td>
<td align="left">title</td> <td align="left">title</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">Honorific suffix</td> <td align="left">Honorific suffix</td>
<td align="left">credential</td> <td align="left">credential</td>
<td align="left">To vCard: add any <tt>generation</tt> NameCompo nent value also in here.<br/>From vCard: ignore any value that also occurs in th e Generation component.</td> <td align="left">To vCard: add any "generation" NameComponent to the Honorific suffix component.<br/>From vCard: ignore any value that also occu rs in the Generation component.</td>
</tr> </tr>
<tr> <tr>
<td align="left">Secondary surname</td> <td align="left">Secondary surname</td>
<td align="left">surname2</td> <td align="left">surname2</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">Generation</td> <td align="left">Generation</td>
<td align="left">generation</td> <td align="left">generation</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t>If the <xref target="vcard-param-jscomps">JSCOMPS</xref> parameter <t>If the <xref target="vcard-param-jscomps">JSCOMPS</xref> parameter
is set, then the Name <tt>isOrdered</tt> property value is "true", and the <tt>d is set, then the Name object's isOrdered property value is "true", and the defau
efaultSeparator</tt> and any separator name components are set according to the ltSeparator property and any "separator" NameComponent objects are set according
parameter value. The <tt>components</tt> list <bcp14>MUST</bcp14> adhere to the to the parameter value. The order in the components property <bcp14>MUST</bcp1
order of the JSCOMPS parameter value.</t> 4> adhere to the order of the JSCOMPS parameter value.</t>
<t>If the JSCOMPS parameter is not set, then the Name <tt>isOrdered</t <t>If the JSCOMPS parameter is not set, then the Name object's isOrder
t> property value is "false" and the <tt>defaultSeparator</tt> property <bcp14>M ed property value is "false", and the defaultSeparator property <bcp14>MUST NOT<
UST NOT</bcp14> be set. The <tt>components</tt> list <bcp14>MUST</bcp14> follow /bcp14> be set. The order in the components property <bcp14>MUST</bcp14> follow
the order of values in the N structured value when read from left to right.</t> the order of values in the N structured value when read from left to right.</t>
<t>If the SORT-AS parameter is set, then its structured value converts <t>If the SORT-AS parameter is set, then its structured value converts
to the Name <tt>sortAs</tt> property according to <xref target="n_kind_conversi to the Name object's sortAs property according to <xref target="n_kind_conversi
on"/>. An empty or non-existent component value indicates that no sort is defin on"/>. An empty or non-existent component value indicates that no sort is defin
ed for this kind.</t> ed for this kind.</t>
<figure anchor="n_conversion"> <figure anchor="n_conversion">
<name>N conversion example</name> <name>N Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
N;SORT-AS="Stevenson,John Philip":Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P. N;SORT-AS="Stevenson,John Philip":
;;Jr. Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.;;Jr.
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"name": { "name": {
"components":[ "components":[
{ "kind": "surname", "value": "Stevenson" }, { "kind": "surname", "value": "Stevenson" },
{ "kind": "given", "value": "John" }, { "kind": "given", "value": "John" },
{ "kind": "given2", "value": "Philip" }, { "kind": "given2", "value": "Philip" },
{ "kind": "given2", "value": "Paul" }, { "kind": "given2", "value": "Paul" },
{ "kind": "title", "value": "Dr." }, { "kind": "title", "value": "Dr." },
{ "kind": "credential", "value": "M.D." }, { "kind": "credential", "value": "M.D." },
{ "kind": "credential", "value": "A.C.P." }, { "kind": "credential", "value": "A.C.P." },
{ "kind": "generation", "value": "Jr." } { "kind": "generation", "value": "Jr." }
], ],
"sortAs": { "sortAs": {
"surname": "Stevenson", "surname": "Stevenson",
"given": "John Philip" "given": "John Philip"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>See <xref target="vcard-param-jscomps-examples"/> for examples of u sing the JSCOMPS parameter for vCard structured property values.</t> <t>See <xref target="vcard-param-jscomps-examples"/> for examples of u sing the JSCOMPS parameter for vCard-structured property values.</t>
</section> </section>
<section anchor="vcard-prop-nickname"> <section anchor="vcard-prop-nickname">
<name>NICKNAME</name> <name>NICKNAME</name>
<t>A NICKNAME property converts to Nickname object in the <tt>nickname <t>The NICKNAME property (<xref target="RFC6350" derivedContent="RFC63
s</tt> property (<xref target="nickname_conversion"/>). The <tt>name</tt> prope 50" section="6.2.3" sectionFormat="of"/>) converts to a Nickname object (<xref t
rty is set to the NICKNAME property value.</t> arget="RFC9553" derivedContent="RFC9553" section="2.2.2" sectionFormat="of"/>) i
<t>The PREF and TYPE parameters convert according to the rules as defi n the Card object's nicknames property (<xref target="nickname_conversion"/>).
ned in <xref target="vcard-parameters"/>.</t> The name property is set to the NICKNAME property value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="nickname_conversion"> <figure anchor="nickname_conversion">
<name>NICKNAME conversion example</name> <name>NICKNAME Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
NICKNAME:Johnny NICKNAME:Johnny
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"nicknames": { "nicknames": {
"NICK-1": { "NICK-1": {
"name": "Johnny" "name": "Johnny"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-photo"> <section anchor="vcard-prop-photo">
<name>PHOTO</name> <name>PHOTO</name>
<t>A PHOTO property converts to an entry in the <tt>media</tt> propert <t>The PHOTO property (<xref target="RFC6350" derivedContent="RFC6350"
y (<xref target="photo_conversion"/>). The entry value is a <tt>Media</tt> obje section="6.2.4" sectionFormat="of"/>) converts to a Media object (<xref target=
ct whose <tt>kind</tt> property is set to <tt>photo</tt> and <tt>uri</tt> proper "RFC9553" derivedContent="RFC9553" section="2.6.4" sectionFormat="of"/>) in the
ty is set to the PHOTO value.</t> Card object's media property (<xref target="photo_conversion"/>). The Media obj
<t>The PREF and MEDIATYPE parameters convert according to the rules as ect's kind property is set to "photo" and the uri property is set to the PHOTO v
defined in <xref target="vcard-parameters"/>.</t> alue.</t>
<t>The PREF and MEDIATYPE parameters convert according to the rules de
fined in <xref target="vcard-parameters"/>.</t>
<figure anchor="photo_conversion"> <figure anchor="photo_conversion">
<name>PHOTO conversion example</name> <name>PHOTO Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
PHOTO:https://www.example.com/pub/photos/jqpublic.gif PHOTO:https://www.example.com/pub/photos/jqpublic.gif
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"media": { "media": {
"PHOTO-1": { "PHOTO-1": {
"kind": "photo", "kind": "photo",
"uri": "https://www.example.com/pub/photos/jqpublic.gif" "uri": "https://www.example.com/pub/photos/jqpublic.gif"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section> <section>
<name>Delivery Addressing Properties</name> <name>Delivery Addressing Properties</name>
<section anchor="vcard-prop-adr"> <section anchor="vcard-prop-adr">
<name>ADR</name> <name>ADR</name>
<t>The ADR property converts to an Address object in the <tt>addresses <t>The ADR property (<xref target="RFC6350" derivedContent="RFC6350" s
</tt> property. Each component in the ADR property structured value converts to ection="6.3.1" sectionFormat="of"/>) converts to an Address object (<xref target
an AddressComponent in the Address <tt>components</tt> property.</t> ="RFC9553" derivedContent="RFC9553" section="2.5.1.1" sectionFormat="of"/>) in t
<t><xref target="I-D.ietf-calext-vcard-jscontact-extensions"/> defines he Card object's addresses property. Each component in the ADR-structured prope
new component for the ADR property. Implementations <bcp14>SHOULD</bcp14> set rty value converts to an AddressComponent in the Address object's components pro
these new components, even if all their values are the empty string.</t> perty.</t>
<t>The following table shows how ADR component and AddressComponent ki <t><xref target="RFC9554"/> defines new components for the ADR propert
nd relate:</t> y. Implementations <bcp14>SHOULD</bcp14> set these new components, even if all
their values are the empty string.</t>
<t>The following table shows how the ADR component and AddressComponen
t kind relate:</t>
<table anchor="adr_kind_conversion"> <table anchor="adr_kind_conversion">
<name>ADR components conversion</name> <name>ADR Components Conversion</name>
<thead> <thead>
<tr> <tr>
<th align="left">ADR component</th> <th align="left">ADR component</th>
<th align="left">AddressComponent kind</th> <th align="left">AddressComponent kind</th>
<th align="left">Remarks</th> <th align="left">Remarks</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td align="left">post office box</td> <td align="left">post office box</td>
<td align="left">postOfficeBox</td> <td align="left">postOfficeBox</td>
<td align="left"><xref target="RFC6350"/> recommends this compon ent not be set, but this now is disputable given the new components. Instead, s et this component and use the new ADR value format defined in <xref target="I-D. ietf-calext-vcard-jscontact-extensions"/>.</td> <td align="left"><xref target="RFC6350"/> recommends that this c omponent not be set, but this is now disputable given the new components. Inste ad, set this component and use the new ADR value format defined in <xref target= "RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">extended address</td> <td align="left">extended address</td>
<td align="left">apartment (see Remarks)</td> <td align="left">apartment</td>
<td align="left"><t>To vCard: Set the values of the following co <td align="left"><t>To vCard: set the values of the following co
mponents:</t> mponents:</t>
<ul> <ul>
<li>room</li> <li>room</li>
<li>floor</li> <li>floor</li>
<li>apartment</li> <li>apartment</li>
<li>building</li> <li>building</li>
</ul> </ul>
<t>From vCard: Ignore if the ADR structured value is of the form at defined in <xref target="I-D.ietf-calext-vcard-jscontact-extensions"/>. Othe rwise convert to <tt>apartment</tt>.</t></td> <t>From vCard: ignore if the ADR structured value is of the form at defined in <xref target="RFC9554"/>. Otherwise, convert to "apartment".</t>< /td>
</tr> </tr>
<tr> <tr>
<td align="left">street address</td> <td align="left">street address</td>
<td align="left">name (see Remarks)</td> <td align="left">name</td>
<td align="left"><t>To vCard: Set the values of the following co <td align="left"><t>To vCard: set the values of the following co
mponents:</t> mponents:</t>
<ul> <ul>
<li>number</li> <li>number</li>
<li>name</li> <li>name</li>
<li>block</li> <li>block</li>
<li>direction</li> <li>direction</li>
<li>landmark</li> <li>landmark</li>
<li>subdistrict</li> <li>subdistrict</li>
<li>district</li> <li>district</li>
</ul> </ul>
<t>From vCard: Ignore if the ADR structured value is of the form at defined in <xref target="I-D.ietf-calext-vcard-jscontact-extensions"/>. Othe rwise convert to <tt>name</tt>.</t></td> <t>From vCard: ignore if the ADR structured value is of the form at defined in <xref target="RFC9554"/>. Otherwise, convert to "name".</t></td>
</tr> </tr>
<tr> <tr>
<td align="left">locality</td> <td align="left">locality</td>
<td align="left">locality</td> <td align="left">locality</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">region</td> <td align="left">region</td>
<td align="left">region</td> <td align="left">region</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">postal code</td> <td align="left">postal code</td>
<td align="left">postcode</td> <td align="left">postcode</td>
<td align="left"/> <td align="left"/>
</tr> </tr>
<tr> <tr>
<td align="left">apartment</td> <td align="left">apartment</td>
<td align="left">apartment</td> <td align="left">apartment</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">block</td> <td align="left">block</td>
<td align="left">block</td> <td align="left">block</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">building</td> <td align="left">building</td>
<td align="left">building</td> <td align="left">building</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">direction</td> <td align="left">direction</td>
<td align="left">direction</td> <td align="left">direction</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">district</td> <td align="left">district</td>
<td align="left">district</td> <td align="left">district</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">floor</td> <td align="left">floor</td>
<td align="left">floor</td> <td align="left">floor</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">landmark</td> <td align="left">landmark</td>
<td align="left">landmark</td> <td align="left">landmark</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">room</td> <td align="left">room</td>
<td align="left">room</td> <td align="left">room</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">street number</td> <td align="left">street number</td>
<td align="left">number</td> <td align="left">number</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
<tr> <tr>
<td align="left">subdistrict</td> <td align="left">subdistrict</td>
<td align="left">subdistrict</td> <td align="left">subdistrict</td>
<td>Defined in <xref target="I-D.ietf-calext-vcard-jscontact-ext ensions"/>.</td> <td>Defined in <xref target="RFC9554"/>.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t>If the <xref target="vcard-param-jscomps">JSCOMPS</xref> parameter <t>If the <xref target="vcard-param-jscomps">JSCOMPS</xref> parameter
is set, then the Address <tt>isOrdered</tt> property value is "true", and the <t is set, then the Address object's isOrdered property value is "true", and the de
t>defaultSeparator</tt> and any separator name components are set according to t faultSeparator property and any separator name components are set according to t
he parameter value. The <tt>components</tt> list <bcp14>MUST</bcp14> adhere to he parameter value. The order in the components property <bcp14>MUST</bcp14> ad
the order of the JSCOMPS parameter value.</t> here to the order of the JSCOMPS parameter value.</t>
<t>If the JSCOMPS parameter is not set, then the Address <tt>isOrdered <t>If the JSCOMPS parameter is not set, then the Address object's isOr
</tt> property value is "false" and the <tt>defaultSeparator</tt> property <bcp1 dered property value is "false", and the defaultSeparator property <bcp14>MUST N
4>MUST NOT</bcp14> be set. The <tt>components</tt> list <bcp14>MUST</bcp14> fol OT</bcp14> be set. The order in the components property <bcp14>MUST</bcp14> fol
low the order of values in the ADR structured value when read from left to right low the order of values in the ADR structured value when read from left to right
.</t> .</t>
<t>The LABEL parameter converts to the Address <tt>full</tt> property. <ul empty="true">
</t> <li>The LABEL parameter converts to the Address object's full property
<t>The GEO parameter converts to the Address <tt>coordinates</tt> prop .</li>
erty.</t> <li>The GEO parameter converts to the Address object's coordinates pro
<t>The TZ parameter converts to the Address <tt>timeZone</tt> property perty.</li>
.</t> <li>The TZ parameter converts to the Address object's timeZone propert
<t>The CC parameter as defined in <xref target="RFC8605"/> converts to y.</li>
the Address <tt>countryCode</tt> property.</t> <li>The CC parameter converts to the Address object's countryCode prop
<t>The PREF and TYPE parameters convert according to the rules as defi erty.</li>
ned in <xref target="vcard-parameters"/>. The ADR-specific values of the TYPE p </ul>
arameter defined in Sections 5.1 and 5.2 of <xref target="I-D.ietf-calext-vcard- <t>The PREF and TYPE parameters convert according to the rules defined
jscontact-extensions"/> convert to the corresponding entries of the <tt>contexts in <xref target="vcard-parameters"/>. The ADR-specific values of the TYPE para
</tt> property as defined in Section 2.5.1 of <xref target="I-D.ietf-calext-jsco meter defined in Sections <xref target="RFC9554" sectionFormat="bare" section="5
ntact"/>.</t> .1"/> and <xref target="RFC9554" sectionFormat="bare" section="5.2"/> of <xref t
<t>The ALTID and LANGUAGE parameters convert according to the rules as arget="RFC9554"/> convert to the corresponding entries of the contexts property
defined in <xref target="vcard-parameters"/>. Each possible language-dependent as defined in <xref target="RFC9553" sectionFormat="of" section="2.5.1"/>.</t>
alternative is represented as an entry of the PatchObject map where the key ref <t>The ALTID and LANGUAGE parameters convert according to the rules de
erences the <tt>full</tt> property.</t> fined in <xref target="vcard-parameters"/>. Each possible language-dependent al
ternative converts to an entry of the PatchObject where the key references the f
ull property.</t>
<figure anchor="adr_conversion"> <figure anchor="adr_conversion">
<name>ADR conversion example</name> <name>ADR Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
ADR;TYPE=work;CC=US:;;54321 Oak St;Reston;VA;20190;USA;;;;Oak St;54321;;;;; ADR;TYPE=work;CC=US:
;;54321 Oak St;Reston;VA;20190;USA;;;;54321;Oak St;;;;;;
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"addresses": { "addresses": {
"ADDR-1" : { "ADDR-1" : {
"contexts": { "work": true }, "contexts": { "work": true },
"components": [ "components": [
{ "kind": "number", "value": "54321" }, { "kind": "number", "value": "54321" },
{ "kind": "name", "value": "Oak St" }, { "kind": "name", "value": "Oak St" },
{ "kind": "locality", "value": "Reston" }, { "kind": "locality", "value": "Reston" },
{ "kind": "region", "value": "VA" }, { "kind": "region", "value": "VA" },
{ "kind": "postcode", "value": "20190" }, { "kind": "postcode", "value": "20190" },
{ "kind": "country", "value": "USA" } { "kind": "country", "value": "USA" }
], ],
"countryCode": "US", "countryCode": "US"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>See <xref target="vcard-param-jscomps-examples"/> for examples of u sing the JSCOMPS parameter for vCard structured property values.</t> <t>See <xref target="vcard-param-jscomps-examples"/> for examples of u sing the JSCOMPS parameter for vCard-structured property values.</t>
</section> </section>
</section> </section>
<section> <section>
<name>Communications Properties</name> <name>Communications Properties</name>
<section anchor="vcard-prop-email"> <section anchor="vcard-prop-email">
<name>EMAIL</name> <name>EMAIL</name>
<t>An EMAIL property converts to an entry in the <tt>emails</tt> prope <t>The EMAIL property (<xref target="RFC6350" derivedContent="RFC6350"
rty (<xref target="email_conversion"/>). The entry value is an <tt>EmailAddress section="6.4.2" sectionFormat="of"/>) converts to an EmailAddress object (<xref
</tt> object. The <tt>address</tt> property is set to the EMAIL value.</t> target="RFC9553" derivedContent="RFC9553" section="2.3.1" sectionFormat="of"/>)
<t>The PREF and TYPE parameters convert according to the rules as defi in the Card object's emails property (<xref target="email_conversion"/>). The
ned in <xref target="vcard-parameters"/>.</t> EmailAddress object's address property is set to the EMAIL value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="email_conversion"> <figure anchor="email_conversion">
<name>EMAIL conversion example</name> <name>EMAIL Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
EMAIL;TYPE=work:jqpublic@xyz.example.com EMAIL;TYPE=work:jqpublic@xyz.example.com
EMAIL;PREF=1:jane_doe@example.com EMAIL;PREF=1:jane_doe@example.com
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"emails": { "emails": {
"EMAIL-1": { "EMAIL-1": {
"contexts": { "work": true }, "contexts": { "work": true },
"address": "jqpublic@xyz.example.com" "address": "jqpublic@xyz.example.com"
}, },
"EMAIL-2": { "EMAIL-2": {
"address": "jane_doe@example.com", "address": "jane_doe@example.com",
"pref": 1 "pref": 1
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-impp"> <section anchor="vcard-prop-impp">
<name>IMPP</name> <name>IMPP</name>
<t>An IMPP property converts to an entry in the <tt>onlineServices</tt <t>The IMPP property (<xref target="RFC6350" derivedContent="RFC6350"
> property (<xref target="impp_conversion"/>). The entry value is an <tt>Online section="6.4.3" sectionFormat="of"/>) converts to an OnlineService object (<xref
Service</tt> object. The <tt>vCardName</tt> property is set to "impp" and the < target="RFC9553" derivedContent="RFC9553" section="2.3.2" sectionFormat="of"/>)
tt>uri</tt> property is set to the IMPP value.</t> in the Card object's onlineServices property (<xref target="impp_conversion"/>)
<t>The SERVICE-TYPE, USERNAME, PREF and TYPE parameters convert accord . The vCardName property is set to "impp", and the uri property is set to the I
ing to the rules as defined in <xref target="vcard-parameters"/>.</t> MPP value.</t>
<t>The SERVICE-TYPE, USERNAME, PREF, and TYPE parameters convert accor
ding to the rules defined in <xref target="vcard-parameters"/>.</t>
<figure anchor="impp_conversion"> <figure anchor="impp_conversion">
<name>IMPP conversion example</name> <name>IMPP Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
IMPP;PREF=1:xmpp:alice@example.com IMPP;PREF=1:xmpp:alice@example.com
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"onlineServices": { "onlineServices": {
"OS-1": { "OS-1": {
"uri": "xmpp:alice@example.com", "uri": "xmpp:alice@example.com",
"pref": 1, "pref": 1,
"vCardName": "impp" "vCardName": "impp"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-lang"> <section anchor="vcard-prop-lang">
<name>LANG</name> <name>LANG</name>
<t>A LANG property converts to an entry in the <tt>preferredLanguages< <t>The LANG property (<xref target="RFC6350" derivedContent="RFC6350"
/tt> property (<xref target="lang_conversion"/>). The entry value is an <tt>Lan section="6.4.4" sectionFormat="of"/>) converts to a LanguagePref object (<xref t
guagePref</tt> object. The LanguagePref <tt>language</tt> property value is the arget="RFC9553" derivedContent="RFC9553" section="2.3.4" sectionFormat="of"/>) i
LANG property value.</t> n the Card object's preferredLanguages property (<xref target="lang_conversion"/
<t>The PREF and TYPE parameters convert according to the rules as defi >). The LANG property value converts to the LanguagePref object's language prop
ned in <xref target="vcard-parameters"/>.</t> erty value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="lang_conversion"> <figure anchor="lang_conversion">
<name>LANG conversion example</name> <name>LANG Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
LANG;TYPE=work;PREF=1:en LANG;TYPE=work;PREF=1:en
LANG;TYPE=work;PREF=2:fr LANG;TYPE=work;PREF=2:fr
LANG;TYPE=home:fr LANG;TYPE=home:fr
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"preferredLanguages": { "preferredLanguages": {
"LANG-1": { "LANG-1": {
"language": "en", "language": "en",
"contexts": { "work": true }, "contexts": { "work": true },
"pref": 1 "pref": 1
}, },
"LANG-2": { "LANG-2": {
"language": "fr", "language": "fr",
"contexts": { "work": true }, "contexts": { "work": true },
"pref": 2 "pref": 2
}, },
"LANG-3": { "LANG-3": {
"language": "fr", "language": "fr",
"contexts": { "private": true } "contexts": { "private": true }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-language"> <section anchor="vcard-prop-language">
<name>LANGUAGE</name> <name>LANGUAGE</name>
<t>The LANGUAGE property converts to the <tt>language</tt> property (< xref target="languageprop_conversion"/>).</t> <t>The LANGUAGE property (<xref target="RFC9554" derivedContent="RFC955 4" section="3.3" sectionFormat="of"/>) converts to the Card object's language pr operty (<xref target="languageprop_conversion"/>).</t>
<figure anchor="languageprop_conversion"> <figure anchor="languageprop_conversion">
<name>LANGUAGE conversion example</name> <name>LANGUAGE Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
LANGUAGE:de-AT LANGUAGE:de-AT
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"language": "de-AT" "language": "de-AT"
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>Note: This property is defined in <xref target="I-D.ietf-calext-vca rd-jscontact-extensions"/>.</t>
</section> </section>
<section anchor="vcard-prop-socialprofile"> <section anchor="vcard-prop-socialprofile">
<name>SOCIALPROFILE</name> <name>SOCIALPROFILE</name>
<t>A SOCIALPROFILE property converts to an entry in the <tt>onlineServ <t>The SOCIALPROFILE property (<xref target="RFC9554" derivedContent="R
ices</tt> property (<xref target="socialprofile_conversion"/>). The entry value FC9554" section="3.5" sectionFormat="of"/>) converts to an OnlineService object
is an <tt>OnlineService</tt> object. The <tt>vCardName</tt> property is set to (<xref target="RFC9553" derivedContent="RFC9553" section="2.3.2" sectionFormat="
"socialprofile" or can be omitted. If the value type of the SOCIALPROFILE is U of"/>) in the Card object's onlineServices property (<xref target="socialprofile
RI, the <tt>uri</tt> property is set to the SOCIALPROFILE value. Otherwise, the _conversion"/>). The vCardName property is set to "socialprofile", or it can be
<tt>user</tt> property is set to the SOCIALPROFILE value.</t> omitted. If the SOCIALPROFILE property value is of type URI, then the OnlineSe
<t>The SERVICE-TYPE, USERNAME, PREF and TYPE parameters convert accord rvice object's uri property is set; otherwise, the user property is set.</t>
ing to the rules as defined in <xref target="vcard-parameters"/>.</t> <t>The SERVICE-TYPE, USERNAME, PREF, and TYPE parameters convert accor
ding to the rules defined in <xref target="vcard-parameters"/>.</t>
<figure anchor="socialprofile_conversion"> <figure anchor="socialprofile_conversion">
<name>SOCIALPROFILE conversion example</name> <name>SOCIALPROFILE Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
SOCIALPROFILE;SERVICE-TYPE=Mastodon:https://example.com/@foo SOCIALPROFILE;SERVICE-TYPE=Mastodon:https://example.com/@foo
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"onlineServices": { "onlineServices": {
... ...
"OS-1": { "OS-1": {
"service": "Mastodon", "service": "Mastodon",
"uri": "https://example.com/@foo" "uri": "https://example.com/@foo"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>Note: This property is defined in <xref target="I-D.ietf-calext-vca rd-jscontact-extensions"/>.</t>
</section> </section>
<section anchor="vcard-prop-tel"> <section anchor="vcard-prop-tel">
<name>TEL</name> <name>TEL</name>
<t>A TEL property converts to an entry in the <tt>phones</tt> property <t>The TEL property (<xref target="RFC6350" derivedContent="RFC6350" s
(<xref target="tel_conversion"/>). The entry value is a <tt>Phone</tt> object. ection="6.4.1" sectionFormat="of"/>) converts to a Phone object (<xref target="R
</t> FC9553" derivedContent="RFC9553" section="2.3.3" sectionFormat="of"/>) in the Ca
<t>The TEL-specific values of the TYPE parameter convert to the <tt>fe rd object's phones property (<xref target="tel_conversion"/>).</t>
atures</tt> property keys as outlined in table <xref target="tel_type_conversion <t>The TEL-specific values of the TYPE parameter convert to the featur
"/>. Note that <xref target="RFC6350" section="6.4.1"/> defines the default TYP es property keys as outlined in <xref target="tel_type_conversion"/>. Note that
E of TEL to be <tt>voice</tt>, but the default Phone features property is absent <xref target="RFC6350" sectionFormat="of" section="6.4.1"/> defines the default
by default. Accordingly, an implementation <bcp14>SHOULD</bcp14> only set the type to be "voice", but the default Phone features property is absent by defaul
Phone <tt>features</tt> property if the TEL property actually has a TEL-specific t. Accordingly, an implementation <bcp14>SHOULD</bcp14> only set the Phone obje
TYPE parameter set.</t> ct's features property if the TEL property actually has a TEL-specific TYPE para
meter set.</t>
<table anchor="tel_type_conversion"> <table anchor="tel_type_conversion">
<name>TEL TYPE conversion</name> <name>TEL TYPE Conversion</name>
<thead> <thead>
<tr> <tr>
<th align="left">TYPE value</th> <th align="left">TYPE value</th>
<th align="left">Phone feature</th> <th align="left">Phone feature</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td align="left">cell</td> <td align="left">cell</td>
<td align="left">mobile</td> <td align="left">mobile</td>
skipping to change at line 969 skipping to change at line 972
<tr> <tr>
<td align="left">video</td> <td align="left">video</td>
<td align="left">video</td> <td align="left">video</td>
</tr> </tr>
<tr> <tr>
<td align="left">voice</td> <td align="left">voice</td>
<td align="left">voice</td> <td align="left">voice</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t>The value of the TEL property converts to the Phone <tt>number</tt> property.</t> <t>The value of the TEL property converts to the Phone object's number property.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi ned in <xref target="vcard-parameters"/>.</t> <t>The PREF and TYPE parameters convert according to the rules defined in <xref target="vcard-parameters"/>.</t>
<figure anchor="tel_conversion"> <figure anchor="tel_conversion">
<name>TEL conversion example</name> <name>TEL Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
TEL;VALUE=uri;PREF=1;TYPE="voice,home":tel:+1-555-555-5555;ext=5555 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 TEL;VALUE=uri;TYPE=home:tel:+33-01-23-45-67
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"phones": { "phones": {
"PHONE-1": { "PHONE-1": {
"contexts": { "private": true }, "contexts": { "private": true },
"features": { "voice": true }, "features": { "voice": true },
"number": "tel:+1-555-555-5555;ext=5555", "number": "tel:+1-555-555-5555;ext=5555",
"pref": 1 "pref": 1
}, },
"PHONE-2": { "PHONE-2": {
"contexts": { "private": true }, "contexts": { "private": true },
"number": "tel:+33-01-23-45-67" "number": "tel:+33-01-23-45-67"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section> <section>
<name>Geographical Properties</name> <name>Geographical Properties</name>
<section anchor="vcard-prop-geo"> <section anchor="vcard-prop-geo">
<name>GEO</name> <name>GEO</name>
<t>This converts to the <tt>coordinates</tt> property of the <tt>Addre ss</tt> object. Also see <xref target="combine-geo-props"/> to determine which <tt>Address</tt> object instance to convert to.</t> <t>The GEO property (<xref target="RFC6350" derivedContent="RFC6350" s ection="6.5.2" sectionFormat="of"/>) converts to the Address object's coordinate s property (<xref target="RFC9553" derivedContent="RFC9553" section="2.5.1" sect ionFormat="of"/>). Also see <xref target="combine-geo-props"/> to determine whi ch Address object instance to convert to.</t>
</section> </section>
<section anchor="vcard-prop-tz"> <section anchor="vcard-prop-tz">
<name>TZ</name> <name>TZ</name>
<t>A value of type TEXT converts to the <tt>timeZone</tt> property in <t>The TZ property (<xref target="RFC6350" derivedContent="RFC6350" se
the <tt>Address</tt> object.</t> ction="6.5.1" sectionFormat="of"/>) converts an Address object (<xref target="RF
<t>A value of type UTC-OFFSET converts to the <tt>timeZone</tt> proper C9553" derivedContent="RFC9553" section="2.5.1" sectionFormat="of"/>) in the Car
ty in the <tt>Address</tt> object if the offset has zero minutes and the hour of d object's addresses property.</t>
fset is in the range -12 &lt;= 14:</t> <t>A value of type TEXT converts to the Address object's timeZone prop
erty.</t>
<t>A value of type UTC-OFFSET converts to the Address object's timeZon
e property if the offset has zero minutes and the hour offset is between -12 and
+14, both inclusively. Note that:</t>
<ul> <ul>
<li>If the hour offset is zero, use the time zone name <tt>Etc/UTC</ <li>If the hour offset is zero, use the time zone name "Etc/UTC".</l
tt>.</li> i>
<li>Otherwise construct the time zone name with <tt>Etc/GMT</tt> suf <li>Otherwise, construct the time zone name with "Etc/GMT" suffixed
fixed with the string representation of the reversed sign hour offset, including with the string representation of the reversed sign hour offset, including the s
the sign but excluding leading zeros and minutes. For example, the UTC offset ign but excluding leading zeros and minutes. For example, the UTC offset value
value <tt>-0500</tt> converts to <tt>Etc/GMT+5</tt>.</li> "-0500" converts to "Etc/GMT+5".</li>
</ul> </ul>
<t>For such property values, also see <xref target="combine-geo-props" /> to determine which <tt>Address</tt> object instance to convert to.</t> <t>For such property values, also see <xref target="combine-geo-props" /> to determine which Address object instance to convert to.</t>
<t>Any other value of type UTC-OFFSET or URI does not convert to an IA NA-registered property in JSContact. To convert such property, see <xref target ="jscontact-prop-vcardprops"/>.</t> <t>Any other value of type UTC-OFFSET or URI does not convert to an IA NA-registered property in JSContact. To convert such property, see <xref target ="jscontact-prop-vcardprops"/>.</t>
</section> </section>
<section anchor="combine-geo-props"> <section anchor="combine-geo-props">
<name>Combining geographical properties</name> <name>Combining Geographical Properties</name>
<t>In vCard the properties ADR, GEO and TZ occur independently of each <t>In vCard, the properties ADR, GEO, and TZ occur independently of ea
other. In JSContact, they all convert to properties of an <tt>Address</tt> obj ch other. In JSContact, they all convert to properties of an Address object. I
ect. It is implementation-specific if these vCard properties convert to <em>sep t is implementation-specific if these vCard properties convert to <em>separate</
arate</em> address instances in JSContact, or if some or all of them convert to em> address instances in JSContact or if some or all of them convert to the <em>
the <em>same</em> address. That being said, implementations <bcp14>MUST</bcp14> same</em> address. That being said, implementations <bcp14>MUST</bcp14> convert
convert the properties to the <em>same</em> address for the following cases:</t the properties to the <em>same</em> address for the following cases:</t>
>
<ul> <ul>
<li>The GROUP parameter values of the properties match.</li> <li>The GROUP parameter values of the properties match.</li>
<li>The GROUP parameters are not set, but are set on any other ADR, GEO and TZ properties.</li> <li>The GROUP parameters are not set, but they are set on any other ADR, GEO, and TZ properties.</li>
</ul> </ul>
</section> </section>
</section> </section>
<section> <section>
<name>Organizational Properties</name> <name>Organizational Properties</name>
<section anchor="vcard-prop-contact-uri"> <section anchor="vcard-prop-contact-uri">
<name>CONTACT-URI</name> <name>CONTACT-URI</name>
<t>A CONTACT-URI property as defined in <xref target="RFC8605"/> is re <t>The CONTACT-URI property (<xref target="RFC8605" derivedContent="RF
presented as an entry of the <tt>links</tt> property (<xref target="contact_uri_ C8605" section="2.1" sectionFormat="of"/>) converts to a Link object (<xref targ
conversion"/>). The entry value is a <tt>Link</tt> object whose <tt>kind</tt> et="RFC9553" derivedContent="RFC9553" section="2.6.3" sectionFormat="of"/>) in t
property is set to <tt>contact</tt> and <tt>uri</tt> property is set to the CONT he Card object's links property (<xref target="contact_uri_conversion"/>). The
ACT-URI value.</t> Link object's kind property is set to "contact" and the uri property is set to t
<t>The PREF and TYPE parameters convert according to the rules as defi he CONTACT-URI property value.</t>
ned in <xref target="vcard-parameters"/>.</t> <t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="contact_uri_conversion"> <figure anchor="contact_uri_conversion">
<name>CONTACT-URI conversion example</name> <name>CONTACT-URI Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
CONTACT-URI;PREF=1:mailto:contact@example.com CONTACT-URI;PREF=1:mailto:contact@example.com
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"links": { "links": {
"CONTACT-1": { "CONTACT-1": {
"kind": "contact", "kind": "contact",
"uri": "mailto:contact@example.com", "uri": "mailto:contact@example.com",
"pref": 1 "pref": 1
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-logo"> <section anchor="vcard-prop-logo">
<name>LOGO</name> <name>LOGO</name>
<t>A LOGO property converts to an entry in the <tt>media</tt> property <t>The LOGO property (<xref target="RFC6350" derivedContent="RFC6350"
(<xref target="logo_conversion"/>). The entry value is a <tt>Media</tt> object section="6.6.3" sectionFormat="of"/>) converts to a Media object (<xref target="
whose <tt>kind</tt> property is set to <tt>logo</tt> and <tt>uri</tt> property RFC9553" derivedContent="RFC9553" section="2.6.4" sectionFormat="of"/>) in the C
is set to the LOGO value.</t> ard object's media property (<xref target="logo_conversion"/>). The Media objec
<t>The PREF and TYPE parameters convert according to the rules as defi t's kind property is set to "logo" and the uri property is set to the LOGO prope
ned in <xref target="vcard-parameters"/>.</t> rty value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="logo_conversion"> <figure anchor="logo_conversion">
<name>LOGO conversion example</name> <name>LOGO Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
LOGO:https://www.example.com/pub/logos/abccorp.jpg LOGO:https://www.example.com/pub/logos/abccorp.jpg
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"media": { "media": {
"LOGO-1": { "LOGO-1": {
"kind": "logo", "kind": "logo",
"uri": "https://www.example.com/pub/logos/abccorp.jpg" "uri": "https://www.example.com/pub/logos/abccorp.jpg"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-member"> <section anchor="vcard-prop-member">
<name>MEMBER</name> <name>MEMBER</name>
<t>The uids of the contact cards composing the group are included in t <t>The MEMBER property (<xref target="RFC6350" derivedContent="RFC6350"
he <tt>members</tt> property (<xref target="group_example"/>).</t> section="6.6.5" sectionFormat="of"/>) converts to the Card object's members pro
<t>In this case, the PREF parameter does not have a JSContact counterp perty (<xref target="group_example"/>). Each MEMBER property value is a key in
art; however, the implementors <bcp14>MAY</bcp14> insert the map entries by orde the members property. The PREF parameter (<xref target="RFC6350" derivedContent
r of preference.</t> ="RFC6350" section="5.3" sectionFormat="of"/>) does not convert to JSContact.</t
>
<figure anchor="group_example"> <figure anchor="group_example">
<name>Group example</name> <name>Group Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
KIND:group KIND:group
FN:The Doe family FN:The Doe family
MEMBER:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af MEMBER:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af
MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519 MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"kind": "group", "kind": "group",
"name": { "name": {
"full": "The Doe family" "full": "The Doe family"
}, },
"uid": "urn:uuid:ab4310aa-fa43-11e9-8f0b-362b9e155667", "uid": "urn:uuid:ab4310aa-fa43-11e9-8f0b-362b9e155667",
"members": { "members": {
"urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af": true, "urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af": true,
"urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519": true "urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519": true
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-org"> <section anchor="vcard-prop-org">
<name>ORG</name> <name>ORG</name>
<t>An ORG property converts to an entry in the <tt>organizations</tt> property (<xref target="org_conversion"/>). The entry value is an <tt>Organizat ion</tt> object whose <tt>name</tt> property contains the organizational name, a nd the <tt>units</tt> property is an array of <tt>OrgUnit</tt> objects each cont aining the organizational unit name in the <tt>name</tt> property.</t> <t>The ORG property (<xref target="RFC6350" derivedContent="RFC6350" s ection="6.6.4" sectionFormat="of"/>) converts to an Organization object (<xref t arget="RFC9553" derivedContent="RFC9553" section="2.2.3" sectionFormat="of"/>) i n the Card object's organizations property (<xref target="org_conversion"/>). T he Organization object's name property is set to the ORG property organizational name component. The Organization object's units property is an array of OrgUni t objects that each contain an organizational unit name component value of the O RG property value.</t>
<t>Implementations <bcp14>MAY</bcp14> allow representation of organiza tional units without the organizational name. In this case, the first component of the ORG value <bcp14>MUST</bcp14> be an empty string (e.g., ORG:;Department A).</t> <t>Implementations <bcp14>MAY</bcp14> allow representation of organiza tional units without the organizational name. In this case, the first component of the ORG value <bcp14>MUST</bcp14> be an empty string (e.g., ORG:;Department A).</t>
<t>The ALTID, LANGUAGE parameters convert according to the rules as de <t>The ALTID and LANGUAGE parameters convert according to the rules de
fined in <xref target="vcard-parameters"/>.</t> fined in <xref target="vcard-parameters"/>.</t>
<t>The first item of the comma-separated SORT-AS parameter value conve <t>The first item of the comma-separated SORT-AS parameter value conve
rts to the <tt>sortAs</tt> property of the <tt>Organization</tt> object. The su rts to the sortAs property of the Organization object. The subsequent items con
bsequent items convert to the <tt>sortAs</tt> property of the corresponding <tt> vert to the sortAs property of the corresponding OrgUnit object.</t>
OrgUnit</tt> object.</t> <t>The TYPE parameter converts according to the rules defined in <xref
<t>The TYPE parameter converts according to the rules as defined in <x target="vcard-parameters"/>.</t>
ref target="vcard-parameters"/>.</t>
<figure anchor="org_conversion"> <figure anchor="org_conversion">
<name>ORG conversion example</name> <name>ORG Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
ORG;SORT-AS="ABC":ABC\, Inc.;North American Division;Marketing ORG;SORT-AS="ABC":ABC\, Inc.;North American Division;Marketing
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"organizations": { "organizations": {
"ORG-1": { "ORG-1": {
"name": "ABC, Inc.", "name": "ABC, Inc.",
"units":[ "units":[
{ "name": "North American Division" }, { "name": "North American Division" },
{ "name": "Marketing" } { "name": "Marketing" }
], ],
"sortAs": "ABC" "sortAs": "ABC"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-related"> <section anchor="vcard-prop-related">
<name>RELATED</name> <name>RELATED</name>
<t>This converts to an entry in the <tt>relatedTo</tt> property (<xref target="related_conversion"/>). The property value converts to the key in the <tt>relatedTo</tt> property. The TYPE parameters convert to the <tt>relation</t t> of the <tt>Relation</tt> object value. Any other parameters convert as defin ed in <xref target="jscontact-prop-vcardparams"/>.</t> <t>The RELATED property (<xref target="RFC6350" derivedContent="RFC635 0" section="6.6.6" sectionFormat="of"/>) converts to the Card object's relatedTo property (<xref target="related_conversion"/>). The property value converts to the key in the relatedTo property. The TYPE parameters convert to the Relation object's relation property (<xref target="RFC9553" derivedContent="RFC9553" sec tion="2.1.8" sectionFormat="of"/>). Any other parameters convert as defined in <xref target="jscontact-prop-vcardparams"/>.</t>
<figure anchor="related_conversion"> <figure anchor="related_conversion">
<name>RELATED conversion example</name> <name>RELATED Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
RELATED;TYPE=friend:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 RELATED;TYPE=friend:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
RELATED;TYPE=contact:https://example.com/directory/john.vcf RELATED;TYPE=contact:https://example.com/directory/john.vcf
RELATED;VALUE=text:Please contact my deputy John for any inquiries. RELATED;VALUE=text:Please contact my deputy John for any inquiries.
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"relatedTo" : { "relatedTo" : {
"urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" : { "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" : {
"relation" : { "relation" : {
"friend" : true "friend" : true
} }
}, },
"https://example.com/directory/john.vcf" : { "https://example.com/directory/john.vcf" : {
"relation" : { "relation" : {
"contact" : true "contact" : true
} }
}, },
"Please contact my deputy John for any inquiries." : { "Please contact my deputy John for any inquiries." : {
"relation" : { } "relation" : { }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-title"> <section anchor="vcard-prop-title">
<name>TITLE and ROLE</name> <name>TITLE and ROLE</name>
<t>Both TITLE and ROLE properties are represented as entries of the <t <t>The TITLE (<xref target="RFC6350" derivedContent="RFC6350" section=
t>titles</tt> property (<xref target="title_role_conversion"/>). The entry valu "6.6.1" sectionFormat="of"/>) and ROLE (<xref target="RFC6350" derivedContent="R
e is a <tt>Title</tt> object whose <tt>kind</tt> property is set to <tt>title</t FC6350" section="6.6.2" sectionFormat="of"/>) properties convert to a Title obje
t> or <tt>role</tt> for TITLE and ROLE vCard properties, respectively. The <tt> ct (<xref target="RFC9553" derivedContent="RFC9553" section="2.2.5" sectionForma
name</tt> property is set to the vCard property value.</t> t="of"/>) in the Card object's titles property (<xref target="title_role_convers
<t>The value of the <tt>organization</tt> property can be derived if t ion"/>). The Title object's kind property is set to "title" or "role" for the T
he TITLE or ROLE property is member of a vCard property group and exactly one ot ITLE and ROLE vCard properties, respectively. The name property is set to the v
her ORG property also is part of that group.</t> Card property value.</t>
<t>The ALTID and LANGUAGE parameters convert according to the rules as <t>The value of the organizationId property can be derived if the TITL
defined in <xref target="vcard-parameters"/>.</t> E or ROLE property is a member of a vCard property group and if exactly one othe
r ORG property is also a part of that group.</t>
<t>The ALTID and LANGUAGE parameters convert according to the rules de
fined in <xref target="vcard-parameters"/>.</t>
<figure anchor="title_role_conversion"> <figure anchor="title_role_conversion">
<name>TITLE and ROLE conversion example</name> <name>TITLE and ROLE Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
TITLE:Research Scientist TITLE:Research Scientist
group1.ROLE:Project Leader group1.ROLE:Project Leader
group1.ORG:ABC, Inc. group1.ORG:ABC, Inc.
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"titles": { "titles": {
"TITLE-1": { "TITLE-1": {
"kind": "title", "kind": "title",
"name": "Project Leader" "name": "Research Scientist"
}, },
"TITLE-2": { "TITLE-2": {
"kind": "role", "kind": "role",
"name": "Research Scientist", "name": "Project Leader",
"organization": "ORG-1" "organizationId": "ORG-1"
} }
}, },
"organizations": { "organizations": {
"ORG-1": { "ORG-1": {
"name": "ABC, Inc." "name": "ABC, Inc."
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section> <section>
<name>Personal Information Properties</name> <name>Personal Information Properties</name>
<section anchor="vcard-prop-expertise"> <section anchor="vcard-prop-expertise">
<name>EXPERTISE</name> <name>EXPERTISE</name>
<t>An EXPERTISE property as defined in <xref target="RFC6715"/> is rep <t>The EXPERTISE property (<xref target="RFC6715" derivedContent="RFC6
resented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property 715" section="2.1" sectionFormat="of"/>) converts to a PersonalInfo object (<xre
(<xref target="expertise_conversion"/>). The <tt>kind</tt> property is set to f target="RFC9553" derivedContent="RFC9553" section="2.8.4" sectionFormat="of"/>
"expertise".</t> ) in the Card object's personalInfo property (<xref target="expertise_conversion
<t>The INDEX parameter converts according to the rules as defined in < "/>). The PersonalInfo object's kind property is set to "expertise".</t>
xref target="vcard-parameters"/>.</t> <t>The INDEX and LEVEL parameters convert according to the rules defin
ed in <xref target="vcard-parameters"/>.</t>
<figure anchor="expertise_conversion"> <figure anchor="expertise_conversion">
<name>EXPERTISE conversion example</name> <name>EXPERTISE Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
EXPERTISE;LEVEL=beginner;INDEX=2:Chinese literature EXPERTISE;LEVEL=beginner;INDEX=2:Chinese literature
EXPERTISE;INDEX=1;LEVEL=expert:chemistry EXPERTISE;INDEX=1;LEVEL=expert:chemistry
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"personalInfo": { "personalInfo": {
"PERSINFO-1" : { "PERSINFO-1" : {
"kind": "expertise", "kind": "expertise",
"value": "Chinese literature", "value": "Chinese literature",
"level": "low", "level": "low",
"listAs": 2 "listAs": 2
}, },
"PERSINFO-2" : { "PERSINFO-2" : {
"kind": "expertise", "kind": "expertise",
"value": "chemistry", "value": "chemistry",
"level": "high", "level": "high",
"listAs": 1 "listAs": 1
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-hobby"> <section anchor="vcard-prop-hobby">
<name>HOBBY</name> <name>HOBBY</name>
<t>A HOBBY property as defined in <xref target="RFC6715"/> is represen <t>The HOBBY property (<xref target="RFC6715" derivedContent="RFC6715"
ted as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property (<xr section="2.2" sectionFormat="of"/>) converts to a PersonalInfo object (<xref ta
ef target="hobby_conversion"/>). The <tt>kind</tt> property is set to "hobby".< rget="RFC9553" derivedContent="RFC9553" section="2.8.4" sectionFormat="of"/>) in
/t> the Card object's personalInfo property (<xref target="hobby_conversion"/>). T
<t>The INDEX parameter converts according to the rules as defined in < he PersonalInfo object's kind property is set to "hobby".</t>
xref target="vcard-parameters"/>.</t> <t>The INDEX and LEVEL parameters convert according to the rules defin
ed in <xref target="vcard-parameters"/>.</t>
<figure anchor="hobby_conversion"> <figure anchor="hobby_conversion">
<name>HOBBY conversion example</name> <name>HOBBY Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
HOBBY;INDEX=1;LEVEL=high:reading HOBBY;INDEX=1;LEVEL=high:reading
HOBBY;INDEX=2;LEVEL=high:sewing HOBBY;INDEX=2;LEVEL=high:sewing
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"personalInfo": { "personalInfo": {
"PERSINFO-1" : { "PERSINFO-1" : {
"kind": "hobby", "kind": "hobby",
"value": "reading", "value": "reading",
"level": "high", "level": "high",
"listAs": 1 "listAs": 1
}, },
"PERSINFO-2" : { "PERSINFO-2" : {
"kind": "hobby", "kind": "hobby",
"value": "sewing", "value": "sewing",
"level": "high", "level": "high",
"listAs": 2 "listAs": 2
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-interest"> <section anchor="vcard-prop-interest">
<name>INTEREST</name> <name>INTEREST</name>
<t>An INTEREST property as defined in <xref target="RFC6715"/> is repr <t>The INTEREST property (<xref target="RFC6715" derivedContent="RFC67
esented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property 15" section="2.3" sectionFormat="of"/>) converts to a PersonalInfo object (<xref
(<xref target="interest_conversion"/>). The <tt>kind</tt> property is set to "i target="RFC9553" derivedContent="RFC9553" section="2.8.4" sectionFormat="of"/>)
nterest".</t> in the Card object's personalInfo property (<xref target="interest_conversion"/
<t>The INDEX parameter converts according to the rules as defined in < >). The PersonalInfo object's kind property is set to "interest".</t>
xref target="vcard-parameters"/>.</t> <t>The INDEX and LEVEL parameters convert according to the rules defin
ed in <xref target="vcard-parameters"/>.</t>
<figure anchor="interest_conversion"> <figure anchor="interest_conversion">
<name>INTEREST conversion example</name> <name>INTEREST Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
INTEREST;INDEX=1;LEVEL=medium:r&b music INTEREST;INDEX=1;LEVEL=medium:r&b music
INTEREST;INDEX=2;LEVEL=high:rock&roll music INTEREST;INDEX=2;LEVEL=high:rock&roll music
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"personalInfo": { "personalInfo": {
"PERSINFO-1" : { "PERSINFO-1" : {
"kind": "interest", "kind": "interest",
"value": "r&b music", "value": "r&b music",
"level": "medium", "level": "medium",
"listAs": 1 "listAs": 1
}, },
"PERSINFO-2" : { "PERSINFO-2" : {
"kind": "interest", "kind": "interest",
"value": "rock&roll music", "value": "rock&roll music",
"level": "high", "level": "high",
"listAs": 2 "listAs": 2
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-org-directory"> <section anchor="vcard-prop-org-directory">
<name>ORG-DIRECTORY</name> <name>ORG-DIRECTORY</name>
<t>The ORG-DIRECTORY property <xref target="RFC6715"/> converts to a D <t>The ORG-DIRECTORY property (<xref target="RFC6715" derivedContent="
irectory object in the <tt>directories</tt> property (<xref target="org_director RFC6715" section="2.4" sectionFormat="of"/>) <xref target="RFC6715"/> converts t
y_conversion"/>). The <tt>kind</tt> property is set to <tt>directory</tt>. The o a Directory object (<xref target="RFC9553" derivedContent="RFC9553" section="2
<tt>uri</tt> property is set to the ORG-DIRECTORY property value.</t> .6.2" sectionFormat="of"/>) in the Card object's directories property (<xref tar
<t>The INDEX, PREF and TYPE parameters convert according to the rules get="org_directory_conversion"/>). The Directory object's kind property is set
as defined in <xref target="vcard-parameters"/>.</t> to "directory". The uri property is set to the ORG-DIRECTORY property value.</t
>
<t>The INDEX, PREF, and TYPE parameters convert according to the rules
defined in <xref target="vcard-parameters"/>.</t>
<figure anchor="org_directory_conversion"> <figure anchor="org_directory_conversion">
<name>ORG-DIRECTORY conversion example</name> <name>ORG-DIRECTORY Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
ORG-DIRECTORY;INDEX=1:https://directory.mycompany.example.com ORG-DIRECTORY;INDEX=1:https://directory.mycompany.example.com
ORG-DIRECTORY;PREF=1:ldap://ldap.tech.example/o=Tech,ou=Engineering ORG-DIRECTORY;PREF=1:ldap://ldap.tech.example/o=Tech,ou=Engineering
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"directories": { "directories": {
"DIRECTORY-1": { "DIRECTORY-1": {
"kind": "directory", "kind": "directory",
"uri": "https://directory.mycompany.example.com", "uri": "https://directory.mycompany.example.com",
"listAs": 1 "listAs": 1
}, },
"DIRECTORY-2": { "DIRECTORY-2": {
"kind": "directory", "kind": "directory",
"uri": "ldap://ldap.tech.example/o=Tech,ou=Engineering", "uri": "ldap://ldap.tech.example/o=Tech,ou=Engineering",
"pref": 1 "pref": 1
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section> <section>
<name>Explanatory Properties</name> <name>Explanatory Properties</name>
<section anchor="vcard-prop-categories"> <section anchor="vcard-prop-categories">
<name>CATEGORIES</name> <name>CATEGORIES</name>
<t>A CATEGORIES property converts to a set of entries of the <tt>keywo <t>The CATEGORIES property (<xref target="RFC6350" derivedContent="RFC
rds</tt> property (<xref target="categories_conversion"/>). The keys are the co 6350" section="6.7.1" sectionFormat="of"/>) converts to a set of entries of the
mma-separated text values of the CATEGORIES property.</t> Card object's keywords property (<xref target="categories_conversion"/>). The k
<t>In this case, the PREF parameter does not have a JSContact counterp eys are the comma-separated text values of the CATEGORIES property.</t>
art; however, the implementors <bcp14>MAY</bcp14> insert the map entries by orde <t>In this case, the PREF parameter does not have a JSContact counterp
r of preference.</t> art; however, the implementors <bcp14>MAY</bcp14> insert the entries by order of
preference.</t>
<figure anchor="categories_conversion"> <figure anchor="categories_conversion">
<name>CATEGORIES conversion example</name> <name>CATEGORIES Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
CATEGORIES:internet,IETF,Industry,Information Technology CATEGORIES:internet,IETF,Industry,Information Technology
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"keywords": { "keywords": {
"internet": true, "internet": true,
"IETF": true, "IETF": true,
"Industry": true, "Industry": true,
"Information Technology": true "Information Technology": true
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-pid"> <section anchor="vcard-prop-clientpidmap">
<name>CLIENTPIDMAP and PID Parameter</name> <name>CLIENTPIDMAP</name>
<t>These convert to the <xref target="jscontact-prop-vcardprops"><tt>v <t>The CLIENTPIDMAP property (<xref target="RFC6350" derivedContent="R
CardProps</tt></xref> and <xref target="jscontact-prop-vcardparams"><tt>vCardPar FC6350" section="6.7.7" sectionFormat="of"/>) converts to the <xref target="jsco
ams</tt></xref> properties.</t> ntact-prop-vcardprops">vCardProps</xref> property.</t>
</section> </section>
<section anchor="vcard-prop-created"> <section anchor="vcard-prop-created">
<name>CREATED</name> <name>CREATED</name>
<t>The CREATED property converts to the <tt>created</tt> property (<xr ef target="created_conversion"/>).</t> <t>The CREATED property (<xref target="RFC9554" derivedContent="RFC9554 " section="3.1" sectionFormat="of"/>) converts to the Card object's created prop erty (<xref target="created_conversion"/>).</t>
<figure anchor="created_conversion"> <figure anchor="created_conversion">
<name>CREATED conversion example</name> <name>CREATED Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
CREATED:19940930T143510Z CREATED:19940930T143510Z
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"created": "1994-09-30T14:35:10Z" "created": "1994-09-30T14:35:10Z"
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>Note: This property is defined in <xref target="I-D.ietf-calext-vca rd-jscontact-extensions"/>.</t>
</section> </section>
<section anchor="vcard-prop-note"> <section anchor="vcard-prop-note">
<name>NOTE</name> <name>NOTE</name>
<t>A NOTE property converts to a <tt>Note</tt> object in the <tt>notes <t>The NOTE property (<xref target="RFC6350" derivedContent="RFC6350"
</tt> map (<xref target="notes_conversion"/>).</t> section="6.7.2" sectionFormat="of"/>) converts to a Note object (<xref target="R
<t>The ALTID and LANGUAGE parameters convert according to the rules as FC9553" derivedContent="RFC9553" section="2.8.3" sectionFormat="of"/>) in the Ca
defined in <xref target="vcard-parameters"/>.</t> rd object's notes property (<xref target="notes_conversion"/>).</t>
<t>The ALTID and LANGUAGE parameters convert according to the rules de
fined in <xref target="vcard-parameters"/>.</t>
<figure anchor="notes_conversion"> <figure anchor="notes_conversion">
<name>NOTE conversion example</name> <name>NOTE Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
NOTE;CREATED=20221123T150132Z;AUTHOR-NAME="John": NOTE;CREATED=20221123T150132Z;AUTHOR-NAME="John":
Office hours are from 0800 to 1715 EST\, Mon-Fri. Office hours are from 0800 to 1715 EST\, Mon-Fri.
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"notes": { "notes": {
"NOTE-1" : { "NOTE-1" : {
"note": "Office hours are from 0800 to 1715 EST, Mon-Fri.", "note": "Office hours are from 0800 to 1715 EST, Mon-Fri.",
"created": "2022-11-23T15:01:32Z", "created": "2022-11-23T15:01:32Z",
"author": { "author": {
"name": "John" "name": "John"
} }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-prodid"> <section anchor="vcard-prop-prodid">
<name>PRODID</name> <name>PRODID</name>
<t>The PRODID property converts to the <tt>prodId</tt> property (<xref target="prodid_conversion"/>).</t> <t>The PRODID property (<xref target="RFC6350" derivedContent="RFC6350 " section="6.7.3" sectionFormat="of"/>) converts to the Card object's prodId pro perty (<xref target="prodid_conversion"/>).</t>
<figure anchor="prodid_conversion"> <figure anchor="prodid_conversion">
<name>PRODID conversion example</name> <name>PRODID Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
PRODID:ACME Contacts App version 1.23.5 PRODID:ACME Contacts App version 1.23.5
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"prodId": "ACME Contacts App version 1.23.5" "prodId": "ACME Contacts App version 1.23.5"
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-rev"> <section anchor="vcard-prop-rev">
<name>REV</name> <name>REV</name>
<t>The REV property converts to the <tt>updated</tt> property (<xref t arget="rev_conversion"/>).</t> <t>The REV property (<xref target="RFC6350" derivedContent="RFC6350" s ection="6.7.4" sectionFormat="of"/>) converts to the Card object's updated prope rty (<xref target="rev_conversion"/>).</t>
<figure anchor="rev_conversion"> <figure anchor="rev_conversion">
<name>REV conversion example</name> <name>REV Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
REV:19951031T222710Z REV:19951031T222710Z
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"updated": "1995-10-31T22:27:10Z" "updated": "1995-10-31T22:27:10Z"
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-sound"> <section anchor="vcard-prop-sound">
<name>SOUND</name> <name>SOUND</name>
<t>A SOUND property converts to an entry in the <tt>media</tt> propert <t>The SOUND property (<xref target="RFC6350" derivedContent="RFC6350"
y (<xref target="sound_conversion"/>). The entry value is a <tt>Media</tt> obje section="6.7.5" sectionFormat="of"/>) converts to a Media object (<xref target=
ct whose <tt>kind</tt> property is set to <tt>sound</tt> and <tt>uri</tt> proper "RFC9553" derivedContent="RFC9553" section="2.6.4" sectionFormat="of"/>) in the
ty is set to the SOUND value.</t> Card object's media property (<xref target="sound_conversion"/>). The Media obj
<t>The PREF and TYPE parameters convert according to the rules as defi ect's kind property is set to "sound" and the uri property is set to the SOUND v
ned in <xref target="vcard-parameters"/>.</t> alue.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="sound_conversion"> <figure anchor="sound_conversion">
<name>SOUND conversion example</name> <name>SOUND Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
SOUND:CID:JOHNQPUBLIC.19960229T080000.xyzMail@example.com SOUND:CID:JOHNQPUBLIC.19960229T080000.xyzMail@example.com
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"media": { "media": {
... ...
"SOUND-1": { "SOUND-1": {
"kind": "sound", "kind": "sound",
"uri": "CID:JOHNQPUBLIC.19960229T080000.xyzMail@example.com" "uri": "CID:JOHNQPUBLIC.19960229T080000.xyzMail@example.com"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-uid"> <section anchor="vcard-prop-uid">
<name>UID</name> <name>UID</name>
<t>The UID property corresponds to the <tt>uid</tt> property (<xref ta rget="uid_conversion"/>).</t> <t>The UID property (<xref target="RFC6350" derivedContent="RFC6350" s ection="6.7.6" sectionFormat="of"/>) converts to the Card object's uid property (<xref target="uid_conversion"/>).</t>
<figure anchor="uid_conversion"> <figure anchor="uid_conversion">
<name>UID conversion example</name> <name>UID Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"uid": "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" "uid": "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-url"> <section anchor="vcard-prop-url">
<name>URL</name> <name>URL</name>
<t>A URL property converts to an entry in the <tt>links</tt> property <t>The URL property (<xref target="RFC6350" derivedContent="RFC6350" s
(<xref target="url_conversion"/>). The entry value is a <tt>Link</tt> object wh ection="6.7.8" sectionFormat="of"/>) converts to a Link object (<xref target="RF
ose <tt>uri</tt> property is set to the URL value.</t> C9553" derivedContent="RFC9553" section="2.6.3" sectionFormat="of"/>) in the Car
<t>The PREF and TYPE parameters convert according to the rules as defi d object's links property (<xref target="url_conversion"/>). The Link object's
ned in <xref target="vcard-parameters"/>.</t> uri property is set to the URL value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="url_conversion"> <figure anchor="url_conversion">
<name>URL conversion example</name> <name>URL Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
URL:https://example.org/restaurant.french/~chezchic.html URL:https://example.org/restaurant.french/~chezchic.html
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"links": { "links": {
"LINK-1": { "LINK-1": {
"uri": "https://example.org/restaurant.french/~chezchic.html" "uri": "https://example.org/restaurant.french/~chezchic.html"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-version"> <section anchor="vcard-prop-version">
<name>VERSION</name> <name>VERSION</name>
<t>This converts to an entry in the <xref target="jscontact-prop-vcard props"><tt>vCardProps</tt></xref> property.</t> <t>The VERSION property (<xref target="RFC6350" derivedContent="RFC635 0" section="6.7.9" sectionFormat="of"/>) converts to the <xref target="jscontact -prop-vcardprops">vCardProps</xref> property.</t>
</section> </section>
<section anchor="vcard-prop-xablabel"> <section anchor="vcard-prop-xablabel">
<name>X-ABLabel</name> <name>X-ABLabel</name>
<t>This property is experimental but widely in use in existing vCard d <t>The X-ABLabel property is experimental but widely in use in existin
ata. It converts to the <tt>label</tt> property of a JSContact object type. Th g vCard data. It converts to the label property of a JSContact object.
e X-ABLabel property is preceded by a vCard property group name, and the label c The X-ABLabel property is preceded by a vCard property group name, and
onverts to the JSContact object which got converted from a vCard property having the label converts to the JSContact object, which was converted from a vCard pro
the same group.</t> perty of the same group.</t>
<t>The group name is not preserved, implementations are free to choose <t>The group name is not preserved; implementations are free to choose
any unique group name when converting back to vCard. For an example how to pre any unique group name when converting back to vCard. For an example on how to
serve the group name see <xref target="vcard-param-group"/>.</t> preserve the group name, see <xref target="vcard-param-group"/>.</t>
<figure anchor="xablabel_conversion"> <figure anchor="xablabel_conversion">
<name>X-ABLabel conversion example</name> <name>X-ABLabel Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
item1.TEL;VALUE=uri:tel:+1-555-555-5555 item1.TEL;VALUE=uri:tel:+1-555-555-5555
item1.X-ABLabel:foo item1.X-ABLabel:foo
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"phones": { "phones": {
"p1": { "p1": {
"number": "tel:+1-555-555-5555", "number": "tel:+1-555-555-5555",
"label": "foo" "label": "foo"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section> <section>
<name>Security Properties</name> <name>Security Properties</name>
<section anchor="vcard-prop-key"> <section anchor="vcard-prop-key">
<name>KEY</name> <name>KEY</name>
<t>A KEY property converts to an entry in the <tt>cryptoKeys</tt> prop <t>The KEY property (<xref target="RFC6350" derivedContent="RFC6350" s
erty (<xref target="key_conversion"/>). The entry value is a <tt>CryptoKey</tt> ection="6.8.1" sectionFormat="of"/>) converts to a CryptoKey object (<xref targe
object whose <tt>uri</tt> property is set to the KEY value.</t> t="RFC9553" derivedContent="RFC9553" section="2.6.1" sectionFormat="of"/>) in th
<t>The PREF and TYPE parameters convert according to the rules as defi e Card object's cryptoKeys property (<xref target="key_conversion"/>). The Cryp
ned in <xref target="vcard-parameters"/>.</t> toKey object's uri property is set to the KEY property value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="key_conversion"> <figure anchor="key_conversion">
<name>KEY conversion example</name> <name>KEY Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
KEY:https://www.example.com/keys/jdoe.cer KEY:https://www.example.com/keys/jdoe.cer
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"cryptoKeys": { "cryptoKeys": {
"KEY-1": { "KEY-1": {
"uri": "https://www.example.com/keys/jdoe.cer" "uri": "https://www.example.com/keys/jdoe.cer"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section> <section>
<name>Calendar Properties</name> <name>Calendar Properties</name>
<section anchor="vcard-prop-caladruri"> <section anchor="vcard-prop-caladruri">
<name>CALADRURI</name> <name>CALADRURI</name>
<t>A CALADRURI property converts to an entry in the <tt>schedulingAddr <t>The CALADRURI property (<xref target="RFC6350" derivedContent="RFC6
esses</tt> property (<xref target="caladruri_conversion"/>). The entry value is 350" section="6.9.2" sectionFormat="of"/>) converts to a SchedulingAddress objec
a <tt>SchedulingAddress</tt> object whose <tt>uri</tt> property is set to the C t (<xref target="RFC9553" derivedContent="RFC9553" section="2.4.2" sectionFormat
ALADRURI value.</t> ="of"/>) in the Card object's schedulingAddresses property (<xref target="caladr
<t>The PREF parameter converts according to the rules as defined in <x uri_conversion"/>). The SchedulingAddress object's uri property is set to the C
ref target="vcard-parameters"/>.</t> ALADRURI value.</t>
<t>The PREF parameter (<xref target="RFC6350" derivedContent="RFC6350"
section="5.3" sectionFormat="of"/>) converts according to the rules defined in
<xref target="vcard-parameters"/>.</t>
<figure anchor="caladruri_conversion"> <figure anchor="caladruri_conversion">
<name>CALADRURI conversion example</name> <name>CALADRURI Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
CALADRURI;PREF=1:mailto:janedoe@example.com CALADRURI;PREF=1:mailto:janedoe@example.com
CALADRURI:https://example.com/calendar/jdoe CALADRURI:https://example.com/calendar/jdoe
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"schedulingAddresses": { "schedulingAddresses": {
"SCHEDULING-1": { "SCHEDULING-1": {
"uri": "mailto:janedoe@example.com", "uri": "mailto:janedoe@example.com",
"pref": 1 "pref": 1
}, },
"SCHEDULING-2": { "SCHEDULING-2": {
"uri": "https://example.com/calendar/jdoe" "uri": "https://example.com/calendar/jdoe"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-caluri"> <section anchor="vcard-prop-caluri">
<name>CALURI</name> <name>CALURI</name>
<t>A CALURI property converts to an entry in the <tt>calendars</tt> pr <t>The CALURI property (<xref target="RFC6350" derivedContent="RFC6350
operty (<xref target="caluri_conversion"/>). The entry value is a <tt>Calendar< " section="6.9.3" sectionFormat="of"/>) converts to a Calendar object (<xref tar
/tt> object whose <tt>kind</tt> property is set to <tt>calendar</tt> and <tt>uri get="RFC9553" derivedContent="RFC9553" section="2.4.1" sectionFormat="of"/>) in
</tt> property is set to the CALURI value.</t> the Card object's calendars property (<xref target="caluri_conversion"/>). The
<t>The PREF and TYPE parameters convert according to the rules as defi Calendar object's kind property is set to "calendar" and the uri property is set
ned in <xref target="vcard-parameters"/>.</t> to the CALURI value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="caluri_conversion"> <figure anchor="caluri_conversion">
<name>CALURI conversion example</name> <name>CALURI Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
CALURI;PREF=1:https://cal.example.com/calA CALURI;PREF=1:https://cal.example.com/calA
CALURI;MEDIATYPE=text/calendar:https://ftp.example.com/calA.ics CALURI;MEDIATYPE=text/calendar:https://ftp.example.com/calA.ics
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"calendars": { "calendars": {
"CAL-1": { "CAL-1": {
"kind": "calendar", "kind": "calendar",
"uri": "https://cal.example.com/calA", "uri": "https://cal.example.com/calA",
"pref": 1 "pref": 1
}, },
"CAL-2": { "CAL-2": {
"kind": "calendar", "kind": "calendar",
"uri": "https://ftp.example.com/calA.ics", "uri": "https://ftp.example.com/calA.ics",
"mediaType": "text/calendar" "mediaType": "text/calendar"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="vcard-prop-fburl"> <section anchor="vcard-prop-fburl">
<name>FBURL</name> <name>FBURL</name>
<t>An FBURL property converts to an entry in the <tt>calendars</tt> pr <t>The FBURL property (<xref target="RFC6350" derivedContent="RFC6350"
operty (<xref target="fburl_conversion"/>). The entry value is a <tt>Calendar</ section="6.9.1" sectionFormat="of"/>) converts to a Calendar object (<xref targ
tt> object whose <tt>kind</tt> property is set to <tt>freeBusy</tt> and <tt>uri< et="RFC9553" derivedContent="RFC9553" section="2.4.1" sectionFormat="of"/>) in t
/tt> property is set to the FBURL value.</t> he Card object's calendars property (<xref target="fburl_conversion"/>). The Ca
<t>The PREF and TYPE parameters convert according to the rules as defi lendar object's kind property is set to "freeBusy" and the uri property is set t
ned in <xref target="vcard-parameters"/>.</t> o the FBURL value.</t>
<t>The PREF and TYPE parameters convert according to the rules defined
in <xref target="vcard-parameters"/>.</t>
<figure anchor="fburl_conversion"> <figure anchor="fburl_conversion">
<name>FBURL conversion example</name> <name>FBURL Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
FBURL;PREF=1:https://www.example.com/busy/janedoe FBURL;PREF=1:https://www.example.com/busy/janedoe
FBURL;MEDIATYPE=text/calendar:https://example.com/busy/project-a.ifb FBURL;MEDIATYPE=text/calendar:https://example.com/busy/project-a.ifb
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"calendars": { "calendars": {
"FBURL-1": { "FBURL-1": {
"kind": "freeBusy", "kind": "freeBusy",
"uri": "https://www.example.com/busy/janedoe", "uri": "https://www.example.com/busy/janedoe",
"pref": 1 "pref": 1
}, },
"FBURL-2": { "FBURL-2": {
"kind": "freeBusy", "kind": "freeBusy",
"uri": "https://example.com/busy/project-a.ifb", "uri": "https://example.com/busy/project-a.ifb",
"mediaType": "text/calendar" "mediaType": "text/calendar"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section anchor="vcard-extended"> <section anchor="vcard-extended">
<name>Extended Properties and Parameters</name> <name>Extended Properties and Parameters</name>
<t>These convert as specified in <xref target="new-jscontact"/>.</t> <t>Extended properties and parameters convert as specified in <xref targ et="new-jscontact"/>.</t>
</section> </section>
<section anchor="new-jscontact"> <section anchor="new-jscontact">
<name>New JSContact properties</name> <name>New JSContact Properties</name>
<t>vCards may contain properties or parameters for which no IANA-registe <t>vCards may contain properties or parameters for which no IANA-registe
red JSContact property is defined. For example, a vCard may contain properties red JSContact property is defined. For example, a vCard may contain properties
and parameters of which the semantics or purposes are unknown to the implementat and parameters of which the semantics or purposes are unknown to the implementat
ion; see <xref target="RFC6350" section="6.10"/>.</t> ion; see <xref target="RFC6350" sectionFormat="of" section="6.10"/>.</t>
<t>This section defines JSContact properties by which such vCard propert ies and parameters <bcp14>MAY</bcp14> be represented in JSContact. Implementati ons <bcp14>MAY</bcp14> choose to convert differently if they deem that more appr opriate.</t> <t>This section defines JSContact properties by which such vCard propert ies and parameters <bcp14>MAY</bcp14> be represented in JSContact. Implementati ons <bcp14>MAY</bcp14> choose to convert differently if they deem that more appr opriate.</t>
<section anchor="jscontact-prop-vcardprops"> <section anchor="jscontact-prop-vcardprops">
<name>Property <tt>vCardProps</tt></name> <name>vCardProps</name>
<dl> <dl>
<dt>Name:</dt> <dt>vCardProps: JCardProp[] (optional).</dt>
<dd> <dd>Contains vCard properties that are set in the vCard represented
<tt>vCardProps</tt> by this JSContact object. The JCardProp type denotes a jCard-encoded vCard prop
</dd> erty as defined in <xref target="RFC7095" sectionFormat="of" section="3.3"/>.</d
<dt>Type:</dt> d>
<dd><tt>JCardProp[]</tt>, where <tt>JCardProp</tt> denotes a jCard-e
ncoded vCard property as defined in <xref target="RFC7095" section="3.3"/>.
</dd>
<dt>Definition:</dt>
<dd>This property is set on a JSContact object that represents a vCa
rd. It contains properties that are set in the vCard represented by this JSCont
act object. Each entry in this list typically represents a vCard property for w
hich no conversion to an IANA-registered JSContact property is defined.</dd>
<dt>Example:</dt> <dt>Example:</dt>
<dd> <dd>
<t>This illustrates how to convert a vCard extension property:</t> <t>This illustrates how to convert a vCard extension property:</t>
<figure anchor="props_conversion"> <figure anchor="props_conversion">
<name>JSContact <tt>vCardProps</tt> example</name> <name>JSContact vCardProps Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
item1.X-FOO;X-BAR=Hello:World! item1.X-FOO;X-BAR=Hello:World!
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"vCardProps": [ "vCardProps": [
["x-foo", { ["x-foo", {
"x-bar": "Hello", "x-bar": "Hello",
"group": "item1" "group": "item1"
}, "unknown", "World!"] }, "unknown", "World!"]
] ]
]]></artwork> ]]></sourcecode>
</figure> </figure>
</dd> </dd>
</dl> </dl>
</section> </section>
<section anchor="jscontact-prop-vcardparams"> <section anchor="jscontact-prop-vcardparams">
<name>Property <tt>vCardParams</tt></name> <name>vCardParams</name>
<dl> <dl>
<dt>Name:</dt> <dt>vCardParams: String[String|String[]] (optional).</dt>
<dd> <dd>Contains vCard parameters that are set on the vCard property rep
<tt>vCardParams</tt> resented by this JSContact object. The value <bcp14>MUST</bcp14> be a JSON obje
</dd> ct containing vCard property parameters as defined in <xref target="RFC7095" sec
<dt>Type:</dt> tionFormat="of" section="3.3"/>. Each entry represents a parameter of the vCard
<dd> property that converts to the JSContact object.</dd>
<tt>String[String|String[]]</tt>
</dd>
<dt>Definition:</dt>
<dd>This property is set on a JSContact object that represents a vCa
rd property. Its value <bcp14>MUST</bcp14> be a JSON object containing vCard pr
operty parameters, defined as array element 2 in <xref target="RFC7095" section=
"3.3"/>. Each entry represents a parameter of the vCard property that converts
to the JSContact object.</dd>
<dt>Example:</dt> <dt>Example:</dt>
<dd> <dd>
<t>This illustrates how to convert a vCard extension parameter:</t > <t>This illustrates how to convert a vCard extension parameter:</t >
<figure anchor="params_conversion"> <figure anchor="params_conversion">
<name>JSContact <tt>vCardParams</tt> example</name> <name>JSContact vCardParams Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
EMAIL;X-FOO=Bar:jane_doe@example.com EMAIL;X-FOO=Bar:jane_doe@example.com
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"emails": { "emails": {
"email1": { "email1": {
"address": "jane_doe@example.com", "address": "jane_doe@example.com",
"vCardParams": { "vCardParams": {
"x-foo": "Bar" "x-foo": "Bar"
} }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</dd> </dd>
</dl> </dl>
</section> </section>
<section anchor="jscontact-prop-vcardname"> <section anchor="jscontact-prop-vcardname">
<name>Property <tt>vCardName</tt></name> <name>vCardName</name>
<dl> <dl>
<dt>Name:</dt> <dt>vCardName: String (optional).</dt>
<dd> <dd>Contains the name of the vCard element that is represented by th
<tt>vCardName</tt> is JSContact object. For example, this allows to preserve the name of a vCard p
</dd> roperty when multiple vCard properties convert the same JSContact type. The cas
<dt>Type:</dt> e-insensitive value <bcp14>MUST</bcp14> be valid according to the "name" ABNF de
<dd> fined in <xref target="RFC6350" sectionFormat="of" section="3.3"/>.</dd>
<tt>String</tt>
</dd>
<dt>Definition:</dt>
<dd>This property is set on a JSContact object that represents a vCa
rd property or parameter and its value contains the name of that vCard element.
This allows to preserve the name of a vCard element when multiple elements conv
ert the same JSContact object type. The case-insensitive value <bcp14>MUST</bcp
14> be valid according to the <tt>name</tt> ABNF defined in <xref target="RFC635
0" section="3.3"/>.</dd>
<dt>Example:</dt> <dt>Example:</dt>
<dd> <dd>
<t>Both vCard IMPP and SOCIALPROFILE convert to OnlineService in J SContact. The <tt>vCardName</tt> property value indicates that the vCard source element was IMPP:</t> <t>Both vCard IMPP and SOCIALPROFILE convert to an OnlineService o bject (<xref target="RFC9553" derivedContent="RFC9553" section="2.3.2" sectionFo rmat="of"/>) in JSContact. The vCardName property value indicates that the vCar d source element was IMPP as follows:</t>
<figure anchor="example-vcardname"> <figure anchor="example-vcardname">
<name>JSContact <tt>vCardName</tt> example</name> <name>JSContact vCardName Example</name>
<artwork><![CDATA[ <sourcecode type="text/plain"><![CDATA[
IMPP:xmpp:alice@example.com IMPP:xmpp:alice@example.com
]]></sourcecode>
<sourcecode type="json"><![CDATA[
"onlineServices": { "onlineServices": {
"os1": { "os1": {
"uri": "xmpp:alice@example.com", "uri": "xmpp:alice@example.com",
"vCardName": "impp" "vCardName": "impp"
}, },
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</dd> </dd>
</dl> </dl>
</section> </section>
</section> </section>
</section> </section>
<section anchor="convert-jscontact-to-vcard"> <section anchor="convert-jscontact-to-vcard">
<name>Converting JSContact to vCard</name> <name>Converting JSContact to vCard</name>
<section> <section>
<name>Conversion Rules</name> <name>Conversion Rules</name>
<t>A <tt>Card</tt> converts to vCard by applying the reverse rules of co nverting vCard to JSContact. In addition to those listed in <xref target="conve rt_jscontact_to_vcard-reverse-rules"/>, the following rules apply:</t> <t>A Card object converts to vCard by applying the reverse rules of conv erting vCard to JSContact. In addition to those listed in <xref target="convert _jscontact_to_vcard-reverse-rules"/>, the following rules apply:</t>
<ul> <ul>
<li>Multivalued JSContact properties convert to separate instances of their equivalent vCard property, and for each the PROP-ID parameter <bcp14>MUST< /bcp14> be set to the <tt>Id</tt> of the converted value (see <xref target="vcar d-param-propid"/>).</li> <li>Multivalued JSContact properties convert to separate instances of their equivalent vCard property, and each of the PROP-ID parameters <bcp14>MUST< /bcp14> be set to the Id-typed key of the converted value (see <xref target="vca rd-param-propid"/>).</li>
<li> <li>
<t>The <tt>full</tt> property of the <tt>name</tt> property in JSCon tact is optional, but the FN property is mandatory in vCard. The following rule s apply:</t> <t>The full property of the name property in JSContact is optional, but the FN property is mandatory in vCard. The following rules apply:</t>
<ul> <ul>
<li>If the Name <tt>full</tt> property is set, then implementation <li>If the Name object's full property is set, then implementation
s <bcp14>MUST</bcp14> use its value for the vCard FN property.</li> s <bcp14>MUST</bcp14> use its value for the vCard FN property.</li>
<li>If the Name <tt>full</tt> property is not set, then implementa <li>If the Name object's full property is not set, then implementa
tions <bcp14>SHOULD</bcp14> derive the full name from the Name <tt>components</t tions <bcp14>SHOULD</bcp14> derive the full name from the Name object's componen
t> values. If the <tt>isOrdered</tt> property is true, then this can be done by ts property values. If the isOrdered property is "true", then this can be done
concatenating the name component values. Otherwise, or alternatively, an imple by concatenating the name component values. Otherwise, or alternatively, an imp
mentation can choose any other heuristic to generate the full name from its comp lementation can choose any other heuristic to generate the full name from its co
onents, such as <xref target="CLDRPersonName"/>. Implementations <bcp14>MUST</b mponents such as <xref target="CLDRPersonName"/>. Implementations <bcp14>MUST</
cp14> set the DERIVED parameter on the FN property.</li> bcp14> set the DERIVED parameter on the FN property.</li>
<li>Otherwise, they <bcp14>MUST</bcp14> set the FN property to the <li>Otherwise, the FN property <bcp14>MUST</bcp14> be set to the e
empty value.</li> mpty value.</li>
</ul> </ul>
</li> </li>
<li>Vendor-specific and unknown properties convert to vCard as outline d in <xref target="jscontact-convert-unknown"/>.</li> <li>Vendor-specific and unknown properties convert to vCard as outline d in <xref target="jscontact-convert-unknown"/>.</li>
</ul> </ul>
<section anchor="jscontact-convert-unknown"> <section anchor="jscontact-convert-unknown">
<name>Converting unknown properties</name> <name>Converting Unknown Properties</name>
<t>JSContact object types may contain properties for which no IANA-reg <t>JSContact objects may contain properties for which no IANA-register
istered vCard property is defined. For example, a JSContact object may contain ed vCard property is defined. For example, a JSContact object may contain vendo
vendor-specific properties of which the semantics or purpose are unknown.</t> r-specific properties of which the semantics or purpose are unknown.</t>
<t>This specification defines the new <xref target="vcard-prop-jsprop" <t>This specification defines the new <xref target="vcard-prop-jsprop"
><tt>JSPROP</tt></xref> vCard property and <xref target="vcard-param-jsptr"><tt> >JSPROP</xref> vCard property and <xref target="vcard-param-jsptr">JSPTR</xref>
JSPTR</tt></xref> vCard parameter by which such JSContact properties <bcp14>MAY< vCard parameter by which such JSContact properties <bcp14>MAY</bcp14> be represe
/bcp14> be represented in vCard. Implementations <bcp14>MAY</bcp14> choose to c nted in vCard. Implementations <bcp14>MAY</bcp14> choose to convert differently
onvert differently if they deem that more appropriate.</t> if they deem that more appropriate.</t>
</section> </section>
</section> </section>
<section anchor="new-vcard-props"> <section anchor="new-vcard-props">
<name>New vCard Properties</name> <name>New vCard Properties</name>
<section anchor="vcard-prop-jsprop"> <section anchor="vcard-prop-jsprop">
<name>JSPROP</name> <name>JSPROP</name>
<dl> <dl>
<dt>Property name:</dt> <dt>Property name:</dt>
<dd>JSPROP</dd> <dd>JSPROP</dd>
<dt>Purpose:</dt> <dt>Purpose:</dt>
<dd>This property represents a JSContact property in vCard.</dd> <dd>Represents a JSContact property in vCard.</dd>
<dt>Value type:</dt> <dt>Value type:</dt>
<dd>TEXT, also see Format Definition for value restrictions.</dd> <dd>TEXT; also see "Format definition" below for value restrictions. </dd>
<dt>Conformance:</dt> <dt>Conformance:</dt>
<dd>The property can be specified multiple times in a vCard.</dd> <dd>Can be specified multiple times in a vCard.</dd>
<dt>Property parameters:</dt> <dt>Property parameters:</dt>
<dd> <dd>
The JSPTR parameter <bcp14>MUST</bcp14> be set for this property. The JSPTR parameter <bcp14>MUST</bcp14> be set for this property.
Other IANA-registered and experimental property parameters can be spec ified on this property. Other IANA-registered and experimental property parameters can be spec ified on this property.
</dd> </dd>
<dt>Description:</dt> <dt>Description:</dt>
<dd> <dd>
<t>This property converts an arbitrary JSContact property from and to vCard. The vCard property value is the JSON-encoded value of the JSContact property, represented as a TEXT value. The format of the JSON value <bcp14>MUST </bcp14> be compact, e.g., without insignificant whitespace. The value of the J SPTR parameter points to the JSContact property within the Card.</t> <t>This property converts an arbitrary JSContact property fro m and to vCard. The vCard property value is the JSON-encoded value of the JSCon tact property, represented as a TEXT value. The format of the JSON value <bcp14 >MUST</bcp14> be compact, e.g., without insignificant whitespace as defined in < xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC825 9" section="2"/>. The value of the JSPTR parameter points to the JSContact prop erty within the Card.</t>
<t>The root of the JSON pointer is always the Card object that t his vCard converts to, irrespective if the JSON pointer starts with the SOLIDUS (U+002F) character. The pointer <bcp14>MUST NOT</bcp14> reference into an array .</t> <t>The root of the JSON pointer is always the Card object that t his vCard converts to, irrespective if the JSON pointer starts with the SOLIDUS (U+002F) character. The pointer <bcp14>MUST NOT</bcp14> reference into an array .</t>
<t>All JSPROP properties in a vCard together form a PatchObject as defined in <xref target="I-D.ietf-calext-jscontact"/>. The value of its JSPT R parameter corresponds to a key in the PatchObject, the value of the JSPROP pro perty corresponds to the value for that key. When converting from vCard to JSCo ntact, the PatchObject <bcp14>MUST</bcp14> only be applied after all other vCard properties have already been converted. The PatchObject <bcp14>MUST</bcp14> be valid, including the restriction that an invalid PatchObject <bcp14>MUST NOT</b cp14> be applied.</t> <t>All JSPROP properties in a vCard together form a PatchObject as defined in <xref target="RFC9553"/>. The value of its JSPTR parameter corres ponds to a key in the PatchObject; the value of the JSPROP property corresponds to the value for that key. When converting from vCard to JSContact, the PatchOb ject <bcp14>MUST</bcp14> only be applied after all other vCard properties have a lready been converted. The PatchObject <bcp14>MUST</bcp14> be valid, including the restriction that an invalid PatchObject <bcp14>MUST NOT</bcp14> be applied.< /t>
</dd> </dd>
<dt>Format definition:</dt> <dt>Format definition:</dt>
<dd> <dd>
<t>This property is defined by the following notation:</t> <t>This property is defined by the following notation:</t>
<sourcecode name="" type="abnf"><![CDATA[
<sourcecode type="abnf"><![CDATA[
jsprop = "JSPROP" jsprop-param ":" TEXT jsprop = "JSPROP" jsprop-param ":" TEXT
jsprop-param = *( jsprop-param = *(
; The following are MANDATORY and MUST NOT ; The following are MANDATORY and MUST NOT
; occur more than once ; occur more than once
( ";" jsptr-param ) / ; see next section ( ";" jsptr-param ) / ; see next section
( ";" "VALUE" "=" "TEXT") ( ";" "VALUE" "=" "TEXT")
; ;
; The following is OPTIONAL, ; The following is OPTIONAL
; and MAY occur more than once. ; and MAY occur more than once.
; ;
(";" other-param) (";" other-param)
; ;
) )
]]></sourcecode> ]]></sourcecode>
</dd> </dd>
<dt anchor="vcard-prop-jsprop-examples">Example(s):</dt> <dt anchor="vcard-prop-jsprop-examples">Example(s):</dt>
<dd> <dd>
<t>This illustrates how to convert a property at the top-level in a Card object that is unknown to the implementation.</t> <t>This illustrates how to convert a property at the top level in a Card object that is unknown to the implementation.</t>
<figure anchor="jscontact-prop-unknown"> <figure anchor="jscontact-prop-unknown">
<name>Unknown property example</name> <name>Unknown Property Example</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
"someUnknownProperty": true "someUnknownProperty": true
]]></sourcecode>
<sourcecode type="text/plain"><![CDATA[
JSPROP;JSPTR="someUnknownProperty":true JSPROP;JSPTR="someUnknownProperty":true
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>This illustrates how to convert a vendor-specific property at t he top-level of a Card object. Note the required use of quoted string for the J SPTR value which allows the path to include the COLON (U+003A) character.</t> <t>This illustrates how to convert a vendor-specific property at t he top level of a Card object. Note the required use of quoted string for the J SPTR value, which allows the path to include the COLON (U+003A) character.</t>
<figure anchor="jscontact-prop-vendor-specific"> <figure anchor="jscontact-prop-vendor-specific">
<name>Vendor-specific property conversion example</name> <name>Vendor-Specific Property Conversion Example</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
"example.com:foo": { "example.com:foo": {
"bar": 1234 "bar": 1234
} }
]]></sourcecode>
<sourcecode type="text/plain"><![CDATA[
JSPROP;JSPTR="example.com:foo":{"bar":1234} JSPROP;JSPTR="example.com:foo":{"bar":1234}
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>This illustrates how to convert a vendor-specific property at a nested level in a Card object using a path relative to the Card object. Althou gh not recommended, the property name includes the SOLIDUS (U+002F) character wh ich requires escaping in the JSON pointer.</t> <t>This illustrates how to convert a vendor-specific property at a nested level in a Card object using a path relative to the Card object. Althou gh not recommended, the property name includes the SOLIDUS (U+002F) character, w hich requires escaping in the JSON pointer.</t>
<figure anchor="jscontact-prop-nested"> <figure anchor="jscontact-prop-nested">
<name>Nested vendor-specific property example with path relative <name>Nested Vendor-Specific Property Example with a Path Relati
to Card</name> ve to Card</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
"phones": { "phones": {
"phone1": { "phone1": {
"number": "tel:+33-01-23-45-67" "number": "tel:+33-01-23-45-67",
"example.com:foo/bar": "tux hux" "example.com:foo/bar": "tux hux"
} }
} }
]]></sourcecode>
<sourcecode type="text/plain"><![CDATA[
TEL:tel:+33-01-23-45-67 TEL:tel:+33-01-23-45-67
JSPROP;JSPTR="phones/phone1/example.com:foo~1bar": JSPROP;JSPTR="phones/phone1/example.com:foo~1bar":
"tux hux" "tux hux"
]]></artwork> ]]></sourcecode>
</figure> </figure>
</dd> </dd>
</dl> </dl>
</section> </section>
</section> </section>
<section> <section>
<name>New vCard Parameter</name> <name>New vCard Parameters</name>
<section anchor="vcard-param-jscomps"> <section anchor="vcard-param-jscomps">
<name>JSCOMPS</name> <name>JSCOMPS</name>
<dl> <dl>
<dt>Parameter name:</dt> <dt>Parameter name:</dt>
<dd>JSCOMPS</dd> <dd>JSCOMPS</dd>
<dt>Purpose:</dt> <dt>Purpose:</dt>
<dd>This parameter defines the order and separators for the elements of a structured property value.</dd> <dd>Defines the order and separators for the elements of a structure d property value.</dd>
<dt>Description:</dt> <dt>Description:</dt>
<dd> <dd>
<t>The JSCOMPS parameter value facilitates converting name and add <t>The JSCOMPS parameter value facilitates converting name and add
ress components between JSContact and vCard. It preserves the order of the comp ress components between JSContact and vCard. It preserves the order of the comp
onents the JSContact property and contains the verbatim values of separator comp onents of the JSContact property and contains the verbatim values of separator c
onents.</t> omponents.</t>
<t>If this parameter is set and its value is valid (see later), th <t>If this parameter is set and its value is valid (see later), th
en implementations <bcp14>MUST</bcp14> set the <tt>isOrdered</tt> property of th en implementations <bcp14>MUST</bcp14> set the isOrdered property of the Name or
e Name or Address object to "true". Otherwise, they <bcp14>MUST</bcp14> set the Address object to "true". Otherwise, they <bcp14>MUST</bcp14> set the isOrdered
<tt>isOrdered</tt> property value to "false".</t> property value to "false".</t>
<t>The JSCOMPS parameter value is a structured type value. Its val <t>The JSCOMPS parameter value is a structured type value. Its val
ue <bcp14>MUST</bcp14> be quoted. The parameter value consists of a sequence of ue <bcp14>MUST</bcp14> be quoted. The parameter value consists of a sequence of
entries, separated by the SEMICOLON character (U+003B). The first entry define entries, separated by the SEMICOLON character (U+003B). The first entry define
s the value of the <tt>defaultSeparator</tt> property. If it is the empty strin s the value of the defaultSeparator property. If it is the empty string, then n
g then no default separator is defined. Otherwise, the first entry <bcp14>MUST< o default separator is defined. Otherwise, the first entry <bcp14>MUST</bcp14> b
/bcp14> be a separator entry. All following entries processed in order result i e a separator entry. All following entries processed in order result in an orde
n an ordered list of JSContact components, and <bcp14>MUST</bcp14> be one of two red list of JSContact components and <bcp14>MUST</bcp14> be one of the following
following two kinds:</t> two kinds:</t>
<ol> <ol>
<li> <li>
<t>A positional. This refers to a component value in the vCar <t>A positional. This refers to a component value in the vCar
d structured value A position consists of the numeric index of a component in d structured value. A position consists of the numeric index of a component in
the structured value, optionally followed by a COMMA (U+002C) character and the the structured value, optionally followed by a COMMA (U+002C) character and the
non-zero index of a value within that component. The zero index selects the fir non-zero index of a value within that component. The zero index selects the fir
st component or value, respectively. The second index by default is zero, in wh st component or value, respectively. The second index is zero by default, in wh
ich case it <bcp14>MUST</bcp14> be omitted (as well as the leading COMMA).</t> ich case it <bcp14>MUST</bcp14> be omitted (as well as the leading COMMA).</t>
<t>The resulting JSContact component is formed by determining <t>The resulting JSContact component is formed by determining
its kind by the position in the vCard structured value. The component value is its kind by the position in the vCard structured value. The component value is
the verbatim value of the vCard component. <xref target="vcard-param-jscomps-ex the verbatim value of the vCard component. Figures <xref target="vcard-param-js
ample-positional"/> and <xref target="vcard-param-jscomps-example-n-secondary-in comps-example-positional" format="counter"/> and <xref target="vcard-param-jscom
dex"/> illustrate this by example.</t> ps-example-n-secondary-index" format="counter"/> illustrate this by example.</t>
</li> </li>
<li> <li>
<t>A separator. This contains the verbatim value of a separat <t>A separator. This contains the verbatim value of a separat
or component. It starts with the LATIN SMALL LETTER S (U+0073) character, follo or component. It starts with the LATIN SMALL LETTER S (U+0073) character, follo
wed by COMMA (U+002C), followed by zero or more <xref target="RFC6350" section=" wed by the COMMA (U+002C) character, followed by zero or more "param-value" char
3.3"><tt>param-value</tt></xref> characters, where the COMMA (U+002c) and SEMICO acters (see <xref target="RFC6350" sectionFormat="of" section="3.3"/>), where th
LON (U+003B) character <bcp14>MUST</bcp14> be escaped according to the rules def e COMMA (U+002C) and SEMICOLON (U+003B) characters <bcp14>MUST</bcp14> be escape
ined in <xref target="RFC6350" section="3.4"/>. <xref target="vcard-param-jscom d according to the rules defined in <xref target="RFC6350" sectionFormat="of" se
ps-example-separator"/> illustrates this by example.</t> ction="3.4"/>. <xref target="vcard-param-jscomps-example-separator"/> illustrat
<t>The resulting JSContact component is formed by setting its es this by example.</t>
kind to <tt>separator</tt> and its value to the verbatim value of the entry.</t> <t>The resulting JSContact component is formed by setting its
kind to "separator" and its value to the verbatim value of the entry.</t>
</li> </li>
</ol> </ol>
<t>A JSCOMPS parameter value is valid if and only if:</t> <t>A JSCOMPS parameter value is valid if and only if:</t>
<ul> <ul>
<li>All indexes in the positional entries refer to an existing c omponent value in the vCard property value.</li> <li>All indexes in the positional entries refer to an existing c omponent value in the vCard property value.</li>
<li> <li>
<t>The count of positional entries equals the count of dedupli cated component values. Deduplication is required because some values may occur in both their designated and backwards-compatible components in the vCard prope rty value:</t> <t>The count of positional entries equals the count of dedupli cated component values. Deduplication is required because some values may occur in both their designated and backwards-compatible components in the vCard prope rty value:</t>
<ul> <ul>
<li>A value that occurs in both the N property secondary sur name component and the family name component only counts once.</li> <li>A value that occurs in both the N property secondary sur name component and the family name component only counts once.</li>
<li>A value that occurs in both the N property generation co mponent and the honorific suffix component only counts once.</li> <li>A value that occurs in both the N property generation co mponent and the honorific suffix component only counts once.</li>
<li>A value in the ADR property street address component doe s not count if the ADR property value contains a value in one of the new compone nts defined in <xref target="I-D.ietf-calext-vcard-jscontact-extensions"/>.</li> <li>A value in the ADR property street address component doe s not count if the ADR property value contains a value in one of the new compone nts defined in <xref target="RFC9554"/>.</li>
<li>All other values count once each.</li> <li>All other values count once each.</li>
</ul> </ul>
</li> </li>
</ul> </ul>
</dd> </dd>
<dt>Format definition:</dt> <dt>Format definition:</dt>
<dd> <dd>
<sourcecode name="" type="abnf"><![CDATA[ <sourcecode type="abnf"><![CDATA[
jscomps-param = "JSCOMPS" "=" jscomps-param = "JSCOMPS" "=" DQUOTE [jscomps-entry-sep ] ";"
DQUOTE ( jscomps-entrylist DQUOTE
(jscomps-entry-sep / "") ";" jscomps-entrylist
) DQUOTE
jscomps-entrylist = jscomps-entry *(";" jscomps-entry) jscomps-entrylist = jscomps-entry *(";" jscomps-entry)
jscomps-entry = jscomps-entry-pos / jscomps-entry-sep jscomps-entry = jscomps-entry-pos / jscomps-entry-sep
jscomps-entry-pos = 1*DIGIT [ "," 1*DIGIT ] jscomps-entry-pos = 1*DIGIT [ "," 1*DIGIT ]
jscomps-entry-sep = "s" "," jscomps-entry-verb jscomps-entry-sep = "s" "," jscomps-entry-verb
jscomps-entry-verb = *QSAFE-CHAR jscomps-entry-verb = *QSAFE-CHAR ; encode according to RFC 6868
]]></sourcecode> ]]></sourcecode>
</dd> </dd>
<dt anchor="vcard-param-jscomps-examples">Example(s):</dt> <dt anchor="vcard-param-jscomps-examples">Example(s):</dt>
<dd> <dd>
<t>The following example demonstrates the use of positional entrie s for the name "Jane Doe". The given name is ordered before the surname. No se condary index is required for either positional because both are zero.</t> <t>The following example demonstrates the use of positional entrie s for the name "Jane Doe". The given name is ordered before the surname. No se condary index is required for either positional because both are zero.</t>
<figure anchor="vcard-param-jscomps-example-positional"> <figure anchor="vcard-param-jscomps-example-positional">
<name>Example for positional entries</name> <name>Example of a Secondary Positional Index</name>
<sourcecode name=""><![CDATA[ <sourcecode name="json"><![CDATA[
"name": { "name": {
"components": [ "components": [
{ "kind": "given", "value": "Jane" }, { "kind": "given", "value": "Jane" },
{ "kind": "surname", "value": "Doe" } { "kind": "surname", "value": "Doe" }
], ],
"isOrdered": true "isOrdered": true
} }
]]></sourcecode>
<sourcecode type="text/plain"><![CDATA[
N;JSCOMPS=";1;0":Doe;Jane;;;;;; N;JSCOMPS=";1;0":Doe;Jane;;;;;;
FN;DERIVED=TRUE:Jane Doe FN;DERIVED=TRUE:Jane Doe
]]></sourcecode> ]]></sourcecode>
</figure> </figure>
<t>The following example demonstrates a secondary positional index . The "Jr." generation marker only counts once because it occurs in both the de signated generation component and the backwards-compatible honorific suffixes co mponent.</t> <t>The following example demonstrates a secondary positional index . The "Jr." generation marker only counts once because it occurs in both the de signated generation component and the backwards-compatible honorific suffixes co mponent.</t>
<figure anchor="vcard-param-jscomps-example-n-secondary-index"> <figure anchor="vcard-param-jscomps-example-n-secondary-index">
<name>Example for positional entries</name> <name>Example of Positional Entries</name>
<sourcecode name=""><![CDATA[ <sourcecode name="json"><![CDATA[
"name": { "name": {
"components": [ "components": [
{ "kind": "given", "value": "John" }, { "kind": "given", "value": "John" },
{ "kind": "given2", "value": "Philip" }, { "kind": "given2", "value": "Philip" },
{ "kind": "given2", "value": "Paul" }, { "kind": "given2", "value": "Paul" },
{ "kind": "surname", "value": "Stevenson" }, { "kind": "surname", "value": "Stevenson" },
{ "kind": "generation", "value": "Jr." }, { "kind": "generation", "value": "Jr." },
{ "kind": "credential", "value": "M.D." } { "kind": "credential", "value": "M.D." }
], ],
"isOrdered": true "isOrdered": true
} }
]]></sourcecode>
N;JSCOMPS=";1;2;2,1;0;6;4,1":Stevenson;John;Philip,Paul;;Jr.,M.D.;;Jr. <sourcecode type="text/plain"><![CDATA[
N;JSCOMPS=";1;2;2,1;0;6;4,1":
Stevenson;John;Philip,Paul;;Jr.,M.D.;;Jr.
]]></sourcecode> ]]></sourcecode>
</figure> </figure>
<t>The following example demonstrates the use of separator entries for the (shortened for brevity) address "54321 Oak St, Reston". The first entry defines the default separator to be ", ". The second and fourth positional ent ries are separated with the separator value " ". For backwards-compatibility, t he street address component of the ADR property contains both the street number and name, but it is not referred to in the JSCOMPS parameter and does not contri bute to the count of values.</t> <t>The following example demonstrates the use of separator entries for the (shortened for brevity) address "54321 Oak St, Reston". The first entry defines the default separator to be ", ". The second and fourth positional ent ries are separated with the separator value " ". For backwards compatibility, t he street address component of the ADR property contains both the street number and name, but it is not referred to in the JSCOMPS parameter and does not contri bute to the count of values.</t>
<figure anchor="vcard-param-jscomps-example-separator"> <figure anchor="vcard-param-jscomps-example-separator">
<name>Example for separator entries</name> <name>Example of Separator Entries</name>
<sourcecode name=""><![CDATA[ <sourcecode name="json"><![CDATA[
"addresses": { "addresses": {
"a1": { "a1": {
"components": [ "components": [
{ "kind": "number", "value": "54321" }, { "kind": "number", "value": "54321" },
{ "kind": "separator", "value": " " }, { "kind": "separator", "value": " " },
{ "kind": "name", "value": "Oak St" }, { "kind": "name", "value": "Oak St" },
{ "kind": "locality", "value": "Reston" } { "kind": "locality", "value": "Reston" }
], ],
"defaultSeparator": ", ", "defaultSeparator": ", ",
"isOrdered": true "isOrdered": true
} }
} }
]]></sourcecode>
ADR;JSCOMPS="s,\, ;11;s, ;10;3":;;54321 Oak St;Reston;;;;;;;Oak St;54321;;;;;; <sourcecode type="text/plain"><![CDATA[
ADR;JSCOMPS="s,\, ;11;s, ;10;3":
;;54321 Oak St;Reston;;;;;;;Oak St;54321;;;;;;
]]></sourcecode> ]]></sourcecode>
</figure> </figure>
</dd> </dd>
</dl> </dl>
</section> </section>
<section anchor="vcard-param-jsptr"> <section anchor="vcard-param-jsptr">
<name>JSPTR</name> <name>JSPTR</name>
<dl> <dl>
<dt>Parameter name:</dt> <dt>Parameter name:</dt>
<dd>JSPTR</dd> <dd>JSPTR</dd>
<dt>Purpose:</dt> <dt>Purpose:</dt>
<dd>
This parameter contains a JSON pointer <xref target="RFC6901"/> th <dd>This parameter is set on a <xref target="vcard-prop-jsprop">JSPRO
at relates the vCard <xref target="vcard-prop-jsprop">JSPROP</xref> property to P</xref> property. Its value is a JSON pointer <xref target="RFC6901"/> that po
a JSContact property. ints to the JSContact property that has the value of the JSPROP property.
</dd> </dd>
<dt>Description:</dt> <dt>Description:</dt>
<dd> <dd>
<t>This parameter has a single value that <bcp14>MUST</bcp14> be a valid JSON pointer as defined in <xref target="RFC6901"/>. Note that the value <bcp14>MUST</bcp14> be quoted according to the <tt>param-value</tt> ABNF in <xr ef target="RFC6350"/>.</t> <t>This parameter has a single value that <bcp14>MUST</bcp14> be a valid JSON pointer as defined in <xref target="RFC6901"/>. Note that the value <bcp14>MUST</bcp14> be quoted according to the "param-value" ABNF in <xref targ et="RFC6350"/>.</t>
</dd> </dd>
<dt>Format definition:</dt> <dt>Format definition:</dt>
<dd> <dd>
<sourcecode name="" type="abnf"><![CDATA[ <sourcecode type="abnf"><![CDATA[
jsptr-param = "JSPTR" "=" param-value jsptr-param = "JSPTR" "=" param-value
; also see param-value in RFC 6350, section 3.3 ; also see param-value in RFC 6350, Section 3.3
]]></sourcecode> ]]></sourcecode>
</dd> </dd>
<dt>Example(s):</dt> <dt>Example(s):</dt>
<dd> <dd>
<t>This illustrates a simple example. For further examples see <x <t>This illustrates a simple example. For further examples, see <
ref target="vcard-prop-jsprop-examples"/>.</t> xref target="vcard-prop-jsprop-examples"/>.</t>
<sourcecode name=""><![CDATA[ <sourcecode name="" type="text/plain"><![CDATA[
JSPROP;JSPTR="example.com:foo":"bar" JSPROP;JSPTR="example.com:foo":"bar"
]]></sourcecode> ]]></sourcecode>
</dd> </dd>
</dl> </dl>
</section> </section>
</section> </section>
</section> </section>
<section anchor="security-considerations"> <section anchor="security-considerations">
<name>Security Considerations</name> <name>Security Considerations</name>
<t>This specification defines how to convert between the JSContact and vCa <t>This specification defines how to convert between the JSContact and vCa
rd formats. The security considerations for parsing and formatting such data ap rd formats.
ply and are outlined in <xref target="I-D.ietf-calext-jscontact" section="5"/> a
nd <xref target="RFC6350" section="9"/>.</t> The security considerations for parsing and formatting such data apply and
</section> are outlined in <xref target="RFC9553" sectionFormat="of" section="4"/> and <xr
<section> ef target="RFC6350" sectionFormat="of" section="9"/>.</t>
<name>Acknowledgements</name>
<t>The definition and examples of the <xref target="vcard-param-phonetic">
PHONETIC</xref> and <xref target="vcard-param-script">SCRIPT</xref> parameters a
re based on the initial version of <xref target="I-D.calconnect-vobject-i18n"/>.
</t>
</section> </section>
<section anchor="IANA"> <section anchor="IANA">
<!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
<name>IANA Considerations</name> <name>IANA Considerations</name>
<section> <section>
<name>New vCard Properties</name> <name>New vCard Property</name>
<t>IANA is requested to add the following entries to the "vCard Properti <t>IANA has added the following entry to the "vCard Properties" registry
es" registry, defined in Section 10.3.1. of <xref target="RFC6350"/>.</t> , as defined in <xref target="RFC6350" sectionFormat="of" section="10.3.1"/>.</t
>
<table anchor="new_properties"> <table anchor="new_properties">
<name>New vCard Properties</name> <name>New vCard Property</name>
<thead> <thead>
<tr> <tr>
<th align="left">Namespace</th> <th align="left">Namespace</th>
<th align="left">Property</th> <th align="left">Property</th>
<th align="left">Reference</th> <th align="left">Reference</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td/> <td/>
<td align="left">JSPROP</td> <td align="left">JSPROP</td>
<td align="left">This document, <xref target="vcard-prop-jsprop"/> </td> <td align="left">RFC 9555, <xref target="vcard-prop-jsprop"/></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<section> <section>
<name>New vCard Parameters</name> <name>New vCard Parameter</name>
<t>IANA is requested to add the following entries to the "vCard Paramete <t>IANA has added the following entry to the "vCard Parameters" registry
rs" registry, defined in Section 10.3.2. of <xref target="RFC6350"/>.</t> , as defined in <xref target="RFC6350" sectionFormat="of" section="10.3.2"/>.</t
>
<table anchor="new_parameters"> <table anchor="new_parameters">
<name>New vCard Parameters</name> <name>New vCard Parameter</name>
<thead> <thead>
<tr> <tr>
<th align="left">Namespace</th> <th align="left">Namespace</th>
<th align="left">Parameter</th> <th align="left">Parameter</th>
<th align="left">Reference</th> <th align="left">Reference</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td/> <td/>
<td align="left">JSPTR</td> <td align="left">JSPTR</td>
<td align="left">This document, <xref target="vcard-param-jsptr"/> </td> <td align="left">RFC 9555, <xref target="vcard-param-jsptr"/></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<section> <section>
<name>New JSContact Properties</name> <name>New JSContact Properties</name>
<t>IANA is requested to add the following entries to the "JSContact Prop <t>IANA has added the following entries to the "JSContact Properties" re
erties" registry. The Since Version for all properties is 1.0. The Until Versi gistry. Note that the Since Version is 1.0, the Until Version is not set, and t
on for all properties is not set. All RFC section references are for this docum he Change Controller is IETF for all of these properties.</t>
ent. The change controller for all these properties is IETF.</t>
<table anchor="tab-iana-property-registry" align="center"> <table anchor="tab-iana-property-registry" align="center">
<name>Initial Contents of the "JSContact Properties" Registry</name> <name>JSContact Properties Registry</name>
<thead> <thead>
<tr> <tr>
<th align="left">Property Name</th> <th align="left">Property Name</th>
<th align="left">Property Type</th> <th align="left">Property Type</th>
<th align="left">Property Context</th> <th align="left">Property Context</th>
<th align="left">Intended Usage</th>
<th align="left">Reference or Description</th> <th align="left">Reference or Description</th>
<th align="left">Intended Usage</th>
</tr> </tr>
</thead> </thead>
<!-- Everything in here should be sorted alphabetically: table entries by property name, the references for each property alphabetically by the object type or property they refer to -->
<tbody> <tbody>
<tr> <tr>
<td align="left">vCardName</td> <td align="left">vCardName</td>
<td align="left">String</td> <td align="left">String</td>
<td align="left">Any JSContact object</td> <td align="left">Any JSContact object</td>
<td align="left">
<xref target="jscontact-prop-vcardname" format="default"/>
</td>
<td align="left">common</td> <td align="left">common</td>
</tr> <td align="left">RFC 9555,
<xref target="jscontact-prop-vcardname" format="default"/></td>
</tr>
<tr> <tr>
<td align="left">vCardParams</td> <td align="left">vCardParams</td>
<td align="left">String[String]</td> <td align="left">String[String|String[]]</td>
<td align="left">Any JSContact object</td> <td align="left">Any JSContact object</td>
<td align="left"> <td align="left">common</td>
<td align="left">RFC 9555,
<xref target="jscontact-prop-vcardparams" format="default"/> <xref target="jscontact-prop-vcardparams" format="default"/>
</td> </td>
<td align="left">common</td>
</tr> </tr>
<tr> <tr>
<td align="left">vCardProps</td> <td align="left">vCardProps</td>
<td align="left">JCardProp[]</td> <td align="left">JCardProp[]</td>
<td align="left">Card</td> <td align="left">Card</td>
<td align="left"> <td align="left">common</td>
<td align="left">RFC 9555,
<xref target="jscontact-prop-vcardprops" format="default"/> <xref target="jscontact-prop-vcardprops" format="default"/>
</td> </td>
<td align="left">common</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<section> <section>
<name>New JSContact Types</name> <name>New JSContact Type</name>
<t>IANA is requested to add the following entries to the "JSContact Type <t>IANA has added the following entry to the "JSContact Types" registry.
s" registry. The Since Version for all properties is 1.0. The Until Version Note that the Since Version is 1.0, the Until Version is not set, and the Chang
for all properties is not set. All RFC section references are for this document e Controller is IETF for this type.</t>
. The change controller for all these properties is IETF.</t>
<table anchor="tab-iana-jscontact-type-registry" align="left"> <table anchor="tab-iana-jscontact-type-registry" align="left">
<name>Additional Contents of the "JSContact Types" Registry</name> <name>JSContact Types Registry</name>
<thead> <thead>
<tr> <tr>
<th align="left">Type Name</th> <th align="left">Type Name</th>
<th align="left">Intended Usage</th>
<th align="left">Reference or Description</th> <th align="left">Reference or Description</th>
<th align="left">Intended Usage</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td align="left">JCardProp</td> <td align="left">JCardProp</td>
<td align="left"> <td align="left">common</td>
<td align="left">RFC 9555,
<xref target="jscontact-prop-vcardprops" format="default"/> <xref target="jscontact-prop-vcardprops" format="default"/>
</td> </td>
<td align="left">common</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
</section> </section>
<section anchor="impl-status">
<name>Implementation Status</name>
<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 protoco
l 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 descrip
tion of implementations in this section is intended to assist the IETF in its de
cision processes in progressing drafts to RFCs. Please note that the listing of
any individual implementation here does not imply endorsement by the IETF. Fur
thermore, 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 co
nstrued to be, a catalog of available implementations or their features. Reader
s are advised to note that other implementations may exist.</t>
<t>According to RFC 7942, "this will allow reviewers and working groups to
assign due consideration to documents that have the benefit of running code, wh
ich may serve as evidence of valuable experimentation and feedback that have mad
e the implemented protocols more mature. It is up to the individual working gro
ups to use this information as they see fit".</t>
<section anchor="it-cnr-iit">
<name>CNR</name>
<ul spacing="compact">
<li>Responsible Organization: National Research Council (CNR) of Italy
</li>
<li>Location: https://github.com/consiglionazionaledellericerche/jscon
tact-tools</li>
<li>Description: This implementation includes tools for JSContact crea
tion, validation, serialization/deserialization, and conversion from vCard, xCar
d and jCard.</li>
<li>Level of Maturity: This is an "alpha" test implementation.</li>
<li>Coverage: This implementation includes all features described in t
his specification.</li>
<li>Contact Information: Mario Loffredo, mario.loffredo@iit.cnr.it</li
>
</ul>
</section>
</section>
</middle> </middle>
<back> <back>
<displayreference target="I-D.calconnect-vobject-i18n" to="vOBJECT"/>
<references> <references>
<name>References</name> <name>References</name>
<references> <references>
<name>Normative References</name> <name>Normative References</name>
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-ca
lext-jscontact.xml"/> <!-- [I-D.ietf-calext-jscontact] in EDIT state as of 2/12/24; companion document
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-ca RFC 9553 -->
lext-vcard-jscontact-extensions.xml"/> <reference anchor="RFC9553" target="https://www.rfc-editor.org/info/rfc9553">
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <front>
FC.2119.xml"/> <title>JSContact: A JSON Representation of Contact Data</title>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <author initials='R' surname='Stepanek' fullname='Robert Stepanek'>
FC.5234.xml"/> <organization />
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R </author>
FC.6350.xml"/> <author initials='M' surname='Loffredo' fullname='Mario Loffredo'>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <organization />
FC.6473.xml"/> </author>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <date month='March' year='2024' />
FC.6474.xml"/> </front>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <seriesInfo name="RFC" value="9553"/>
FC.6715.xml"/> <seriesInfo name="DOI" value="10.17487/RFC9553"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R </reference>
FC.6869.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <!-- [I-D.ietf-calext-vcard-jscontact-extensions] in REF state as of 2/12/24; co
FC.6901.xml"/> mpanion document RFC 9554 -->
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <reference anchor="RFC9554" target="https://www.rfc-editor.org/info/rfc9554">
FC.7095.xml"/> <front>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <title>vCard Format Extension for JSContact</title>
FC.7942.xml"/> <author initials="R." surname="Stepanek" fullname="Robert Stepanek">
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R <organization>Fastmail</organization>
FC.8174.xml"/> </author>
<author initials="M." surname="Loffredo" fullname="Mario Loffredo">
<organization>IIT-CNR</organization>
</author>
<date month="March" year="2024"/>
</front>
<seriesInfo name="RFC" value="9554"/>
<seriesInfo name="DOI" value="10.17487/RFC9554"/>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
986.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5
234.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5
646.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
350.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
473.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
474.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
715.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
869.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
901.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
095.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
259.xml"/>
</references> </references>
<references> <references>
<name>Informative References</name> <name>Informative References</name>
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-calconn
ect-vobject-i18n.xml"/> <!--[I-D.calconnect-vobject-i18n] IESG state Expired. Entered the long way to ge
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R t the correct initials-->
FC.8605.xml"/> <reference anchor="I-D.calconnect-vobject-i18n" target="https://datatracker.ietf
<reference anchor="CLDRPersonName" target="https://www.unicode.org/reports .org/doc/html/draft-calconnect-vobject-i18n-00">
/tr35/tr35-personNames.html"> <front>
<title>vObject Internationalization</title>
<author fullname="Ronald Henry Tse" initials="R." surname="Tse">
<organization>Ribose</organization>
</author>
<author fullname="Peter Tam" initials="P." surname="Tam">
<organization>Ribose</organization>
</author>
<author fullname="Michael Douglass" initials="M." surname="Douglass">
<organization>Spherical Cow Group</organization>
</author>
<date day="7" month="June" year="2018"/>
</front>
<seriesInfo name="Internet-Draft" value="draft-calconnect-vobject-i18n-00"/>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
605.xml"/>
<reference anchor="CLDRPersonName" target="https://www.unicode.org/reports/
tr35/tr35-personNames.html">
<front> <front>
<title>Technical Standard #35: Unicode Locale Data Markup Language (LD ML) Part 8: Person Names, Version 43.1</title> <title>Unicode Locale Data Markup Language (LDML) Part 8: Person Names </title>
<author fullname="M. Davis"> <author fullname="M. Davis">
<organization/> <organization/>
</author> </author>
<author fullname="P. Edberg"> <author fullname="P. Edberg">
<organization/> <organization/>
</author> </author>
<author fullname="R. Gillam"> <author fullname="R. Gillam">
<organization/> <organization/>
</author> </author>
<author fullname="A. Kolisnychenko"> <author fullname="A. Kolisnychenko">
<organization/> <organization/>
</author> </author>
<author fullname="M. McKenna"> <author fullname="M. McKenna">
<organization/> <organization/>
</author> </author>
<author fullname="others"> <author>
<organization/> <organization>other CLDR committee members</organization>
</author> </author>
<date year="2023" month="July"/> <date year="2023" month="July"/>
</front> </front>
<seriesInfo name="Unicode Technical Standard" value="#35"/>
<seriesInfo name="Version" value="44.1"/>
</reference> </reference>
</references> </references>
</references> </references>
<section anchor="convert_jscontact_to_vcard-reverse-rules"> <section anchor="convert_jscontact_to_vcard-reverse-rules">
<name>Reverse Rules of Converting vCard to JSContact Card</name> <name>Reverse Rules of Converting a vCard to a JSContact Card</name>
<t><xref target="table_convert_jscontact_to_vcard"/> lists the relevant do <t><xref target="table_convert_jscontact_to_vcard"/> lists the relevant do
cument sections for each JSContact object type and property.</t> cument sections for each JSContact type and property.</t>
<table anchor="table_convert_jscontact_to_vcard"> <table anchor="table_convert_jscontact_to_vcard">
<name>Conversion rules by JSContact property</name> <name>Conversion Rules for JSContact Types and Properties</name>
<thead> <thead>
<tr> <tr>
<th align="left">JSContact Type</th> <th align="left">JSContact Type</th>
<th align="left">Property Name</th> <th align="left">Property Name</th>
<th align="left">Relevant Section(s)</th> <th align="left">Relevant Section(s)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>components</td> <td>components</td>
<td><xref target="vcard-prop-adr"/>, <td>Sections <xref target="vcard-prop-adr" format="counter"/> and
<xref target="vcard-param-jscomps"/></td> <xref target="vcard-param-jscomps" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
<xref target="vcard-param-type"/> <xref target="vcard-param-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>coordinates</td> <td>coordinates</td>
<td><xref target="vcard-param-geo"/>, <xref target="vcard-prop-geo"/ ></td> <td>Sections <xref target="vcard-param-geo" format="counter"/> and < xref target="vcard-prop-geo" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>country</td> <td>country</td>
<td> <td>
<xref target="vcard-prop-adr"/> <xref target="vcard-prop-adr"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>countryCode</td> <td>countryCode</td>
<td> <td>
<xref target="vcard-prop-adr"/> <xref target="vcard-prop-adr"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>defaultSeparator</td> <td>defaultSeparator</td>
<td><xref target="vcard-prop-adr"/>, <td>Sections <xref target="vcard-prop-adr" format="counter"/> and
<xref target="vcard-param-jscomps"/></td> <xref target="vcard-param-jscomps" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>full</td> <td>full</td>
<td> <td>
<xref target="vcard-prop-adr"/> <xref target="vcard-prop-adr"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>isOrdered</td> <td>isOrdered</td>
<td><xref target="vcard-prop-adr"/>, <td>Sections <xref target="vcard-prop-adr" format="counter"/> and
<xref target="vcard-param-jscomps"/></td> <xref target="vcard-param-jscomps" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>locality</td> <td>locality</td>
<td> <td>
<xref target="vcard-prop-adr"/> <xref target="vcard-prop-adr"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>phoneticScript</td> <td>phoneticScript</td>
<td> <td>Sections
<xref target="vcard-param-phonetic"/>, <xref target="vcard-param-phonetic" format="counter"/> and
<xref target="vcard-param-script"/> <xref target="vcard-param-script" format="counter"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>phoneticSystem</td> <td>phoneticSystem</td>
<td><xref target="vcard-param-phonetic"/></td> <td><xref target="vcard-param-phonetic"/></td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>postcode</td> <td>postcode</td>
skipping to change at line 2191 skipping to change at line 2244
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>region</td> <td>region</td>
<td> <td>
<xref target="vcard-prop-adr"/> <xref target="vcard-prop-adr"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Address</td> <td>Address</td>
<td>timeZone</td> <td>timeZone</td>
<td><xref target="vcard-param-tz"/>, <xref target="vcard-prop-tz"/>< /td> <td>Sections <xref target="vcard-param-tz" format="counter"/> and <x ref target="vcard-prop-tz" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>AddressComponent</td> <td>AddressComponent</td>
<td>phonetic</td> <td>phonetic</td>
<td><xref target="vcard-param-phonetic"/></td> <td><xref target="vcard-param-phonetic"/></td>
</tr> </tr>
<tr> <tr>
<td>Anniversary</td> <td>Anniversary</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
skipping to change at line 2255 skipping to change at line 2308
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Calendar</td> <td>Calendar</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
<xref target="vcard-param-type"/> <xref target="vcard-param-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Calendar</td> <td>Calendar</td>
<td>kind</td> <td>kind</td>
<td><xref target="vcard-prop-caladruri"/>, <xref target="vcard-prop- <td>Sections <xref target="vcard-prop-caluri" format="counter"/> and
fburl"/></td> <xref target="vcard-prop-fburl" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Calendar</td> <td>Calendar</td>
<td>label</td> <td>label</td>
<td> <td>
<xref target="vcard-prop-xablabel"/> <xref target="vcard-prop-xablabel"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Calendar</td> <td>Calendar</td>
skipping to change at line 2284 skipping to change at line 2338
<tr> <tr>
<td>Calendar</td> <td>Calendar</td>
<td>pref</td> <td>pref</td>
<td> <td>
<xref target="vcard-param-pref"/> <xref target="vcard-param-pref"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Calendar</td> <td>Calendar</td>
<td>uri</td> <td>uri</td>
<td><xref target="vcard-prop-caladruri"/>, <xref target="vcard-prop- fburl"/></td> <td>Sections <xref target="vcard-prop-caluri" format="counter"/> and <xref target="vcard-prop-fburl" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>@version</td> <td>@version</td>
<td>not applicable</td> <td>not applicable</td>
skipping to change at line 2313 skipping to change at line 2367
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>anniversaries</td> <td>anniversaries</td>
<td> <td>
<xref target="vcard-prop-anniversary"/> <xref target="vcard-prop-anniversary"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>calendars</td> <td>calendars</td>
<td><xref target="vcard-prop-caladruri"/>, <xref target="vcard-prop- fburl"/></td> <td>Sections <xref target="vcard-prop-caluri" format="counter"/> and <xref target="vcard-prop-fburl" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>created</td> <td>created</td>
<td> <td>
<xref target="vcard-prop-created"/> <xref target="vcard-prop-created"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>directories</td> <td>directories</td>
<td><xref target="vcard-prop-source"/>, <xref target="vcard-prop-org -directory"/></td> <td>Sections <xref target="vcard-prop-source" format="counter"/> and <xref target="vcard-prop-org-directory" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>emails</td> <td>emails</td>
<td> <td>
<xref target="vcard-prop-email"/> <xref target="vcard-prop-email"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
skipping to change at line 2358 skipping to change at line 2412
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>language</td> <td>language</td>
<td> <td>
<xref target="vcard-prop-language"/> <xref target="vcard-prop-language"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>links</td> <td>links</td>
<td><xref target="vcard-prop-contact-uri"/>, <xref target="vcard-pro p-url"/></td> <td>Sections <xref target="vcard-prop-contact-uri" format="counter"/ > and <xref target="vcard-prop-url" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>localizations</td> <td>localizations</td>
<td> <td>
<xref target="vcard-param-language"/> <xref target="vcard-param-language"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>media</td> <td>media</td>
<td><xref target="vcard-prop-photo"/>, <xref target="vcard-prop-logo "/>, <xref target="vcard-prop-sound"/></td> <td>Sections <xref target="vcard-prop-photo" format="counter"/>, <xr ef target="vcard-prop-logo" format="counter"/>, and <xref target="vcard-prop-sou nd" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>members</td> <td>members</td>
<td> <td>
<xref target="vcard-prop-member"/> <xref target="vcard-prop-member"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>name</td> <td>name</td>
<td> <td>
<xref target="vcard-prop-n"/> <xref target="vcard-prop-n"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>nicknames</td> <td>nicknames</td>
<td> <td>
<xref target="vcard-prop-n"/> <xref target="vcard-prop-nickname"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>notes</td> <td>notes</td>
<td> <td>
<xref target="vcard-prop-note"/> <xref target="vcard-prop-note"/>
</td> </td>
</tr> </tr>
<tr> <tr>
skipping to change at line 2417 skipping to change at line 2471
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>organizations</td> <td>organizations</td>
<td> <td>
<xref target="vcard-prop-org"/> <xref target="vcard-prop-org"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>personalInfo</td> <td>personalInfo</td>
<td><xref target="vcard-prop-expertise"/>, <xref target="vcard-prop- hobby"/>, <xref target="vcard-prop-interest"/></td> <td>Sections <xref target="vcard-prop-expertise" format="counter"/>, <xref target="vcard-prop-hobby" format="counter"/>, and <xref target="vcard-pro p-interest" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
<td>phones</td> <td>phones</td>
<td> <td>
<xref target="vcard-prop-tel"/> <xref target="vcard-prop-tel"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Card</td> <td>Card</td>
skipping to change at line 2542 skipping to change at line 2596
<tr> <tr>
<td>Directory</td> <td>Directory</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
<xref target="vcard-param-type"/> <xref target="vcard-param-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Directory</td> <td>Directory</td>
<td>kind</td> <td>kind</td>
<td><xref target="vcard-prop-source"/>, <xref target="vcard-prop-org -directory"/></td> <td>Sections <xref target="vcard-prop-source" format="counter"/> and <xref target="vcard-prop-org-directory" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Directory</td> <td>Directory</td>
<td>label</td> <td>label</td>
<td> <td>
<xref target="vcard-prop-xablabel"/> <xref target="vcard-prop-xablabel"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Directory</td> <td>Directory</td>
skipping to change at line 2575 skipping to change at line 2629
<tr> <tr>
<td>Directory</td> <td>Directory</td>
<td>pref</td> <td>pref</td>
<td> <td>
<xref target="vcard-param-pref"/> <xref target="vcard-param-pref"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Directory</td> <td>Directory</td>
<td>uri</td> <td>uri</td>
<td><xref target="vcard-prop-source"/>, <xref target="vcard-prop-org -directory"/></td> <td>Sections <xref target="vcard-prop-source" format="counter"/> and <xref target="vcard-prop-org-directory" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>EmailAddress</td> <td>EmailAddress</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>EmailAddress</td> <td>EmailAddress</td>
<td>address</td> <td>address</td>
<td> <td>
skipping to change at line 2644 skipping to change at line 2698
<tr> <tr>
<td>Link</td> <td>Link</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
<xref target="vcard-param-type"/> <xref target="vcard-param-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Link</td> <td>Link</td>
<td>kind</td> <td>kind</td>
<td><xref target="vcard-prop-contact-uri"/>, <xref target="vcard-pro p-url"/></td> <td><xref target="vcard-prop-contact-uri"/></td>
</tr> </tr>
<tr> <tr>
<td>Link</td> <td>Link</td>
<td>label</td> <td>label</td>
<td> <td>
<xref target="vcard-prop-xablabel"/> <xref target="vcard-prop-xablabel"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Link</td> <td>Link</td>
skipping to change at line 2670 skipping to change at line 2724
<tr> <tr>
<td>Link</td> <td>Link</td>
<td>pref</td> <td>pref</td>
<td> <td>
<xref target="vcard-param-pref"/> <xref target="vcard-param-pref"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Link</td> <td>Link</td>
<td>uri</td> <td>uri</td>
<td><xref target="vcard-prop-contact-uri"/>, <xref target="vcard-pro p-url"/>&gt;</td> <td>Sections <xref target="vcard-prop-contact-uri" format="counter"/ > and <xref target="vcard-prop-url" format="counter"/&gt;</td>
</tr> </tr>
<tr> <tr>
<td>Media</td> <td>Media</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Media</td> <td>Media</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
<xref target="vcard-param-type"/> <xref target="vcard-param-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Media</td> <td>Media</td>
<td>kind</td> <td>kind</td>
<td><xref target="vcard-prop-photo"/>, <xref target="vcard-prop-logo "/>, <xref target="vcard-prop-sound"/></td> <td>Sections <xref target="vcard-prop-photo" format="counter"/>, <xr ef target="vcard-prop-logo" format="counter"/>, and <xref target="vcard-prop-sou nd" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Media</td> <td>Media</td>
<td>label</td> <td>label</td>
<td> <td>
<xref target="vcard-prop-xablabel"/> <xref target="vcard-prop-xablabel"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Media</td> <td>Media</td>
skipping to change at line 2713 skipping to change at line 2767
<tr> <tr>
<td>Media</td> <td>Media</td>
<td>pref</td> <td>pref</td>
<td> <td>
<xref target="vcard-param-pref"/> <xref target="vcard-param-pref"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Media</td> <td>Media</td>
<td>uri</td> <td>uri</td>
<td><xref target="vcard-prop-photo"/>, <xref target="vcard-prop-logo "/>, <xref target="vcard-prop-sound"/></td> <td>Sections <xref target="vcard-prop-photo" format="counter"/>, <xr ef target="vcard-prop-logo" format="counter"/>, and <xref target="vcard-prop-sou nd" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>components</td> <td>components</td>
<td><xref target="vcard-prop-n"/>, <td>Sections <xref target="vcard-prop-n" format="counter"/> and
<xref target="vcard-param-jscomps"/></td> <xref target="vcard-param-jscomps" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>defaultSeparator</td> <td>defaultSeparator</td>
<td><xref target="vcard-prop-n"/>, <td>Sections <xref target="vcard-prop-n" format="counter"/> and
<xref target="vcard-param-jscomps"/></td> <xref target="vcard-param-jscomps" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>full</td> <td>full</td>
<td> <td>
<xref target="vcard-prop-fn"/> <xref target="vcard-prop-fn"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>phoneticScript</td> <td>phoneticScript</td>
<td> <td>Sections
<xref target="vcard-param-phonetic"/>, <xref target="vcard-param-phonetic" format="counter"/> and
<xref target="vcard-param-script"/> <xref target="vcard-param-script" format="counter"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>phoneticSystem</td> <td>phoneticSystem</td>
<td><xref target="vcard-param-phonetic"/></td> <td><xref target="vcard-param-phonetic"/></td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>isOrdered</td> <td>isOrdered</td>
<td><xref target="vcard-prop-n"/>, <td>Sections <xref target="vcard-prop-n" format="counter"/> and
<xref target="vcard-param-jscomps"/></td> <xref target="vcard-param-jscomps" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>sortAs</td> <td>sortAs</td>
<td> <td>
<xref target="vcard-param-sortas"/> <xref target="vcard-param-sortas"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>NameComponent</td> <td>NameComponent</td>
skipping to change at line 2823 skipping to change at line 2877
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Note</td> <td>Note</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Note</td> <td>Note</td>
<td>author</td> <td>author</td>
<td><xref target="vcard-param-author"/>, <xref target="vcard-param-a uthor-name"/></td> <td>Sections <xref target="vcard-param-author" format="counter"/> an d <xref target="vcard-param-author-name" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Note</td> <td>Note</td>
<td>created</td> <td>created</td>
<td> <td>
<xref target="vcard-param-created"/> <xref target="vcard-param-created"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Note</td> <td>Note</td>
skipping to change at line 2853 skipping to change at line 2907
</tr> </tr>
<tr> <tr>
<td>OnlineService</td> <td>OnlineService</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
<xref target="vcard-param-type"/> <xref target="vcard-param-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>OnlineService</td> <td>OnlineService</td>
<td>kind</td>
<td><xref target="vcard-prop-impp"/>, <xref target="vcard-prop-socia
lprofile"/></td>
</tr>
<tr>
<td>OnlineService</td>
<td>label</td> <td>label</td>
<td> <td>
<xref target="vcard-prop-xablabel"/> <xref target="vcard-prop-xablabel"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>OnlineService</td> <td>OnlineService</td>
<td>pref</td> <td>pref</td>
<td> <td>
<xref target="vcard-param-pref"/> <xref target="vcard-param-pref"/>
skipping to change at line 2880 skipping to change at line 2929
<tr> <tr>
<td>OnlineService</td> <td>OnlineService</td>
<td>service</td> <td>service</td>
<td> <td>
<xref target="vcard-param-service-type"/> <xref target="vcard-param-service-type"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>OnlineService</td> <td>OnlineService</td>
<td>uri</td> <td>uri</td>
<td><xref target="vcard-prop-impp"/>, <xref target="vcard-prop-socia lprofile"/></td> <td>Sections <xref target="vcard-prop-impp" format="counter"/> and < xref target="vcard-prop-socialprofile" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>OnlineService</td> <td>OnlineService</td>
<td>user</td> <td>user</td>
<td> <td>
<xref target="vcard-param-username"/> <xref target="vcard-param-username"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>OrgUnit</td> <td>OrgUnit</td>
skipping to change at line 2987 skipping to change at line 3036
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>PersonalInfo</td> <td>PersonalInfo</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>PersonalInfo</td> <td>PersonalInfo</td>
<td>kind</td> <td>kind</td>
<td><xref target="vcard-prop-expertise"/>, <xref target="vcard-prop- hobby"/>, <xref target="vcard-prop-interest"/></td> <td>Sections <xref target="vcard-prop-expertise" format="counter"/>, <xref target="vcard-prop-hobby" format="counter"/>, and <xref target="vcard-pro p-interest" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>PersonalInfo</td> <td>PersonalInfo</td>
<td>listAs</td> <td>listAs</td>
<td> <td>
<xref target="vcard-param-index"/> <xref target="vcard-param-index"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>PersonalInfo</td> <td>PersonalInfo</td>
<td>level</td> <td>level</td>
<td> <td>
<xref target="vcard-param-level"/> <xref target="vcard-param-level"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>PersonalInfo</td> <td>PersonalInfo</td>
<td>value</td> <td>value</td>
<td><xref target="vcard-prop-expertise"/>, <xref target="vcard-prop- hobby"/>, <xref target="vcard-prop-interest"/></td> <td>Sections <xref target="vcard-prop-expertise" format="counter"/>, <xref target="vcard-prop-hobby" format="counter"/>, and <xref target="vcard-pro p-interest" format="counter"/></td>
</tr> </tr>
<tr> <tr>
<td>Phone</td> <td>Phone</td>
<td>@type</td> <td>@type</td>
<td>not applicable</td> <td>not applicable</td>
</tr> </tr>
<tr> <tr>
<td>Phone</td> <td>Phone</td>
<td>contexts</td> <td>contexts</td>
<td> <td>
skipping to change at line 3195 skipping to change at line 3244
</tr> </tr>
<tr> <tr>
<td>Title</td> <td>Title</td>
<td>name</td> <td>name</td>
<td> <td>
<xref target="vcard-prop-title"/> <xref target="vcard-prop-title"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Title</td> <td>Title</td>
<td>organization</td> <td>organizationId</td>
<td> <td>
<xref target="vcard-prop-title"/> <xref target="vcard-prop-title"/>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<section anchor="Acknowledgments" numbered="false">
<name>Acknowledgements</name>
<t>The definition and examples of the <xref target="vcard-param-phonetic">
PHONETIC</xref> and <xref target="vcard-param-script">SCRIPT</xref> parameters a
re based on the initial draft version of <xref target="I-D.calconnect-vobject-i1
8n"/>.</t>
</section>
<!-- [rfced] Please review the "Inclusive Language" portion of the online
Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language>
and let us know if any changes are needed.
For example, please consider whether "whitespace" should be updated.
-->
</back> </back>
</rfc> </rfc>
 End of changes. 402 change blocks. 
1038 lines changed or deleted 1154 lines changed or added

This html diff was produced by rfcdiff 1.48.