rfc9555.original | rfc9555.txt | |||
---|---|---|---|---|
calext M. Loffredo | Internet Engineering Task Force (IETF) M. Loffredo | |||
Internet-Draft IIT-CNR/Registro.it | Request for Comments: 9555 IIT-CNR/Registro.it | |||
Updates: 6350 (if approved) R. Stepanek | Updates: 6350 R. Stepanek | |||
Intended status: Standards Track Fastmail | Category: Standards Track Fastmail | |||
Expires: 21 March 2024 18 September 2023 | ISSN: 2070-1721 March 2024 | |||
JSContact: Converting from and to vCard | JSContact: Converting from and to vCard | |||
draft-ietf-calext-jscontact-vcard-13 | ||||
Abstract | Abstract | |||
This document defines how to convert contact information between the | This document defines how to convert contact information between the | |||
JSContact and vCard data formats. To achieve this, it updates RFC I- | JSContact and vCard data formats. To achieve this, it updates | |||
D.ietf-calext-jscontact (JSContact) by registering new JSContact | [RFC9553] ("JSContact: A JSON Representation of Contact Data") by | |||
properties. Similarly, it updates RFC 6350 (vCard) by registering | registering new JSContact properties. Similarly, it updates RFC 6350 | |||
new vCard properties and parameters. | ("vCard Format Specification") by registering new vCard properties | |||
and parameters. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 21 March 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9555. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
This document may contain material from IETF Documents or IETF | This document may contain material from IETF Documents or IETF | |||
Contributions published or made publicly available before November | Contributions published or made publicly available before November | |||
10, 2008. The person(s) controlling the copyright in some of this | 10, 2008. The person(s) controlling the copyright in some of this | |||
material may not have granted the IETF Trust the right to allow | material may not have granted the IETF Trust the right to allow | |||
modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.1. Motivation | |||
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5 | 1.2. Notational Conventions | |||
1.3. ABNF Notations . . . . . . . . . . . . . . . . . . . . . 5 | 1.3. ABNF Notations | |||
2. Converting vCard to JSContact . . . . . . . . . . . . . . . . 5 | 2. Converting vCard to JSContact | |||
2.1. General rules . . . . . . . . . . . . . . . . . . . . . . 5 | 2.1. General Rules | |||
2.1.1. The uid property . . . . . . . . . . . . . . . . . . 6 | 2.1.1. The uid Property | |||
2.1.2. Choosing identifiers . . . . . . . . . . . . . . . . 6 | 2.1.2. Choosing Identifiers | |||
2.2. vCard Value Data Types . . . . . . . . . . . . . . . . . 6 | 2.2. vCard Value Data Types | |||
2.2.1. BOOLEAN . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.2.1. BOOLEAN | |||
2.2.2. DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and | 2.2.2. DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP | |||
TIMESTAMP . . . . . . . . . . . . . . . . . . . . . . 6 | 2.2.3. INTEGER | |||
2.2.3. INTEGER . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.2.4. FLOAT | |||
2.2.4. FLOAT . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2.5. LANGUAGE-TAG | |||
2.2.5. LANGUAGE-TAG . . . . . . . . . . . . . . . . . . . . 7 | 2.2.6. TEXT | |||
2.2.6. TEXT . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2.7. URI | |||
2.2.7. URI . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2.8. UTC-OFFSET | |||
2.2.8. UTC-OFFSET . . . . . . . . . . . . . . . . . . . . . 7 | 2.3. vCard Parameters | |||
2.3. vCard Parameters . . . . . . . . . . . . . . . . . . . . 7 | 2.3.1. ALTID | |||
2.3.1. ALTID . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.3.2. AUTHOR | |||
2.3.2. AUTHOR . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.3.3. AUTHOR-NAME | |||
2.3.3. AUTHOR-NAME . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.4. CALSCALE | |||
2.3.4. CALSCALE . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.5. CREATED | |||
2.3.5. CREATED . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.6. DERIVED | |||
2.3.6. DERIVED . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.7. GEO | |||
2.3.7. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.8. GROUP | |||
2.3.8. GROUP . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.9. INDEX | |||
2.3.9. INDEX . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.3.10. LANGUAGE | |||
2.3.10. LANGUAGE . . . . . . . . . . . . . . . . . . . . . . 9 | 2.3.11. LEVEL | |||
2.3.11. LEVEL . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3.12. MEDIATYPE | |||
2.3.12. MEDIATYPE . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3.13. PHONETIC | |||
2.3.13. PHONETIC . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3.14. PID | |||
2.3.14. PID . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.15. PREF | |||
2.3.15. PREF . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.16. PROP-ID | |||
2.3.16. PROP-ID . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.17. SCRIPT | |||
2.3.17. SCRIPT . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.18. SERVICE-TYPE | |||
2.3.18. SERVICE-TYPE . . . . . . . . . . . . . . . . . . . . 14 | 2.3.19. SORT-AS | |||
2.3.19. SORT-AS . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.20. TYPE | |||
2.3.20. TYPE . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.21. TZ | |||
2.3.21. TZ . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.22. USERNAME | |||
2.3.22. USERNAME . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.23. VALUE | |||
2.3.23. VALUE . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.4. General Properties | |||
2.4. General Properties . . . . . . . . . . . . . . . . . . . 15 | 2.4.1. BEGIN and END | |||
2.4.1. BEGIN and END . . . . . . . . . . . . . . . . . . . . 15 | 2.4.2. KIND | |||
2.4.2. KIND . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.4.3. SOURCE | |||
2.4.3. SOURCE . . . . . . . . . . . . . . . . . . . . . . . 16 | 2.4.4. XML | |||
2.4.4. XML . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 2.5. Identification Properties | |||
2.5. Identification Properties . . . . . . . . . . . . . . . . 16 | 2.5.1. BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, and | |||
2.5.1. BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, | ANNIVERSARY | |||
ANNIVERSARY . . . . . . . . . . . . . . . . . . . . . 16 | 2.5.2. FN | |||
2.5.2. FN . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 2.5.3. GENDER | |||
2.5.3. GENDER . . . . . . . . . . . . . . . . . . . . . . . 18 | 2.5.4. GRAMGENDER and PRONOUNS | |||
2.5.4. GRAMGENDER and PRONOUNS . . . . . . . . . . . . . . . 18 | 2.5.5. N | |||
2.5.5. N . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 2.5.6. NICKNAME | |||
2.5.6. NICKNAME . . . . . . . . . . . . . . . . . . . . . . 21 | 2.5.7. PHOTO | |||
2.5.7. PHOTO . . . . . . . . . . . . . . . . . . . . . . . . 22 | 2.6. Delivery Addressing Properties | |||
2.6. Delivery Addressing Properties . . . . . . . . . . . . . 22 | 2.6.1. ADR | |||
2.6.1. ADR . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 2.7. Communications Properties | |||
2.7. Communications Properties . . . . . . . . . . . . . . . . 25 | 2.7.1. EMAIL | |||
2.7.1. EMAIL . . . . . . . . . . . . . . . . . . . . . . . . 25 | 2.7.2. IMPP | |||
2.7.2. IMPP . . . . . . . . . . . . . . . . . . . . . . . . 26 | 2.7.3. LANG | |||
2.7.3. LANG . . . . . . . . . . . . . . . . . . . . . . . . 26 | 2.7.4. LANGUAGE | |||
2.7.4. LANGUAGE . . . . . . . . . . . . . . . . . . . . . . 27 | 2.7.5. SOCIALPROFILE | |||
2.7.5. SOCIALPROFILE . . . . . . . . . . . . . . . . . . . . 27 | 2.7.6. TEL | |||
2.7.6. TEL . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 2.8. Geographical Properties | |||
2.8. Geographical Properties . . . . . . . . . . . . . . . . . 29 | 2.8.1. GEO | |||
2.8.1. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 2.8.2. TZ | |||
2.8.2. TZ . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 2.8.3. Combining Geographical Properties | |||
2.8.3. Combining geographical properties . . . . . . . . . . 30 | 2.9. Organizational Properties | |||
2.9. Organizational Properties . . . . . . . . . . . . . . . . 30 | 2.9.1. CONTACT-URI | |||
2.9.1. CONTACT-URI . . . . . . . . . . . . . . . . . . . . . 30 | 2.9.2. LOGO | |||
2.9.2. LOGO . . . . . . . . . . . . . . . . . . . . . . . . 31 | 2.9.3. MEMBER | |||
2.9.3. MEMBER . . . . . . . . . . . . . . . . . . . . . . . 31 | 2.9.4. ORG | |||
2.9.4. ORG . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 2.9.5. RELATED | |||
2.9.5. RELATED . . . . . . . . . . . . . . . . . . . . . . . 32 | 2.9.6. TITLE and ROLE | |||
2.9.6. TITLE and ROLE . . . . . . . . . . . . . . . . . . . 33 | 2.10. Personal Information Properties | |||
2.10. Personal Information Properties . . . . . . . . . . . . . 34 | 2.10.1. EXPERTISE | |||
2.10.1. EXPERTISE . . . . . . . . . . . . . . . . . . . . . 34 | 2.10.2. HOBBY | |||
2.10.2. HOBBY . . . . . . . . . . . . . . . . . . . . . . . 35 | 2.10.3. INTEREST | |||
2.10.3. INTEREST . . . . . . . . . . . . . . . . . . . . . . 36 | 2.10.4. ORG-DIRECTORY | |||
2.10.4. ORG-DIRECTORY . . . . . . . . . . . . . . . . . . . 36 | 2.11. Explanatory Properties | |||
2.11. Explanatory Properties . . . . . . . . . . . . . . . . . 37 | 2.11.1. CATEGORIES | |||
2.11.1. CATEGORIES . . . . . . . . . . . . . . . . . . . . . 37 | 2.11.2. CLIENTPIDMAP and PID Parameters | |||
2.11.2. CLIENTPIDMAP and PID Parameter . . . . . . . . . . . 37 | 2.11.3. CREATED | |||
2.11.3. CREATED . . . . . . . . . . . . . . . . . . . . . . 38 | 2.11.4. NOTE | |||
2.11.4. NOTE . . . . . . . . . . . . . . . . . . . . . . . . 38 | 2.11.5. PRODID | |||
2.11.5. PRODID . . . . . . . . . . . . . . . . . . . . . . . 38 | 2.11.6. REV | |||
2.11.6. REV . . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.7. SOUND | |||
2.11.7. SOUND . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.8. UID | |||
2.11.8. UID . . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.9. URL | |||
2.11.9. URL . . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.10. VERSION | |||
2.11.10. VERSION . . . . . . . . . . . . . . . . . . . . . . 40 | 2.11.11. X-ABLabel | |||
2.11.11. X-ABLabel . . . . . . . . . . . . . . . . . . . . . 40 | 2.12. Security Properties | |||
2.12. Security Properties . . . . . . . . . . . . . . . . . . . 40 | 2.12.1. KEY | |||
2.12.1. KEY . . . . . . . . . . . . . . . . . . . . . . . . 41 | 2.13. Calendar Properties | |||
2.13. Calendar Properties . . . . . . . . . . . . . . . . . . . 41 | 2.13.1. CALADRURI | |||
2.13.1. CALADRURI . . . . . . . . . . . . . . . . . . . . . 41 | 2.13.2. CALURI | |||
2.13.2. CALURI . . . . . . . . . . . . . . . . . . . . . . . 42 | 2.13.3. FBURL | |||
2.13.3. FBURL . . . . . . . . . . . . . . . . . . . . . . . 42 | 2.14. Extended Properties and Parameters | |||
2.14. Extended Properties and Parameters . . . . . . . . . . . 43 | 2.15. New JSContact Properties | |||
2.15. New JSContact properties . . . . . . . . . . . . . . . . 43 | 2.15.1. Property vCardProps | |||
2.15.1. Property vCardProps . . . . . . . . . . . . . . . . 43 | 2.15.2. Property vCardParams | |||
2.15.2. Property vCardParams . . . . . . . . . . . . . . . . 44 | 2.15.3. Property vCardName | |||
2.15.3. Property vCardName . . . . . . . . . . . . . . . . . 44 | 3. Converting JSContact to vCard | |||
3. Converting JSContact to vCard . . . . . . . . . . . . . . . . 45 | 3.1. Conversion Rules | |||
3.1. Conversion Rules . . . . . . . . . . . . . . . . . . . . 45 | 3.1.1. Converting Unknown Properties | |||
3.1.1. Converting unknown properties . . . . . . . . . . . . 46 | 3.2. New vCard Properties | |||
3.2. New vCard Properties . . . . . . . . . . . . . . . . . . 46 | 3.2.1. JSPROP | |||
3.2.1. JSPROP . . . . . . . . . . . . . . . . . . . . . . . 46 | 3.3. New vCard Parameters | |||
3.3. New vCard Parameter . . . . . . . . . . . . . . . . . . . 48 | 3.3.1. JSCOMPS | |||
3.3.1. JSCOMPS . . . . . . . . . . . . . . . . . . . . . . . 48 | 3.3.2. JSPTR | |||
3.3.2. JSPTR . . . . . . . . . . . . . . . . . . . . . . . . 52 | 4. Security Considerations | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 52 | 5. IANA Considerations | |||
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 52 | 5.1. New vCard Property | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 | 5.2. New vCard Parameter | |||
6.1. New vCard Properties . . . . . . . . . . . . . . . . . . 52 | 5.3. New JSContact Properties | |||
6.2. New vCard Parameters . . . . . . . . . . . . . . . . . . 53 | 5.4. New JSContact Type | |||
6.3. New JSContact Properties . . . . . . . . . . . . . . . . 53 | 6. References | |||
6.4. New JSContact Types . . . . . . . . . . . . . . . . . . . 53 | 6.1. Normative References | |||
7. Implementation Status . . . . . . . . . . . . . . . . . . . . 54 | 6.2. Informative References | |||
7.1. CNR . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 | Appendix A. Reverse Rules of Converting a vCard to a JSContact | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 54 | Card | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 55 | Acknowledgements | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 56 | Authors' Addresses | |||
Appendix A. Reverse Rules of Converting vCard to JSContact | ||||
Card . . . . . . . . . . . . . . . . . . . . . . . . . . 56 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 65 | ||||
1. Introduction | 1. Introduction | |||
1.1. Motivation | 1.1. Motivation | |||
The JSContact data model and format [I-D.ietf-calext-jscontact] aims | The JSContact data model and format [RFC9553] aims to be an | |||
to be an alternative to the widely used vCard [RFC6350] standard and | alternative to the widely used vCard standard [RFC6350] and jCard | |||
jCard [RFC7095]. | format [RFC7095]. | |||
While applications might prefer JSContact to exchange contact card | While applications might prefer JSContact to exchange contact card | |||
data with other systems, they are likely to interoperate with | data with other systems, they are likely to interoperate with | |||
services and clients that only support vCard or jCard. Similarly, | services and clients that only support vCard or jCard. Similarly, | |||
existing contact data providers and consumers already using vCard or | existing contact data providers and consumers already using vCard or | |||
jCard might want to represent their contact data also in JSContact. | jCard might also want to represent their contact data in JSContact. | |||
To achieve this, this document defines standard rules to convert | To achieve this, this document defines standard rules to convert | |||
contact data between JSContact and vCard (and consequently jCard). | contact data between JSContact and vCard (and consequently jCard). | |||
1.2. Notational Conventions | 1.2. Notational Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
1.3. ABNF Notations | 1.3. ABNF Notations | |||
The ABNF definitions in this document use the notations of [RFC5234]. | The ABNF definitions in this document use the notations of [RFC5234]. | |||
ABNF rules not defined in this document either are defined in | ABNF rules not defined in this document are defined in either | |||
[RFC5234] (such as the ABNF for CRLF, WSP, DQUOTE, VCHAR, ALPHA, and | [RFC5234] (such as the ABNF for CRLF, WSP, DQUOTE, VCHAR, ALPHA, and | |||
DIGIT) or [RFC6350]. | DIGIT) or [RFC6350]. | |||
2. Converting vCard to JSContact | 2. Converting vCard to JSContact | |||
This section contains the conversion rules from vCard to JSContact | This section contains the conversion rules from the vCard to the | |||
Card. It follows the same structure as the vCard v4 [RFC6350]. | JSContact Card. It follows the same structure as vCard v4 [RFC6350]. | |||
Properties and parameters of vCard extension RFCs, including the | Properties and parameters of vCard extension RFCs, including those | |||
vCard JSContact Extension | described in "vCard Format Extension for JSContact" [RFC9554], have | |||
[I-D.ietf-calext-vcard-jscontact-extensions] are added to appropriate | been added to the appropriate subsections. | |||
subsections. | ||||
2.1. General rules | 2.1. General Rules | |||
2.1.1. The uid property | ||||
2.1.1. The uid Property | ||||
The UID property in vCard is optional, but the uid property in | The UID property in vCard is optional, but the uid property in | |||
JSContact is mandatory. Implementations that convert a vCard without | JSContact is mandatory. Implementations that convert a vCard without | |||
UID property MUST generate a unique identifier as a value for the uid | a UID property MUST generate a unique identifier as a value for the | |||
property. This value SHOULD be the same when converting the same | uid property. This value SHOULD be the same when converting the same | |||
vCard multiple times, but how to achieve this is implementation- | vCard multiple times, but how to achieve this is implementation- | |||
specific. | specific. | |||
2.1.2. Choosing identifiers | 2.1.2. Choosing Identifiers | |||
Multivalued properties in JSContact typically are represented as a | Multivalued properties in JSContact are typically represented as a | |||
JSON object where the object keys are of the Id type and the object | JSON object where the object keys are of the Id type and the object | |||
values are the converted vCard property. In absence of the PROP-ID | values are the converted vCard property. In the absence of the PROP- | |||
parameter (see Section 2.3.16), implementations are free to choose | ID parameter (see Section 2.3.16), implementations are free to choose | |||
any identifier for such entries. Whatever identifier generation | any identifier for such entries. Whatever identifier generation | |||
scheme implementations use, they MUST generate values that are valid | scheme implementations use, they MUST generate values that are valid | |||
according to the definition of the Id type in | according to the definition of the Id type in [RFC9553]. For | |||
[I-D.ietf-calext-jscontact]. For example, this could be an | example, this could be an incrementing number across all Ids or only | |||
incrementing number across all Ids or only unique within one JSON | unique within one JSON object. | |||
object. | ||||
2.2. vCard Value Data Types | 2.2. vCard Value Data Types | |||
2.2.1. BOOLEAN | 2.2.1. BOOLEAN | |||
This converts to the JSContact Boolean type. | The BOOLEAN type converts to the JSContact Boolean type. | |||
2.2.2. DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP | 2.2.2. DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP | |||
The TIMESTAMP type generally converts to the UTCDateTime. It | The TIMESTAMP type generally converts to the UTCDateTime type. It | |||
converts to the Timestamp type for anniversaries. | converts to the Timestamp type for anniversaries. | |||
The DATE type converts to the PartialDate type, which only is | The DATE type converts to the PartialDate type, which is only | |||
relevant for anniversaries. This does not apply to DATE values that | relevant for anniversaries. This does not apply to DATE values that | |||
only define a month or a day. | only define a month or day. | |||
The TIME, DATE-TIME, DATE-AND-OR-TIME types and DATE type values that | The TIME, DATE-TIME, and DATE-AND-OR-TIME types and DATE type values | |||
only define a month or day do not convert to a JSContact datetime | that only define a month or day do not convert to a JSContact | |||
type. Instead, vCard properties or parameters having such values | datetime type. Instead, vCard properties or parameters having such | |||
convert to the properties defined in Section 2.15. | values convert to the properties defined in Section 2.15. | |||
2.2.3. INTEGER | 2.2.3. INTEGER | |||
This converts to the JSContact Int and UnsignedInt types. | The INTEGER type converts to the JSContact Int and UnsignedInt types. | |||
2.2.4. FLOAT | 2.2.4. FLOAT | |||
This converts to the JSContact Number type. | The FLOAT type converts to the JSContact Number type. | |||
2.2.5. LANGUAGE-TAG | 2.2.5. LANGUAGE-TAG | |||
This converts to the JSContact String type. | The LANGUAGE-TAG type converts to the JSContact String type. | |||
2.2.6. TEXT | 2.2.6. TEXT | |||
This converts to the JSContact String type. | The TEXT type converts to the JSContact String type. | |||
2.2.7. URI | 2.2.7. URI | |||
This converts to the JSContact String type. | The URI type converts to the JSContact String type. | |||
2.2.8. UTC-OFFSET | 2.2.8. UTC-OFFSET | |||
This either converts to a String containing an IANA TimeZone Database | The UTC-OFFSET type either converts to a String containing an IANA | |||
entry name (see Section 2.8.2), or it does not convert to any | Time Zone Database entry name (see Section 2.8.2) or does not convert | |||
JSContact type. For the latter, vCard properties or parameters | to any JSContact type. For the latter, vCard properties or | |||
having such values MAY convert to JSContact as defined in | parameters having such values MAY convert to JSContact as defined in | |||
Section 2.15. | Section 2.15. | |||
2.3. vCard Parameters | 2.3. vCard Parameters | |||
This section contains the conversion rules for vCard parameters. A | This section contains the conversion rules for vCard parameters. A | |||
rule typically only applies for specific vCard properties. To | rule typically applies only for specific vCard properties. To | |||
convert a vCard parameter on an arbitrary vCard property, see | convert a vCard parameter on an arbitrary vCard property, see | |||
Section 2.15.2. | Section 2.15.2. | |||
2.3.1. ALTID | 2.3.1. ALTID | |||
This does not convert to an IANA-registered property in JSContact, | The ALTID parameter does not convert to an IANA-registered property | |||
but several conversion rules make use of this parameter to combine | in JSContact, but several conversion rules make use of this parameter | |||
multiple vCard properties into a single JSContact object instance. | to combine multiple vCard properties into a single JSContact object | |||
For an example of this see Section 2.6.1. To preserve the verbatim | instance. For an example of this, see Section 2.6.1. To preserve | |||
value of the ALTID parameter, set the JSContact properties defined in | the verbatim value of the ALTID parameter, set the JSContact | |||
Section 2.15. | properties defined in Section 2.15. | |||
2.3.2. AUTHOR | 2.3.2. AUTHOR | |||
The AUTHOR parameter value of a vCard NOTE property converts to the | The AUTHOR parameter value of a vCard NOTE property converts to the | |||
uri property of the Author object for this note. | uri property of the Author object for this note. | |||
Note: This parameter is defined in | Note: This parameter is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.3. AUTHOR-NAME | 2.3.3. AUTHOR-NAME | |||
The AUTHOR-NAME parameter value of a vCard NOTE property converts to | The AUTHOR-NAME parameter value of a vCard NOTE property converts to | |||
the name property of the Author object for this note. | the name property of the Author object for this note. | |||
Note: This parameter is defined in | Note: This parameter is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.4. CALSCALE | 2.3.4. CALSCALE | |||
This parameter set on a BDAY, DEATHDATE or ANNIVERSARY property | The CALSCALE parameter set on a BDAY, DEATHDATE, or ANNIVERSARY | |||
converts to the calendarScale property of the PartialDate object | property converts to the calendarScale property of the PartialDate | |||
type. | object type. | |||
2.3.5. CREATED | 2.3.5. CREATED | |||
The CREATED parameter value of a vCard NOTE property converts to the | The CREATED parameter value of a vCard NOTE property converts to the | |||
created property of the Note object. | created property of the Note object. | |||
Note: This parameter is defined in | Note: This parameter is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.6. DERIVED | 2.3.6. DERIVED | |||
If this parameter is set to true on a vCard property, then | If the DERIVED parameter is set to true on a vCard property, then | |||
implementations MAY choose to not convert that property. Note: This | implementations MAY choose not to convert that property. | |||
parameter is defined in [I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
Note: This parameter is defined in [RFC9554]. | ||||
2.3.7. GEO | 2.3.7. GEO | |||
This parameter set on an ADR property converts to the JSContact | The GEO parameter set on an ADR property converts to the JSContact | |||
coordinates property of the Address object that represents the vCard | coordinates property of the Address object that represents the vCard | |||
ADR. | ADR. | |||
2.3.8. GROUP | 2.3.8. GROUP | |||
This parameter exclusively is for use in jCard (see Section 7.1 of | The GROUP parameter is exclusively for use in jCard (see Section 7.1 | |||
[RFC7095]). It MUST NOT be set in a vCard. Preserving the exact | of [RFC7095]). It MUST NOT be set in a vCard. Preserving the exact | |||
group name when converting from vCard to JSContact and back to vCard | group name when converting from vCard to JSContact and back to vCard | |||
is not necessary. Any group identifiers will do, as long as the | is not necessary. Any group identifiers will do, as long as the | |||
resulting vCard groups its properties equally to the original vCard. | resulting vCard groups its properties equally to the original vCard. | |||
Implementations that still wish to preserve the exact property group | Implementations that still wish to preserve the exact property group | |||
name of a vCard property MAY set the group parameter in the JSContact | name of a vCard property MAY set the group parameter in the JSContact | |||
properties vCardProps or vCardParams defined in Section 2.15. | properties vCardProps or vCardParams as defined in Section 2.15. | |||
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" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 1: An example how to preserve the group name in | Figure 1: Example of How to Preserve the Group Name in | |||
vCardParams during conversion. | vCardParams during Conversion | |||
item2.X-FOO:bar | item2.X-FOO:bar | |||
"vCardProps": [ | "vCardProps": [ | |||
["x-foo", { | ["x-foo", { | |||
"group": "item2" | "group": "item2" | |||
}, "unknown", "bar"] | }, "unknown", "bar"] | |||
] | ] | |||
Figure 2: An example how to preserve the group name in vCardProps | Figure 2: Example of How to Preserve the Group Name in vCardProps | |||
during conversion. | during Conversion | |||
2.3.9. INDEX | 2.3.9. INDEX | |||
This parameter set on the EXPERTISE, HOBBY, INTEREST and ORG- | The INDEX parameter set on the EXPERTISE, HOBBY, INTEREST, and ORG- | |||
DIRECTORY properties defined in [RFC6715] converts to the JSContact | DIRECTORY properties defined in [RFC6715] converts to the JSContact | |||
listAs property of the PersonalInfo and Directory objects. | listAs property of the PersonalInfo and Directory objects. | |||
2.3.10. LANGUAGE | 2.3.10. LANGUAGE | |||
This converts to an entry in the localizations property for the vCard | The LANGUAGE parameter converts to an entry in the localizations | |||
property that this parameter is set on. The value of the LANGUAGE | property for the vCard property that this parameter is set on. The | |||
parameter defines the language tag key in the localizations property. | value of the LANGUAGE parameter defines the language tag key in the | |||
localizations property. | ||||
This specification does not define a single standard conversion rule | This specification does not define a single standard conversion rule | |||
for how to convert the property values. Instead, building the | for how to convert the property values. Instead, building the | |||
localizations value is implementation-specific. | localizations value is implementation-specific. | |||
Two options to populate the localizations property are: | Two options to populate the localizations property are: | |||
* One Patch Per Property: For each vCard property with a LANGUAGE | * One Patch per Property: For each vCard property with a LANGUAGE | |||
parameter, set the complete path in the PatchObject to the | parameter, set the complete path in the PatchObject to the | |||
JSContact property that the vCard property converts to. The value | JSContact property that the vCard property converts to. The value | |||
of the patch is the converted property value. This is simple to | of the patch is the converted property value. This is simple to | |||
process and adequate if the vCard only contains a few properties | process and adequate if the vCard only contains a few properties | |||
with LANGUAGE parameter. | with the LANGUAGE parameter. | |||
* Bundle Patches by Parent: If a PatchObject contains multiple paths | * Bundle Patches by Parent: If a PatchObject contains multiple paths | |||
that have the same parent paths, then it might be possible to | that have the same parent paths, then it might be possible to | |||
combine these patches into one patch that patches the parent | combine these patches into one patch that patches the parent | |||
property. This is possible if the property in the Card is patched | property. This is possible if the property in the Card is patched | |||
in its entirety. | in its entirety. | |||
Generally, localizations only localize properties that are present in | Generally, localizations only localize properties that are present in | |||
the non-localized version of this Card. Figure 3 illustrates this. | the non-localized version of this Card. Figure 3 illustrates this. | |||
skipping to change at page 10, line 40 ¶ | skipping to change at line 444 ¶ | |||
"t1": { | "t1": { | |||
"name": "Boss" | "name": "Boss" | |||
} | } | |||
}, | }, | |||
"localizations": { | "localizations": { | |||
"fr": { | "fr": { | |||
"titles/t1/name": "Patron" | "titles/t1/name": "Patron" | |||
} | } | |||
} | } | |||
Figure 3: LANGUAGE conversion example: one dominant language | Figure 3: LANGUAGE Conversion Example: One Dominant Language | |||
As a special case, if one or more vCard properties of the same type | 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- | do not have the LANGUAGE parameter set, then choose them to the non- | |||
localized Card. Convert any with LANGUAGE parameters to the | localized Card. Convert any with LANGUAGE parameters to the | |||
localizations property. Figure 4 illustrates this. | localizations property. Figure 4 illustrates this. | |||
FN:John Doe | FN:John Doe | |||
TITLE:Boss | TITLE:Boss | |||
TITLE;LANGUAGE=fr:Patron | TITLE;LANGUAGE=fr:Patron | |||
skipping to change at page 11, line 23 ¶ | skipping to change at line 469 ¶ | |||
"t1": { | "t1": { | |||
"name": "Boss" | "name": "Boss" | |||
} | } | |||
}, | }, | |||
"localizations": { | "localizations": { | |||
"fr": { | "fr": { | |||
"titles/t1/name": "Patron" | "titles/t1/name": "Patron" | |||
} | } | |||
} | } | |||
Figure 4: LANGUAGE conversion example: property without language | Figure 4: LANGUAGE Conversion Example: Property without Language | |||
As the least preferred option, Figure 5 illustrates how all vCard | As the least-preferred option, Figure 5 illustrates how all vCard | |||
properties of the same type have the LANGUAGE parameter set, but none | properties of the same type have the LANGUAGE parameter set, but none | |||
of their language tags match the language of the main Card. In this | of their language tags match the language of the main Card. In this | |||
case, implementations MAY choose to add the localized vCard | case, implementations MAY choose to add the localized vCard | |||
properties only to the localizations object. | properties only to the localizations object. | |||
The following example uses non-ASCII characters to demonstrate | The following example uses non-ASCII characters to demonstrate | |||
multilingual content. The ASCII-formatted version of this | multilingual content. | |||
specification might not show the correct characters. Please refer to | ||||
the HTML or PDF versions instead. | ||||
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" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 5: LANGUAGE conversion example: conflicting LANGUAGE | Figure 5: LANGUAGE Conversion Example: Conflicting LANGUAGE | |||
property and parameter values | Property and Parameter Values | |||
2.3.11. LEVEL | 2.3.11. LEVEL | |||
The LEVEL parameter [RFC6715] converts to the level property of the | The LEVEL parameter [RFC6715] converts to the level property of the | |||
PersonalInfo type. If this parameter is set on the EXPERTISE | PersonalInfo type. If this parameter is set on the EXPERTISE | |||
property, then its values convert as: | property, then its values convert as follows: | |||
* "beginner" converts to "low"; | * "beginner" converts to "low"; | |||
* "average" converts to "medium"; | * "average" converts to "medium"; and | |||
* "expert" converts to "high". | * "expert" converts to "high". | |||
In all other cases the values convert verbatim, but lowercase MUST be | In all other cases, the values convert verbatim, but lowercase MUST | |||
used for the JSContact value. | be used for the JSContact value. | |||
2.3.12. MEDIATYPE | 2.3.12. MEDIATYPE | |||
This converts to the mediaType property of the Resource object type. | The MEDIATYPE parameter converts to the mediaType property of the | |||
Resource object type. | ||||
2.3.13. PHONETIC | 2.3.13. PHONETIC | |||
This parameter as well as the SCRIPT (Section 2.3.17) parameter set | The PHONETIC parameter as well as the SCRIPT (Section 2.3.17) | |||
on a N or ADR property convert to JSContact as follows: | parameter set on an N or ADR property convert to JSContact as | |||
follows: | ||||
the values of the phonetic, phoneticScript and phoneticSystem | the values of the phonetic, phoneticScript and phoneticSystem | |||
properties of the NameComponent and Name or AddressComponent and | properties of the NameComponent and Name or AddressComponent and | |||
Address object types, respectively. | Address object types, respectively. | |||
The related N or ADR property is defined by the vCard ALTID | The related N or ADR property is defined by the vCard ALTID | |||
parameter. The conversion rules for the N (Section 2.5.5) and ADR | parameter. The conversion rules for the N (Section 2.5.5) and ADR | |||
(Section 2.6.1) properties define how the vCard components convert to | (Section 2.6.1) properties define how the vCard components convert to | |||
JSContact. | JSContact. | |||
The value of the PHONETIC parameter converts to the phoneticSystem | The value of the PHONETIC parameter converts to the phoneticSystem | |||
property unless it is script, in which case the phoneticSystem | property unless it is script, in which case the phoneticSystem | |||
property is not set. The value of the SCRIPT parameter converts to | property is not set. The value of the SCRIPT parameter converts to | |||
the phoneticScript property. | the phoneticScript property. | |||
The values of the components in the property value convert to values | The values of the components in the property value convert to values | |||
the phonetic properties for the respective NameComponent or | in the phonetic properties for the respective NameComponent or | |||
AddressComponent. | AddressComponent. | |||
If more than one property having the PHONETIC parameter set relates | If more than one property has the PHONETIC parameter set and relates | |||
to the same property, then they convert to the Card localizations | to the same property, then they convert to the Card localizations | |||
property according their LANGUAGE parameter values as outlined in | property according to their LANGUAGE parameter values as outlined in | |||
Section 2.3.10. | Section 2.3.10. | |||
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": [ | |||
skipping to change at page 14, line 4 ¶ | skipping to change at line 578 ¶ | |||
"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" | |||
} | } | |||
} | } | |||
Figure 6: PHONETIC conversion example | ||||
Figure 6: PHONETIC Conversion Example | ||||
2.3.14. PID | 2.3.14. PID | |||
This converts to an entry in the vCardParams property, see | The PID parameter converts to an entry in the vCardParams property; | |||
Section 2.15.2. | see Section 2.15.2. | |||
2.3.15. PREF | 2.3.15. PREF | |||
This converts to the pref property. | The PREF parameter converts to the pref property. | |||
2.3.16. PROP-ID | 2.3.16. PROP-ID | |||
The PROP-ID parameter value of a vCard property converts to the Id of | The PROP-ID parameter value of a vCard property converts to the Id of | |||
the JSContact property to which the vCard property converts. | the JSContact property to which the vCard property converts. | |||
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 | |||
skipping to change at page 14, line 38 ¶ | skipping to change at line 613 ¶ | |||
"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" | |||
} | } | |||
} | } | |||
Figure 7: PROP-ID conversion example | Figure 7: PROP-ID Conversion Example | |||
Note: This parameter is defined in | Note: This parameter is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.17. SCRIPT | 2.3.17. SCRIPT | |||
See Section 2.3.13. | For the SCRIPT parameter, see Section 2.3.13. | |||
2.3.18. SERVICE-TYPE | 2.3.18. SERVICE-TYPE | |||
This converts to the service property of the OnlineService object | The SERVICE-TYPE parameter converts to the service property of the | |||
type. Note: This parameter is defined in | OnlineService object type. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
Note: This parameter is defined in [RFC9554]. | ||||
2.3.19. SORT-AS | 2.3.19. SORT-AS | |||
This converts to the sortAs properties defined for the Name, | The SORT-AS parameter converts to the sortAs properties defined for | |||
Organization and OrgUnit object types. | the Name, Organization, and OrgUnit object types. | |||
2.3.20. TYPE | 2.3.20. TYPE | |||
This converts to the contexts property as well as property-specific | The TYPE parameter converts to the contexts property as well as | |||
kind property values defined in later sections. If not specified | property-specific kind property values defined in later sections. If | |||
otherwise for a specific JSContact property, the vCard home and work | not specified otherwise for a specific JSContact property, the vCard | |||
parameter values convert to the JSContact private and work contexts, | home and work parameter values convert to the JSContact private and | |||
respectively. | work contexts, respectively. | |||
2.3.21. TZ | 2.3.21. TZ | |||
This parameter set on an ADR property converts to the JSContact | The TZ parameter set on an ADR property converts to the JSContact | |||
timeZone property of the Address object that represents the vCard | timeZone property of the Address object that represents the vCard | |||
ADR. Also see the conversion of the TZ property in Section 2.8.2. | ADR. Also see the conversion of the TZ property in Section 2.8.2. | |||
2.3.22. USERNAME | 2.3.22. USERNAME | |||
This converts to the user property of the OnlineService object type. | The USERNAME parameter converts to the user property of the | |||
Note: This parameter is defined in | OnlineService object type. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
Note: This parameter is defined in [RFC9554]. | ||||
2.3.23. VALUE | 2.3.23. VALUE | |||
This does not convert to an IANA-registered property in JSContact. | The VALUE parameter does not convert to an IANA-registered property | |||
To preserve properties with experimental values, see Section 2.15.2 | in JSContact. To preserve properties with experimental values, see | |||
and Section 2.15.1. | Sections 2.15.1 and 2.15.2. | |||
2.4. General Properties | 2.4. General Properties | |||
2.4.1. BEGIN and END | 2.4.1. BEGIN and END | |||
These do not convert to IANA-registered properties in JSContact. | The BEGIN and END properties do not convert to IANA-registered | |||
properties in JSContact. | ||||
2.4.2. KIND | 2.4.2. KIND | |||
The KIND property converts to the kind property (Figure 8). Allowed | The KIND property converts to the kind property (Figure 8). Allowed | |||
values are those described in Section 6.1.4 of [RFC6350] and extended | values are those described in Section 6.1.4 of [RFC6350] and extended | |||
with the values declared in [RFC6473] and [RFC6869]. | with the values declared in [RFC6473] and [RFC6869]. | |||
KIND:individual | KIND:individual | |||
"kind": "individual" | "kind": "individual" | |||
Figure 8: KIND conversion example | Figure 8: KIND Conversion Example | |||
2.4.3. SOURCE | 2.4.3. SOURCE | |||
The SOURCE property converts to a Directory object in the directories | The SOURCE property converts to a Directory object in the directories | |||
property (Figure 9). The kind property is set to entry. The uri | property (Figure 9). The kind property is set to entry. The uri | |||
property is set to the SOURCE property value. | property is set to the SOURCE property value. | |||
The PREF and MEDIATYPE parameters convert according to the rules as | The PREF and MEDIATYPE parameters convert according to the rules | |||
defined in Section 2.3. | defined in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 9: SOURCE conversion example | Figure 9: SOURCE Conversion Example | |||
2.4.4. XML | 2.4.4. XML | |||
This converts to an entry in the vCardProps property, see | The XML property converts to an entry in the vCardProps property; see | |||
Section 2.15.1. | Section 2.15.1. | |||
2.5. Identification Properties | 2.5. Identification Properties | |||
2.5.1. BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY | 2.5.1. BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, and ANNIVERSARY | |||
The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE, | The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE, | |||
DEATHDATE, DEATHPLACE described in [RFC6474] are represented as | DEATHDATE, and DEATHPLACE described in [RFC6474] are represented as | |||
Anniversary objects included in the anniversaries property | Anniversary objects and are included in the anniversaries property | |||
(Figure 10): | (Figure 10): | |||
* BDAY and BIRTHPLACE convert to date and place where kind is set to | * BDAY and BIRTHPLACE convert to date and place where kind is set to | |||
"birth"; | "birth"; | |||
* DEATHDATE and DEATHPLACE convert to date and place where kind is | * DEATHDATE and DEATHPLACE convert to date and place where kind is | |||
set to "death"; | set to "death"; and | |||
* ANNIVERSARY converts to date where kind is "wedding". | * ANNIVERSARY converts to date where kind is set to "wedding". | |||
Both birth and death places are represented as instances of the | Both birth and death places are represented as instances of the | |||
Address object. | Address object. | |||
The BIRTHPLACE and DEATHPLACE properties that are represented as geo | The BIRTHPLACE and DEATHPLACE properties that are represented as geo | |||
URIs convert to Address instances including only the coordinates | URIs convert to Address instances that only include the coordinates | |||
property. If the URI value is not a geo URI, the place is ignored. | property. If the URI value is not a geo URI, the place is ignored. | |||
The ALTID and LANGUAGE parameters of both BIRTHPLACE and DEATHPLACE | The ALTID and LANGUAGE parameters of both the BIRTHPLACE and | |||
properties convert according to the rules as defined in Section 2.3. | DEATHPLACE properties convert according to the rules defined in | |||
Section 2.3. | ||||
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": { | |||
skipping to change at page 17, line 49 ¶ | skipping to change at line 771 ¶ | |||
"ANNIVERSARY-3" : { | "ANNIVERSARY-3" : { | |||
"kind": "wedding", | "kind": "wedding", | |||
"date": { | "date": { | |||
"year": 1986, | "year": 1986, | |||
"month": 2, | "month": 2, | |||
"day": 1 | "day": 1 | |||
} | } | |||
} | } | |||
} | } | |||
Figure 10: BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY | Figure 10: BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, and | |||
conversion example | ANNIVERSARY Conversion Example | |||
2.5.2. FN | 2.5.2. FN | |||
The FN property converts to the Name object in the name property. | The FN property converts to the Name object in the name property. | |||
Its value converts to the Name object full property (Figure 11). If | Its value converts to the Name object full property (Figure 11). If | |||
the LANGUAGE parameter is set, then the FN property converts as | the LANGUAGE parameter is set, then the FN property converts as | |||
outlined in Section 2.3.10. In the unexpected case that the vCard | outlined in Section 2.3.10. In the unexpected case where the vCard | |||
contains more than one FN property without LANGUAGE parameter, then | contains more than one FN property without the LANGUAGE parameter, | |||
convert the FN property that has the least parameters set to the full | convert the FN property that has the least parameters set to the full | |||
property. If multiple such FN properties are present, choose any of | property. If multiple such FN properties are present, choose any of | |||
them. All other FN properties convert to the vCardProps | them. All other FN properties convert to the vCardProps | |||
(Section 2.15.1) property. | (Section 2.15.1) property. | |||
FN:John Q. Public, Esq. | FN:John Q. Public, Esq. | |||
"name": { | "name": { | |||
"full": "John Q. Public, Esq.", | "full": "John Q. Public, Esq." | |||
} | } | |||
Figure 11: FN conversion example | Figure 11: FN Conversion Example | |||
2.5.3. GENDER | 2.5.3. GENDER | |||
This does not map to an IANA-registered property in JSContact. To | The GENDER property does not map to an IANA-registered property in | |||
convert this property, see Section 2.15.1. Note the alternative | JSContact. To convert this property, see Section 2.15.1. Note the | |||
JSContact speakToAs property which defines how to address and refer | alternative JSContact speakToAs property that defines how to address | |||
to an individual represented by the card, as do the newly defined | and refer to an individual represented by the card, as do the newly | |||
vCard GRAMGENDER and PRONOUNS properties of | defined vCard GRAMGENDER and PRONOUNS properties of [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.5.4. GRAMGENDER and PRONOUNS | 2.5.4. GRAMGENDER and PRONOUNS | |||
The GRAMGENDER property converts to the grammaticalGender property of | The GRAMGENDER property converts to the grammaticalGender property of | |||
the SpeakToAs object (Figure 12). | the SpeakToAs object (Figure 12). | |||
The PRONOUNS property converts to an entry in the pronouns property | The PRONOUNS property converts to an entry in the pronouns property | |||
of the SpeakToAs object (Figure 12). | of the SpeakToAs object (Figure 12). | |||
GRAMGENDER:NEUTER | GRAMGENDER:NEUTER | |||
skipping to change at page 19, line 23 ¶ | skipping to change at line 828 ¶ | |||
"pronouns": "they/them", | "pronouns": "they/them", | |||
"pref": 2 | "pref": 2 | |||
}, | }, | |||
"PRONOUNS-2": { | "PRONOUNS-2": { | |||
"pronouns": "xe/xir", | "pronouns": "xe/xir", | |||
"pref": 1 | "pref": 1 | |||
} | } | |||
} | } | |||
} | } | |||
Figure 12: GRAMGENDER and PRONOUNS conversion example | Figure 12: GRAMGENDER and PRONOUNS Conversion Example | |||
2.5.5. N | 2.5.5. N | |||
The N property converts to the Name object in the name property. | The N property converts to the Name object in the name property. | |||
Each component in the N property structured value converts to a | Each component in the N property structured value converts to a | |||
NameComponent in the Name components property. The following table | NameComponent in the Name components property. The following table | |||
shows this relation: | shows this relation: | |||
+============+===============+==============================+ | +============+===============+==============================+ | |||
| N | NameComponent | Remarks | | | N | NameComponent | Remarks | | |||
skipping to change at page 20, line 37 ¶ | skipping to change at line 869 ¶ | |||
| | | From vCard: ignore any value | | | | | From vCard: ignore any value | | |||
| | | that also occurs in the | | | | | that also occurs in the | | |||
| | | Generation component. | | | | | Generation component. | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
| Secondary | surname2 | | | | Secondary | surname2 | | | |||
| surname | | | | | surname | | | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
| Generation | generation | | | | Generation | generation | | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
Table 1: N components conversion | Table 1: N Components Conversion | |||
If the JSCOMPS (Section 3.3.1) parameter is set, then the Name | If the JSCOMPS (Section 3.3.1) parameter is set, then the Name | |||
isOrdered property value is "true", and the defaultSeparator and any | isOrdered property value is "true", and the defaultSeparator and any | |||
separator name components are set according to the parameter value. | separator name components are set according to the parameter value. | |||
The components list MUST adhere to the order of the JSCOMPS parameter | The components list MUST adhere to the order of the JSCOMPS parameter | |||
value. | value. | |||
If the JSCOMPS parameter is not set, then the Name isOrdered property | If the JSCOMPS parameter is not set, then the Name isOrdered property | |||
value is "false" and the defaultSeparator property MUST NOT be set. | value is "false", and the defaultSeparator property MUST NOT be set. | |||
The components list MUST follow the order of values in the N | The components list MUST follow the order of values in the N | |||
structured value when read from left to right. | structured value when read from left to right. | |||
If the SORT-AS parameter is set, then its structured value converts | If the SORT-AS parameter is set, then its structured value converts | |||
to the Name sortAs property according to Table 1. An empty or non- | to the Name sortAs property according to Table 1. An empty or non- | |||
existent component value indicates that no sort is defined for this | existent component value indicates that no sort is defined for this | |||
kind. | kind. | |||
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" | |||
} | } | |||
} | } | |||
Figure 13: N conversion example | Figure 13: N Conversion Example | |||
See Section 3.3.1 for examples of using the JSCOMPS parameter for | See Section 3.3.1 for examples of using the JSCOMPS parameter for | |||
vCard structured property values. | vCard-structured property values. | |||
2.5.6. NICKNAME | 2.5.6. NICKNAME | |||
A NICKNAME property converts to Nickname object in the nicknames | The NICKNAME property converts to a Nickname object in the nicknames | |||
property (Figure 14). The name property is set to the NICKNAME | property (Figure 14). The name property is set to the NICKNAME | |||
property value. | property value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
NICKNAME:Johnny | NICKNAME:Johnny | |||
"nicknames": { | "nicknames": { | |||
"NICK-1": { | "NICK-1": { | |||
"name": "Johnny" | "name": "Johnny" | |||
} | } | |||
} | } | |||
Figure 14: NICKNAME conversion example | Figure 14: NICKNAME Conversion Example | |||
2.5.7. PHOTO | 2.5.7. PHOTO | |||
A PHOTO property converts to an entry in the media property | The PHOTO property converts to an entry in the media property | |||
(Figure 15). The entry value is a Media object whose kind property | (Figure 15). The entry value is a Media object whose kind property | |||
is set to photo and uri property is set to the PHOTO value. | is set to photo and uri property is set to the PHOTO value. | |||
The PREF and MEDIATYPE parameters convert according to the rules as | The PREF and MEDIATYPE parameters convert according to the rules | |||
defined in Section 2.3. | defined in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 15: PHOTO conversion example | Figure 15: PHOTO Conversion Example | |||
2.6. Delivery Addressing Properties | 2.6. Delivery Addressing Properties | |||
2.6.1. ADR | 2.6.1. ADR | |||
The ADR property converts to an Address object in the addresses | The ADR property converts to an Address object in the addresses | |||
property. Each component in the ADR property structured value | property. Each component in the ADR-structured property value | |||
converts to an AddressComponent in the Address components property. | converts to an AddressComponent in the Address components property. | |||
[I-D.ietf-calext-vcard-jscontact-extensions] defines new component | [RFC9554] defines new components for the ADR property. | |||
for the ADR property. Implementations SHOULD set these new | Implementations SHOULD set these new components, even if all their | |||
components, even if all their values are the empty string. | values are the empty string. | |||
The following table shows how ADR component and AddressComponent kind | The following table shows how the ADR component and AddressComponent | |||
relate: | kind relate: | |||
+===========+================+=============================================+ | +=============+==================+===============================+ | |||
|ADR |AddressComponent|Remarks | | | ADR | AddressComponent | Remarks | | |||
|component |kind | | | | component | kind | | | |||
+===========+================+=============================================+ | +=============+==================+===============================+ | |||
|post office|postOfficeBox |[RFC6350] recommends this component not be | | | post office | postOfficeBox | [RFC6350] recommends that | | |||
|box | |set, but this now is disputable given the new| | | box | | this component not be set, | | |||
| | |components. Instead, set this component and | | | | | but this is now disputable | | |||
| | |use the new ADR value format defined in | | | | | given the new components. | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | | | Instead, set this component | | |||
+-----------+----------------+---------------------------------------------+ | | | | and use the new ADR value | | |||
|extended |apartment (see |To vCard: Set the values of the following components:| | | | | format defined in [RFC9554]. | | |||
|address |Remarks) | | | +-------------+------------------+-------------------------------+ | |||
| | |* room | | | extended | apartment (see | To vCard: set the values of | | |||
| | | | | | address | Remarks) | the following components: | | |||
| | |* floor | | | | | | | |||
| | | | | | | | * room | | |||
| | |* apartment | | | | | | | |||
| | | | | | | | * floor | | |||
| | |* building | | | | | | | |||
| | | | | | | | * apartment | | |||
| | |From vCard: Ignore if the ADR structured value is of the format defined in [I-D.ietf-calext-vcard-jscontact-extensions]. Otherwise convert to apartment.| | | | | | | |||
+-----------+----------------+---------------------------------------------+ | | | | * building | | |||
|street |name (see |To vCard: Set the values of the following components:| | | | | | | |||
|address |Remarks) | | | | | | From vCard: ignore if the ADR | | |||
| | |* number | | | | | structured value is of the | | |||
| | | | | | | | format defined in [RFC9554]. | | |||
| | |* name | | | | | Otherwise, convert to | | |||
| | | | | | | | apartment. | | |||
| | |* block | | +-------------+------------------+-------------------------------+ | |||
| | | | | | street | name (see | To vCard: set the values of | | |||
| | |* direction | | | address | Remarks) | the following components: | | |||
| | | | | | | | | | |||
| | |* landmark | | | | | * number | | |||
| | | | | | | | | | |||
| | |* subdistrict | | | | | * name | | |||
| | | | | | | | | | |||
| | |* district | | | | | * block | | |||
| | | | | | | | | | |||
| | |From vCard: Ignore if the ADR structured value is of the format defined in [I-D.ietf-calext-vcard-jscontact-extensions]. Otherwise convert to name.| | | | | * direction | | |||
+-----------+----------------+---------------------------------------------+ | | | | | | |||
|locality |locality | | | | | | * landmark | | |||
+-----------+----------------+---------------------------------------------+ | | | | | | |||
|region |region | | | | | | * subdistrict | | |||
+-----------+----------------+---------------------------------------------+ | | | | | | |||
|postal code|postcode | | | | | | * district | | |||
+-----------+----------------+---------------------------------------------+ | | | | | | |||
|apartment |apartment |Defined in | | | | | From vCard: ignore if the ADR | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | | | structured value is of the | | |||
+-----------+----------------+---------------------------------------------+ | | | | format defined in [RFC9554]. | | |||
|block |block |Defined in | | | | | Otherwise, convert to name. | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | +-------------+------------------+-------------------------------+ | |||
+-----------+----------------+---------------------------------------------+ | | locality | locality | | | |||
|building |building |Defined in | | +-------------+------------------+-------------------------------+ | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | region | region | | | |||
+-----------+----------------+---------------------------------------------+ | +-------------+------------------+-------------------------------+ | |||
|direction |direction |Defined in | | | postal code | postcode | | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | +-------------+------------------+-------------------------------+ | |||
+-----------+----------------+---------------------------------------------+ | | apartment | apartment | Defined in [RFC9554]. | | |||
|district |district |Defined in | | +-------------+------------------+-------------------------------+ | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | block | block | Defined in [RFC9554]. | | |||
+-----------+----------------+---------------------------------------------+ | +-------------+------------------+-------------------------------+ | |||
|floor |floor |Defined in | | | building | building | Defined in [RFC9554]. | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | +-------------+------------------+-------------------------------+ | |||
+-----------+----------------+---------------------------------------------+ | | direction | direction | Defined in [RFC9554]. | | |||
|landmark |landmark |Defined in | | +-------------+------------------+-------------------------------+ | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | district | district | Defined in [RFC9554]. | | |||
+-----------+----------------+---------------------------------------------+ | +-------------+------------------+-------------------------------+ | |||
|room |room |Defined in | | | floor | floor | Defined in [RFC9554]. | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | +-------------+------------------+-------------------------------+ | |||
+-----------+----------------+---------------------------------------------+ | | landmark | landmark | Defined in [RFC9554]. | | |||
|street |number |Defined in | | +-------------+------------------+-------------------------------+ | |||
|number | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | room | room | Defined in [RFC9554]. | | |||
+-----------+----------------+---------------------------------------------+ | +-------------+------------------+-------------------------------+ | |||
|subdistrict|subdistrict |Defined in | | | street | number | Defined in [RFC9554]. | | |||
| | |[I-D.ietf-calext-vcard-jscontact-extensions].| | | number | | | | |||
+-----------+----------------+---------------------------------------------+ | +-------------+------------------+-------------------------------+ | |||
| subdistrict | subdistrict | Defined in [RFC9554]. | | ||||
+-------------+------------------+-------------------------------+ | ||||
Table 2: ADR components conversion | Table 2: ADR Components Conversion | |||
If the JSCOMPS (Section 3.3.1) parameter is set, then the Address | If the JSCOMPS (Section 3.3.1) parameter is set, then the Address | |||
isOrdered property value is "true", and the defaultSeparator and any | isOrdered property value is "true", and the defaultSeparator and any | |||
separator name components are set according to the parameter value. | separator name components are set according to the parameter value. | |||
The components list MUST adhere to the order of the JSCOMPS parameter | The components list MUST adhere to the order of the JSCOMPS parameter | |||
value. | value. | |||
If the JSCOMPS parameter is not set, then the Address isOrdered | If the JSCOMPS parameter is not set, then the Address isOrdered | |||
property value is "false" and the defaultSeparator property MUST NOT | property value is "false", and the defaultSeparator property MUST NOT | |||
be set. The components list MUST follow the order of values in the | be set. The components list MUST follow the order of values in the | |||
ADR structured value when read from left to right. | ADR structured value when read from left to right. | |||
The LABEL parameter converts to the Address full property. | The LABEL parameter converts to the Address full property. | |||
The GEO parameter converts to the Address coordinates property. | The GEO parameter converts to the Address coordinates property. | |||
The TZ parameter converts to the Address timeZone property. | The TZ parameter converts to the Address timeZone property. | |||
The CC parameter as defined in [RFC8605] converts to the Address | The CC parameter, as defined in [RFC8605], converts to the Address | |||
countryCode property. | countryCode property. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. The ADR-specific values of the TYPE | in Section 2.3. The ADR-specific values of the TYPE parameter | |||
parameter defined in Sections 5.1 and 5.2 of | defined in Sections 5.1 and 5.2 of [RFC9554] convert to the | |||
[I-D.ietf-calext-vcard-jscontact-extensions] convert to the | ||||
corresponding entries of the contexts property as defined in | corresponding entries of the contexts property as defined in | |||
Section 2.5.1 of [I-D.ietf-calext-jscontact]. | Section 2.5.1 of [RFC9553]. | |||
The ALTID and LANGUAGE parameters convert according to the rules as | The ALTID and LANGUAGE parameters convert according to the rules | |||
defined in Section 2.3. Each possible language-dependent alternative | defined in Section 2.3. Each possible language-dependent alternative | |||
is represented as an entry of the PatchObject map where the key | is represented as an entry of the PatchObject map where the key | |||
references the full property. | references the full property. | |||
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" | |||
} | } | |||
} | } | |||
Figure 16: ADR conversion example | Figure 16: ADR Conversion Example | |||
See Section 3.3.1 for examples of using the JSCOMPS parameter for | See Section 3.3.1 for examples of using the JSCOMPS parameter for | |||
vCard structured property values. | vCard-structured property values. | |||
2.7. Communications Properties | 2.7. Communications Properties | |||
2.7.1. EMAIL | 2.7.1. EMAIL | |||
An EMAIL property converts to an entry in the emails property | The EMAIL property converts to an entry in the emails property | |||
(Figure 17). The entry value is an EmailAddress object. The address | (Figure 17). The entry value is an EmailAddress object. The address | |||
property is set to the EMAIL value. | property is set to the EMAIL value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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 | |||
} | } | |||
} | } | |||
Figure 17: EMAIL conversion example | Figure 17: EMAIL Conversion Example | |||
2.7.2. IMPP | 2.7.2. IMPP | |||
An IMPP property converts to an entry in the onlineServices property | The IMPP property converts to an entry in the onlineServices property | |||
(Figure 18). The entry value is an OnlineService object. The | (Figure 18). The entry value is an OnlineService object. The | |||
vCardName property is set to "impp" and the uri property is set to | vCardName property is set to "impp", and the uri property is set to | |||
the IMPP value. | the IMPP value. | |||
The SERVICE-TYPE, USERNAME, PREF and TYPE parameters convert | The SERVICE-TYPE, USERNAME, PREF, and TYPE parameters convert | |||
according to the rules as defined in Section 2.3. | according to the rules defined in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 18: IMPP conversion example | Figure 18: IMPP Conversion Example | |||
2.7.3. LANG | 2.7.3. LANG | |||
A LANG property converts to an entry in the preferredLanguages | The LANG property converts to an entry in the preferredLanguages | |||
property (Figure 19). The entry value is an LanguagePref object. | property (Figure 19). The entry value is a LanguagePref object. The | |||
The LanguagePref language property value is the LANG property value. | LanguagePref language property value is the LANG property value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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 | |||
skipping to change at page 27, line 26 ¶ | skipping to change at line 1178 ¶ | |||
"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 } | |||
} | } | |||
} | } | |||
Figure 19: LANG conversion example | Figure 19: LANG Conversion Example | |||
2.7.4. LANGUAGE | 2.7.4. LANGUAGE | |||
The LANGUAGE property converts to the language property (Figure 20). | The LANGUAGE property converts to the language property (Figure 20). | |||
LANGUAGE:de-AT | LANGUAGE:de-AT | |||
"language": "de-AT" | "language": "de-AT" | |||
Figure 20: LANGUAGE conversion example | Figure 20: LANGUAGE Conversion Example | |||
Note: This property is defined in | Note: This property is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.7.5. SOCIALPROFILE | 2.7.5. SOCIALPROFILE | |||
A SOCIALPROFILE property converts to an entry in the onlineServices | The SOCIALPROFILE property converts to an entry in the onlineServices | |||
property (Figure 21). The entry value is an OnlineService object. | property (Figure 21). The entry value is an OnlineService object. | |||
The vCardName property is set to "socialprofile" or can be omitted. | The vCardName property is set to "socialprofile", or it can be | |||
If the value type of the SOCIALPROFILE is URI, the uri property is | omitted. If the value type of the SOCIALPROFILE is URI, the uri | |||
set to the SOCIALPROFILE value. Otherwise, the user property is set | property is set to the SOCIALPROFILE value. Otherwise, the user | |||
to the SOCIALPROFILE value. | property is set to the SOCIALPROFILE value. | |||
The SERVICE-TYPE, USERNAME, PREF and TYPE parameters convert | The SERVICE-TYPE, USERNAME, PREF, and TYPE parameters convert | |||
according to the rules as defined in Section 2.3. | according to the rules defined in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 21: SOCIALPROFILE conversion example | Figure 21: SOCIALPROFILE Conversion Example | |||
Note: This property is defined in | Note: This property is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.7.6. TEL | 2.7.6. TEL | |||
A TEL property converts to an entry in the phones property | The TEL property converts to an entry in the phones property | |||
(Figure 22). The entry value is a Phone object. | (Figure 22). The entry value is a Phone object. | |||
The TEL-specific values of the TYPE parameter convert to the features | The TEL-specific values of the TYPE parameter convert to the features | |||
property keys as outlined in table Table 3. Note that Section 6.4.1 | property keys as outlined in Table 3. Note that Section 6.4.1 of | |||
of [RFC6350] defines the default TYPE of TEL to be voice, but the | [RFC6350] defines the default TYPE of TEL to be voice, but the | |||
default Phone features property is absent by default. Accordingly, | default Phone features property is absent by default. Accordingly, | |||
an implementation SHOULD only set the Phone features property if the | an implementation SHOULD only set the Phone features property if the | |||
TEL property actually has a TEL-specific TYPE parameter set. | TEL property actually has a TEL-specific TYPE parameter set. | |||
+=============+===============+ | +=============+===============+ | |||
| TYPE value | Phone feature | | | TYPE value | Phone feature | | |||
+=============+===============+ | +=============+===============+ | |||
| cell | mobile | | | cell | mobile | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| fax | fax | | | fax | fax | | |||
skipping to change at page 28, line 52 ¶ | skipping to change at line 1250 ¶ | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| text | text | | | text | text | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| textphone | textphone | | | textphone | textphone | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| video | video | | | video | video | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| voice | voice | | | voice | voice | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
Table 3: TEL TYPE conversion | Table 3: TEL TYPE Conversion | |||
The value of the TEL property converts to the Phone number property. | The value of the TEL property converts to the Phone number property. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 22: TEL conversion example | Figure 22: TEL Conversion Example | |||
2.8. Geographical Properties | 2.8. Geographical Properties | |||
2.8.1. GEO | 2.8.1. GEO | |||
This converts to the coordinates property of the Address object. | The GEO property converts to the coordinates property of the Address | |||
Also see Section 2.8.3 to determine which Address object instance to | object. Also see Section 2.8.3 to determine which Address object | |||
convert to. | instance to convert to. | |||
2.8.2. TZ | 2.8.2. TZ | |||
A value of type TEXT converts to the timeZone property in the Address | A value of type TEXT converts to the timeZone property in the Address | |||
object. | object. | |||
A value of type UTC-OFFSET converts to the timeZone property in the | A value of type UTC-OFFSET converts to the timeZone property in the | |||
Address object if the offset has zero minutes and the hour offset is | Address object if the offset has zero minutes and the hour offset is | |||
in the range -12 <= 14: | in the range -12 <= 14. Note that: | |||
* If the hour offset is zero, use the time zone name Etc/UTC. | * If the hour offset is zero, use the time zone name Etc/UTC. | |||
* Otherwise construct the time zone name with Etc/GMT suffixed with | * Otherwise, construct the time zone name with Etc/GMT suffixed with | |||
the string representation of the reversed sign hour offset, | the string representation of the reversed sign hour offset, | |||
including the sign but excluding leading zeros and minutes. For | including the sign but excluding leading zeros and minutes. For | |||
example, the UTC offset value -0500 converts to Etc/GMT+5. | example, the UTC offset value -0500 converts to Etc/GMT+5. | |||
For such property values, also see Section 2.8.3 to determine which | For such property values, also see Section 2.8.3 to determine which | |||
Address object instance to convert to. | Address object instance to convert to. | |||
Any other value of type UTC-OFFSET or URI does not convert to an | Any other value of type UTC-OFFSET or URI does not convert to an | |||
IANA-registered property in JSContact. To convert such property, see | IANA-registered property in JSContact. To convert such property, see | |||
Section 2.15.1. | Section 2.15.1. | |||
2.8.3. Combining geographical properties | 2.8.3. Combining Geographical Properties | |||
In vCard the properties ADR, GEO and TZ occur independently of each | In vCard, the properties ADR, GEO, and TZ occur independently of each | |||
other. In JSContact, they all convert to properties of an Address | other. In JSContact, they all convert to properties of an Address | |||
object. It is implementation-specific if these vCard properties | object. It is implementation-specific if these vCard properties | |||
convert to _separate_ address instances in JSContact, or if some or | convert to _separate_ address instances in JSContact or if some or | |||
all of them convert to the _same_ address. That being said, | all of them convert to the _same_ address. That being said, | |||
implementations MUST convert the properties to the _same_ address for | implementations MUST convert the properties to the _same_ address for | |||
the following cases: | the following cases: | |||
* The GROUP parameter values of the properties match. | * The GROUP parameter values of the properties match. | |||
* The GROUP parameters are not set, but are set on any other ADR, | * The GROUP parameters are not set, but they are set on any other | |||
GEO and TZ properties. | ADR, GEO, and TZ properties. | |||
2.9. Organizational Properties | 2.9. Organizational Properties | |||
2.9.1. CONTACT-URI | 2.9.1. CONTACT-URI | |||
A CONTACT-URI property as defined in [RFC8605] is represented as an | The CONTACT-URI property, as defined in [RFC8605], is represented as | |||
entry of the links property (Figure 23). The entry value is a Link | an entry of the links property (Figure 23). The entry value is a | |||
object whose kind property is set to contact and uri property is set | Link object whose kind property is set to contact and uri property is | |||
to the CONTACT-URI value. | set to the CONTACT-URI value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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 | |||
} | } | |||
} | } | |||
Figure 23: CONTACT-URI conversion example | Figure 23: CONTACT-URI Conversion Example | |||
2.9.2. LOGO | 2.9.2. LOGO | |||
A LOGO property converts to an entry in the media property | The LOGO property converts to an entry in the media property | |||
(Figure 24). The entry value is a Media object whose kind property | (Figure 24). The entry value is a Media object whose kind property | |||
is set to logo and uri property is set to the LOGO value. | is set to logo and uri property is set to the LOGO value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 24: LOGO conversion example | Figure 24: LOGO Conversion Example | |||
2.9.3. MEMBER | 2.9.3. MEMBER | |||
The uids of the contact cards composing the group are included in the | The uids of the contact cards composing the group are included in the | |||
members property (Figure 25). | members property (Figure 25). | |||
In this case, the PREF parameter does not have a JSContact | In this case, the PREF parameter does not have a JSContact | |||
counterpart; however, the implementors MAY insert the map entries by | counterpart; however, the implementors MAY insert the map entries by | |||
order of preference. | order of preference. | |||
skipping to change at page 31, line 49 ¶ | skipping to change at line 1389 ¶ | |||
"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 | |||
} | } | |||
Figure 25: Group example | Figure 25: Group Example | |||
2.9.4. ORG | 2.9.4. ORG | |||
An ORG property converts to an entry in the organizations property | The ORG property converts to an entry in the organizations property | |||
(Figure 26). The entry value is an Organization object whose name | (Figure 26). The entry value is an Organization object whose name | |||
property contains the organizational name, and the units property is | property contains the organizational name, and the units property is | |||
an array of OrgUnit objects each containing the organizational unit | an array of OrgUnit objects that each contain the organizational unit | |||
name in the name property. | name in the name property. | |||
Implementations MAY allow representation of organizational units | Implementations MAY allow representation of organizational units | |||
without the organizational name. In this case, the first component | without the organizational name. In this case, the first component | |||
of the ORG value MUST be an empty string (e.g., ORG:;DepartmentA). | of the ORG value MUST be an empty string (e.g., ORG:;DepartmentA). | |||
The ALTID, LANGUAGE parameters convert according to the rules as | The ALTID and LANGUAGE parameters convert according to the rules | |||
defined in Section 2.3. | defined in Section 2.3. | |||
The first item of the comma-separated SORT-AS parameter value | The first item of the comma-separated SORT-AS parameter value | |||
converts to the sortAs property of the Organization object. The | converts to the sortAs property of the Organization object. The | |||
subsequent items convert to the sortAs property of the corresponding | subsequent items convert to the sortAs property of the corresponding | |||
OrgUnit object. | OrgUnit object. | |||
The TYPE parameter converts according to the rules as defined in | The TYPE parameter converts according to the rules defined in | |||
Section 2.3. | Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 26: ORG conversion example | Figure 26: ORG Conversion Example | |||
2.9.5. RELATED | 2.9.5. RELATED | |||
This converts to an entry in the relatedTo property (Figure 27). The | The RELATED property converts to an entry in the relatedTo property | |||
property value converts to the key in the relatedTo property. The | (Figure 27). The property value converts to the key in the relatedTo | |||
TYPE parameters convert to the relation of the Relation object value. | property. The TYPE parameters convert to the relation of the | |||
Any other parameters convert as defined in Section 2.15.2. | Relation object value. Any other parameters convert as defined in | |||
Section 2.15.2. | ||||
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 | |||
} | } | |||
skipping to change at page 33, line 25 ¶ | skipping to change at line 1457 ¶ | |||
"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" : { } | |||
} | } | |||
} | } | |||
Figure 27: RELATED conversion example | Figure 27: RELATED Conversion Example | |||
2.9.6. TITLE and ROLE | 2.9.6. TITLE and ROLE | |||
Both TITLE and ROLE properties are represented as entries of the | Both TITLE and ROLE properties are represented as entries of the | |||
titles property (Figure 28). The entry value is a Title object whose | titles property (Figure 28). The entry value is a Title object whose | |||
kind property is set to title or role for TITLE and ROLE vCard | kind property is set to title or role for the TITLE and ROLE vCard | |||
properties, respectively. The name property is set to the vCard | properties, respectively. The name property is set to the vCard | |||
property value. | property value. | |||
The value of the organization property can be derived if the TITLE or | The value of the organizationId property can be derived if the TITLE | |||
ROLE property is member of a vCard property group and exactly one | or ROLE property is a member of a vCard property group and if exactly | |||
other ORG property also is part of that group. | one other ORG property is also a part of that group. | |||
The ALTID and LANGUAGE parameters convert according to the rules as | The ALTID and LANGUAGE parameters convert according to the rules | |||
defined in Section 2.3. | defined in Section 2.3. | |||
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." | |||
} | } | |||
} | } | |||
Figure 28: TITLE and ROLE conversion example | Figure 28: TITLE and ROLE Conversion Example | |||
2.10. Personal Information Properties | 2.10. Personal Information Properties | |||
2.10.1. EXPERTISE | 2.10.1. EXPERTISE | |||
An EXPERTISE property as defined in [RFC6715] is represented as a | The EXPERTISE property, as defined in [RFC6715], is represented as a | |||
PersonalInfo object in the personalInfo property (Figure 29). The | PersonalInfo object in the personalInfo property (Figure 29). The | |||
kind property is set to "expertise". | kind property is set to "expertise". | |||
The INDEX parameter converts according to the rules as defined in | The INDEX parameter converts according to the rules defined in | |||
Section 2.3. | Section 2.3. | |||
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 | |||
} | } | |||
} | } | |||
Figure 29: EXPERTISE conversion example | Figure 29: EXPERTISE Conversion Example | |||
2.10.2. HOBBY | 2.10.2. HOBBY | |||
A HOBBY property as defined in [RFC6715] is represented as a | The HOBBY property, as defined in [RFC6715], is represented as a | |||
PersonalInfo object in the personalInfo property (Figure 30). The | PersonalInfo object in the personalInfo property (Figure 30). The | |||
kind property is set to "hobby". | kind property is set to "hobby". | |||
The INDEX parameter converts according to the rules as defined in | The INDEX parameter converts according to the rules defined in | |||
Section 2.3. | Section 2.3. | |||
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 | |||
} | } | |||
} | } | |||
Figure 30: HOBBY conversion example | Figure 30: HOBBY Conversion Example | |||
2.10.3. INTEREST | 2.10.3. INTEREST | |||
An INTEREST property as defined in [RFC6715] is represented as a | The INTEREST property, as defined in [RFC6715], is represented as a | |||
PersonalInfo object in the personalInfo property (Figure 31). The | PersonalInfo object in the personalInfo property (Figure 31). The | |||
kind property is set to "interest". | kind property is set to "interest". | |||
The INDEX parameter converts according to the rules as defined in | The INDEX parameter converts according to the rules defined in | |||
Section 2.3. | Section 2.3. | |||
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 | |||
} | } | |||
} | } | |||
Figure 31: INTEREST conversion example | Figure 31: INTEREST Conversion Example | |||
2.10.4. ORG-DIRECTORY | 2.10.4. ORG-DIRECTORY | |||
The ORG-DIRECTORY property [RFC6715] converts to a Directory object | The ORG-DIRECTORY property [RFC6715] converts to a Directory object | |||
in the directories property (Figure 32). The kind property is set to | in the directories property (Figure 32). The kind property is set to | |||
directory. The uri property is set to the ORG-DIRECTORY property | directory. The uri property is set to the ORG-DIRECTORY property | |||
value. | value. | |||
The INDEX, PREF and TYPE parameters convert according to the rules as | The INDEX, PREF, and TYPE parameters convert according to the rules | |||
defined in Section 2.3. | defined in Section 2.3. | |||
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 | |||
} | } | |||
} | } | |||
Figure 32: ORG-DIRECTORY conversion example | Figure 32: ORG-DIRECTORY Conversion Example | |||
2.11. Explanatory Properties | 2.11. Explanatory Properties | |||
2.11.1. CATEGORIES | 2.11.1. CATEGORIES | |||
A CATEGORIES property converts to a set of entries of the keywords | The CATEGORIES property converts to a set of entries of the keywords | |||
property (Figure 33). The keys are the comma-separated text values | property (Figure 33). The keys are the comma-separated text values | |||
of the CATEGORIES property. | of the CATEGORIES property. | |||
In this case, the PREF parameter does not have a JSContact | In this case, the PREF parameter does not have a JSContact | |||
counterpart; however, the implementors MAY insert the map entries by | counterpart; however, the implementors MAY insert the map entries by | |||
order of preference. | order of preference. | |||
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 | |||
} | } | |||
Figure 33: CATEGORIES conversion example | Figure 33: CATEGORIES Conversion Example | |||
2.11.2. CLIENTPIDMAP and PID Parameter | 2.11.2. CLIENTPIDMAP and PID Parameters | |||
These convert to the vCardProps (Section 2.15.1) and vCardParams | The CLIENTPIDMAP and PID parameters convert to the vCardProps | |||
(Section 2.15.2) properties. | (Section 2.15.1) and vCardParams (Section 2.15.2) properties. | |||
2.11.3. CREATED | 2.11.3. CREATED | |||
The CREATED property converts to the created property (Figure 34). | The CREATED property converts to the created property (Figure 34). | |||
CREATED:19940930T143510Z | CREATED:19940930T143510Z | |||
"created": "1994-09-30T14:35:10Z" | "created": "1994-09-30T14:35:10Z" | |||
Figure 34: CREATED conversion example | Figure 34: CREATED Conversion Example | |||
Note: This property is defined in | Note: This property is defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.11.4. NOTE | 2.11.4. NOTE | |||
A NOTE property converts to a Note object in the notes map | The NOTE property converts to a Note object in the notes map | |||
(Figure 35). | (Figure 35). | |||
The ALTID and LANGUAGE parameters convert according to the rules as | The ALTID and LANGUAGE parameters convert according to the rules | |||
defined in Section 2.3. | defined in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 35: NOTE conversion example | Figure 35: NOTE Conversion Example | |||
2.11.5. PRODID | 2.11.5. PRODID | |||
The PRODID property converts to the prodId property (Figure 36). | The PRODID property converts to the prodId property (Figure 36). | |||
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" | |||
Figure 36: PRODID conversion example | Figure 36: PRODID Conversion Example | |||
2.11.6. REV | 2.11.6. REV | |||
The REV property converts to the updated property (Figure 37). | The REV property converts to the updated property (Figure 37). | |||
REV:19951031T222710Z | REV:19951031T222710Z | |||
"updated": "1995-10-31T22:27:10Z" | "updated": "1995-10-31T22:27:10Z" | |||
Figure 37: REV conversion example | Figure 37: REV Conversion Example | |||
2.11.7. SOUND | 2.11.7. SOUND | |||
A SOUND property converts to an entry in the media property | The SOUND property converts to an entry in the media property | |||
(Figure 38). The entry value is a Media object whose kind property | (Figure 38). The entry value is a Media object whose kind property | |||
is set to sound and uri property is set to the SOUND value. | is set to sound and uri property is set to the SOUND value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 38: SOUND conversion example | Figure 38: SOUND Conversion Example | |||
2.11.8. UID | 2.11.8. UID | |||
The UID property corresponds to the uid property (Figure 39). | The UID property corresponds to the uid property (Figure 39). | |||
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" | |||
Figure 39: UID conversion example | Figure 39: UID Conversion Example | |||
2.11.9. URL | 2.11.9. URL | |||
A URL property converts to an entry in the links property | The URL property converts to an entry in the links property | |||
(Figure 40). The entry value is a Link object whose uri property is | (Figure 40). The entry value is a Link object whose uri property is | |||
set to the URL value. | set to the URL value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 40: URL conversion example | Figure 40: URL Conversion Example | |||
2.11.10. VERSION | 2.11.10. VERSION | |||
This converts to an entry in the vCardProps (Section 2.15.1) | The VERSION property converts to an entry in the vCardProps | |||
property. | (Section 2.15.1) property. | |||
2.11.11. X-ABLabel | 2.11.11. X-ABLabel | |||
This property is experimental but widely in use in existing vCard | The X-ABLabel property is experimental but widely in use in existing | |||
data. It converts to the label property of a JSContact object type. | vCard data. It converts to the label property of a JSContact object | |||
The X-ABLabel property is preceded by a vCard property group name, | type. The X-ABLabel property is preceded by a vCard property group | |||
and the label converts to the JSContact object which got converted | name, and the label converts to the JSContact object, which was | |||
from a vCard property having the same group. | converted from a vCard property having the same group. | |||
The group name is not preserved, implementations are free to choose | The group name is not preserved; implementations are free to choose | |||
any unique group name when converting back to vCard. For an example | any unique group name when converting back to vCard. For an example | |||
how to preserve the group name see Section 2.3.8. | on how to preserve the group name, see Section 2.3.8. | |||
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" | |||
} | } | |||
} | } | |||
Figure 41: X-ABLabel conversion example | Figure 41: X-ABLabel Conversion Example | |||
2.12. Security Properties | 2.12. Security Properties | |||
2.12.1. KEY | 2.12.1. KEY | |||
A KEY property converts to an entry in the cryptoKeys property | The KEY property converts to an entry in the cryptoKeys property | |||
(Figure 42). The entry value is a CryptoKey object whose uri | (Figure 42). The entry value is a CryptoKey object whose uri | |||
property is set to the KEY value. | property is set to the KEY value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 42: KEY conversion example | Figure 42: KEY Conversion Example | |||
2.13. Calendar Properties | 2.13. Calendar Properties | |||
2.13.1. CALADRURI | 2.13.1. CALADRURI | |||
A CALADRURI property converts to an entry in the schedulingAddresses | The CALADRURI property converts to an entry in the | |||
property (Figure 43). The entry value is a SchedulingAddress object | schedulingAddresses property (Figure 43). The entry value is a | |||
whose uri property is set to the CALADRURI value. | SchedulingAddress object whose uri property is set to the CALADRURI | |||
value. | ||||
The PREF parameter converts according to the rules as defined in | The PREF parameter converts according to the rules defined in | |||
Section 2.3. | Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 43: CALADRURI conversion example | Figure 43: CALADRURI Conversion Example | |||
2.13.2. CALURI | 2.13.2. CALURI | |||
A CALURI property converts to an entry in the calendars property | The CALURI property converts to an entry in the calendars property | |||
(Figure 44). The entry value is a Calendar object whose kind | (Figure 44). The entry value is a Calendar object whose kind | |||
property is set to calendar and uri property is set to the CALURI | property is set to calendar and uri property is set to the CALURI | |||
value. | value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 44: CALURI conversion example | Figure 44: CALURI Conversion Example | |||
2.13.3. FBURL | 2.13.3. FBURL | |||
An FBURL property converts to an entry in the calendars property | The FBURL property converts to an entry in the calendars property | |||
(Figure 45). The entry value is a Calendar object whose kind | (Figure 45). The entry value is a Calendar object whose kind | |||
property is set to freeBusy and uri property is set to the FBURL | property is set to freeBusy and uri property is set to the FBURL | |||
value. | value. | |||
The PREF and TYPE parameters convert according to the rules as | The PREF and TYPE parameters convert according to the rules defined | |||
defined in Section 2.3. | in Section 2.3. | |||
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" | |||
} | } | |||
} | } | |||
Figure 45: FBURL conversion example | Figure 45: FBURL Conversion Example | |||
2.14. Extended Properties and Parameters | 2.14. Extended Properties and Parameters | |||
These convert as specified in Section 2.15. | Extended properties and parameters convert as specified in | |||
Section 2.15. | ||||
2.15. New JSContact properties | 2.15. New JSContact Properties | |||
vCards may contain properties or parameters for which no IANA- | vCards may contain properties or parameters for which no IANA- | |||
registered JSContact property is defined. For example, a vCard may | registered JSContact property is defined. For example, a vCard may | |||
contain properties and parameters of which the semantics or purposes | contain properties and parameters of which the semantics or purposes | |||
are unknown to the implementation; see Section 6.10 of [RFC6350]. | are unknown to the implementation; see Section 6.10 of [RFC6350]. | |||
This section defines JSContact properties by which such vCard | This section defines JSContact properties by which such vCard | |||
properties and parameters MAY be represented in JSContact. | properties and parameters MAY be represented in JSContact. | |||
Implementations MAY choose to convert differently if they deem that | Implementations MAY choose to convert differently if they deem that | |||
more appropriate. | more appropriate. | |||
skipping to change at page 44, line 14 ¶ | skipping to change at line 1921 ¶ | |||
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!"] | |||
] | ] | |||
Figure 46: JSContact vCardProps example | Figure 46: JSContact vCardProps Example | |||
2.15.2. Property vCardParams | 2.15.2. Property vCardParams | |||
Name: vCardParams | Name: vCardParams | |||
Type: String[String|String[]] | Type: String[String|String[]] | |||
Definition: This property is set on a JSContact object that | Definition: This property is set on a JSContact object that | |||
represents a vCard property. Its value MUST be a JSON object | represents a vCard property. Its value MUST be a JSON object | |||
containing vCard property parameters, defined as array element 2 | containing vCard property parameters, defined as array element 2 | |||
skipping to change at page 44, line 42 ¶ | skipping to change at line 1949 ¶ | |||
"emails": { | "emails": { | |||
"email1": { | "email1": { | |||
"address": "jane_doe@example.com", | "address": "jane_doe@example.com", | |||
"vCardParams": { | "vCardParams": { | |||
"x-foo": "Bar" | "x-foo": "Bar" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 47: JSContact vCardParams example | Figure 47: JSContact vCardParams Example | |||
2.15.3. Property vCardName | 2.15.3. Property vCardName | |||
Name: vCardName | Name: vCardName | |||
Type: String | Type: String | |||
Definition: This property is set on a JSContact object that | Definition: This property is set on a JSContact object that | |||
represents a vCard property or parameter and its value contains | represents a vCard property or parameter, and its value contains | |||
the name of that vCard element. This allows to preserve the name | the name of that vCard element. This allows the name of a vCard | |||
of a vCard element when multiple elements convert the same | element to be preserved when multiple elements convert the same | |||
JSContact object type. The case-insensitive value MUST be valid | JSContact object type. The case-insensitive value MUST be valid | |||
according to the name ABNF defined in Section 3.3 of [RFC6350]. | according to the name ABNF defined in Section 3.3 of [RFC6350]. | |||
Example: Both vCard IMPP and SOCIALPROFILE convert to OnlineService | Example: Both vCard IMPP and SOCIALPROFILE convert to OnlineService | |||
in JSContact. The vCardName property value indicates that the | in JSContact. The vCardName property value indicates that the | |||
vCard source element was IMPP: | vCard source element was IMPP as follows: | |||
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" | |||
}, | }, | |||
} | } | |||
Figure 48: JSContact vCardName example | Figure 48: JSContact vCardName Example | |||
3. Converting JSContact to vCard | 3. Converting JSContact to vCard | |||
3.1. Conversion Rules | 3.1. Conversion Rules | |||
A Card converts to vCard by applying the reverse rules of converting | A Card converts to vCard by applying the reverse rules of converting | |||
vCard to JSContact. In addition to those listed in Appendix A, the | vCard to JSContact. In addition to those listed in Appendix A, the | |||
following rules apply: | following rules apply: | |||
* Multivalued JSContact properties convert to separate instances of | * Multivalued JSContact properties convert to separate instances of | |||
their equivalent vCard property, and for each the PROP-ID | their equivalent vCard property, and each of the PROP-ID | |||
parameter MUST be set to the Id of the converted value (see | parameters MUST be set to the Id of the converted value (see | |||
Section 2.3.16). | Section 2.3.16). | |||
* The full property of the name property in JSContact is optional, | * The full property of the name property in JSContact is optional, | |||
but the FN property is mandatory in vCard. The following rules | but the FN property is mandatory in vCard. The following rules | |||
apply: | apply: | |||
- If the Name full property is set, then implementations MUST use | - If the Name full property is set, then implementations MUST use | |||
its value for the vCard FN property. | its value for the vCard FN property. | |||
- If the Name full property is not set, then implementations | - If the Name full property is not set, then implementations | |||
SHOULD derive the full name from the Name components values. | SHOULD derive the full name from the Name components values. | |||
If the isOrdered property is true, then this can be done by | If the isOrdered property is "true", then this can be done by | |||
concatenating the name component values. Otherwise, or | concatenating the name component values. Otherwise, or | |||
alternatively, an implementation can choose any other heuristic | alternatively, an implementation can choose any other heuristic | |||
to generate the full name from its components, such as | to generate the full name from its components such as | |||
[CLDRPersonName]. Implementations MUST set the DERIVED | [CLDRPersonName]. Implementations MUST set the DERIVED | |||
parameter on the FN property. | parameter on the FN property. | |||
- Otherwise, they MUST set the FN property to the empty value. | - Otherwise, the FN property MUST be set to the empty value. | |||
* Vendor-specific and unknown properties convert to vCard as | * Vendor-specific and unknown properties convert to vCard as | |||
outlined in Section 3.1.1. | outlined in Section 3.1.1. | |||
3.1.1. Converting unknown properties | 3.1.1. Converting Unknown Properties | |||
JSContact object types may contain properties for which no IANA- | JSContact object types may contain properties for which no IANA- | |||
registered vCard property is defined. For example, a JSContact | registered vCard property is defined. For example, a JSContact | |||
object may contain vendor-specific properties of which the semantics | object may contain vendor-specific properties of which the semantics | |||
or purpose are unknown. | or purpose are unknown. | |||
This specification defines the new JSPROP (Section 3.2.1) vCard | This specification defines the new JSPROP (Section 3.2.1) vCard | |||
property and JSPTR (Section 3.3.2) vCard parameter by which such | property and JSPTR (Section 3.3.2) vCard parameter by which such | |||
JSContact properties MAY be represented in vCard. Implementations | JSContact properties MAY be represented in vCard. Implementations | |||
MAY choose to convert differently if they deem that more appropriate. | MAY choose to convert differently if they deem that more appropriate. | |||
3.2. New vCard Properties | 3.2. New vCard Properties | |||
3.2.1. JSPROP | 3.2.1. JSPROP | |||
Property name: JSPROP | Property name: JSPROP | |||
Purpose: This property represents a JSContact property in vCard. | Purpose: Represents a JSContact property in vCard. | |||
Value type: TEXT, also see Format Definition for value restrictions. | Value type: TEXT; also see "Format definition" below for value | |||
restrictions. | ||||
Conformance: The property can be specified multiple times in a | Conformance: Can be specified multiple times in a vCard. | |||
vCard. | ||||
Property parameters: The JSPTR parameter MUST be set for this | Property parameters: The JSPTR parameter MUST be set for this | |||
property. Other IANA-registered and experimental property | property. Other IANA-registered and experimental property | |||
parameters can be specified on this property. | parameters can be specified on this property. | |||
Description: This property converts an arbitrary JSContact property | Description: This property converts an arbitrary JSContact property | |||
from and to vCard. The vCard property value is the JSON-encoded | from and to vCard. The vCard property value is the JSON-encoded | |||
value of the JSContact property, represented as a TEXT value. The | value of the JSContact property, represented as a TEXT value. The | |||
format of the JSON value MUST be compact, e.g., without | format of the JSON value MUST be compact, e.g., without | |||
insignificant whitespace. The value of the JSPTR parameter points | insignificant whitespace. The value of the JSPTR parameter points | |||
to the JSContact property within the Card. | to the JSContact property within the Card. | |||
The root of the JSON pointer is always the Card object that this | The root of the JSON pointer is always the Card object that this | |||
vCard converts to, irrespective if the JSON pointer starts with | vCard converts to, irrespective if the JSON pointer starts with | |||
the SOLIDUS (U+002F) character. The pointer MUST NOT reference | the SOLIDUS (U+002F) character. The pointer MUST NOT reference | |||
into an array. | into an array. | |||
All JSPROP properties in a vCard together form a PatchObject as | All JSPROP properties in a vCard together form a PatchObject as | |||
defined in [I-D.ietf-calext-jscontact]. The value of its JSPTR | defined in [RFC9553]. The value of its JSPTR parameter | |||
parameter corresponds to a key in the PatchObject, the value of | corresponds to a key in the PatchObject; the value of the JSPROP | |||
the JSPROP property corresponds to the value for that key. When | property corresponds to the value for that key. When converting | |||
converting from vCard to JSContact, the PatchObject MUST only be | from vCard to JSContact, the PatchObject MUST only be applied | |||
applied after all other vCard properties have already been | after all other vCard properties have already been converted. The | |||
converted. The PatchObject MUST be valid, including the | PatchObject MUST be valid, including the restriction that an | |||
restriction that an invalid PatchObject MUST NOT be applied. | invalid PatchObject MUST NOT be applied. | |||
Format definition: This property is defined by the following | Format definition: This property is defined by the following | |||
notation: | notation: | |||
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) | |||
; | ; | |||
) | ) | |||
Example(s): This illustrates how to convert a property at the top- | Example(s): This illustrates how to convert a property at the top | |||
level in a Card object that is unknown to the implementation. | level in a Card object that is unknown to the implementation. | |||
"someUnknownProperty": true | "someUnknownProperty": true | |||
JSPROP;JSPTR="someUnknownProperty":true | JSPROP;JSPTR="someUnknownProperty":true | |||
Figure 49: Unknown property example | Figure 49: Unknown Property Example | |||
This illustrates how to convert a vendor-specific property at the | This illustrates how to convert a vendor-specific property at the | |||
top-level of a Card object. Note the required use of quoted | top level of a Card object. Note the required use of quoted | |||
string for the JSPTR value which allows the path to include the | string for the JSPTR value, which allows the path to include the | |||
COLON (U+003A) character. | COLON (U+003A) character. | |||
"example.com:foo": { | "example.com:foo": { | |||
"bar": 1234 | "bar": 1234 | |||
} | } | |||
JSPROP;JSPTR="example.com:foo":{"bar":1234} | JSPROP;JSPTR="example.com:foo":{"bar":1234} | |||
Figure 50: Vendor-specific property conversion example | Figure 50: Vendor-Specific Property Conversion Example | |||
This illustrates how to convert a vendor-specific property at a | This illustrates how to convert a vendor-specific property at a | |||
nested level in a Card object using a path relative to the Card | nested level in a Card object using a path relative to the Card | |||
object. Although not recommended, the property name includes the | object. Although not recommended, the property name includes the | |||
SOLIDUS (U+002F) character which requires escaping in the JSON | SOLIDUS (U+002F) character, which requires escaping in the JSON | |||
pointer. | pointer. | |||
"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" | |||
Figure 51: Nested vendor-specific property example with path | Figure 51: Nested Vendor-Specific Property Example with a Path | |||
relative to Card | Relative to Card | |||
3.3. New vCard Parameter | 3.3. New vCard Parameters | |||
3.3.1. JSCOMPS | 3.3.1. JSCOMPS | |||
Parameter name: JSCOMPS | Parameter name: JSCOMPS | |||
Purpose: This parameter defines the order and separators for the | Purpose: Defines the order and separators for the elements of a | |||
elements of a structured property value. | structured property value. | |||
Description: The JSCOMPS parameter value facilitates converting name | Description: The JSCOMPS parameter value facilitates converting name | |||
and address components between JSContact and vCard. It preserves | and address components between JSContact and vCard. It preserves | |||
the order of the components the JSContact property and contains | the order of the components of the JSContact property and contains | |||
the verbatim values of separator components. | the verbatim values of separator components. | |||
If this parameter is set and its value is valid (see later), then | If this parameter is set and its value is valid (see later), then | |||
implementations MUST set the isOrdered property of the Name or | implementations MUST set the isOrdered property of the Name or | |||
Address object to "true". Otherwise, they MUST set the isOrdered | Address object to "true". Otherwise, they MUST set the isOrdered | |||
property value to "false". | property value to "false". | |||
The JSCOMPS parameter value is a structured type value. Its value | The JSCOMPS parameter value is a structured type value. Its value | |||
MUST be quoted. The parameter value consists of a sequence of | MUST be quoted. The parameter value consists of a sequence of | |||
entries, separated by the SEMICOLON character (U+003B). The first | entries, separated by the SEMICOLON character (U+003B). The first | |||
entry defines the value of the defaultSeparator property. If it | entry defines the value of the defaultSeparator property. If it | |||
is the empty string then no default separator is defined. | is the empty string, then no default separator is defined. | |||
Otherwise, the first entry MUST be a separator entry. All | Otherwise, the first entry MUST be a separator entry. All | |||
following entries processed in order result in an ordered list of | following entries processed in order result in an ordered list of | |||
JSContact components, and MUST be one of two following two kinds: | JSContact components and MUST be one of the following two kinds: | |||
1. A positional. This refers to a component value in the vCard | 1. A positional. This refers to a component value in the vCard | |||
structured value A position consists of the numeric index of a | structured value. A position consists of the numeric index of | |||
component in the structured value, optionally followed by a | a component in the structured value, optionally followed by a | |||
COMMA (U+002C) character and the non-zero index of a value | COMMA (U+002C) character and the non-zero index of a value | |||
within that component. The zero index selects the first | within that component. The zero index selects the first | |||
component or value, respectively. The second index by default | component or value, respectively. The second index is zero by | |||
is zero, in which case it MUST be omitted (as well as the | default, in which case it MUST be omitted (as well as the | |||
leading COMMA). | leading COMMA). | |||
The resulting JSContact component is formed by determining its | The resulting JSContact component is formed by determining its | |||
kind by the position in the vCard structured value. The | kind by the position in the vCard structured value. The | |||
component value is the verbatim value of the vCard component. | component value is the verbatim value of the vCard component. | |||
Figure 52 and Figure 53 illustrate this by example. | Figures 52 and 53 illustrate this by example. | |||
2. A separator. This contains the verbatim value of a separator | 2. A separator. This contains the verbatim value of a separator | |||
component. It starts with the LATIN SMALL LETTER S (U+0073) | component. It starts with the LATIN SMALL LETTER S (U+0073) | |||
character, followed by COMMA (U+002C), followed by zero or | character, followed by the COMMA (U+002C) character, followed | |||
more Section 3.3 of param-value [RFC6350] characters, where | by zero or more param-value characters (see Section 3.3 of | |||
the COMMA (U+002c) and SEMICOLON (U+003B) character MUST be | [RFC6350]), where the COMMA (U+002C) and SEMICOLON (U+003B) | |||
escaped according to the rules defined in Section 3.4 of | characters MUST be escaped according to the rules defined in | |||
[RFC6350]. Figure 54 illustrates this by example. | Section 3.4 of [RFC6350]. Figure 54 illustrates this by | |||
example. | ||||
The resulting JSContact component is formed by setting its | The resulting JSContact component is formed by setting its | |||
kind to separator and its value to the verbatim value of the | kind to separator and its value to the verbatim value of the | |||
entry. | entry. | |||
A JSCOMPS parameter value is valid if and only if: | A JSCOMPS parameter value is valid if and only if: | |||
* All indexes in the positional entries refer to an existing | * All indexes in the positional entries refer to an existing | |||
component value in the vCard property value. | component value in the vCard property value. | |||
skipping to change at page 50, line 19 ¶ | skipping to change at line 2197 ¶ | |||
- A value that occurs in both the N property secondary surname | - A value that occurs in both the N property secondary surname | |||
component and the family name component only counts once. | component and the family name component only counts once. | |||
- A value that occurs in both the N property generation | - A value that occurs in both the N property generation | |||
component and the honorific suffix component only counts | component and the honorific suffix component only counts | |||
once. | once. | |||
- A value in the ADR property street address component does | - A value in the ADR property street address component does | |||
not count if the ADR property value contains a value in one | not count if the ADR property value contains a value in one | |||
of the new components defined in | of the new components defined in [RFC9554]. | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
- All other values count once each. | - All other values count once each. | |||
Format definition: | Format definition: | |||
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 6868 | |||
Example(s): The following example demonstrates the use of positional | Example(s): The following example demonstrates the use of positional | |||
entries for the name "Jane Doe". The given name is ordered before | entries for the name "Jane Doe". The given name is ordered before | |||
the surname. No secondary index is required for either positional | the surname. No secondary index is required for either positional | |||
because both are zero. | because both are zero. | |||
"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 | |||
Figure 52: Example for positional entries | Figure 52: Example of Positional Entries | |||
The following example demonstrates a secondary positional index. | The following example demonstrates a secondary positional index. | |||
The "Jr." generation marker only counts once because it occurs in | The "Jr." generation marker only counts once because it occurs in | |||
both the designated generation component and the backwards- | both the designated generation component and the backwards- | |||
compatible honorific suffixes component. | compatible honorific suffixes component. | |||
"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. | |||
Figure 53: Example for positional entries | Figure 53: Example of Positional Entries | |||
The following example demonstrates the use of separator entries | The following example demonstrates the use of separator entries | |||
for the (shortened for brevity) address "54321 Oak St, Reston". | for the (shortened for brevity) address "54321 Oak St, Reston". | |||
The first entry defines the default separator to be ", ". The | The first entry defines the default separator to be ", ". The | |||
second and fourth positional entries are separated with the | second and fourth positional entries are separated with the | |||
separator value " ". For backwards-compatibility, the street | separator value " ". For backwards compatibility, the street | |||
address component of the ADR property contains both the street | address component of the ADR property contains both the street | |||
number and name, but it is not referred to in the JSCOMPS | number and name, but it is not referred to in the JSCOMPS | |||
parameter and does not contribute to the count of values. | parameter and does not contribute to the count of values. | |||
"addresses": { | "addresses": { | |||
"a1": { | "a1": { | |||
"components": [ | "components": [ | |||
{ "kind": "number", "value": "54321" }, | { "kind": "number", "value": "54321" }, | |||
{ "kind": "separator", "value": " " }, | { "kind": "separator", "value": " " }, | |||
{ "kind": "name", "value": "Oak St" }, | { "kind": "name", "value": "Oak St" }, | |||
{ "kind": "locality", "value": "Reston" } | { "kind": "locality", "value": "Reston" } | |||
], | ], | |||
"defaultSeparator": ", ", | "defaultSeparator": ", ", | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
} | } | |||
ADR;JSCOMPS="s,\, ;11;s, ;10;3":;;54321 Oak St;Reston;;;;;;;Oak St;54321;;;;;; | ADR;JSCOMPS="s,\, ;11;s, ;10;3":;;54321 Oak St;Reston;;;;;;;Oak St;54321;;;;;; | |||
Figure 54: Example for separator entries | Figure 54: Example of Separator Entries | |||
3.3.2. JSPTR | 3.3.2. JSPTR | |||
Parameter name: JSPTR | Parameter name: JSPTR | |||
Purpose: This parameter contains a JSON pointer [RFC6901] that | Purpose: Contains a JSON pointer [RFC6901] that relates the vCard | |||
relates the vCard JSPROP (Section 3.2.1) property to a JSContact | JSPROP (Section 3.2.1) property to a JSContact property. | |||
property. | ||||
Description: This parameter has a single value that MUST be a valid | Description: This parameter has a single value that MUST be a valid | |||
JSON pointer as defined in [RFC6901]. Note that the value MUST be | JSON pointer as defined in [RFC6901]. Note that the value MUST be | |||
quoted according to the param-value ABNF in [RFC6350]. | quoted according to the param-value ABNF in [RFC6350]. | |||
Format definition: | Format definition: | |||
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 | |||
Example(s): This illustrates a simple example. For further examples | Example(s): This illustrates a simple example. For further | |||
see Section 3.2.1. | examples, see Section 3.2.1. | |||
JSPROP;JSPTR="example.com:foo":"bar" | JSPROP;JSPTR="example.com:foo":"bar" | |||
4. Security Considerations | 4. Security Considerations | |||
This specification defines how to convert between the JSContact and | This specification defines how to convert between the JSContact and | |||
vCard formats. The security considerations for parsing and | vCard formats. The security considerations for parsing and | |||
formatting such data apply and are outlined in Section 5 of | formatting such data apply and are outlined in Section 4 of [RFC9553] | |||
[I-D.ietf-calext-jscontact] and Section 9 of [RFC6350]. | and Section 9 of [RFC6350]. | |||
5. Acknowledgements | ||||
The definition and examples of the PHONETIC (Section 2.3.13) and | ||||
SCRIPT (Section 2.3.17) parameters are based on the initial version | ||||
of [I-D.calconnect-vobject-i18n]. | ||||
6. IANA Considerations | ||||
6.1. New vCard Properties | ||||
IANA is requested to add the following entries to the "vCard | ||||
Properties" registry, defined in Section 10.3.1. of [RFC6350]. | ||||
+===========+==========+==============================+ | ||||
| Namespace | Property | Reference | | ||||
+===========+==========+==============================+ | ||||
| | JSPROP | This document, Section 3.2.1 | | ||||
+-----------+----------+------------------------------+ | ||||
Table 4: New vCard Properties | ||||
6.2. New vCard Parameters | ||||
IANA is requested to add the following entries to the "vCard | ||||
Parameters" registry, defined in Section 10.3.2. of [RFC6350]. | ||||
+===========+===========+==============================+ | 5. IANA Considerations | |||
| Namespace | Parameter | Reference | | ||||
+===========+===========+==============================+ | ||||
| | JSPTR | This document, Section 3.3.2 | | ||||
+-----------+-----------+------------------------------+ | ||||
Table 5: New vCard Parameters | 5.1. New vCard Property | |||
6.3. New JSContact Properties | IANA has added the following entry to the "vCard Properties" | |||
registry, as defined in Section 10.3.1 of [RFC6350]. | ||||
IANA is requested to add the following entries to the "JSContact | +===========+==========+=========================+ | |||
Properties" registry. The Since Version for all properties is 1.0. | | Namespace | Property | Reference | | |||
The Until Version for all properties is not set. All RFC section | +===========+==========+=========================+ | |||
references are for this document. The change controller for all | | | JSPROP | RFC 9555, Section 3.2.1 | | |||
these properties is IETF. | +-----------+----------+-------------------------+ | |||
+=============+================+===========+==============+========+ | Table 4: New vCard Property | |||
| Property | Property Type | Property | Reference or |Intended| | ||||
| Name | | Context | Description |Usage | | ||||
+=============+================+===========+==============+========+ | ||||
| vCardName | String | Any | Section |common | | ||||
| | | JSContact | 2.15.3 | | | ||||
| | | object | | | | ||||
+-------------+----------------+-----------+--------------+--------+ | ||||
| vCardParams | String[String] | Any | Section |common | | ||||
| | | JSContact | 2.15.2 | | | ||||
| | | object | | | | ||||
+-------------+----------------+-----------+--------------+--------+ | ||||
| vCardProps | JCardProp[] | Card | Section |common | | ||||
| | | | 2.15.1 | | | ||||
+-------------+----------------+-----------+--------------+--------+ | ||||
Table 6: Initial Contents of the "JSContact Properties" Registry | 5.2. New vCard Parameter | |||
6.4. New JSContact Types | IANA has added the following entry to the "vCard Parameters" | |||
registry, as defined in Section 10.3.2 of [RFC6350]. | ||||
IANA is requested to add the following entries to the "JSContact | +===========+===========+=========================+ | |||
Types" registry. The Since Version for all properties is 1.0. The | | Namespace | Parameter | Reference | | |||
Until Version for all properties is not set. All RFC section | +===========+===========+=========================+ | |||
references are for this document. The change controller for all | | | JSPTR | RFC 9555, Section 3.3.2 | | |||
these properties is IETF. | +-----------+-----------+-------------------------+ | |||
+===========+==========================+================+ | Table 5: New vCard Parameter | |||
| Type Name | Reference or Description | Intended Usage | | ||||
+===========+==========================+================+ | ||||
| JCardProp | Section 2.15.1 | common | | ||||
+-----------+--------------------------+----------------+ | ||||
Table 7: Additional Contents of the "JSContact Types" | 5.3. New JSContact Properties | |||
Registry | ||||
7. Implementation Status | IANA has added the following entries to the "JSContact Properties" | |||
registry. Note that the Since Version is 1.0, the Until Version is | ||||
not set, and the Change Controller is IETF for all of these | ||||
properties. | ||||
NOTE: Please remove this section and the reference to RFC 7942 prior | +===========+=======================+=========+========+============+ | |||
to publication as an RFC. | |Property |Property Type |Property |Intended|Reference | | |||
|Name | |Context |Usage |or | | ||||
| | | | |Description | | ||||
+===========+=======================+=========+========+============+ | ||||
|vCardName |String |Any |common |RFC 9555, | | ||||
| | |JSContact| |Section | | ||||
| | |object | |2.15.3 | | ||||
+-----------+-----------------------+---------+--------+------------+ | ||||
|vCardParams|String[String|String[]]|Any |common |RFC 9555, | | ||||
| | |JSContact| |Section | | ||||
| | |object | |2.15.2 | | ||||
+-----------+-----------------------+---------+--------+------------+ | ||||
|vCardProps |JCardProp[] |Card |common |RFC 9555, | | ||||
| | | | |Section | | ||||
| | | | |2.15.1 | | ||||
+-----------+-----------------------+---------+--------+------------+ | ||||
This section records the status of known implementations of the | Table 6: JSContact Properties Registry | |||
protocol as defined in this specification at the time of posting of | ||||
this Internet-Draft, and is based on a proposal described in | ||||
[RFC7942]. The description of implementations in this section is | ||||
intended to assist the IETF in its decision processes in progressing | ||||
drafts to RFCs. Please note that the listing of any individual | ||||
implementation here does not imply endorsement by the IETF. | ||||
Furthermore, no effort has been spent to verify the information | ||||
presented here that was supplied by IETF contributors. This is not | ||||
intended as, and must not be construed to be, a catalog of available | ||||
implementations or their features. Readers are advised to note that | ||||
other implementations may exist. | ||||
According to RFC 7942, "this will allow reviewers and working groups | 5.4. New JSContact Type | |||
to assign due consideration to documents that have the benefit of | ||||
running code, which may serve as evidence of valuable experimentation | ||||
and feedback that have made the implemented protocols more mature. | ||||
It is up to the individual working groups to use this information as | ||||
they see fit". | ||||
7.1. CNR | IANA has added the following entry to the "JSContact Types" registry. | |||
Note that the Since Version is 1.0, the Until Version is not set, and | ||||
the Change Controller is IETF for this type. | ||||
* Responsible Organization: National Research Council (CNR) of Italy | +===========+================+==========================+ | |||
* Location: https://github.com/consiglionazionaledellericerche/ | | Type Name | Intended Usage | Reference or Description | | |||
jscontact-tools | +===========+================+==========================+ | |||
* Description: This implementation includes tools for JSContact | | JCardProp | common | RFC 9555, Section 2.15.1 | | |||
creation, validation, serialization/deserialization, and | +-----------+----------------+--------------------------+ | |||
conversion from vCard, xCard and jCard. | ||||
* Level of Maturity: This is an "alpha" test implementation. | ||||
* Coverage: This implementation includes all features described in | ||||
this specification. | ||||
* Contact Information: Mario Loffredo, mario.loffredo@iit.cnr.it | ||||
8. References | Table 7: JSContact Types Registry | |||
8.1. Normative References | ||||
[I-D.ietf-calext-jscontact] | 6. References | |||
Stepanek, R. and M. Loffredo, "JSContact: A JSON | ||||
representation of contact data", Work in Progress, | ||||
Internet-Draft, draft-ietf-calext-jscontact-14, 31 August | ||||
2023, <https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
calext-jscontact-14>. | ||||
[I-D.ietf-calext-vcard-jscontact-extensions] | 6.1. Normative References | |||
Stepanek, R. and M. Loffredo, "vCard Format Extension for | ||||
JSContact", Work in Progress, Internet-Draft, draft-ietf- | ||||
calext-vcard-jscontact-extensions-10, 31 August 2023, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-calext- | ||||
vcard-jscontact-extensions-10>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
<https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
skipping to change at page 56, line 14 ¶ | skipping to change at line 2420 ¶ | |||
[RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., | [RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., | |||
"JavaScript Object Notation (JSON) Pointer", RFC 6901, | "JavaScript Object Notation (JSON) Pointer", RFC 6901, | |||
DOI 10.17487/RFC6901, April 2013, | DOI 10.17487/RFC6901, April 2013, | |||
<https://www.rfc-editor.org/info/rfc6901>. | <https://www.rfc-editor.org/info/rfc6901>. | |||
[RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095, | [RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095, | |||
DOI 10.17487/RFC7095, January 2014, | DOI 10.17487/RFC7095, January 2014, | |||
<https://www.rfc-editor.org/info/rfc7095>. | <https://www.rfc-editor.org/info/rfc7095>. | |||
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | ||||
Code: The Implementation Status Section", BCP 205, | ||||
RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
<https://www.rfc-editor.org/info/rfc7942>. | ||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
8.2. Informative References | [RFC9553] Stepanek, R. and M. Loffredo, "JSContact: A JSON | |||
Representation of Contact Data", RFC 9553, | ||||
DOI 10.17487/RFC9553, March 2024, | ||||
<https://www.rfc-editor.org/info/rfc9553>. | ||||
[RFC9554] Stepanek, R. and M. Loffredo, "vCard Format Extension for | ||||
JSContact", RFC 9554, DOI 10.17487/RFC9554, March 2024, | ||||
<https://www.rfc-editor.org/info/rfc9554>. | ||||
6.2. Informative References | ||||
[CLDRPersonName] | [CLDRPersonName] | |||
Davis, M., Edberg, P., Gillam, R., Kolisnychenko, A., | Davis, M., Edberg, P., Gillam, R., Kolisnychenko, A., | |||
McKenna, M., and others, "Technical Standard #35: Unicode | McKenna, M., and other CLDR committee members, "Unicode | |||
Locale Data Markup Language (LDML) Part 8: Person Names, | Locale Data Markup Language (LDML) Part 8: Person Names", | |||
Version 43.1", July 2023, | Unicode Technical Standard #35, Version 44.1, July 2023, | |||
<https://www.unicode.org/reports/tr35/ | <https://www.unicode.org/reports/tr35/ | |||
tr35-personNames.html>. | tr35-personNames.html>. | |||
[I-D.calconnect-vobject-i18n] | ||||
Tse, R. H., Tam, P., and M. Douglass, "vObject | ||||
Internationalization", Work in Progress, Internet-Draft, | ||||
draft-calconnect-vobject-i18n-00, 7 June 2018, | ||||
<https://datatracker.ietf.org/doc/html/draft-calconnect- | ||||
vobject-i18n-00>. | ||||
[RFC8605] Hollenbeck, S. and R. Carney, "vCard Format Extensions: | [RFC8605] Hollenbeck, S. and R. Carney, "vCard Format Extensions: | |||
ICANN Extensions for the Registration Data Access Protocol | ICANN Extensions for the Registration Data Access Protocol | |||
(RDAP)", RFC 8605, DOI 10.17487/RFC8605, May 2019, | (RDAP)", RFC 8605, DOI 10.17487/RFC8605, May 2019, | |||
<https://www.rfc-editor.org/info/rfc8605>. | <https://www.rfc-editor.org/info/rfc8605>. | |||
Appendix A. Reverse Rules of Converting vCard to JSContact Card | [vOBJECT] Tse, R., Tam, P., and M. Douglass, "vObject | |||
Internationalization", Work in Progress, Internet-Draft, | ||||
draft-calconnect-vobject-i18n-00, 7 June 2018, | ||||
<https://datatracker.ietf.org/doc/html/draft-calconnect- | ||||
vobject-i18n-00>. | ||||
Appendix A. Reverse Rules of Converting a vCard to a JSContact Card | ||||
Table 8 lists the relevant document sections for each JSContact | Table 8 lists the relevant document sections for each JSContact | |||
object type and property. | object type and property. | |||
+===================+=====================+=================+ | +===================+=====================+=========================+ | |||
| JSContact Type | Property Name | Relevant | | | JSContact Type | Property Name | Relevant | | |||
| | | Section(s) | | | | | Section(s) | | |||
+===================+=====================+=================+ | +===================+=====================+=========================+ | |||
| Address | @type | not applicable | | | Address | @type | not applicable | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | components | Section 2.6.1, | | | Address | components | Sections 2.6.1 | | |||
| | | Section 3.3.1 | | | | | and 3.3.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | contexts | Section 2.3.20 | | | Address | contexts | Section 2.3.20 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | coordinates | Section 2.3.7, | | | Address | coordinates | Sections 2.3.7 | | |||
| | | Section 2.8.1 | | | | | and 2.8.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | country | Section 2.6.1 | | | Address | country | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | countryCode | Section 2.6.1 | | | Address | countryCode | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | defaultSeparator | Section 2.6.1, | | | Address | defaultSeparator | Sections 2.6.1 | | |||
| | | Section 3.3.1 | | | | | and 3.3.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | full | Section 2.6.1 | | | Address | full | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | isOrdered | Section 2.6.1, | | | Address | isOrdered | Sections 2.6.1 | | |||
| | | Section 3.3.1 | | | | | and 3.3.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | locality | Section 2.6.1 | | | Address | locality | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | phoneticScript | Section 2.3.13, | | | Address | phoneticScript | Sections 2.3.13 | | |||
| | | Section 2.3.17 | | | | | and 2.3.17 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | phoneticSystem | Section 2.3.13 | | | Address | phoneticSystem | Section 2.3.13 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | postcode | Section 2.6.1 | | | Address | postcode | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | pref | Section 2.3.15 | | | Address | pref | Section 2.3.15 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | region | Section 2.6.1 | | | Address | region | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Address | timeZone | Section 2.3.21, | | | Address | timeZone | Sections 2.3.21 | | |||
| | | Section 2.8.2 | | | | | and 2.8.2 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| AddressComponent | phonetic | Section 2.3.13 | | | AddressComponent | phonetic | Section 2.3.13 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Anniversary | @type | not applicable | | | Anniversary | @type | not applicable | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Anniversary | date | Section 2.5.1 | | | Anniversary | date | Section 2.5.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Anniversary | kind | Section 2.5.1 | | | Anniversary | kind | Section 2.5.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Anniversary | place | Section 2.5.1 | | | Anniversary | place | Section 2.5.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Author | @type | not applicable | | | Author | @type | not applicable | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Author | name | Section 2.3.3 | | | Author | name | Section 2.3.3 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Author | uri | Section 2.3.2 | | | Author | uri | Section 2.3.2 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | @type | not applicable | | | Calendar | @type | not applicable | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | contexts | Section 2.3.20 | | | Calendar | contexts | Section 2.3.20 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | kind | Section 2.13.1, | | | Calendar | kind | Sections 2.13.1 | | |||
| | | Section 2.13.3 | | | | | and 2.13.3 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | label | Section 2.11.11 | | | Calendar | label | Section 2.11.11 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | mediaType | Section 2.3.12 | | | Calendar | mediaType | Section 2.3.12 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | pref | Section 2.3.15 | | | Calendar | pref | Section 2.3.15 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Calendar | uri | Section 2.13.1, | | | Calendar | uri | Sections 2.13.1 | | |||
| | | Section 2.13.3 | | | | | and 2.13.3 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | @type | not applicable | | | Card | @type | not applicable | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | @version | not applicable | | | Card | @version | not applicable | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | addresses | Section 2.6.1 | | | Card | addresses | Section 2.6.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | anniversaries | Section 2.5.1 | | | Card | anniversaries | Section 2.5.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | calendars | Section 2.13.1, | | | Card | calendars | Sections | | |||
| | | Section 2.13.3 | | | | | Section 2.13.1 | | |||
+-------------------+---------------------+-----------------+ | | | | and 2.13.3 | | |||
| Card | created | Section 2.11.3 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | created | Section 2.11.3 | | |||
| Card | directories | Section 2.4.3, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.10.4 | | | Card | directories | Sections | | |||
+-------------------+---------------------+-----------------+ | | | | Section 2.4.3 and | | |||
| Card | emails | Section 2.7.1 | | | | | Section 2.10.4 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | keywords | Section 2.11.1 | | | Card | emails | Section 2.7.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | kind | Section 2.4.2 | | | Card | keywords | Section 2.11.1 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | language | Section 2.7.4 | | | Card | kind | Section 2.4.2 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | links | Section 2.9.1, | | | Card | language | Section 2.7.4 | | |||
| | | Section 2.11.9 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | links | Sections 2.9.1 | | |||
| Card | localizations | Section 2.3.10 | | | | | and 2.11.9 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Card | media | Section 2.5.7, | | | Card | localizations | Section 2.3.10 | | |||
| | | Section 2.9.2, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.11.7 | | | Card | media | Sections 2.5.7, | | |||
+-------------------+---------------------+-----------------+ | | | | 2.9.2, and 2.11.7 | | |||
| Card | members | Section 2.9.3 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | members | Section 2.9.3 | | |||
| Card | name | Section 2.5.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | name | Section 2.5.5 | | |||
| Card | nicknames | Section 2.5.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | nicknames | Section 2.5.5 | | |||
| Card | notes | Section 2.11.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | notes | Section 2.11.4 | | |||
| Card | onlineServices | Section 2.7.2 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | onlineServices | Section 2.7.2 | | |||
| Card | organizations | Section 2.9.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | organizations | Section 2.9.4 | | |||
| Card | personalInfo | Section 2.10.1, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.10.2, | | | Card | personalInfo | Sections 2.10.1, | | |||
| | | Section 2.10.3 | | | | | 2.10.2, and | | |||
+-------------------+---------------------+-----------------+ | | | | 2.10.3 | | |||
| Card | phones | Section 2.7.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | phones | Section 2.7.6 | | |||
| Card | preferredLanguages | Section 2.7.3 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | preferredLanguages | Section 2.7.3 | | |||
| Card | prodId | Section 2.11.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | prodId | Section 2.11.5 | | |||
| Card | relatedTo | Section 2.9.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | relatedTo | Section 2.9.5 | | |||
| Card | schedulingAddresses | Section 2.13.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | schedulingAddresses | Section 2.13.1 | | |||
| Card | speakToAs | Section 2.5.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | speakToAs | Section 2.5.4 | | |||
| Card | titles | Section 2.9.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | titles | Section 2.9.6 | | |||
| Card | uid | Section 2.11.8 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | uid | Section 2.11.8 | | |||
| Card | updated | Section 2.11.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Card | updated | Section 2.11.6 | | |||
| CryptoKey | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | @type | not applicable | | |||
| CryptoKey | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | contexts | Section 2.3.20 | | |||
| CryptoKey | kind | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | kind | not applicable | | |||
| CryptoKey | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | label | Section 2.11.11 | | |||
| CryptoKey | mediaType | Section 2.3.12 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | mediaType | Section 2.3.12 | | |||
| CryptoKey | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | pref | Section 2.3.15 | | |||
| CryptoKey | uri | Section 2.12.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | CryptoKey | uri | Section 2.12.1 | | |||
| Directory | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Directory | @type | not applicable | | |||
| Directory | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Directory | contexts | Section 2.3.20 | | |||
| Directory | kind | Section 2.4.3, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.10.4 | | | Directory | kind | Sections 2.4.3 | | |||
+-------------------+---------------------+-----------------+ | | | | and 2.10.4 | | |||
| Directory | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Directory | label | Section 2.11.11 | | |||
| Directory | listAs | Section 2.3.9 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Directory | listAs | Section 2.3.9 | | |||
| Directory | mediaType | Section 2.3.12 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Directory | mediaType | Section 2.3.12 | | |||
| Directory | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Directory | pref | Section 2.3.15 | | |||
| Directory | uri | Section 2.4.3, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.10.4 | | | Directory | uri | Sections 2.4.3 | | |||
+-------------------+---------------------+-----------------+ | | | | and 2.10.4 | | |||
| EmailAddress | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | EmailAddress | @type | not applicable | | |||
| EmailAddress | address | Section 2.7.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | EmailAddress | address | Section 2.7.1 | | |||
| EmailAddress | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | EmailAddress | contexts | Section 2.3.20 | | |||
| EmailAddress | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | EmailAddress | label | Section 2.11.11 | | |||
| EmailAddress | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | EmailAddress | pref | Section 2.3.15 | | |||
| LanguagePref | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | LanguagePref | @type | not applicable | | |||
| LanguagePref | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | LanguagePref | contexts | Section 2.3.20 | | |||
| LanguagePref | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | LanguagePref | pref | Section 2.3.15 | | |||
| Link | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Link | @type | not applicable | | |||
| Link | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Link | contexts | Section 2.3.20 | | |||
| Link | kind | Section 2.9.1, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.11.9 | | | Link | kind | Sections 2.9.1 | | |||
+-------------------+---------------------+-----------------+ | | | | and 2.11.9 | | |||
| Link | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Link | label | Section 2.11.11 | | |||
| Link | mediaType | Section 2.3.12 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Link | mediaType | Section 2.3.12 | | |||
| Link | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Link | pref | Section 2.3.15 | | |||
| Link | uri | Section 2.9.1, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.11.9> | | | Link | uri | Sections 2.9.1 | | |||
+-------------------+---------------------+-----------------+ | | | | and 2.11.9 | | |||
| Media | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Media | @type | not applicable | | |||
| Media | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Media | contexts | Section 2.3.20 | | |||
| Media | kind | Section 2.5.7, | | +-------------------+---------------------+-------------------------+ | |||
| | | Section 2.9.2, | | | Media | kind | Sections 2.5.7, | | |||
| | | Section 2.11.7 | | | | | 2.9.2, and 2.11.7 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Media | label | Section 2.11.11 | | | Media | label | Section 2.11.11 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Media | mediaType | Section 2.3.12 | | | Media | mediaType | Section 2.3.12 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Media | pref | Section 2.3.15 | | | Media | pref | Section 2.3.15 | | |||
+-------------------+---------------------+-----------------+ | +-------------------+---------------------+-------------------------+ | |||
| Media | uri | Section 2.5.7, | | | Media | uri | Sections 2.5.7, | | |||
| | | Section 2.9.2, | | | | | 2.9.2, and 2.11.7 | | |||
| | | Section 2.11.7 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | @type | not applicable | | |||
| Name | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | components | Sections 2.5.5 | | |||
| Name | components | Section 2.5.5, | | | | | and 3.3.1 | | |||
| | | Section 3.3.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | defaultSeparator | Sections 2.5.5 | | |||
| Name | defaultSeparator | Section 2.5.5, | | | | | and 3.3.1 | | |||
| | | Section 3.3.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | full | Section 2.5.2 | | |||
| Name | full | Section 2.5.2 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | phoneticScript | Sections 2.3.13 | | |||
| Name | phoneticScript | Section 2.3.13, | | | | | and 2.3.17 | | |||
| | | Section 2.3.17 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | phoneticSystem | Section 2.3.13 | | |||
| Name | phoneticSystem | Section 2.3.13 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | isOrdered | Sections 2.5.5 | | |||
| Name | isOrdered | Section 2.5.5, | | | | | and 3.3.1 | | |||
| | | Section 3.3.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Name | sortAs | Section 2.3.19 | | |||
| Name | sortAs | Section 2.3.19 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | NameComponent | @type | not applicable | | |||
| NameComponent | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | NameComponent | kind | Section 2.5.5 | | |||
| NameComponent | kind | Section 2.5.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | NameComponent | phonetic | Section 2.3.13 | | |||
| NameComponent | phonetic | Section 2.3.13 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | NameComponent | value | Section 2.5.5 | | |||
| NameComponent | value | Section 2.5.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Nickname | @type | not applicable | | |||
| Nickname | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Nickname | contexts | Section 2.3.20 | | |||
| Nickname | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Nickname | name | Section 2.5.5 | | |||
| Nickname | name | Section 2.5.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Nickname | pref | Section 2.3.15 | | |||
| Nickname | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Note | @type | not applicable | | |||
| Note | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Note | author | Sections 2.3.2 | | |||
| Note | author | Section 2.3.2, | | | | | and 2.3.3 | | |||
| | | Section 2.3.3 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Note | created | Section 2.3.5 | | |||
| Note | created | Section 2.3.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Note | note | Section 2.11.4 | | |||
| Note | note | Section 2.11.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | @type | not applicable | | |||
| OnlineService | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | contexts | Section 2.3.20 | | |||
| OnlineService | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | kind | Sections 2.7.2 | | |||
| OnlineService | kind | Section 2.7.2, | | | | | and 2.7.5 | | |||
| | | Section 2.7.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | label | Section 2.11.11 | | |||
| OnlineService | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | pref | Section 2.3.15 | | |||
| OnlineService | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | service | Section 2.3.18 | | |||
| OnlineService | service | Section 2.3.18 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | uri | Sections 2.7.2 | | |||
| OnlineService | uri | Section 2.7.2, | | | | | and 2.7.5 | | |||
| | | Section 2.7.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OnlineService | user | Section 2.3.22 | | |||
| OnlineService | user | Section 2.3.22 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OrgUnit | @type | not applicable | | |||
| OrgUnit | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OrgUnit | name | Section 2.9.4 | | |||
| OrgUnit | name | Section 2.9.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | OrgUnit | sortAs | Section 2.3.19 | | |||
| OrgUnit | sortAs | Section 2.3.19 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Organization | @type | not applicable | | |||
| Organization | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Organization | contexts | Section 2.3.20 | | |||
| Organization | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Organization | name | Section 2.9.4 | | |||
| Organization | name | Section 2.9.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Organization | sortAs | Section 2.3.19 | | |||
| Organization | sortAs | Section 2.3.19 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Organization | units | Section 2.9.4 | | |||
| Organization | units | Section 2.9.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PartialDate | @type | not applicable | | |||
| PartialDate | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PartialDate | calendarScale | Section 2.3.4 | | |||
| PartialDate | calendarScale | Section 2.3.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PartialDate | day | Section 2.2.2 | | |||
| PartialDate | day | Section 2.2.2 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PartialDate | month | Section 2.2.2 | | |||
| PartialDate | month | Section 2.2.2 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PartialDate | year | Section 2.2.2 | | |||
| PartialDate | year | Section 2.2.2 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PatchObject | @type | not applicable | | |||
| PatchObject | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PersonalInfo | @type | not applicable | | |||
| PersonalInfo | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PersonalInfo | kind | Sections 2.10.1, | | |||
| PersonalInfo | kind | Section 2.10.1, | | | | | 2.10.2, and | | |||
| | | Section 2.10.2, | | | | | 2.10.3 | | |||
| | | Section 2.10.3 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PersonalInfo | listAs | Section 2.3.9 | | |||
| PersonalInfo | listAs | Section 2.3.9 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PersonalInfo | level | Section 2.3.11 | | |||
| PersonalInfo | level | Section 2.3.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | PersonalInfo | value | Sections 2.10.1, | | |||
| PersonalInfo | value | Section 2.10.1, | | | | | 2.10.2, and | | |||
| | | Section 2.10.2, | | | | | 2.10.3 | | |||
| | | Section 2.10.3 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Phone | @type | not applicable | | |||
| Phone | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Phone | contexts | Section 2.3.20 | | |||
| Phone | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Phone | features | Section 2.7.6 | | |||
| Phone | features | Section 2.7.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Phone | label | Section 2.11.11 | | |||
| Phone | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Phone | number | Section 2.7.6 | | |||
| Phone | number | Section 2.7.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Phone | pref | Section 2.3.15 | | |||
| Phone | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Pronouns | @type | not applicable | | |||
| Pronouns | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Pronouns | contexts | Section 2.3.20 | | |||
| Pronouns | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Pronouns | pref | Section 2.3.15 | | |||
| Pronouns | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Pronouns | pronouns | Section 2.5.4 | | |||
| Pronouns | pronouns | Section 2.5.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Relation | @type | not applicable | | |||
| Relation | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Relation | relation | Section 2.9.5 | | |||
| Relation | relation | Section 2.9.5 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Resource | @type | not applicable | | |||
| Resource | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SchedulingAddress | @type | not applicable | | |||
| SchedulingAddress | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SchedulingAddress | contexts | Section 2.3.20 | | |||
| SchedulingAddress | contexts | Section 2.3.20 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SchedulingAddress | label | Section 2.11.11 | | |||
| SchedulingAddress | label | Section 2.11.11 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SchedulingAddress | pref | Section 2.3.15 | | |||
| SchedulingAddress | pref | Section 2.3.15 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SchedulingAddress | uri | Section 2.13.1 | | |||
| SchedulingAddress | uri | Section 2.13.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SpeakToAs | @type | not applicable | | |||
| SpeakToAs | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SpeakToAs | grammaticalGender | Section 2.5.4 | | |||
| SpeakToAs | grammaticalGender | Section 2.5.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | SpeakToAs | pronouns | Section 2.5.4 | | |||
| SpeakToAs | pronouns | Section 2.5.4 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | AddressComponent | @type | not applicable | | |||
| AddressComponent | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | AddressComponent | kind | Section 2.6.1 | | |||
| AddressComponent | kind | Section 2.6.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | AddressComponent | value | Section 2.6.1 | | |||
| AddressComponent | value | Section 2.6.1 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Timestamp | @type | not applicable | | |||
| Timestamp | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Timestamp | utc | Section 2.2.2 | | |||
| Timestamp | utc | Section 2.2.2 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Title | @type | not applicable | | |||
| Title | @type | not applicable | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Title | kind | Section 2.9.6 | | |||
| Title | kind | Section 2.9.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Title | name | Section 2.9.6 | | |||
| Title | name | Section 2.9.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | | Title | organizationId | Section 2.9.6 | | |||
| Title | organization | Section 2.9.6 | | +-------------------+---------------------+-------------------------+ | |||
+-------------------+---------------------+-----------------+ | ||||
Table 8: Conversion rules by JSContact property | Table 8: Conversion Rules for JSContact Types and Properties | |||
Acknowledgements | ||||
The definition and examples of the PHONETIC (Section 2.3.13) and | ||||
SCRIPT (Section 2.3.17) parameters are based on the initial draft | ||||
version of [vOBJECT]. | ||||
Authors' Addresses | Authors' Addresses | |||
Mario Loffredo | Mario Loffredo | |||
IIT-CNR/Registro.it | IIT-CNR/Registro.it | |||
Via Moruzzi,1 | Via Moruzzi, 1 | |||
56124 Pisa | 56124 Pisa | |||
Italy | Italy | |||
Email: mario.loffredo@iit.cnr.it | Email: mario.loffredo@iit.cnr.it | |||
URI: https://www.iit.cnr.it | URI: https://www.iit.cnr.it | |||
Robert Stepanek | Robert Stepanek | |||
Fastmail | Fastmail | |||
PO Box 234, Collins St West | PO Box 234 | |||
Melbourne VIC 8007 | Collins St. West | |||
Melbourne VIC 8007 | ||||
Australia | Australia | |||
Email: rsto@fastmailteam.com | Email: rsto@fastmailteam.com | |||
URI: https://www.fastmail.com | URI: https://www.fastmail.com | |||
End of changes. 286 change blocks. | ||||
1168 lines changed or deleted | 1116 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |