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"?> <!--[rfced] *AD, please review the following changes that were
<?rfc symrefs="yes"?> submitted after the document was approved and let us know if you
<?rfc iprnotified="no"?> approve. The updates can be viewed in this diff file:
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category=" https://www.rfc-editor.org/authors/rfc9555-ad-diff.html
std" consensus="true" docName="draft-ietf-calext-jscontact-vcard-13" ipr="pre537
8Trust200902" tocInclude="true" tocDepth="4" sortRefs="true" symRefs="true" upda Section 2.3.10 ("Novelist" instead of "Boss" and "Écrivain"
tes="6350" version="3"> instead of "Patron" in Figure 5)
Section 2.5.2 (removal of comma in Figure 11)
Section 2.6.1 (removal of comma in Figure 16)
Section 2.9.6 ("organizationId" instead of "organization" - two
instances; "Research Scientist" instead of "Project Leader" and
"Project Leader" instead of "Research Scientist" in Figure 28)
Section 3.2.1 (addition of comma in Figure 51)
Section 3.3.1 (addition of text under "Format definition")
Appendix A ("organizationId" instead of "organization")
-->
<!--[rfced] Would you like to update the short title that spans the
header of the PDF file to be more descriptive? Note that there is
ample room if you want to use the document's title instead.
Please let us know your preference.
Original:
jscontact-vcard
Perhaps:
Converting JSContact and vCard
-->
<!-- 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-vCard">JSContact: Converting from and to vCard</tit
le> le>
<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="March"/>
<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 <!--[rfced] Since this document does not officially "update" RFC 9553,
-jscontact (JSContact) by registering new JSContact properties. Similarly, it u should "it updates" be changed to "it expands on" or "it builds
pdates RFC 6350 (vCard) by registering new vCard properties and parameters.</t> upon" to avoid any confusion for the reader? Please review and
let us know your preference.
Original:
To achieve this, it updates RFC I-D.ietf-calext-jscontact
(JSContact) by registering new JSContact properties.
Perhaps:
To achieve this, it expands on RFC 9553 ("JSContact: A JSON
Representation of Contact Data") by registering new JSContact
properties.
-->
<t>This document defines how to convert contact information between the JS
Contact and vCard data formats. To achieve this, it updates <xref target="RFC955
3"/> ("JSContact: A JSON Representation of Contact Data") by registering new JSC
ontact properties. Similarly, it updates RFC 6350 ("vCard Format Specification"
) by registering new vCard properties and parameters.</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>
<t>The UID property in vCard is optional, but the <tt>uid</tt> propert <!-- [rfced] In the html and pdf outputs, the text enclosed in <tt> is output
y in JSContact is mandatory. Implementations that convert a vCard without UID p in fixed-width font. In the txt output, there are no changes to the font,
roperty <bcp14>MUST</bcp14> generate a unique identifier as a value for the <tt> and the quotation marks have been removed.
uid</tt> property. This value <bcp14>SHOULD</bcp14> be the same when converting
the same vCard multiple times, but how to achieve this is implementation-specif In the html and pdf outputs, the text enclosed in <em> is output in
ic.</t> italics. In the txt output, the text enclosed in <em> appears with an
underscore before and after.
Please review carefully and let us know if the output is acceptable.
Also, please review if each term is consistently tagged and let us
know if any updates are needed. For instance, we notice that some
terms are enclosed with <tt> whereas others are not or are enclosed
with quote marks. Below are a few examples; please see the text for
more instances.
In the XML file (Sections 2.4.3, 2.10.3, and 2.10.4, respectively):
The <tt>kind</tt> property is set to <tt>entry</tt>
The <tt>kind</tt> property is set to "interest".
The kind property is set to directory.
-->
<name>The <tt>uid</tt> Property</name>
<t>The UID property in vCard is optional, but the <tt>uid</tt> propert
y in JSContact is mandatory. Implementations that convert a vCard without a UID
property <bcp14>MUST</bcp14> generate a unique identifier as a value for the <t
t>uid</tt> property. This value <bcp14>SHOULD</bcp14> be the same when converti
ng the same vCard multiple times, but how to achieve this is implementation-spec
ific.</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 <tt>Id</tt> type and the object val
ues are the converted vCard property. In absence of the PROP-ID parameter (see ues are the converted vCard property. In the absence of the PROP-ID parameter (
<xref target="vcard-param-propid"/>), implementations are free to choose any ide see <xref target="vcard-param-propid"/>), implementations are free to choose any
ntifier for such entries. Whatever identifier generation scheme implementations identifier for such entries. Whatever identifier generation scheme implementat
use, they <bcp14>MUST</bcp14> generate values that are valid according to the d ions use, they <bcp14>MUST</bcp14> generate values that are valid according to t
efinition of the <tt>Id</tt> type in <xref target="I-D.ietf-calext-jscontact"/>. he definition of the <tt>Id</tt> type in <xref target="RFC9553"/>. For example,
For example, this could be an incrementing number across all <tt>Id</tt>s or o this could be an incrementing number across all <tt>Id</tt>s or only unique wit
nly unique within one JSON object.</t> hin one JSON object.</t>
</section> </section>
</section> </section>
<!--[rfced] Within Sections 2.1 to 2.14, there is inconsistency in the
way the property and parameter names are introduced, i.e., some
of the lead-in sentences begin with "This" and some begin with
the names. We made this consistent by replacing "This" with the
property/parameter names. Please review.
One example
Original:
This converts to the JSContact Boolean type.
Current:
The BOOLEAN type converts to the JSContact Boolean type.
-->
<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 converts to the JSContact <tt>Boolean</tt> type.</ 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 generally converts to the <tt>UTCDateTime</tt> t
It converts to the <tt>Timestamp</tt> type for anniversaries.</t> ype. It converts to the <tt>Timestamp</tt> type for anniversaries.</t>
<t>The DATE type converts to the <tt>PartialDate</tt> type, which only <t>The DATE type converts to the <tt>PartialDate</tt> type, which is o
is relevant for anniversaries. This does not apply to DATE values that only de nly relevant for anniversaries. This does not apply to DATE values that only de
fine a month or a day.</t> fine a month or day.</t>
<t>The TIME, DATE-TIME, DATE-AND-OR-TIME types and DATE type values th <t>The TIME, DATE-TIME, and DATE-AND-OR-TIME types and DATE type value
at only define a month or day do not convert to a JSContact datetime type. Inst s that only define a month or day do not convert to a JSContact datetime type.
ead, vCard properties or parameters having such values convert to the properties Instead, vCard properties or parameters having such values convert to the proper
defined in <xref target="new-jscontact"/>.</t> ties defined in <xref target="new-jscontact"/>.</t>
</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 converts to the JSContact <tt>Int</tt> and <tt>Uns ignedInt</tt> types.</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 converts to the JSContact <tt>Number</tt> type.</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 converts to the JSContact <tt>String</tt> typ e.</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 converts to the JSContact <tt>String</tt> type.</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 converts to the JSContact <tt>String</tt> type.</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 either converts to a <tt>String</tt> containing an IANA Time Zone Database entry name (see <xref target="vcard-prop-tz"/>) or d oes not convert to any JSContact type. For the latter, vCard properties or para meters having such values <bcp14>MAY</bcp14> convert to JSContact 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 does not convert to an IANA-registered property in JSContact, but several conversion rules make use of this parameter to combin e multiple vCard properties into a single JSContact object instance. For an exa mple of this, see <xref target="vcard-prop-adr"/>. To preserve the verbatim val ue of the ALTID parameter, set the JSContact properties defined in <xref target= "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 <tt>uri</tt> property of the Author object for this note.</t> <t>The AUTHOR parameter value of a vCard NOTE property converts to the <tt>uri</tt> property of the Author object for this note.</t>
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc
ard-jscontact-extensions"/>.</t> <!-- [rfced] Please review whether any of the notes in this document
should be in the <aside> element. It is defined as "a container for
content that is semantically less important or tangential to the
content that surrounds it" (https://authors.ietf.org/en/rfcxml-vocabulary#aside)
.
Please also consider if any of the notes should perhaps be combined with
the preceding paragraphs. For example:
Original:
The AUTHOR parameter value of a vCard NOTE property converts
to the uri property of the Author object for this note.
Note: This parameter is defined in [RFCYYY2].
Perhaps:
A) The AUTHOR parameter value [RFC9554] of a vCard NOTE property
converts to the uri property of the Author object for this note.
or
B) The AUTHOR parameter value of a vCard NOTE property converts
to the uri property of the Author object for this note. The
AUTHOR parameter is defined in [RFC9554].
-->
<t>Note: This parameter is defined in <xref target="RFC9554"/>.</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 o the <tt>name</tt> property of the Author object for this note.</t> <t>The AUTHOR-NAME parameter value of a vCard NOTE property converts t o the <tt>name</tt> property of the Author object for this note.</t>
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc ard-jscontact-extensions"/>.</t> <t>Note: This parameter is defined in <xref target="RFC9554"/>.</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 verts to the <tt>calendarScale</tt> property of the <tt>PartialDate</tt> object type.</t> <t>The CALSCALE parameter set on a BDAY, DEATHDATE, or ANNIVERSARY pro perty converts to the <tt>calendarScale</tt> property of the <tt>PartialDate</tt > object type.</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 e <tt>created</tt> property of the Note object.</t> <t>The CREATED parameter value of a vCard NOTE property converts to th e <tt>created</tt> property of the Note object.</t>
<t>Note: This parameter is defined in <xref target="I-D.ietf-calext-vc ard-jscontact-extensions"/>.</t> <t>Note: This parameter is defined in <xref target="RFC9554"/>.</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 <t>If the DERIVED parameter is set to <tt>true</tt> on a vCard propert
implementations <bcp14>MAY</bcp14> choose to not convert that property. Note: y, then implementations <bcp14>MAY</bcp14> choose not to convert that property.<
This parameter is defined in <xref target="I-D.ietf-calext-vcard-jscontact-exten /t>
sions"/>.</t>
<t>Note: This parameter is defined in <xref target="RFC9554"/>.</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 set on an ADR property converts to the JSContact <tt>coordinates</tt> property of the <tt>Address</tt> object that represents the vCard ADR.</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 FC7095" section="7.1"/>). It <bcp14>MUST NOT</bcp14> be set in a vCard. Preser ving the exact group name when converting from vCard to JSContact and back to vC ard is not necessary. Any group identifiers will do, as long as the resulting v Card groups its properties equally to the original vCard. Implementations that still wish to preserve the exact property group name of a vCard property <bcp14 >MAY</bcp14> set the <tt>group</tt> parameter in the JSContact properties <tt>vC ardProps</tt> or <tt>vCardParams</tt> defined in <xref target="new-jscontact"/>. </t> <t>The GROUP parameter is exclusively for use in jCard (see <xref targ et="RFC7095" sectionFormat="of" section="7.1"/>). It <bcp14>MUST NOT</bcp14> be set in a vCard. Preserving the exact group name when converting from vCard to JSContact and back to vCard is not necessary. Any group identifiers will do, as long as the resulting vCard groups its properties equally to the original vCar d. Implementations that still wish to preserve the exact property group name of a vCard property <bcp14>MAY</bcp14> set the <tt>group</tt> parameter in the JSC ontact properties <tt>vCardProps</tt> or <tt>vCardParams</tt> as defined in <xre f 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 <tt>vCardParams</
tt> during conversion.</name> tt> during Conversion</name>
<artwork><![CDATA[
<!-- [rfced] We updated <artwork> to <sourcecode> for all examples; please revie
w
and let us know if any further updates are needed.
In addition, please consider whether the "type" attribute should be set for all
sourcecode elements in the XML file. The current list of preferred values for
"type" is available at
https://www.rfc-editor.org/materials/sourcecode-types.txt. If the current
list does not contain an applicable type, feel free to suggest additions
for consideration. Note that it is also acceptable to leave the "type"
attribute not set.
-->
<sourcecode type=""><![CDATA[
item1.TEL;VALUE=uri:tel:+1-555-555-5555 item1.TEL;VALUE=uri:tel:+1-555-555-5555
"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 <tt>vCardProps</t
t> during conversion.</name> t> during Conversion</name>
<artwork><![CDATA[ <sourcecode><![CDATA[
item2.X-FOO:bar item2.X-FOO:bar
"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 set on the EXPERTISE, HOBBY, INTEREST, and ORG- DIRECTORY properties defined in <xref target="RFC6715"/> converts to the JSConta ct <tt>listAs</tt> property of the <tt>PersonalInfo</tt> and <tt>Directory</tt> objects.</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 converts to an entry in the <tt>localization s</tt> property for the vCard property that this parameter is set on. The value of the LANGUAGE parameter defines the language tag key in the <tt>localizations </tt> 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=""><![CDATA[
FN;LANGUAGE=EN:John Doe FN;LANGUAGE=EN:John Doe
TITLE;LANGUAGE=EN:Boss TITLE;LANGUAGE=EN:Boss
TITLE;LANGUAGE=fr:Patron TITLE;LANGUAGE=fr:Patron
"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>
<!--[rfced] Please clarify "choose them to" in the following
sentence. Does this perhaps mean "add them to" or "place them
under"?
Original:
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 Card.
Perhaps:
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.
-->
<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, 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>
<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=""><![CDATA[
FN:John Doe FN:John Doe
TITLE:Boss TITLE:Boss
TITLE;LANGUAGE=fr:Patron TITLE;LANGUAGE=fr:Patron
"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 the least preferred option, <xref target="language-patch-no-domi <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 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 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 rd. In this case, implementations <bcp14>MAY</bcp14> choose to add the localize
d vCard properties only to the localizations object.</t> 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 <!--[rfced] We updated the following text as shown below since the
how the correct characters. Please refer to the HTML or PDF versions instead.</ non-ASCII characters (in Figures 5 and 6) display in the .txt
t> file as well as in the HTML and PDF files. Please let us know
of any concerns.
Original:
The following example uses non-ASCII characters to demonstrate
multilingual content. The ASCII-formatted version of this
specification might not show the correct characters. Please refer to
the HTML or PDF versions instead.
Current:
The following example uses non-ASCII characters to demonstrate
multilingual content.
-->
<t>The following example uses non-ASCII characters to demonstrate mult
ilingual content.</t>
<figure anchor="language-patch-no-dominant"> <figure anchor="language-patch-no-dominant">
<name>LANGUAGE conversion example: conflicting LANGUAGE property and <name>LANGUAGE Conversion Example: Conflicting LANGUAGE Property and
parameter values</name> Parameter Values</name>
<artwork><![CDATA[ <sourcecode type=""><![CDATA[
LANGUAGE:es LANGUAGE:es
FN:Gabriel García Márquez FN:Gabriel García Márquez
TITLE;LANGUAGE=en:Boss TITLE;LANGUAGE=en:Novelist
TITLE;LANGUAGE=fr:Patron TITLE;LANGUAGE=fr:Écrivain
"language": "es", "language": "es",
"name" { "name" {
"full": "Gabriel García Márquez" "full": "Gabriel García Márquez"
}, },
"localizations": { "localizations": {
"en": { "en": {
"titles": { "titles": {
"t1": { "t1": {
"name": "Novelist" "name": "Novelist"
} }
}, },
"fr": { "fr": {
"titles": { "titles": {
"t1": { "t1": {
"name": "Écrivain" "name": "Écrivain"
} }
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </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"/> 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 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 converts to the <tt>mediaType</tt> property of the <tt>Resource</tt> object type.</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
IPT</xref> parameter set on a N or ADR property convert to JSContact as follows: <!-- [rfced] May we update these 2 sentences for clarity by rephrasing
</t> the lead-in sentence and making the second sentence a complete
sentence as shown below?
Original:
This parameter as well as the SCRIPT (Section 2.3.17) parameter set
on a N or ADR property convert to JSContact as follows:
the values of the phonetic, phoneticScript and phoneticSystem
properties of the NameComponent and Name or AddressComponent and
Address object types, respectively.
Perhaps:
When the PHONETIC parameter as well as the SCRIPT (Section 2.3.17)
parameter are set on an N or ADR property, they convert to JSContact
as described below.
The values of the phonetic, phoneticScript, and phoneticSystem properties
convert to values in the NameComponent, Name or AddressComponent, and
Address object types, respectively.
-->
<t>The PHONETIC parameter as well as the <xref target="vcard-param-scr
ipt">SCRIPT</xref> parameter set on an N or ADR property convert to JSContact as
follows:</t>
<t>the values of the <tt>phonetic</tt>, <tt>phoneticScript</tt> and <t t>phoneticSystem</tt> properties of the NameComponent and Name or AddressCompone nt and Address object types, respectively.</t> <t>the values of the <tt>phonetic</tt>, <tt>phoneticScript</tt> and <t t>phoneticSystem</tt> properties of the NameComponent and Name or AddressCompone nt and Address object types, respectively.</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 tem</tt> property unless it is <tt>script</tt>, in which case the <tt>phoneticSy stem</tt> property is not set. The value of the SCRIPT parameter converts to th e <tt>phoneticScript</tt> property.</t> <t>The value of the PHONETIC parameter converts to the <tt>phoneticSys tem</tt> property unless it is <tt>script</tt>, in which case the <tt>phoneticSy stem</tt> property is not set. The value of the SCRIPT parameter converts to th e <tt>phoneticScript</tt> property.</t>
<t>The values of the components in the property value convert to value <t>The values of the components in the property value convert to value
s the <tt>phonetic</tt> properties for the respective NameComponent or AddressCo s in the <tt>phonetic</tt> properties for the respective NameComponent or Addres
mponent.</t> sComponent.</t>
<t>If more than one property having the PHONETIC parameter set relates <t>If more than one property has the PHONETIC parameter set and relate
to the same property, then they convert to the Card <tt>localizations</tt> prop s to the same property, then they convert to the Card <tt>localizations</tt> pro
erty according their LANGUAGE parameter values as outlined in <xref target="vcar perty according to their LANGUAGE parameter values as outlined in <xref target="
d-param-language"/>.</t> vcard-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=""><![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;;
"language": "zh-Hant", "language": "zh-Hant",
"name": { "name": {
"components": [ "components": [
{ "kind": "surname", "value": "孫" }, { "kind": "surname", "value": "孫" },
{ "kind": "given", "value": "中山" }, { "kind": "given", "value": "中山" },
skipping to change at line 335 skipping to change at line 519
"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 converts to an entry in the <tt>vCardParams</tt> property; see <xref 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 converts to the <tt>pref</tt> property.</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 value of a vCard property converts to the <tt >Id</tt> of the JSContact property to which the vCard property converts.</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=""><![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
"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> <t>Note: This parameter is defined in <xref target="RFC9554"/>.</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>For the SCRIPT parameter, 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 <t>The SERVICE-TYPE parameter converts to the <tt>service</tt> propert
vice</tt> object type. Note: This parameter is defined in <xref target="I-D.iet y of the <tt>OnlineService</tt> object type.
f-calext-vcard-jscontact-extensions"/>.</t> </t>
<t>Note: This parameter is defined in <xref target="RFC9554"/>.</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 converts to the <tt>sortAs</tt> properties de fined for the <tt>Name</tt>, <tt>Organization</tt>, and <tt>OrgUnit</tt> object types.</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 <!--[rfced] Would it be correct to say "property-specific kind values"
ied otherwise for a specific JSContact property, the vCard <tt>home</tt> and <tt instead of "property-specific kind property values" to avoid
>work</tt> parameter values convert to the JSContact <tt>private</tt> and <tt>wo redundancy?
rk</tt> contexts, respectively.</t>
Original:
This converts to the contexts property as well as property-specific
kind property values defined in later sections.
Perhaps:
The TYPE parameter converts to the contexts property as well as
property-specific kind values defined in later sections.
-->
<t>The TYPE parameter converts to the <tt>contexts</tt> property as we
ll as property-specific <tt>kind</tt> property values defined in later sections.
If not specified otherwise for a specific JSContact property, the vCard <tt>hom
e</tt> and <tt>work</tt> parameter values convert to the JSContact <tt>private</
tt> and <tt>work</tt> 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 set on an ADR property converts to the JSContact < tt>timeZone</tt> property of the <tt>Address</tt> object that represents the vCa rd ADR. 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 <t>The USERNAME parameter converts to the <tt>user</tt> property of th
e</tt> object type. Note: This parameter is defined in <xref target="I-D.ietf-c e <tt>OnlineService</tt> object type.</t>
alext-vcard-jscontact-extensions"/>.</t>
<t>Note: This parameter is defined in <xref target="RFC9554"/>.</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 does not convert to an IANA-registered property in JSContact. To preserve properties with experimental values, see Sections <x ref target="jscontact-prop-vcardprops" format="counter"/> and <xref target="jsco ntact-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 converts to the <tt>kind</tt> property (<xref tar get="kind_conversion"/>). Allowed values are those described in <xref target="R FC6350" sectionFormat="of" section="6.1.4"/> and extended with the values declar ed 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=""><![CDATA[
KIND:individual KIND:individual
"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 tories</tt> property (<xref target="source_conversion"/>). The <tt>kind</tt> pr operty is set to <tt>entry</tt>. The <tt>uri</tt> property is set to the SOURCE property value.</t> <t>The SOURCE property converts to a Directory object in the <tt>direc tories</tt> property (<xref target="source_conversion"/>). The <tt>kind</tt> pr operty is set to <tt>entry</tt>. The <tt>uri</tt> property is set to the SOURCE property value.</t>
<t>The PREF and MEDIATYPE parameters convert according to the rules as defined in <xref target="vcard-parameters"/>.</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=""><![CDATA[
SOURCE:https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf SOURCE:https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf
"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 converts to an entry in the <tt>vCardProps</tt> pr operty; see <xref 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>BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, and ANNIVERSARY</name>
<t>The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE, <t>The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE,
DEATHDATE, DEATHPLACE described in <xref target="RFC6474"/> are represented as < DEATHDATE, and DEATHPLACE described in <xref target="RFC6474"/> are represented
tt>Anniversary</tt> objects included in the <tt>anniversaries</tt> property (<xr as <tt>Anniversary</tt> objects and are included in the <tt>anniversaries</tt> p
ef target="anniversary_conversion"/>):</t> roperty (<xref target="anniversary_conversion"/>):</t>
<ul spacing="compact"> <ul spacing="compact">
<li> <li>BDAY and BIRTHPLACE convert to <tt>date</tt> and <tt>place</tt>
<t>BDAY and BIRTHPLACE convert to <tt>date</tt> and <tt>place</tt> where <tt>kind</tt> is set to "birth";
where <tt>kind</tt> is set to "birth";</t>
<t/>
</li> </li>
<li> <li>DEATHDATE and DEATHPLACE convert to <tt>date</tt> and <tt>place<
<t>DEATHDATE and DEATHPLACE convert to <tt>date</tt> and <tt>place /tt> where <tt>kind</tt> is set to "death"; and
</tt> where <tt>kind</tt> is set to "death";</t>
<t/>
</li> </li>
<li>ANNIVERSARY converts to <tt>date</tt> where <tt>kind</tt> is "we dding".</li> <li>ANNIVERSARY converts to <tt>date</tt> where <tt>kind</tt> is set to "wedding".</li>
</ul> </ul>
<t>Both birth and death places are represented as instances of the <tt >Address</tt> object.</t> <t>Both birth and death places are represented as instances of the <tt >Address</tt> object.</t>
<t>The BIRTHPLACE and DEATHPLACE properties that are represented as ge <t>The BIRTHPLACE and DEATHPLACE properties that are represented as ge
o URIs convert to <tt>Address</tt> instances including only the <tt>coordinates< o URIs convert to <tt>Address</tt> instances that only include the <tt>coordinat
/tt> property. If the URI value is not a geo URI, the place is ignored.</t> es</tt> property. If the URI value is not a geo URI, the place is ignored.</t>
<t>The ALTID and LANGUAGE parameters of both BIRTHPLACE and DEATHPLACE <t>The ALTID and LANGUAGE parameters of both the BIRTHPLACE and DEATHP
properties convert according to the rules as defined in <xref target="vcard-par LACE properties convert according to the rules defined in <xref target="vcard-pa
ameters"/>.</t> rameters"/>.</t>
<figure anchor="anniversary_conversion"> <figure anchor="anniversary_conversion">
<name>BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY conversio <name>BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, and ANNIVERSARY Conve
n example</name> rsion Example</name>
<artwork><![CDATA[ <sourcecode type=""><![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
"anniversaries": { "anniversaries": {
"ANNIVERSARY-1" : { "ANNIVERSARY-1" : {
skipping to change at line 505 skipping to change at line 704
}, },
"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 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 where the vCard contains more than one FN property without the LANGUAGE p arameter, 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>
<figure anchor="fn_conversion"> <figure anchor="fn_conversion">
<name>FN conversion example</name> <name>FN Conversion Example</name>
<artwork><![CDATA[ <sourcecode type=""><![CDATA[
FN:John Q. Public, Esq. FN:John Q. Public, Esq.
"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 does not map to an IANA-registered property in JSContact. To convert this property, see <xref target="jscontact-prop-vcardprop s"/>. Note the alternative JSContact <tt>speakToAs</tt> property that defines h ow to address and refer to an individual represented by the card, as do the newl y 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> property of the <tt>SpeakToAs</tt> object (<xref target="grammatical_gender_pron ouns_conversion"/>).</t> <t>The GRAMGENDER property converts to the <tt>grammaticalGender</tt> property of the <tt>SpeakToAs</tt> object (<xref target="grammatical_gender_pron ouns_conversion"/>).</t>
<t>The PRONOUNS property converts to an entry in the <tt>pronouns</tt> property of the <tt>SpeakToAs</tt> object (<xref target="grammatical_gender_pro nouns_conversion"/>).</t> <t>The PRONOUNS property converts to an entry in the <tt>pronouns</tt> property of the <tt>SpeakToAs</tt> object (<xref target="grammatical_gender_pro nouns_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=""><![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
"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 converts to the Name object in the <tt>name</tt> pro
perty. Each component in the N property structured value converts to a NameComp perty.
onent in the Name <tt>components</tt> property. The following table shows this Each component in the N property structured value converts to a NameCom
relation:</t> ponent in the Name <tt>components</tt> property. The following table shows this
relation:</t>
<!--[rfced] In Table 1, does "in here" mean "listed in this table" as
shown below?
Original:
To vCard: add any surname2 NameComponent value in here,
after all surname values.
To vCard: add any generation NameComponent value also in here.
Perhaps:
To vCard: add any surname2 NameComponent value listed in this
table, after all surname values.
To vCard: add any generation NameComponent value listed in this
table.
-->
<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>
skipping to change at line 604 skipping to change at line 821
<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 is set, then the Name <tt>isOrdered</tt> property value is "true", and the <tt>d efaultSeparator</tt> and any separator name components are set according to the parameter value. The <tt>components</tt> list <bcp14>MUST</bcp14> adhere to the order of the JSCOMPS parameter value.</t> <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 efaultSeparator</tt> and any separator name components are set according to the parameter value. The <tt>components</tt> list <bcp14>MUST</bcp14> 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> property value is "false" and the <tt>defaultSeparator</tt> property <bcp14>M UST NOT</bcp14> be set. The <tt>components</tt> list <bcp14>MUST</bcp14> follow the order of values in the N structured value when read from left to right.</t> <t>If the JSCOMPS parameter is not set, then the Name <tt>isOrdered</t t> property value is "false", and the <tt>defaultSeparator</tt> property <bcp14> MUST NOT</bcp14> be set. The <tt>components</tt> list <bcp14>MUST</bcp14> follo w 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 to the Name <tt>sortAs</tt> property according to <xref target="n_kind_conversi on"/>. An empty or non-existent component value indicates that no sort is defin ed for this kind.</t> <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 on"/>. An empty or non-existent component value indicates that no sort is defin ed for this kind.</t>
<!--[rfced] The following lines are longer than the 72-character limit
for sourcecode. Please let us know where breaks should be placed
for the following lines:
Original:
(Figure 13)
N;SORT-AS="Stevenson,John Philip":Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C
.P.;;Jr. (16 over)
(Figure 16)
ADR;TYPE=work;CC=US:;;54321 Oak St;Reston;VA;20190;USA;;;;Oak St;54321;;;;; (
6 over)
(Under "Format definition" in Section 3.3.1)
(jscomps-entry-sep / "") ";" jscomps-entrylist (4 over)
jscomps-entry-verb = *QSAFE-CHAR ; encode special characters according to RFC
6868 (16 over)
(Figure 53)
N;JSCOMPS=";1;2;2,1;0;6;4,1":Stevenson;John;Philip,Paul;;Jr.,M.D.;;Jr. (4 ove
r)
(Figure 54)
ADR;JSCOMPS="s,\, ;11;s, ;10;3":;;54321 Oak St;Reston;;;;;;;Oak St;54321;;;;;
; (12 over)
-->
<figure anchor="n_conversion"> <figure anchor="n_conversion">
<name>N conversion example</name> <name>N Conversion Example</name>
<artwork><![CDATA[ <sourcecode type=""><![CDATA[
N;SORT-AS="Stevenson,John Philip":Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P. ;;Jr. N;SORT-AS="Stevenson,John Philip":Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P. ;;Jr.
"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 converts to a Nickname object in the <tt>nick
s</tt> property (<xref target="nickname_conversion"/>). The <tt>name</tt> prope names</tt> property (<xref target="nickname_conversion"/>). The <tt>name</tt> p
rty is set to the NICKNAME property value.</t> roperty is set to the NICKNAME property value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
NICKNAME:Johnny NICKNAME:Johnny
"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 converts to an entry in the <tt>media</tt> prope
y (<xref target="photo_conversion"/>). The entry value is a <tt>Media</tt> obje rty (<xref target="photo_conversion"/>). The entry value is a <tt>Media</tt> ob
ct whose <tt>kind</tt> property is set to <tt>photo</tt> and <tt>uri</tt> proper ject whose <tt>kind</tt> property is set to <tt>photo</tt> and <tt>uri</tt> prop
ty is set to the PHOTO value.</t> erty is set to the PHOTO value.</t>
<t>The PREF and MEDIATYPE parameters convert according to the rules as <t>The PREF and MEDIATYPE parameters convert according to the rules de
defined in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
PHOTO:https://www.example.com/pub/photos/jqpublic.gif PHOTO:https://www.example.com/pub/photos/jqpublic.gif
"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 converts to an Address object in the <tt>addresses
</tt> property. Each component in the ADR property structured value converts to </tt> property. Each component in the ADR-structured property value converts to
an AddressComponent in the Address <tt>components</tt> property.</t> an AddressComponent in the Address <tt>components</tt> property.</t>
<t><xref target="I-D.ietf-calext-vcard-jscontact-extensions"/> defines <t><xref target="RFC9554"/> defines new components for the ADR propert
new component for the ADR property. Implementations <bcp14>SHOULD</bcp14> set y. Implementations <bcp14>SHOULD</bcp14> set these new components, even if all
these new components, even if all their values are the empty string.</t> their values are the empty string.</t>
<t>The following table shows how ADR component and AddressComponent ki <t>The following table shows how the ADR component and AddressComponen
nd relate:</t> t kind relate:</t>
<!--[rfced] In Table 2 (Section 2.6.1), is it necessary to include two
instances of "see Remarks" since the Remarks column is adjacent
to the cells? Please review and let us know these instances may
be deleted as shown below.
Original:
apartment (see Remarks)
name (see Remarks)
Perhaps:
apartment
name
-->
<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 (see Remarks)</td>
<td align="left"><t>To vCard: Set the values of the following co mponents:</t> <td align="left"><t>To vCard: set the values of the following co 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 <tt>apartment</tt >.</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 (see Remarks)</td>
<td align="left"><t>To vCard: Set the values of the following co mponents:</t> <td align="left"><t>To vCard: set the values of the following co 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 <tt>name</tt>.</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 is set, then the Address <tt>isOrdered</tt> property value is "true", and the <t t>defaultSeparator</tt> and any separator name components are set according to t he parameter value. The <tt>components</tt> list <bcp14>MUST</bcp14> adhere to the order of the JSCOMPS parameter value.</t> <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 t>defaultSeparator</tt> and any separator name components are set according to t he parameter value. The <tt>components</tt> list <bcp14>MUST</bcp14> adhere 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 <tt>isOrdered
</tt> property value is "false" and the <tt>defaultSeparator</tt> property <bcp1 </tt> property value is "false", and the <tt>defaultSeparator</tt> property <bcp
4>MUST NOT</bcp14> be set. The <tt>components</tt> list <bcp14>MUST</bcp14> fol 14>MUST NOT</bcp14> be set. The <tt>components</tt> list <bcp14>MUST</bcp14> fo
low the order of values in the ADR structured value when read from left to right llow the order of values in the ADR structured value when read from left to righ
.</t> 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 <tt>full</tt> property
<t>The GEO parameter converts to the Address <tt>coordinates</tt> prop .</li>
erty.</t> <li>The GEO parameter converts to the Address <tt>coordinates</tt> pro
<t>The TZ parameter converts to the Address <tt>timeZone</tt> property perty.</li>
.</t> <li>The TZ parameter converts to the Address <tt>timeZone</tt> 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, as defined in <xref target="RFC8605"/>, converts
<t>The PREF and TYPE parameters convert according to the rules as defi to the Address <tt>countryCode</tt> property.</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 <tt>contexts</tt>
defined in <xref target="vcard-parameters"/>. Each possible language-dependent property as defined in <xref target="RFC9553" sectionFormat="of" section="2.5.1"
alternative is represented as an entry of the PatchObject map where the key ref />.</t>
erences the <tt>full</tt> property.</t> <t>The ALTID and LANGUAGE parameters convert according to the rules de
fined in <xref target="vcard-parameters"/>. Each possible language-dependent al
ternative is represented as an entry of the PatchObject map where the key refere
nces the <tt>full</tt> property.</t>
<figure anchor="adr_conversion"> <figure anchor="adr_conversion">
<name>ADR conversion example</name> <name>ADR Conversion Example</name>
<artwork><![CDATA[ <sourcecode type=""><![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;;;;Oak St;54321;;;;;
"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 converts to an entry in the <tt>emails</tt> prop
rty (<xref target="email_conversion"/>). The entry value is an <tt>EmailAddress erty (<xref target="email_conversion"/>). The entry value is an <tt>EmailAddres
</tt> object. The <tt>address</tt> property is set to the EMAIL value.</t> s</tt> object. The <tt>address</tt> property is set to the EMAIL value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![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
"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 converts to an entry in the <tt>onlineServices</t
> property (<xref target="impp_conversion"/>). The entry value is an <tt>Online t> property (<xref target="impp_conversion"/>). The entry value is an <tt>Onlin
Service</tt> object. The <tt>vCardName</tt> property is set to "impp" and the < eService</tt> object. The <tt>vCardName</tt> property is set to "impp", and the
tt>uri</tt> property is set to the IMPP value.</t> <tt>uri</tt> property is set to the IMPP value.</t>
<t>The SERVICE-TYPE, USERNAME, PREF and TYPE parameters convert accord <t>The SERVICE-TYPE, USERNAME, PREF, and TYPE parameters convert accor
ing to the rules as defined in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
IMPP;PREF=1:xmpp:alice@example.com IMPP;PREF=1:xmpp:alice@example.com
"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 converts to an entry in the <tt>preferredLanguage
/tt> property (<xref target="lang_conversion"/>). The entry value is an <tt>Lan s</tt> property (<xref target="lang_conversion"/>). The entry value is a <tt>La
guagePref</tt> object. The LanguagePref <tt>language</tt> property value is the nguagePref</tt> object. The LanguagePref <tt>language</tt> property value is th
LANG property value.</t> e LANG property value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![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
"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 converts to the <tt>language</tt> property (< 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=""><![CDATA[
LANGUAGE:de-AT LANGUAGE:de-AT
"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> <t>Note: This property is defined in <xref target="RFC9554"/>.</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 converts to an entry in the <tt>onlineSe
ices</tt> property (<xref target="socialprofile_conversion"/>). The entry value rvices</tt> property (<xref target="socialprofile_conversion"/>). The entry val
is an <tt>OnlineService</tt> object. The <tt>vCardName</tt> property is set to ue is an <tt>OnlineService</tt> object. The <tt>vCardName</tt> property is set
"socialprofile" or can be omitted. If the value type of the SOCIALPROFILE is U to "socialprofile", or it can be omitted. If the value type of the SOCIALPROFIL
RI, the <tt>uri</tt> property is set to the SOCIALPROFILE value. Otherwise, the E is URI, the <tt>uri</tt> property is set to the SOCIALPROFILE value. Otherwis
<tt>user</tt> property is set to the SOCIALPROFILE value.</t> e, the <tt>user</tt> property is set to the SOCIALPROFILE value.</t>
<t>The SERVICE-TYPE, USERNAME, PREF and TYPE parameters convert accord <t>The SERVICE-TYPE, USERNAME, PREF, and TYPE parameters convert accor
ing to the rules as defined in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
SOCIALPROFILE;SERVICE-TYPE=Mastodon:https://example.com/@foo SOCIALPROFILE;SERVICE-TYPE=Mastodon:https://example.com/@foo
"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> <t>Note: This property is defined in <xref target="RFC9554"/>.</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 converts to an entry in the <tt>phones</tt> proper
(<xref target="tel_conversion"/>). The entry value is a <tt>Phone</tt> object. ty (<xref target="tel_conversion"/>). The entry value is a <tt>Phone</tt> objec
</t> t.</t>
<t>The TEL-specific values of the TYPE parameter convert to the <tt>fe <t>The TEL-specific values of the TYPE parameter convert to the <tt>fe
atures</tt> property keys as outlined in table <xref target="tel_type_conversion atures</tt> property keys as outlined in <xref target="tel_type_conversion"/>.
"/>. Note that <xref target="RFC6350" section="6.4.1"/> defines the default TYP Note that <xref target="RFC6350" sectionFormat="of" section="6.4.1"/> defines th
E of TEL to be <tt>voice</tt>, but the default Phone features property is absent e default TYPE of TEL to be <tt>voice</tt>, but the default Phone features prope
by default. Accordingly, an implementation <bcp14>SHOULD</bcp14> only set the rty is absent by default. Accordingly, an implementation <bcp14>SHOULD</bcp14>
Phone <tt>features</tt> property if the TEL property actually has a TEL-specific only set the Phone <tt>features</tt> property if the TEL property actually has a
TYPE parameter set.</t> TEL-specific TYPE parameter 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 971 skipping to change at line 1230
<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 <tt>number</tt> 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=""><![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
"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 converts to the <tt>coordinates</tt> property of t he <tt>Address</tt> object. Also see <xref target="combine-geo-props"/> to dete rmine which <tt>Address</tt> 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 the <tt>Address</tt> object.</t> <t>A value of type TEXT converts to the <tt>timeZone</tt> property in the <tt>Address</tt> object.</t>
<t>A value of type UTC-OFFSET converts to the <tt>timeZone</tt> proper ty in the <tt>Address</tt> object if the offset has zero minutes and the hour of fset is in the range -12 &lt;= 14:</t> <t>A value of type UTC-OFFSET converts to the <tt>timeZone</tt> proper ty in the <tt>Address</tt> object if the offset has zero minutes and the hour of fset is in the range -12 &lt;= 14. Note that:</t>
<ul> <ul>
<li>If the hour offset is zero, use the time zone name <tt>Etc/UTC</ tt>.</li> <li>If the hour offset is zero, use the time zone name <tt>Etc/UTC</ tt>.</li>
<li>Otherwise construct the time zone name with <tt>Etc/GMT</tt> suf fixed with the string representation of the reversed sign hour offset, including the sign but excluding leading zeros and minutes. For example, the UTC offset value <tt>-0500</tt> converts to <tt>Etc/GMT+5</tt>.</li> <li>Otherwise, construct the time zone name with <tt>Etc/GMT</tt> su ffixed with the string representation of the reversed sign hour offset, includin g the sign but excluding leading zeros and minutes. For example, the UTC offset value <tt>-0500</tt> converts to <tt>Etc/GMT+5</tt>.</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 <tt>Address</tt> 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 <tt>Address</tt> o
ect. It is implementation-specific if these vCard properties convert to <em>sep bject. It is implementation-specific if these vCard properties convert to <em>s
arate</em> address instances in JSContact, or if some or all of them convert to eparate</em> address instances in JSContact or if some or all of them convert to
the <em>same</em> address. That being said, implementations <bcp14>MUST</bcp14> the <em>same</em> address. That being said, implementations <bcp14>MUST</bcp14
convert the properties to the <em>same</em> address for the following cases:</t > convert 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, as defined in <xref target="RFC8605"/>, i
presented as an entry of the <tt>links</tt> property (<xref target="contact_uri_ s represented as an entry of the <tt>links</tt> property (<xref target="contact_
conversion"/>). The entry value is a <tt>Link</tt> object whose <tt>kind</tt> uri_conversion"/>). The entry value is a <tt>Link</tt> object whose <tt>kind</
property is set to <tt>contact</tt> and <tt>uri</tt> property is set to the CONT tt> property is set to <tt>contact</tt> and <tt>uri</tt> property is set to the
ACT-URI value.</t> CONTACT-URI value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
CONTACT-URI;PREF=1:mailto:contact@example.com CONTACT-URI;PREF=1:mailto:contact@example.com
"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 converts to an entry in the <tt>media</tt> proper
(<xref target="logo_conversion"/>). The entry value is a <tt>Media</tt> object ty (<xref target="logo_conversion"/>). The entry value is a <tt>Media</tt> obje
whose <tt>kind</tt> property is set to <tt>logo</tt> and <tt>uri</tt> property ct whose <tt>kind</tt> property is set to <tt>logo</tt> and <tt>uri</tt> propert
is set to the LOGO value.</t> y is set to the LOGO value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
LOGO:https://www.example.com/pub/logos/abccorp.jpg LOGO:https://www.example.com/pub/logos/abccorp.jpg
"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 he <tt>members</tt> property (<xref target="group_example"/>).</t> <t>The uids of the contact cards composing the group are included in t he <tt>members</tt> property (<xref target="group_example"/>).</t>
<t>In this case, the PREF parameter does not have a JSContact counterp art; however, the implementors <bcp14>MAY</bcp14> insert the map entries by orde r of preference.</t> <t>In this case, the PREF parameter does not have a JSContact counterp art; however, the implementors <bcp14>MAY</bcp14> insert the map entries by orde r of preference.</t>
<figure anchor="group_example"> <figure anchor="group_example">
<name>Group example</name> <name>Group Example</name>
<artwork><![CDATA[ <sourcecode type=""><![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
"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 converts to an entry in the <tt>organizations</tt> property (<xref target="org_conversion"/>). The entry value is an <tt>Organiza tion</tt> object whose <tt>name</tt> property contains the organizational name, and the <tt>units</tt> property is an array of <tt>OrgUnit</tt> objects that eac h contain the organizational unit name in the <tt>name</tt> property.</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 fined in <xref target="vcard-parameters"/>.</t> <t>The ALTID and LANGUAGE parameters convert according to the rules de fined in <xref target="vcard-parameters"/>.</t>
<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 bsequent items convert to the <tt>sortAs</tt> property of the corresponding <tt> OrgUnit</tt> object.</t> <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 bsequent items convert to the <tt>sortAs</tt> property of the corresponding <tt> OrgUnit</tt> object.</t>
<t>The TYPE parameter converts according to the rules as defined in <x ref target="vcard-parameters"/>.</t> <t>The TYPE parameter converts according to the rules defined in <xref 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=""><![CDATA[
ORG;SORT-AS="ABC":ABC\, Inc.;North American Division;Marketing ORG;SORT-AS="ABC":ABC\, Inc.;North American Division;Marketing
"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 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</tt> of the <tt>Relation</tt> object value. 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=""><![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.
"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>Both TITLE and ROLE properties are represented as entries of the <t
t>titles</tt> property (<xref target="title_role_conversion"/>). The entry valu t>titles</tt> property (<xref target="title_role_conversion"/>). The entry valu
e is a <tt>Title</tt> object whose <tt>kind</tt> property is set to <tt>title</t e is a <tt>Title</tt> object whose <tt>kind</tt> property is set to <tt>title</t
t> or <tt>role</tt> for TITLE and ROLE vCard properties, respectively. The <tt> t> or <tt>role</tt> for the TITLE and ROLE vCard properties, respectively. The
name</tt> property is set to the vCard property value.</t> <tt>name</tt> property is set to the vCard property value.</t>
<t>The value of the <tt>organization</tt> property can be derived if t <t>The value of the <tt>organizationId</tt> property can be derived if
he TITLE or ROLE property is member of a vCard property group and exactly one ot the TITLE or ROLE property is a member of a vCard property group and if exactly
her ORG property also is part of that group.</t> one other ORG property is also a part of that group.</t>
<t>The ALTID and LANGUAGE parameters convert according to the rules as <t>The ALTID and LANGUAGE parameters convert according to the rules de
defined in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
TITLE:Research Scientist TITLE:Research Scientist
group1.ROLE:Project Leader group1.ROLE:Project Leader
group1.ORG:ABC, Inc. group1.ORG:ABC, Inc.
"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, as defined in <xref target="RFC6715"/>, is
resented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property represented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> prope
(<xref target="expertise_conversion"/>). The <tt>kind</tt> property is set to rty (<xref target="expertise_conversion"/>). The <tt>kind</tt> property is set
"expertise".</t> to "expertise".</t>
<t>The INDEX parameter converts according to the rules as defined in < <t>The INDEX parameter converts according to the rules defined in <xre
xref target="vcard-parameters"/>.</t> f 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=""><![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
"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, as defined in <xref target="RFC6715"/>, is repr
ted as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property (<xr esented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property
ef target="hobby_conversion"/>). The <tt>kind</tt> property is set to "hobby".< (<xref target="hobby_conversion"/>). The <tt>kind</tt> property is set to "hobb
/t> y".</t>
<t>The INDEX parameter converts according to the rules as defined in < <t>The INDEX parameter converts according to the rules defined in <xre
xref target="vcard-parameters"/>.</t> f 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=""><![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
"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, as defined in <xref target="RFC6715"/>, is r
esented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> property epresented as a <tt>PersonalInfo</tt> object in the <tt>personalInfo</tt> proper
(<xref target="interest_conversion"/>). The <tt>kind</tt> property is set to "i ty (<xref target="interest_conversion"/>). The <tt>kind</tt> property is set to
nterest".</t> "interest".</t>
<t>The INDEX parameter converts according to the rules as defined in < <t>The INDEX parameter converts according to the rules defined in <xre
xref target="vcard-parameters"/>.</t> f 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=""><![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
"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 irectory object in the <tt>directories</tt> property (<xref target="org_director y_conversion"/>). The <tt>kind</tt> property is set to <tt>directory</tt>. The <tt>uri</tt> property is set to the ORG-DIRECTORY property value.</t> <t>The ORG-DIRECTORY property <xref target="RFC6715"/> converts to a D irectory object in the <tt>directories</tt> property (<xref target="org_director y_conversion"/>). The <tt>kind</tt> property is set to <tt>directory</tt>. The <tt>uri</tt> property is set to the ORG-DIRECTORY property value.</t>
<t>The INDEX, PREF and TYPE parameters convert according to the rules as defined in <xref target="vcard-parameters"/>.</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=""><![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
"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>
<!--[rfced] Section Titles
a) Should the title of Section 2.11 ("Explanatory Properties") be
updated to include "Parameters" since Section 2.11.2 discusses the
CLIENTPIDMAP and PID parameters? And should "Parameter" be removed
from the title of Section 2.11.2 for consistency with the other
titles as shown below?
Original:
2.11 Explanatory Properties
2.11.1 CATEGORIES
2.11.2 CLIENTPIDMAP and PID Parameter
Perhaps:
2.11 Explanatory Properties and Parameters
2.11.1 CATEGORIES
2.11.2 CLIENTPIDMAP and PID
b) In the titles of Sections 2.15.1, 2.15.2, and 2.15.3,
should "Property" be removed for consistency with the
other section titles?
Original:
2.15. New JSContact properties
2.15.1. Property vCardProps
2.15.2. Property vCardParams
2.15.3. Property vCardName
Perhaps:
2.15. New JSContact Properties
2.15.1. vCardProps
2.15.2. vCardParams
2.15.3. vCardName
-->
<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 rds</tt> property (<xref target="categories_conversion"/>). The keys are the co mma-separated text values of the CATEGORIES property.</t> <t>The CATEGORIES property converts to a set of entries of the <tt>key words</tt> property (<xref target="categories_conversion"/>). The keys are the comma-separated text values of the CATEGORIES property.</t>
<t>In this case, the PREF parameter does not have a JSContact counterp art; however, the implementors <bcp14>MAY</bcp14> insert the map entries by orde r of preference.</t> <t>In this case, the PREF parameter does not have a JSContact counterp art; however, the implementors <bcp14>MAY</bcp14> insert the map entries by orde r 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=""><![CDATA[
CATEGORIES:internet,IETF,Industry,Information Technology CATEGORIES:internet,IETF,Industry,Information Technology
"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-pid">
<name>CLIENTPIDMAP and PID Parameter</name> <name>CLIENTPIDMAP and PID Parameters</name>
<t>These convert to the <xref target="jscontact-prop-vcardprops"><tt>v <t>The CLIENTPIDMAP and PID parameters convert to the <xref target="js
CardProps</tt></xref> and <xref target="jscontact-prop-vcardparams"><tt>vCardPar contact-prop-vcardprops"><tt>vCardProps</tt></xref> and <xref target="jscontact-
ams</tt></xref> properties.</t> prop-vcardparams"><tt>vCardParams</tt></xref> properties.</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 converts to the <tt>created</tt> property (<xr ef 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=""><![CDATA[
CREATED:19940930T143510Z CREATED:19940930T143510Z
"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> <t>Note: This property is defined in <xref target="RFC9554"/>.</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 converts to a <tt>Note</tt> object in the <tt>not
</tt> map (<xref target="notes_conversion"/>).</t> es</tt> map (<xref target="notes_conversion"/>).</t>
<t>The ALTID and LANGUAGE parameters convert according to the rules as <t>The ALTID and LANGUAGE parameters convert according to the rules de
defined in <xref target="vcard-parameters"/>.</t> 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=""><![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.
"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 converts to the <tt>prodId</tt> property (<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=""><![CDATA[
PRODID:ACME Contacts App version 1.23.5 PRODID:ACME Contacts App version 1.23.5
"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 converts to the <tt>updated</tt> property (<xref t arget="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=""><![CDATA[
REV:19951031T222710Z REV:19951031T222710Z
"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 converts to an entry in the <tt>media</tt> prope
y (<xref target="sound_conversion"/>). The entry value is a <tt>Media</tt> obje rty (<xref target="sound_conversion"/>). The entry value is a <tt>Media</tt> ob
ct whose <tt>kind</tt> property is set to <tt>sound</tt> and <tt>uri</tt> proper ject whose <tt>kind</tt> property is set to <tt>sound</tt> and <tt>uri</tt> prop
ty is set to the SOUND value.</t> erty is set to the SOUND value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
SOUND:CID:JOHNQPUBLIC.19960229T080000.xyzMail@example.com SOUND:CID:JOHNQPUBLIC.19960229T080000.xyzMail@example.com
"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>
<!--[rfced] Is "corresponds" the correct wording or should it be
"converts" for consistency with the other related sections?
Original:
The UID property corresponds to the uid property (Figure 39).
Perhaps:
The UID property converts to the uid property (Figure 39).
-->
<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 corresponds to the <tt>uid</tt> property (<xref ta rget="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=""><![CDATA[
UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
"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 converts to an entry in the <tt>links</tt> propert
(<xref target="url_conversion"/>). The entry value is a <tt>Link</tt> object wh y (<xref target="url_conversion"/>). The entry value is a <tt>Link</tt> object
ose <tt>uri</tt> property is set to the URL value.</t> whose <tt>uri</tt> property is set to the URL value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
URL:https://example.org/restaurant.french/~chezchic.html URL:https://example.org/restaurant.french/~chezchic.html
"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 converts to an entry in the <xref target="jsco ntact-prop-vcardprops"><tt>vCardProps</tt></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 <tt>label</tt> property of a JSContact object
e X-ABLabel property is preceded by a vCard property group name, and the label c type.
onverts to the JSContact object which got converted from a vCard property having
the same group.</t> <!--[rfced] We are having some trouble understanding "a vCard
<t>The group name is not preserved, implementations are free to choose property having the same group". To clarify, may we update
any unique group name when converting back to vCard. For an example how to pre the sentence as follows?
serve the group name see <xref target="vcard-param-group"/>.</t>
Original:
The X-ABLabel property is preceded by a vCard property group name,
and the label converts to the JSContact object which got converted
from a vCard property having the same group.
Perhaps:
The X-ABLabel property is preceded by a vCard property group name,
and the label converts to the JSContact object, which was converted
from a vCard property of the same group.
-->
The X-ABLabel property is preceded by a vCard property group name, and
the label converts to the JSContact object, which was converted from a vCard pro
perty having the same group.</t>
<t>The group name is not preserved; implementations are free to choose
any unique group name when converting back to vCard. For an example on how to
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=""><![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
"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 converts to an entry in the <tt>cryptoKeys</tt> pr
erty (<xref target="key_conversion"/>). The entry value is a <tt>CryptoKey</tt> operty (<xref target="key_conversion"/>). The entry value is a <tt>CryptoKey</t
object whose <tt>uri</tt> property is set to the KEY value.</t> t> object whose <tt>uri</tt> property is set to the KEY value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![CDATA[
KEY:https://www.example.com/keys/jdoe.cer KEY:https://www.example.com/keys/jdoe.cer
"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 converts to an entry in the <tt>schedulingAd
esses</tt> property (<xref target="caladruri_conversion"/>). The entry value is dresses</tt> property (<xref target="caladruri_conversion"/>). The entry value
a <tt>SchedulingAddress</tt> object whose <tt>uri</tt> property is set to the C is a <tt>SchedulingAddress</tt> object whose <tt>uri</tt> property is set to the
ALADRURI value.</t> CALADRURI value.</t>
<t>The PREF parameter converts according to the rules as defined in <x <t>The PREF parameter converts according to the rules defined in <xref
ref target="vcard-parameters"/>.</t> 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=""><![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
"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 converts to an entry in the <tt>calendars</tt>
operty (<xref target="caluri_conversion"/>). The entry value is a <tt>Calendar< property (<xref target="caluri_conversion"/>). The entry value is a <tt>Calenda
/tt> object whose <tt>kind</tt> property is set to <tt>calendar</tt> and <tt>uri r</tt> object whose <tt>kind</tt> property is set to <tt>calendar</tt> and <tt>u
</tt> property is set to the CALURI value.</t> ri</tt> property is set to the CALURI value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![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
"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 converts to an entry in the <tt>calendars</tt> p
operty (<xref target="fburl_conversion"/>). The entry value is a <tt>Calendar</ roperty (<xref target="fburl_conversion"/>). The entry value is a <tt>Calendar<
tt> object whose <tt>kind</tt> property is set to <tt>freeBusy</tt> and <tt>uri< /tt> object whose <tt>kind</tt> property is set to <tt>freeBusy</tt> and <tt>uri
/tt> property is set to the FBURL value.</t> </tt> property is set to the FBURL value.</t>
<t>The PREF and TYPE parameters convert according to the rules as defi <t>The PREF and TYPE parameters convert according to the rules defined
ned in <xref target="vcard-parameters"/>.</t> 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=""><![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
"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>Property <tt>vCardProps</tt></name>
<dl> <dl>
<dt>Name:</dt> <dt>Name:</dt>
<dd> <dd>
<tt>vCardProps</tt> <tt>vCardProps</tt>
</dd> </dd>
<dt>Type:</dt> <dt>Type:</dt>
<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><tt>JCardProp[]</tt>, where <tt>JCardProp</tt> denotes a jCard-e ncoded vCard property as defined in <xref target="RFC7095" sectionFormat="of" se ction="3.3"/>.
</dd> </dd>
<dt>Definition:</dt> <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> <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 <tt>vCardProps</tt> Example</name>
<artwork><![CDATA[ <sourcecode type=""><![CDATA[
item1.X-FOO;X-BAR=Hello:World! item1.X-FOO;X-BAR=Hello:World!
"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>Property <tt>vCardParams</tt></name>
<dl> <dl>
<dt>Name:</dt> <dt>Name:</dt>
<dd> <dd>
<tt>vCardParams</tt> <tt>vCardParams</tt>
</dd> </dd>
<dt>Type:</dt> <dt>Type:</dt>
<dd> <dd>
<tt>String[String|String[]]</tt> <tt>String[String|String[]]</tt>
</dd> </dd>
<dt>Definition:</dt> <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 <!--[rfced] We do not see mention of "array element 2" in Section 3.3
operty parameters, defined as array element 2 in <xref target="RFC7095" section= of RFC 7095. We do see mention of "array element values" in
"3.3"/>. Each entry represents a parameter of the vCard property that converts Section 3.3.1.3. Please confirm if an update is needed to the
to the JSContact object.</dd> name of the term or section number.
Original:
This property is set on a JSContact object that represents a
vCard property. Its value MUST be a JSON object containing
vCard property parameters, defined as array element 2
in Section 3.3 of [RFC7095].
-->
<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" sectionF
ormat="of" section="3.3"/>. Each entry represents a parameter of the vCard prop
erty 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 <tt>vCardParams</tt> Example</name>
<artwork><![CDATA[ <sourcecode type=""><![CDATA[
EMAIL;X-FOO=Bar:jane_doe@example.com EMAIL;X-FOO=Bar:jane_doe@example.com
"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>Property <tt>vCardName</tt></name>
<dl> <dl>
<dt>Name:</dt> <dt>Name:</dt>
<dd> <dd>
<tt>vCardName</tt> <tt>vCardName</tt>
</dd> </dd>
<dt>Type:</dt> <dt>Type:</dt>
<dd> <dd>
<tt>String</tt> <tt>String</tt>
</dd> </dd>
<dt>Definition:</dt> <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> <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 the name of a vCard element to be preserved when multiple elements convert the same JSContact object type. The case-insensitive value <bcp14>MUST </bcp14> be valid according to the <tt>name</tt> ABNF defined in <xref target="R FC6350" sectionFormat="of" section="3.3"/>.</dd>
<dt>Example:</dt> <dt>Example:</dt>
<!--[rfced] In the following sentence, should "OnlineService" perhaps
be updated as "OnlineService object" or "OnlineService object
type" for consistency?
Original:
Example: Both vCard IMPP and SOCIALPROFILE convert to OnlineService
in JSContact.
Perhaps:
Example: Both vCard IMPP and SOCIALPROFILE convert to an OnlineService
object in JSContact.
-->
<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 OnlineService in J SContact. The <tt>vCardName</tt> property value indicates that the vCard source element was IMPP as follows:</t>
<figure anchor="example-vcardname"> <figure anchor="example-vcardname">
<name>JSContact <tt>vCardName</tt> example</name> <name>JSContact <tt>vCardName</tt> Example</name>
<artwork><![CDATA[ <sourcecode type=""><![CDATA[
IMPP:xmpp:alice@example.com IMPP:xmpp:alice@example.com
"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 <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>
<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 <tt>Id</tt> of the converted value (see <xref target="vcar d-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 <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>
<ul> <ul>
<li>If the Name <tt>full</tt> property is set, then implementation s <bcp14>MUST</bcp14> use its value for the vCard FN property.</li> <li>If the Name <tt>full</tt> property is set, then implementation 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 <tt>full</tt> 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 <tt>components</t
t> values. If the <tt>isOrdered</tt> property is true, then this can be done by t> values. If the <tt>isOrdered</tt> 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 istered vCard property is defined. For example, a JSContact object may contain vendor-specific properties of which the semantics or purpose are unknown.</t> <t>JSContact object types may contain properties for which no IANA-reg istered vCard property is defined. For example, a JSContact object may contain vendor-specific properties of which the semantics or purpose are unknown.</t>
<t>This specification defines the new <xref target="vcard-prop-jsprop" ><tt>JSPROP</tt></xref> vCard property and <xref target="vcard-param-jsptr"><tt> JSPTR</tt></xref> vCard parameter by which such JSContact properties <bcp14>MAY< /bcp14> be represented in vCard. Implementations <bcp14>MAY</bcp14> choose to c onvert differently if they deem that more appropriate.</t> <t>This specification defines the new <xref target="vcard-prop-jsprop" ><tt>JSPROP</tt></xref> vCard property and <xref target="vcard-param-jsptr"><tt> JSPTR</tt></xref> vCard parameter by which such JSContact properties <bcp14>MAY< /bcp14> be represented in vCard. Implementations <bcp14>MAY</bcp14> choose to c onvert differently 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 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>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>
<!--[rfced] When we attempted to validate the ABNF using
<https://author-tools.ietf.org/abnf>, we received the following error.
Please review and let us know how we may fix this.
(20:53): warning: zero-length char-val
-->
<sourcecode name="" type="abnf"><![CDATA[ <sourcecode name="" 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=""><![CDATA[
"someUnknownProperty": true "someUnknownProperty": true
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=""><![CDATA[
"example.com:foo": { "example.com:foo": {
"bar": 1234 "bar": 1234
} }
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=""><![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"
} }
} }
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 <tt>isOrdered</tt> property of th
e Name or Address object to "true". Otherwise, they <bcp14>MUST</bcp14> set the e Name or Address object to "true". Otherwise, they <bcp14>MUST</bcp14> set the
<tt>isOrdered</tt> property value to "false".</t> <tt>isOrdered</tt> 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 <tt>defaultSeparator</tt> property. If it is the empty strin
g then no default separator is defined. Otherwise, the first entry <bcp14>MUST< g, then no default separator is defined. Otherwise, the first entry <bcp14>MUST<
/bcp14> be a separator entry. All following entries processed in order result i /bcp14> be a separator entry. All following entries processed in order result i
n an ordered list of JSContact components, and <bcp14>MUST</bcp14> be one of two n an ordered list of JSContact components and <bcp14>MUST</bcp14> be one of the
following two kinds:</t> following 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 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=" 3.3"><tt>param-value</tt></xref> characters, where the COMMA (U+002c) and SEMICO LON (U+003B) character <bcp14>MUST</bcp14> be escaped according to the rules def ined in <xref target="RFC6350" section="3.4"/>. <xref target="vcard-param-jscom ps-example-separator"/> illustrates this by example.</t> <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 wed by the COMMA (U+002C) character, followed by zero or more <tt>param-value</t t> characters (see <xref target="RFC6350" sectionFormat="of" section="3.3"/>), w here the COMMA (U+002C) and SEMICOLON (U+003B) characters <bcp14>MUST</bcp14> be escaped according to the rules defined in <xref target="RFC6350" sectionFormat= "of" section="3.4"/>. <xref target="vcard-param-jscomps-example-separator"/> il lustrates this by example.</t>
<t>The resulting JSContact component is formed by setting its 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 <tt>separator</tt> 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 name="" type="abnf"><![CDATA[
jscomps-param = "JSCOMPS" "=" jscomps-param = "JSCOMPS" "="
DQUOTE ( DQUOTE (
(jscomps-entry-sep / "") ";" jscomps-entrylist (jscomps-entry-sep / "") ";" jscomps-entrylist
) DQUOTE ) 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 special characters according to RFC 68 68
]]></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 Positional Entries</name>
<sourcecode name=""><![CDATA[ <sourcecode name=""><![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
} }
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>
<!--[rfced] The title of Figures 52 and 53 are the same. Should
Figure 53 be updated as follows to denote the difference between
the figures?
Original:
Figure 53: Example for Positional Entries
Perhaps:
Figure 53: Example of a Secondary Positional Index
-->
<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=""><![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
} }
N;JSCOMPS=";1;2;2,1;0;6;4,1":Stevenson;John;Philip,Paul;;Jr.,M.D.;;Jr. 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=""><![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": ", ",
skipping to change at line 1862 skipping to change at line 2231
</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 <!--[rfced] Is "relates" the correct wording here or should it be
at relates the vCard <xref target="vcard-prop-jsprop">JSPROP</xref> property to "converts" for consistency with the other related sections?
a JSContact property.
Original:
Parameter name: JSPTR
Purpose: This parameter contains a JSON pointer [RFC6901] that
relates the vCard JSPROP (Section 3.2.1) property to a JSContact
property.
Perhaps:
Parameter name: JSPTR
Purpose: Contains a JSON pointer [RFC6901] that converts
the vCard JSPROP (Section 3.2.1) property to a JSContact
property.
-->
<dd>Contains a JSON pointer <xref target="RFC6901"/> that relates th
e vCard <xref target="vcard-prop-jsprop">JSPROP</xref> property to a JSContact p
roperty.
</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 <tt>param-value</tt> ABNF in <xr ef target="RFC6350"/>.</t>
</dd> </dd>
<dt>Format definition:</dt> <dt>Format definition:</dt>
<dd> <dd>
<sourcecode name="" type="abnf"><![CDATA[ <sourcecode name="" 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 ref target="vcard-prop-jsprop-examples"/>.</t> <t>This illustrates a simple example. For further examples, see < xref target="vcard-prop-jsprop-examples"/>.</t>
<sourcecode name=""><![CDATA[ <sourcecode name=""><![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> <!--[rfced] FYI: Since the security considerations can be found in
</section> Section 4 of RFC 9553, we updated "Section 5" to "Section 4"
<section> below.
<name>Acknowledgements</name>
<t>The definition and examples of the <xref target="vcard-param-phonetic"> Original:
PHONETIC</xref> and <xref target="vcard-param-script">SCRIPT</xref> parameters a The security considerations for parsing and formatting
re based on the initial version of <xref target="I-D.calconnect-vobject-i18n"/>. such data apply and are outlined in Section 5 of
</t> [I-D.ietf-calext-jscontact] and Section 9 of [RFC6350].
Current:
The security considerations for parsing and formatting
such data apply and are outlined in Section 4 of
[RFC9553] and Section 9 of [RFC6350].
-->
The security considerations for parsing and formatting such data apply and
are outlined in <xref target="RFC9553" sectionFormat="of" section="4"/> and <xr
ef target="RFC6350" sectionFormat="of" section="9"/>.</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.5
234.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"/>
</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 cument sections for each JSContact object type and property.</t> <t><xref target="table_convert_jscontact_to_vcard"/> lists the relevant do cument sections for each JSContact object 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 2625
<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 2689
<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>
<!--[rfced] Please review the following questions regarding the
text in Table 8 (Appendix A).
a) For "Calendar/kind" and "Card/calendars", are the references
to Sections 2.13.1 and 2.13.3 correct? We see mention of the
kind and calendar properties only in Sections 2.13.2 and 2.13.3.
Please let us know if an update is needed.
b) For "Card/nicknames", is Section 2.5.5 correct, or should it
perhaps be Section 2.5.6?
c) For "Link/kind", is Section 2.11.9 correct? We do not see the
"kind" property mentioned in that section. Please let us know if an
update is needed.
d) For "Note/note", please confirm if "note" (singular form)
is correct or if it should be "notes" (plural form) per
Section 2.11.4.
e) For "OnlineService/kind", are Sections 2.7.2 and 2.7.5 correct?
We do not see the "kind" property mentioned in either section.
Original:
Calendar kind Section 2.13.1, Section 2.13.3
Card calendars Section 2.13.1, Section 2.13.3
Card nicknames Section 2.5.5
Link kind Section 2.9.1, Section 2.11.9
Note note Section 2.11.4
OnlineService kind Section 2.7.2, Section 2.7.5
-->
<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-caladruri" format="counter"/>
fburl"/></td> and <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 2755
<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-caladruri" 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 2784
<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-caladruri"/> 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"/> and <xref target="vc ard-prop-org-directory"/></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 2829
<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>
skipping to change at line 2417 skipping to change at line 2888
<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 3013
<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 3046
<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 3115
<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>Sections <xref target="vcard-prop-contact-uri" format="counter"/ > and <xref target="vcard-prop-url" format="counter"/></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 3141
<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 3184
<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 3294
</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 2854 skipping to change at line 3325
<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>kind</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>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>
skipping to change at line 2880 skipping to change at line 3351
<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 3458
<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 3666
</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] Throughout the text, the following terminology appears to be used
inconsistently. Please review these occurrences and let us know if/how they
may be made consistent.
address property vs. addresses property
Boolean type vs. boolean type (per RFC-to-be 9553)
[Note: may we make 1 instance of "Boolean" type lowercase to match
use in the companion document?
Card vs. card
[Note: should this lowercased instance (in Section 2.5.3) perhaps
be capitalized for consistency:
...to an individual represented by the card, as do...
-->
<!-- [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. 339 change blocks. 
777 lines changed or deleted 1259 lines changed or added

This html diff was produced by rfcdiff 1.48.