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 May 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. It defines conversion rules for | |||
D.ietf-calext-jscontact (JSContact) by registering new JSContact | every JSContact and vCard element registered at IANA at the time of | |||
properties. Similarly, it updates RFC 6350 (vCard) by registering | publication. It also defines new JSContact properties as well as | |||
new vCard properties and parameters. | vCard properties and parameters, to support converting arbitrary or | |||
unknown JSContact and vCard elements. | ||||
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 Card 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. CC | |||
2.3.5. CREATED . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.6. CREATED | |||
2.3.6. DERIVED . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.7. DERIVED | |||
2.3.7. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.8. GEO | |||
2.3.8. GROUP . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3.9. GROUP | |||
2.3.9. INDEX . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.3.10. INDEX | |||
2.3.10. LANGUAGE . . . . . . . . . . . . . . . . . . . . . . 9 | 2.3.11. LANGUAGE | |||
2.3.11. LEVEL . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3.12. LABEL | |||
2.3.12. MEDIATYPE . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3.13. LEVEL | |||
2.3.13. PHONETIC . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3.14. MEDIATYPE | |||
2.3.14. PID . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.15. PHONETIC | |||
2.3.15. PREF . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.16. PID | |||
2.3.16. PROP-ID . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.17. PREF | |||
2.3.17. SCRIPT . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3.18. PROP-ID | |||
2.3.18. SERVICE-TYPE . . . . . . . . . . . . . . . . . . . . 14 | 2.3.19. SCRIPT | |||
2.3.19. SORT-AS . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.20. SERVICE-TYPE | |||
2.3.20. TYPE . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.21. SORT-AS | |||
2.3.21. TZ . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.22. TYPE | |||
2.3.22. USERNAME . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.23. TZ | |||
2.3.23. VALUE . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.3.24. USERNAME | |||
2.4. General Properties . . . . . . . . . . . . . . . . . . . 15 | 2.3.25. VALUE | |||
2.4.1. BEGIN and END . . . . . . . . . . . . . . . . . . . . 15 | 2.4. General Properties | |||
2.4.2. KIND . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.4.1. BEGIN and END | |||
2.4.3. SOURCE . . . . . . . . . . . . . . . . . . . . . . . 16 | 2.4.2. KIND | |||
2.4.4. XML . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 2.4.3. SOURCE | |||
2.5. Identification Properties . . . . . . . . . . . . . . . . 16 | 2.4.4. XML | |||
2.5.1. BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, | 2.5. Identification Properties | |||
ANNIVERSARY . . . . . . . . . . . . . . . . . . . . . 16 | 2.5.1. ANNIVERSARY, BDAY, BIRTHPLACE, DEATHDATE, and | |||
2.5.2. FN . . . . . . . . . . . . . . . . . . . . . . . . . 18 | DEATHPLACE | |||
2.5.3. GENDER . . . . . . . . . . . . . . . . . . . . . . . 18 | 2.5.2. FN | |||
2.5.4. GRAMGENDER and PRONOUNS . . . . . . . . . . . . . . . 18 | 2.5.3. GENDER | |||
2.5.5. N . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 2.5.4. GRAMGENDER and PRONOUNS | |||
2.5.6. NICKNAME . . . . . . . . . . . . . . . . . . . . . . 21 | 2.5.5. N | |||
2.5.7. PHOTO . . . . . . . . . . . . . . . . . . . . . . . . 22 | 2.5.6. NICKNAME | |||
2.6. Delivery Addressing Properties . . . . . . . . . . . . . 22 | 2.5.7. PHOTO | |||
2.6.1. ADR . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 2.6. Delivery Addressing Properties | |||
2.7. Communications Properties . . . . . . . . . . . . . . . . 25 | 2.6.1. ADR | |||
2.7.1. EMAIL . . . . . . . . . . . . . . . . . . . . . . . . 25 | 2.7. Communications Properties | |||
2.7.2. IMPP . . . . . . . . . . . . . . . . . . . . . . . . 26 | 2.7.1. EMAIL | |||
2.7.3. LANG . . . . . . . . . . . . . . . . . . . . . . . . 26 | 2.7.2. IMPP | |||
2.7.4. LANGUAGE . . . . . . . . . . . . . . . . . . . . . . 27 | 2.7.3. LANG | |||
2.7.5. SOCIALPROFILE . . . . . . . . . . . . . . . . . . . . 27 | 2.7.4. LANGUAGE | |||
2.7.6. TEL . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 2.7.5. SOCIALPROFILE | |||
2.8. Geographical Properties . . . . . . . . . . . . . . . . . 29 | 2.7.6. TEL | |||
2.8.1. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 2.8. Geographical Properties | |||
2.8.2. TZ . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 2.8.1. GEO | |||
2.8.3. Combining geographical properties . . . . . . . . . . 30 | 2.8.2. TZ | |||
2.9. Organizational Properties . . . . . . . . . . . . . . . . 30 | 2.8.3. Combining Geographical Properties | |||
2.9.1. CONTACT-URI . . . . . . . . . . . . . . . . . . . . . 30 | 2.9. Organizational Properties | |||
2.9.2. LOGO . . . . . . . . . . . . . . . . . . . . . . . . 31 | 2.9.1. CONTACT-URI | |||
2.9.3. MEMBER . . . . . . . . . . . . . . . . . . . . . . . 31 | 2.9.2. LOGO | |||
2.9.4. ORG . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 2.9.3. MEMBER | |||
2.9.5. RELATED . . . . . . . . . . . . . . . . . . . . . . . 32 | 2.9.4. ORG | |||
2.9.6. TITLE and ROLE . . . . . . . . . . . . . . . . . . . 33 | 2.9.5. RELATED | |||
2.10. Personal Information Properties . . . . . . . . . . . . . 34 | 2.9.6. TITLE and ROLE | |||
2.10.1. EXPERTISE . . . . . . . . . . . . . . . . . . . . . 34 | 2.10. Personal Information Properties | |||
2.10.2. HOBBY . . . . . . . . . . . . . . . . . . . . . . . 35 | 2.10.1. EXPERTISE | |||
2.10.3. INTEREST . . . . . . . . . . . . . . . . . . . . . . 36 | 2.10.2. HOBBY | |||
2.10.4. ORG-DIRECTORY . . . . . . . . . . . . . . . . . . . 36 | 2.10.3. INTEREST | |||
2.11. Explanatory Properties . . . . . . . . . . . . . . . . . 37 | 2.10.4. ORG-DIRECTORY | |||
2.11.1. CATEGORIES . . . . . . . . . . . . . . . . . . . . . 37 | 2.11. Explanatory Properties | |||
2.11.2. CLIENTPIDMAP and PID Parameter . . . . . . . . . . . 37 | 2.11.1. CATEGORIES | |||
2.11.3. CREATED . . . . . . . . . . . . . . . . . . . . . . 38 | 2.11.2. CLIENTPIDMAP | |||
2.11.4. NOTE . . . . . . . . . . . . . . . . . . . . . . . . 38 | 2.11.3. CREATED | |||
2.11.5. PRODID . . . . . . . . . . . . . . . . . . . . . . . 38 | 2.11.4. NOTE | |||
2.11.6. REV . . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.5. PRODID | |||
2.11.7. SOUND . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.6. REV | |||
2.11.8. UID . . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.7. SOUND | |||
2.11.9. URL . . . . . . . . . . . . . . . . . . . . . . . . 39 | 2.11.8. UID | |||
2.11.10. VERSION . . . . . . . . . . . . . . . . . . . . . . 40 | 2.11.9. URL | |||
2.11.11. X-ABLabel . . . . . . . . . . . . . . . . . . . . . 40 | 2.11.10. VERSION | |||
2.12. Security Properties . . . . . . . . . . . . . . . . . . . 40 | 2.11.11. X-ABLabel | |||
2.12.1. KEY . . . . . . . . . . . . . . . . . . . . . . . . 41 | 2.12. Security Properties | |||
2.13. Calendar Properties . . . . . . . . . . . . . . . . . . . 41 | 2.12.1. KEY | |||
2.13.1. CALADRURI . . . . . . . . . . . . . . . . . . . . . 41 | 2.13. Calendar Properties | |||
2.13.2. CALURI . . . . . . . . . . . . . . . . . . . . . . . 42 | 2.13.1. CALADRURI | |||
2.13.3. FBURL . . . . . . . . . . . . . . . . . . . . . . . 42 | 2.13.2. CALURI | |||
2.14. Extended Properties and Parameters . . . . . . . . . . . 43 | 2.13.3. FBURL | |||
2.15. New JSContact properties . . . . . . . . . . . . . . . . 43 | 2.14. Extended Properties and Parameters | |||
2.15.1. Property vCardProps . . . . . . . . . . . . . . . . 43 | 2.15. New JSContact Properties | |||
2.15.2. Property vCardParams . . . . . . . . . . . . . . . . 44 | 2.15.1. vCardProps | |||
2.15.3. Property vCardName . . . . . . . . . . . . . . . . . 44 | 2.15.2. vCardParams | |||
3. Converting JSContact to vCard . . . . . . . . . . . . . . . . 45 | 2.15.3. vCardName | |||
3.1. Conversion Rules . . . . . . . . . . . . . . . . . . . . 45 | 3. Converting JSContact to vCard | |||
3.1.1. Converting unknown properties . . . . . . . . . . . . 46 | 3.1. Conversion Rules | |||
3.2. New vCard Properties . . . . . . . . . . . . . . . . . . 46 | 3.1.1. Converting Unknown Properties | |||
3.2.1. JSPROP . . . . . . . . . . . . . . . . . . . . . . . 46 | 3.2. New vCard Properties | |||
3.3. New vCard Parameter . . . . . . . . . . . . . . . . . . . 48 | 3.2.1. JSPROP | |||
3.3.1. JSCOMPS . . . . . . . . . . . . . . . . . . . . . . . 48 | 3.3. New vCard Parameters | |||
3.3.2. JSPTR . . . . . . . . . . . . . . . . . . . . . . . . 52 | 3.3.1. JSCOMPS | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 52 | 3.3.2. JSPTR | |||
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 52 | 4. Security Considerations | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 | 5. IANA Considerations | |||
6.1. New vCard Properties . . . . . . . . . . . . . . . . . . 52 | 5.1. New vCard Property | |||
6.2. New vCard Parameters . . . . . . . . . . . . . . . . . . 53 | 5.2. New vCard Parameter | |||
6.3. New JSContact Properties . . . . . . . . . . . . . . . . 53 | 5.3. New JSContact Properties | |||
6.4. New JSContact Types . . . . . . . . . . . . . . . . . . . 53 | 5.4. New JSContact Type | |||
7. Implementation Status . . . . . . . . . . . . . . . . . . . . 54 | 6. References | |||
7.1. CNR . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 | 6.1. Normative References | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 54 | 6.2. Informative References | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 55 | Appendix A. Reverse Rules of Converting a vCard to a JSContact | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 56 | Card | |||
Appendix A. Reverse Rules of Converting vCard to JSContact | Acknowledgements | |||
Card . . . . . . . . . . . . . . . . . . . . . . . . . . 56 | Authors' Addresses | |||
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 | ||||
The UID property in vCard is optional, but the uid property in | 2.1.1. The Card uid Property | |||
JSContact is mandatory. Implementations that convert a vCard without | ||||
UID property MUST generate a unique identifier as a value for the uid | The UID property (Section 6.7.6 of [RFC6350]) in vCard is optional, | |||
but the Card object's uid property (Section 2.1.9 of [RFC9553]) is | ||||
mandatory. Implementations that convert a vCard without a UID | ||||
property MUST generate a unique identifier as value for the uid | ||||
property. This value SHOULD be the same when converting the same | 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 (Section 1.4.1 | |||
values are the converted vCard property. In absence of the PROP-ID | of [RFC9553]) and the object values are the converted vCard property. | |||
parameter (see Section 2.3.16), implementations are free to choose | In the absence of the PROP-ID parameter (see Section 2.3.18), | |||
any identifier for such entries. Whatever identifier generation | implementations are free to choose any identifier as key for such | |||
scheme implementations use, they MUST generate values that are valid | entries. Whatever identifier generation scheme implementations use, | |||
according to the definition of the Id type in | they MUST generate values that are valid according to the definition | |||
[I-D.ietf-calext-jscontact]. For example, this could be an | of the Id type in [RFC9553]. For example, this could be an | |||
incrementing number across all Ids or only unique within one JSON | incrementing number across all identifier keys in the Card object or | |||
object. | only unique within one JSON 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 (Section 4.4 of [RFC6350]) converts to the JSContact | |||
Boolean type (Section 1.3.2 of [RFC9553]). | ||||
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 (Section 4.3.5 of [RFC6350]) converts to the | |||
converts to the Timestamp type for anniversaries. | UTCDateTime type (Section 1.4.5 of [RFC9553]), except for | |||
anniversaries. For anniversaries, it converts to the Timestamp type | ||||
(Section 2.8.1 of [RFC9553]). | ||||
The DATE type converts to the PartialDate type, which only is | The DATE type (Section 4.3.1 of [RFC6350]) converts to a PartialDate | |||
relevant for anniversaries. This does not apply to DATE values that | object (Section 2.8.1 of [RFC9553]) when used for an anniversary, | |||
only define a month or a day. | unless the DATE value only contains a month or a day (but not both). | |||
The TIME, DATE-TIME, DATE-AND-OR-TIME types and DATE type values that | The following temporal types do not convert to a JSContact datetime | |||
only define a month or day do not convert to a JSContact datetime | type. Instead, vCard properties or parameters having such value | |||
type. Instead, vCard properties or parameters having such values | types convert as defined in Section 2.15. | |||
convert to the properties defined in Section 2.15. | ||||
* TIME (Section 4.3.2 of [RFC6350]) | ||||
* DATE-TIME (Section 4.3.3 of [RFC6350]) | ||||
* DATE-AND-OR-TIME (Section 4.3.4 of [RFC6350]) | ||||
* DATE type values that only define a month or day (but not both) | ||||
2.2.3. INTEGER | 2.2.3. INTEGER | |||
This converts to the JSContact Int and UnsignedInt types. | The INTEGER type (Section 4.5 of [RFC6350]) converts to the JSContact | |||
Int and UnsignedInt types (Section 1.4.2 of [RFC9553]). | ||||
2.2.4. FLOAT | 2.2.4. FLOAT | |||
This converts to the JSContact Number type. | The FLOAT type (Section 4.6 of [RFC6350]) converts to the JSContact | |||
Number type (Section 1.3.2 of [RFC9553]). | ||||
2.2.5. LANGUAGE-TAG | 2.2.5. LANGUAGE-TAG | |||
This converts to the JSContact String type. | The LANGUAGE-TAG type (Section 4.8 of [RFC6350]) converts to the | |||
JSContact String type (Section 1.3.2 of [RFC9553]). The value MUST | ||||
be a language tag as defined in [RFC5646]. | ||||
2.2.6. TEXT | 2.2.6. TEXT | |||
This converts to the JSContact String type. | The TEXT type (Section 4.1 of [RFC6350]) converts to the JSContact | |||
String type (Section 1.3.2 of [RFC9553]). | ||||
2.2.7. URI | 2.2.7. URI | |||
This converts to the JSContact String type. | The URI type (Section 4.2 of [RFC6350]) converts to the JSContact | |||
String type (Section 1.3.2 of [RFC9553]). The value MUST be a URI as | ||||
defined in Section 3 of [RFC3986] | ||||
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 (Section 4.7 of [RFC6350]) either converts to a | |||
entry name (see Section 2.8.2), or it does not convert to any | String value containing an IANA Time Zone Database entry name (see | |||
JSContact type. For the latter, vCard properties or parameters | Section 2.8.2) or does not convert to any JSContact type. For the | |||
having such values MAY convert to JSContact as defined in | latter, vCard properties or parameters having such values convert as | |||
Section 2.15. | defined in 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 (Section 5.4 of [RFC6350]) does not convert to an | |||
but several conversion rules make use of this parameter to combine | IANA-registered property in JSContact, but several conversion rules | |||
multiple vCard properties into a single JSContact object instance. | make use of this parameter to combine multiple vCard properties into | |||
For an example of this see Section 2.6.1. To preserve the verbatim | a single JSContact object instance. For an example of this, see | |||
value of the ALTID parameter, set the JSContact properties defined in | Section 2.6.1. To preserve the verbatim value of the ALTID | |||
Section 2.15. | parameter, set the JSContact 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 (Section 4.1 of [RFC9554]) on a NOTE property | |||
uri property of the Author object for this note. | converts to the Author object's uri property (Section 2.8.3 of | |||
[RFC9553]). That Author object is set as the value of the Note | ||||
Note: This parameter is defined in | object's author property (Section 2.8.3 of [RFC9553]). | |||
[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 (Section 4.2 of [RFC9554]) on a NOTE | |||
the name property of the Author object for this note. | property converts to the Author object's name property (Section 2.8.3 | |||
of [RFC9553]). That Author object is set as the value of the Note | ||||
Note: This parameter is defined in | object's author property. | |||
[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 (Section 5.8 of [RFC6350]) set on a BDAY, | |||
converts to the calendarScale property of the PartialDate object | DEATHDATE, or ANNIVERSARY property converts to the PartialDate | |||
type. | object's calendarScale property (Section 2.8.1 of [RFC9553]). | |||
2.3.5. CREATED | 2.3.5. CC | |||
The CREATED parameter value of a vCard NOTE property converts to the | The CC parameter (Section 3.1 of [RFC8605]) on an ADR property | |||
created property of the Note object. | converts to the Address object's countryCode property | |||
(Section 2.5.1.1 of [RFC9553]). | ||||
Note: This parameter is defined in | 2.3.6. CREATED | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.6. DERIVED | The CREATED parameter (Section 4.3 of [RFC9554]) on a NOTE property | |||
converts to the Note object's created property (Section 2.8.3 of | ||||
[RFC9553]). | ||||
If this parameter is set to true on a vCard property, then | 2.3.7. DERIVED | |||
implementations MAY choose to not convert that property. Note: This | ||||
parameter is defined in [I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.7. GEO | The DERIVED parameter (Section 4.4 of [RFC9554]) does not convert to | |||
JSContact. If the DERIVED parameter is set to "true" on a vCard | ||||
property, then implementations MAY choose not to convert that | ||||
property. | ||||
This parameter set on an ADR property converts to the JSContact | 2.3.8. GEO | |||
coordinates property of the Address object that represents the vCard | ||||
ADR. | ||||
2.3.8. GROUP | The GEO parameter (Section 5.10 of [RFC6350]) set on an ADR property | |||
converts to the Address object's coordinates property | ||||
(Section 2.5.1.1 of [RFC9553]). | ||||
This parameter exclusively is for use in jCard (see Section 7.1 of | 2.3.9. GROUP | |||
[RFC7095]). It MUST NOT be set in a vCard. Preserving the exact | ||||
group name when converting from vCard to JSContact and back to vCard | ||||
is not necessary. Any group identifiers will do, as long as the | ||||
resulting vCard groups its properties equally to the original vCard. | ||||
Implementations that still wish to preserve the exact property group | ||||
name of a vCard property MAY set the group parameter in the JSContact | ||||
properties vCardProps or vCardParams defined in Section 2.15. | ||||
item1.TEL;VALUE=uri:tel:+1-555-555-5555 | The GROUP parameter (Section 7.1 of [RFC7095]) does not convert to | |||
JSContact. It exclusively is for use in jCard and MUST NOT be set in | ||||
a vCard. | ||||
Preserving the exact group name when converting from vCard to | ||||
JSContact and back to vCard is not necessary. Any group identifiers | ||||
will do, as long as the resulting vCard groups its properties equally | ||||
to the original vCard. Implementations that still wish to preserve | ||||
the exact property group name of a vCard property MAY set the jCard | ||||
"group" parameter in the JSContact properties vCardProps or | ||||
vCardParams as defined in Section 2.15. | ||||
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.10. INDEX | |||
This parameter set on the EXPERTISE, HOBBY, INTEREST and ORG- | The INDEX parameter (Section 3.1 of [RFC6715]) set on the EXPERTISE, | |||
DIRECTORY properties defined in [RFC6715] converts to the JSContact | HOBBY, INTEREST, and ORG-DIRECTORY properties converts to the | |||
listAs property of the PersonalInfo and Directory objects. | PersonalInfo (Section 2.8.4 of [RFC9553]) and Directory | |||
(Section 2.6.2 of [RFC9553]) objects' listAs property. | ||||
2.3.10. LANGUAGE | 2.3.11. LANGUAGE | |||
This converts to an entry in the localizations property for the vCard | The LANGUAGE parameter (Section 5.1 of [RFC6350]) converts to an | |||
property that this parameter is set on. The value of the LANGUAGE | entry in the Card object's localizations property (Section 2.7.1 of | |||
parameter defines the language tag key in the localizations property. | [RFC9553]) for that vCard property on which this parameter is set on. | |||
The value of the LANGUAGE parameter defines the language tag key in | ||||
the localizations property. | ||||
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. | |||
FN;LANGUAGE=EN:John Doe | FN;LANGUAGE=EN:John Doe | |||
TITLE;LANGUAGE=EN:Boss | TITLE;ALTID=1;LANGUAGE=EN:Boss | |||
TITLE;LANGUAGE=fr:Patron | TITLE;ALTID=1;LANGUAGE=fr:Patron | |||
"language": "en", | "language": "en", | |||
"name": { | "name": { | |||
"full": "John Doe" | "full": "John Doe" | |||
}, | }, | |||
"titles": { | "titles": { | |||
"t1": { | "t1": { | |||
"name": "Boss" | "name": "Boss" | |||
} | } | |||
}, | }, | |||
"localizations": { | "localizations": { | |||
"fr": { | "fr": { | |||
"titles/t1/name": "Patron" | "titles/t1/name": "Patron" | |||
} | } | |||
} | } | |||
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, add them to the non-localized | |||
localized Card. Convert any with LANGUAGE parameters to the | Card. Convert any with LANGUAGE parameters to the localizations | |||
localizations property. Figure 4 illustrates this. | property. Figure 4 illustrates this. | |||
FN:John Doe | FN:John Doe | |||
TITLE:Boss | TITLE;ALTID=1:Boss | |||
TITLE;LANGUAGE=fr:Patron | TITLE;ALTID=1;LANGUAGE=fr:Patron | |||
"name": { | "name": { | |||
"full": "John Doe" | "full": "John Doe" | |||
}, | }, | |||
"titles": { | "titles": { | |||
"t1": { | "t1": { | |||
"name": "Boss" | "name": "Boss" | |||
} | } | |||
}, | }, | |||
"localizations": { | "localizations": { | |||
"fr": { | "fr": { | |||
"titles/t1/name": "Patron" | "titles/t1/name": "Patron" | |||
} | } | |||
} | } | |||
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 | ||||
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 | ||||
case, implementations MAY choose to add the localized vCard | ||||
properties only to the localizations object. | ||||
The following example uses non-ASCII characters to demonstrate | ||||
multilingual content. The ASCII-formatted version of this | ||||
specification might not show the correct characters. Please refer to | ||||
the HTML or PDF versions instead. | ||||
LANGUAGE:es | ||||
FN:Gabriel GarcÃa Márquez | ||||
TITLE;LANGUAGE=en:Boss | ||||
TITLE;LANGUAGE=fr:Patron | ||||
"language": "es", | 2.3.12. LABEL | |||
"name" { | ||||
"full": "Gabriel GarcÃa Márquez" | ||||
}, | ||||
"localizations": { | ||||
"en": { | ||||
"titles": { | ||||
"t1": { | ||||
"name": "Novelist" | ||||
} | ||||
}, | ||||
"fr": { | ||||
"titles": { | ||||
"t1": { | ||||
"name": "Écrivain" | ||||
} | ||||
} | ||||
} | ||||
Figure 5: LANGUAGE conversion example: conflicting LANGUAGE | The LABEL parameter (Section 6.3.1 of [RFC6350]) on an ADR property | |||
property and parameter values | converts to the Address object's full property (Section 2.5.1.1 of | |||
[RFC9553]). | ||||
2.3.11. LEVEL | 2.3.13. LEVEL | |||
The LEVEL parameter [RFC6715] converts to the level property of the | The LEVEL parameter (Section 3.2 of [RFC6715]) converts to the | |||
PersonalInfo type. If this parameter is set on the EXPERTISE | PersonalInfo object's level property (Section 2.8.4 of [RFC9553]). | |||
property, then its values convert as: | If this parameter is set on the EXPERTISE 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.14. MEDIATYPE | |||
This converts to the mediaType property of the Resource object type. | The MEDIATYPE parameter (Section 5.7 of [RFC6350]) converts to the | |||
Resource object's mediaType property (Section 1.4.4 of [RFC9553]). | ||||
2.3.13. PHONETIC | 2.3.15. PHONETIC | |||
This parameter as well as the SCRIPT (Section 2.3.17) parameter set | The PHONETIC parameter (Section 4.6 of [RFC9554]) converts to the | |||
on a N or ADR property convert to JSContact as follows: | Name (Section 2.2.1 of [RFC9553]) and Address (Section 2.5.1 of | |||
[RFC9553]) objects' phoneticSystem property unless the parameter | ||||
value is "script", in which case the phoneticSystem property is not | ||||
set. | ||||
the values of the phonetic, phoneticScript and phoneticSystem | The value of the SCRIPT parameter converts to the phoneticScript | |||
properties of the NameComponent and Name or AddressComponent and | property (see Section 2.3.19). | |||
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 component values of the property on which the PHONETIC parameter | |||
property unless it is script, in which case the phoneticSystem | is set convert to the respective NameComponent or AddressComponent | |||
property is not set. The value of the SCRIPT parameter converts to | objects' phonetic properties. | |||
the phoneticScript property. | ||||
The values of the components in the property value convert to values | ||||
the phonetic properties for the respective NameComponent or | ||||
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 object's | |||
property according their LANGUAGE parameter values as outlined in | localizations property according to their LANGUAGE parameter values | |||
Section 2.3.10. | as outlined in Section 2.3.11. | |||
LANGUAGE=zh-Hant | LANGUAGE=zh-Hant | |||
N;ALTID=1;LANGUAGE=zh-Hant:å«;ä¸å±±;æ–‡,逸仙;; | N;ALTID=1;LANGUAGE=zh-Hant:å«;ä¸å±±;æ–‡,逸仙;; | |||
N;ALTID=1;PHONETIC=jyut; | N;ALTID=1;PHONETIC=jyut; | |||
SCRIPT=Latn;LANGUAGE=yue:syun1;zung1saan1;man4,jat6sin1;; | SCRIPT=Latn;LANGUAGE=yue:syun1;zung1saan1;man4,jat6sin1;; | |||
"language": "zh-Hant", | "language": "zh-Hant", | |||
"name": { | "name": { | |||
"components": [ | "components": [ | |||
{ "kind": "surname", "value": "å«" }, | { "kind": "surname", "value": "å«" }, | |||
{ "kind": "given", "value": "ä¸å±±" }, | { "kind": "given", "value": "ä¸å±±" }, | |||
{ "kind": "given2", "value": "æ–‡" }, | { "kind": "given2", "value": "æ–‡" }, | |||
{ "kind": "given2", "value": "逸仙" } | { "kind": "given2", "value": "逸仙" } | |||
] | ] | |||
}, | }, | |||
"localizations": { | "localizations": { | |||
"yue": { | "yue": { | |||
"name/phoneticSystem": "jyut", | "name/phoneticSystem": "jyut", | |||
"name/phoneticScript": "Latn", | "name/phoneticScript": "Latn", | |||
"name/components/0/phonetic": "syun1", | "name/components/0/phonetic": "syun1", | |||
"name/components/1/phonetic": "zung1saan1", | "name/components/1/phonetic": "zung1saan1", | |||
"name/components/2/phonetic": "man4", | "name/components/2/phonetic": "man4", | |||
"name/components/3/phonetic": "jat6sin1" | "name/components/3/phonetic": "jat6sin1" | |||
} | } | |||
} | } | |||
Figure 6: PHONETIC conversion example | ||||
2.3.14. PID | Figure 5: PHONETIC Conversion Example | |||
This converts to an entry in the vCardParams property, see | 2.3.16. PID | |||
Section 2.15.2. | ||||
2.3.15. PREF | The PID parameter (Section 5.5 of [RFC6350]) converts to the | |||
vCardParams property; see Section 2.15.2. | ||||
This converts to the pref property. | 2.3.17. PREF | |||
2.3.16. PROP-ID | The PREF parameter (Section 5.3 of [RFC6350]) converts to the pref | |||
property of the derived JSContact object. | ||||
The PROP-ID parameter value of a vCard property converts to the Id of | 2.3.18. PROP-ID | |||
the JSContact property to which the vCard property converts. | ||||
The PROP-ID parameter (Section 4.7 of [RFC9554]) converts to the Id- | ||||
typed key of the derived JSContact object. | ||||
TEL;PROP-ID=PHONE-A;VALUE=uri;PREF=1;TYPE="voice,home" | TEL;PROP-ID=PHONE-A;VALUE=uri;PREF=1;TYPE="voice,home" | |||
:tel:+1-555-555-5555;ext=5555 | :tel:+1-555-555-5555;ext=5555 | |||
TEL;PROP-ID=PHONE-B;VALUE=uri;TYPE=home | TEL;PROP-ID=PHONE-B;VALUE=uri;TYPE=home | |||
:tel:+33-01-23-45-67 | :tel:+33-01-23-45-67 | |||
"phones": { | "phones": { | |||
"PHONE-A": { | "PHONE-A": { | |||
"contexts": { "private": true }, | "contexts": { "private": true }, | |||
"features": { "voice": true }, | "features": { "voice": true }, | |||
"number": "tel:+1-555-555-5555;ext=5555", | "number": "tel:+1-555-555-5555;ext=5555", | |||
"pref": 1 | "pref": 1 | |||
}, | }, | |||
"PHONE-B": { | "PHONE-B": { | |||
"contexts": { "private": true }, | "contexts": { "private": true }, | |||
"number": "tel:+33-01-23-45-67" | "number": "tel:+33-01-23-45-67" | |||
} | } | |||
} | } | |||
Figure 7: PROP-ID conversion example | Figure 6: PROP-ID Conversion Example | |||
Note: This parameter is defined in | 2.3.19. SCRIPT | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.17. SCRIPT | The SCRIPT parameter (Section 4.8 of [RFC9554]) converts to the Name | |||
(Section 2.2.1 of [RFC9553]) or Address (Section 2.5.1 of [RFC9553]) | ||||
objects' phoneticScript property. | ||||
See Section 2.3.13. | Also see Section 2.3.15. | |||
2.3.18. SERVICE-TYPE | 2.3.20. SERVICE-TYPE | |||
This converts to the service property of the OnlineService object | The SERVICE-TYPE parameter (Section 4.9 of [RFC9554]) converts to the | |||
type. Note: This parameter is defined in | OnlineService object's service property (Section 2.3.2 of [RFC9553]). | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.19. SORT-AS | 2.3.21. SORT-AS | |||
This converts to the sortAs properties defined for the Name, | The SORT-AS parameter (Section 5.9 of [RFC6350]) converts to the | |||
Organization and OrgUnit object types. | Name, Organization, and OrgUnit objects' sortAs properties. | |||
2.3.20. TYPE | 2.3.22. TYPE | |||
This converts to the contexts property as well as property-specific | The TYPE parameter (Section 5.6 of [RFC6350]) converts to either the | |||
kind property values defined in later sections. If not specified | contexts property or the kind property, as defined in later sections. | |||
otherwise for a specific JSContact property, the vCard home and work | If not otherwise specified, the vCard "home" and "work" parameter | |||
parameter values convert to the JSContact private and work contexts, | values convert to the JSContact "private" and "work" contexts, | |||
respectively. | respectively. | |||
2.3.21. TZ | 2.3.23. TZ | |||
This parameter set on an ADR property converts to the JSContact | The TZ parameter (Section 5.11 of [RFC6350]) on an ADR property | |||
timeZone property of the Address object that represents the vCard | converts to the Address object's timeZone property (Section 2.5.1.1 | |||
ADR. Also see the conversion of the TZ property in Section 2.8.2. | of [RFC9553]). Also see the conversion of the TZ property in | |||
Section 2.8.2. | ||||
2.3.22. USERNAME | 2.3.24. USERNAME | |||
This converts to the user property of the OnlineService object type. | The USERNAME parameter (Section 4.10 of [RFC9554]) converts to the | |||
Note: This parameter is defined in | OnlineService object's user property (Section 2.3.2 of [RFC9553]). | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | ||||
2.3.23. VALUE | 2.3.25. VALUE | |||
This does not convert to an IANA-registered property in JSContact. | The VALUE parameter (Section 5.2 of [RFC6350]) does not convert to an | |||
To preserve properties with experimental values, see Section 2.15.2 | IANA-registered property in JSContact. To preserve properties with | |||
and Section 2.15.1. | experimental values, see 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 (Section 6.1.4 of [RFC6350]) converts to the kind | |||
values are those described in Section 6.1.4 of [RFC6350] and extended | property (Figure 7). Allowed values are those described in | |||
with the values declared in [RFC6473] and [RFC6869]. | Section 6.1.4 of [RFC6350] and extended with the values declared in | |||
[RFC6473] and [RFC6869]. | ||||
KIND:individual | KIND:individual | |||
"kind": "individual" | "kind": "individual" | |||
Figure 8: KIND conversion example | Figure 7: 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 (Section 6.1.3 of [RFC6350]) converts to a | |||
property (Figure 9). The kind property is set to entry. The uri | Directory object (Section 2.6.2 of [RFC9553]) in the Card object's | |||
property is set to the SOURCE property value. | directories property (Figure 8). The Directory object's kind | |||
property is set to "entry". The uri 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 8: SOURCE Conversion Example | |||
2.4.4. XML | 2.4.4. XML | |||
This converts to an entry in the vCardProps property, see | The XML property (Section 6.1.5 of [RFC6350]) converts to the | |||
Section 2.15.1. | vCardProps property; see Section 2.15.1. | |||
2.5. Identification Properties | 2.5. Identification Properties | |||
2.5.1. BDAY, BIRTHPLACE, DEATHDATE, DEATHPLACE, ANNIVERSARY | 2.5.1. ANNIVERSARY, BDAY, BIRTHPLACE, DEATHDATE, and DEATHPLACE | |||
The BDAY and ANNIVERSARY properties and the extensions BIRTHPLACE, | The following properties all convert to Anniversary objects in the | |||
DEATHDATE, DEATHPLACE described in [RFC6474] are represented as | Card object's anniversaries property (Figure 9): | |||
Anniversary objects included in the anniversaries property | ||||
(Figure 10): | ||||
* BDAY and BIRTHPLACE convert to date and place where kind is set to | * ANNIVERSARY (Section 6.2.6 of [RFC6350]) | |||
"birth"; | * BDAY (Section 6.2.5 of [RFC6350]) | |||
* DEATHDATE and DEATHPLACE convert to date and place where kind is | * BIRTHPLACE (Section 2.1 of [RFC6474]) | |||
set to "death"; | * DEATHDATE (Section 2.3 of [RFC6474]) | |||
* ANNIVERSARY converts to date where kind is "wedding". | * DEATHPLACE (Section 2.2 of [RFC6474]) | |||
Both birth and death places are represented as instances of the | BDAY and BIRTHPLACE convert to an Anniversary object (Section 2.8.1 | |||
Address object. | of [RFC9553]) having the date and place properties set. The kind | |||
property is set to "birth". | ||||
The BIRTHPLACE and DEATHPLACE properties that are represented as geo | DEATHDATE and DEATHPLACE convert to an Anniversary object having the | |||
URIs convert to Address instances including only the coordinates | date and place properties set. The Anniversary object's kind | |||
property. If the URI value is not a geo URI, the place is ignored. | property is set to "death". | |||
The ALTID and LANGUAGE parameters of both BIRTHPLACE and DEATHPLACE | ANNIVERSARY converts to the Anniversary object's date property. The | |||
properties convert according to the rules as defined in Section 2.3. | Anniversary object's kind property is set to "wedding". | |||
If the BIRTHPLACE or DEATHPLACE property value is of type URI using | ||||
the "geo:" URI scheme, then it converts to the Address object's | ||||
coordinates property. If the value type is TEXT, then it converts to | ||||
the Address object's full property. Otherwise, it converts to the | ||||
vCardProps property; see Section 2.15.1. | ||||
The ALTID and LANGUAGE parameters of both the BIRTHPLACE and | ||||
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": { | |||
"ANNIVERSARY-1" : { | "ANNIVERSARY-1" : { | |||
"kind": "birth", | "kind": "birth", | |||
"date": { | "date": { | |||
"@type": "Timestamp", | "@type": "Timestamp", | |||
"utc": "1953-10-15T23:10:00Z" | "utc": "1953-10-15T23:10:00Z" | |||
}, | }, | |||
"place": { | "place": { | |||
"full": | "full": | |||
"123 Main Street\nAny Town, CA 91921-1234\nU.S.A." | "123 Main Street\nAny Town, CA 91921-1234\nU.S.A." | |||
skipping to change at 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 9: ANNIVERSARY, BDAY, BIRTHPLACE, DEATHDATE, and | |||
conversion example | DEATHPLACE 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 (Section 6.2.1 of [RFC6350]) converts to the Name | |||
Its value converts to the Name object full property (Figure 11). If | object's full property (Figure 10). If the LANGUAGE parameter is | |||
the LANGUAGE parameter is set, then the FN property converts as | set, then the FN property converts as outlined in Section 2.3.11. In | |||
outlined in Section 2.3.10. In the unexpected case that the vCard | the unexpected case where the vCard contains more than one FN | |||
contains more than one FN property without LANGUAGE parameter, then | property without the LANGUAGE parameter, convert the FN property that | |||
convert the FN property that has the least parameters set to the full | has the least parameters. If multiple such FN properties are | |||
property. If multiple such FN properties are present, choose any of | present, choose any of them. All other FN properties convert to the | |||
them. All other FN properties convert to the vCardProps | 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 10: 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 (Section 6.2.7 of [RFC6350]) does not convert to | |||
convert this property, see Section 2.15.1. Note the alternative | an IANA-registered property in JSContact. To convert this property, | |||
JSContact speakToAs property which defines how to address and refer | see Section 2.15.1. Alternatively, the Card object's speakToAs | |||
to an individual represented by the card, as do the newly defined | property defines how to address and refer to an individual | |||
vCard GRAMGENDER and PRONOUNS properties of | represented by the Card, as do the newly defined vCard GRAMGENDER and | |||
[I-D.ietf-calext-vcard-jscontact-extensions]. | PRONOUNS properties of [RFC9554]. | |||
2.5.4. GRAMGENDER and PRONOUNS | 2.5.4. GRAMGENDER and PRONOUNS | |||
The GRAMGENDER property converts to the grammaticalGender property of | The GRAMGENDER property (Section 3.2 of [RFC9554]) converts to the | |||
the SpeakToAs object (Figure 12). | SpeakToAs object's grammaticalGender property (Figure 11). | |||
The PRONOUNS property converts to an entry in the pronouns property | The PRONOUNS property (Section 3.4 of [RFC9554]) converts to the | |||
of the SpeakToAs object (Figure 12). | SpeakToAs object's pronouns property (Figure 11). | |||
GRAMGENDER:NEUTER | GRAMGENDER:NEUTER | |||
PRONOUNS;PREF=2:they/them | PRONOUNS;PREF=2:they/them | |||
PRONOUNS;PREF=1:xe/xir | PRONOUNS;PREF=1:xe/xir | |||
"speakToAs": { | "speakToAs": { | |||
"grammaticalGender": "neuter", | "grammaticalGender": "neuter", | |||
"pronouns": { | "pronouns": { | |||
"PRONOUNS-1": { | "PRONOUNS-1": { | |||
"pronouns": "they/them", | "pronouns": "they/them", | |||
"pref": 2 | "pref": 2 | |||
}, | }, | |||
"PRONOUNS-2": { | "PRONOUNS-2": { | |||
"pronouns": "xe/xir", | "pronouns": "xe/xir", | |||
"pref": 1 | "pref": 1 | |||
} | } | |||
} | } | |||
} | } | |||
Figure 12: GRAMGENDER and PRONOUNS conversion example | Figure 11: 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 (Section 6.2.2 of [RFC6350]) converts to a Name object | |||
(Section 2.2.1 of [RFC9553]) in the Card object's 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 object's components property. The | |||
shows this relation: | following table shows this relation: | |||
+============+===============+==============================+ | +============+===============+==============================+ | |||
| N | NameComponent | Remarks | | | N | NameComponent | Remarks | | |||
| component | kind | | | | component | kind | | | |||
+============+===============+==============================+ | +============+===============+==============================+ | |||
| Family | surname | To vCard: add any surname2 | | | Family | surname | To vCard: add any "surname2" | | |||
| name | | NameComponent value in here, | | | name | | NameComponent to the Family | | |||
| | | after all surname values. | | | | | name component, after all | | |||
| | | "surname" values. | | ||||
| | | From vCard: ignore any value | | | | | From vCard: ignore any value | | |||
| | | that also occurs in the | | | | | that also occurs in the | | |||
| | | Secondary surname component. | | | | | Secondary surname component. | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
| Given name | given | | | | Given name | given | | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
| Additional | given2 | | | | Additional | given2 | | | |||
| name | | | | | name | | | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
| Honorific | title | | | | Honorific | title | | | |||
| prefix | | | | | prefix | | | | |||
+------------+---------------+------------------------------+ | +------------+---------------+------------------------------+ | |||
| Honorific | credential | To vCard: add any generation | | | Honorific | credential | To vCard: add any | | |||
| suffix | | NameComponent value also in | | | suffix | | "generation" NameComponent | | |||
| | | here. | | | | | to the Honorific suffix | | |||
| | | component. | | ||||
| | | 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 | object's isOrdered property value is "true", and the defaultSeparator | |||
separator name components are set according to the parameter value. | property and any "separator" NameComponent objects are set according | |||
The components list MUST adhere to the order of the JSCOMPS parameter | to the parameter value. The order in the components property MUST | |||
value. | adhere to the order of the JSCOMPS parameter value. | |||
If the JSCOMPS parameter is not set, then the Name isOrdered property | If the JSCOMPS parameter is not set, then the Name object's isOrdered | |||
value is "false" and the defaultSeparator property MUST NOT be set. | property value is "false", and the defaultSeparator property MUST NOT | |||
The components list MUST follow the order of values in the N | be set. The order in the components property MUST follow the order | |||
structured value when read from left to right. | of values in the N 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 object's sortAs property according to Table 1. An empty | |||
existent component value indicates that no sort is defined for this | or non-existent component value indicates that no sort is defined for | |||
kind. | this kind. | |||
N;SORT-AS="Stevenson,John Philip":Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.;;Jr. | ||||
"name": { | N;SORT-AS="Stevenson,John Philip": | |||
"components":[ | Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.;;Jr. | |||
{ "kind": "surname", "value": "Stevenson" }, | "name": { | |||
{ "kind": "given", "value": "John" }, | "components":[ | |||
{ "kind": "given2", "value": "Philip" }, | { "kind": "surname", "value": "Stevenson" }, | |||
{ "kind": "given2", "value": "Paul" }, | { "kind": "given", "value": "John" }, | |||
{ "kind": "title", "value": "Dr." }, | { "kind": "given2", "value": "Philip" }, | |||
{ "kind": "credential", "value": "M.D." }, | { "kind": "given2", "value": "Paul" }, | |||
{ "kind": "credential", "value": "A.C.P." }, | { "kind": "title", "value": "Dr." }, | |||
{ "kind": "generation", "value": "Jr." } | { "kind": "credential", "value": "M.D." }, | |||
], | { "kind": "credential", "value": "A.C.P." }, | |||
"sortAs": { | { "kind": "generation", "value": "Jr." } | |||
"surname": "Stevenson", | ], | |||
"given": "John Philip" | "sortAs": { | |||
} | "surname": "Stevenson", | |||
} | "given": "John Philip" | |||
} | ||||
} | ||||
Figure 13: N conversion example | Figure 12: 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 (Section 6.2.3 of [RFC6350]) converts to a | |||
property (Figure 14). The name property is set to the NICKNAME | Nickname object (Section 2.2.2 of [RFC9553]) in the Card object's | |||
property value. | nicknames property (Figure 13). The name property is set to the | |||
NICKNAME 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 13: 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 (Section 6.2.4 of [RFC6350]) converts to a Media | |||
(Figure 15). The entry value is a Media object whose kind property | object (Section 2.6.4 of [RFC9553]) in the Card object's media | |||
is set to photo and uri property is set to the PHOTO value. | property (Figure 14). The Media object's kind property is set to | |||
"photo" and the 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 14: 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 (Section 6.3.1 of [RFC6350]) converts to an Address | |||
property. Each component in the ADR property structured value | object (Section 2.5.1.1 of [RFC9553]) in the Card object's addresses | |||
converts to an AddressComponent in the Address components property. | property. Each component in the ADR-structured property value | |||
converts to an AddressComponent in the Address object's 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 | To vCard: set the values of | | |||
| | | | | | address | | 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 | To vCard: set the values of | | |||
| | |* direction | | | address | | 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 | object's isOrdered property value is "true", and the defaultSeparator | |||
separator name components are set according to the parameter value. | property and any separator name components are set according to the | |||
The components list MUST adhere to the order of the JSCOMPS parameter | parameter value. The order in the components property MUST adhere to | |||
value. | the order of the JSCOMPS parameter value. | |||
If the JSCOMPS parameter is not set, then the Address isOrdered | If the JSCOMPS parameter is not set, then the Address object's | |||
property value is "false" and the defaultSeparator property MUST NOT | isOrdered property value is "false", and the defaultSeparator | |||
be set. The components list MUST follow the order of values in the | property MUST NOT be set. The order in the components property MUST | |||
ADR structured value when read from left to right. | follow the order of values in the 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 object's full | |||
property. | ||||
The GEO parameter converts to the Address coordinates property. | The GEO parameter converts to the Address object's coordinates | |||
property. | ||||
The TZ parameter converts to the Address timeZone property. | The TZ parameter converts to the Address object's timeZone | |||
property. | ||||
The CC parameter as defined in [RFC8605] converts to the Address | The CC parameter converts to the Address object's countryCode | |||
countryCode property. | 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 | converts to an entry of the PatchObject where the key references the | |||
references the full property. | full property. | |||
ADR;TYPE=work;CC=US:;;54321 Oak St;Reston;VA;20190;USA;;;;Oak St;54321;;;;; | ||||
"addresses": { | ADR;TYPE=work;CC=US: | |||
"ADDR-1" : { | ;;54321 Oak St;Reston;VA;20190;USA;;;;54321;Oak St;;;;;; | |||
"contexts": { "work": true }, | "addresses": { | |||
"components": [ | "ADDR-1" : { | |||
{ "kind": "number", "value": "54321" }, | "contexts": { "work": true }, | |||
{ "kind": "name", "value": "Oak St" }, | "components": [ | |||
{ "kind": "locality", "value": "Reston" }, | { "kind": "number", "value": "54321" }, | |||
{ "kind": "region", "value": "VA" }, | { "kind": "name", "value": "Oak St" }, | |||
{ "kind": "postcode", "value": "20190" }, | { "kind": "locality", "value": "Reston" }, | |||
{ "kind": "country", "value": "USA" } | { "kind": "region", "value": "VA" }, | |||
], | { "kind": "postcode", "value": "20190" }, | |||
"countryCode": "US", | { "kind": "country", "value": "USA" } | |||
} | ], | |||
} | "countryCode": "US" | |||
} | ||||
} | ||||
Figure 16: ADR conversion example | Figure 15: 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 (Section 6.4.2 of [RFC6350]) converts to an | |||
(Figure 17). The entry value is an EmailAddress object. The address | EmailAddress object (Section 2.3.1 of [RFC9553]) in the Card object's | |||
emails property (Figure 16). The EmailAddress object's 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 16: 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 (Section 6.4.3 of [RFC6350]) converts to an | |||
(Figure 18). The entry value is an OnlineService object. The | OnlineService object (Section 2.3.2 of [RFC9553]) in the Card | |||
vCardName property is set to "impp" and the uri property is set to | object's onlineServices property (Figure 17). The vCardName property | |||
the IMPP value. | is set to "impp", and the uri property is set to 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 17: IMPP Conversion Example | |||
2.7.3. LANG | 2.7.3. LANG | |||
A LANG property converts to an entry in the preferredLanguages | The LANG property (Section 6.4.4 of [RFC6350]) converts to a | |||
property (Figure 19). The entry value is an LanguagePref object. | LanguagePref object (Section 2.3.4 of [RFC9553]) in the Card object's | |||
The LanguagePref language property value is the LANG property value. | preferredLanguages property (Figure 18). The LANG property value | |||
converts to the LanguagePref object's language 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 | |||
}, | }, | |||
"LANG-2": { | "LANG-2": { | |||
"language": "fr", | "language": "fr", | |||
"contexts": { "work": true }, | "contexts": { "work": true }, | |||
"pref": 2 | "pref": 2 | |||
}, | }, | |||
"LANG-3": { | "LANG-3": { | |||
"language": "fr", | "language": "fr", | |||
"contexts": { "private": true } | "contexts": { "private": true } | |||
} | } | |||
} | } | |||
Figure 19: LANG conversion example | Figure 18: LANG Conversion Example | |||
2.7.4. LANGUAGE | 2.7.4. LANGUAGE | |||
The LANGUAGE property converts to the language property (Figure 20). | The LANGUAGE property (Section 3.3 of [RFC9554]) converts to the Card | |||
object's language property (Figure 19). | ||||
LANGUAGE:de-AT | LANGUAGE:de-AT | |||
"language": "de-AT" | "language": "de-AT" | |||
Figure 20: LANGUAGE conversion example | Figure 19: LANGUAGE Conversion Example | |||
Note: This property is defined in | ||||
[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 (Section 3.5 of [RFC9554]) converts to an | |||
property (Figure 21). The entry value is an OnlineService object. | OnlineService object (Section 2.3.2 of [RFC9553]) in the Card | |||
The vCardName property is set to "socialprofile" or can be omitted. | object's onlineServices property (Figure 20). The vCardName property | |||
If the value type of the SOCIALPROFILE is URI, the uri property is | is set to "socialprofile", or it can be omitted. If the | |||
set to the SOCIALPROFILE value. Otherwise, the user property is set | SOCIALPROFILE property value is of type URI, then the OnlineService | |||
to the SOCIALPROFILE value. | object's uri property is set; otherwise, the user property is set. | |||
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 20: SOCIALPROFILE Conversion Example | |||
Note: This property is defined in | ||||
[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 (Section 6.4.1 of [RFC6350]) converts to a Phone | |||
(Figure 22). The entry value is a Phone object. | object (Section 2.3.3 of [RFC9553]) in the Card object's phones | |||
property (Figure 21). | ||||
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 to be "voice", but the default | |||
default Phone features property is absent by default. Accordingly, | Phone features property is absent by default. Accordingly, an | |||
an implementation SHOULD only set the Phone features property if the | implementation SHOULD only set the Phone object's features property | |||
TEL property actually has a TEL-specific TYPE parameter set. | if the 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 | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| main-number | main-number | | | main-number | main-number | | |||
+-------------+---------------+ | +-------------+---------------+ | |||
skipping to change at page 28, line 52 ¶ | skipping to change at line 1252 ¶ | |||
+-------------+---------------+ | +-------------+---------------+ | |||
| 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 object's 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 21: 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 (Section 6.5.2 of [RFC6350]) converts to the Address | |||
Also see Section 2.8.3 to determine which Address object instance to | object's coordinates property (Section 2.5.1 of [RFC9553]). Also see | |||
convert to. | Section 2.8.3 to determine which Address object 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 | The TZ property (Section 6.5.1 of [RFC6350]) converts an Address | |||
object. | object (Section 2.5.1 of [RFC9553]) in the Card object's addresses | |||
property. | ||||
A value of type UTC-OFFSET converts to the timeZone property in the | A value of type TEXT converts to the Address object's timeZone | |||
Address object if the offset has zero minutes and the hour offset is | property. | |||
in the range -12 <= 14: | ||||
* If the hour offset is zero, use the time zone name Etc/UTC. | A value of type UTC-OFFSET converts to the Address object's timeZone | |||
property if the offset has zero minutes and the hour offset is | ||||
between -12 and +14, both inclusively. Note that: | ||||
* Otherwise construct the time zone name with Etc/GMT suffixed with | * If the hour offset is zero, use the time zone name "Etc/UTC". | |||
the string representation of the reversed sign hour offset, | ||||
* Otherwise, construct the time zone name with "Etc/GMT" suffixed | ||||
with 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 (Section 2.1 of [RFC8605]) converts to a | |||
entry of the links property (Figure 23). The entry value is a Link | Link object (Section 2.6.3 of [RFC9553]) in the Card object's links | |||
object whose kind property is set to contact and uri property is set | property (Figure 22). The Link object's kind property is set to | |||
to the CONTACT-URI value. | "contact" and the uri property is set to the CONTACT-URI 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. | |||
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 22: 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 (Section 6.6.3 of [RFC6350]) converts to a Media | |||
(Figure 24). The entry value is a Media object whose kind property | object (Section 2.6.4 of [RFC9553]) in the Card object's media | |||
is set to logo and uri property is set to the LOGO value. | property (Figure 23). The Media object's kind property is set to | |||
"logo" and the uri property is set to the LOGO 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. | |||
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 23: 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 MEMBER property (Section 6.6.5 of [RFC6350]) converts to the Card | |||
members property (Figure 25). | object's members property (Figure 24). Each MEMBER property value is | |||
a key in the members property. The PREF parameter (Section 5.3 of | ||||
In this case, the PREF parameter does not have a JSContact | [RFC6350]) does not convert to JSContact. | |||
counterpart; however, the implementors MAY insert the map entries by | ||||
order of preference. | ||||
KIND:group | KIND:group | |||
FN:The Doe family | FN:The Doe family | |||
MEMBER:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af | MEMBER:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af | |||
MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519 | MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519 | |||
"kind": "group", | "kind": "group", | |||
"name": { | "name": { | |||
"full": "The Doe family" | "full": "The Doe family" | |||
}, | }, | |||
"uid": "urn:uuid:ab4310aa-fa43-11e9-8f0b-362b9e155667", | "uid": "urn:uuid:ab4310aa-fa43-11e9-8f0b-362b9e155667", | |||
"members": { | "members": { | |||
"urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af": true, | "urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af": true, | |||
"urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519": true | "urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519": true | |||
} | } | |||
Figure 25: Group example | Figure 24: Group Example | |||
2.9.4. ORG | 2.9.4. ORG | |||
An ORG property converts to an entry in the organizations property | The ORG property (Section 6.6.4 of [RFC6350]) converts to an | |||
(Figure 26). The entry value is an Organization object whose name | Organization object (Section 2.2.3 of [RFC9553]) in the Card object's | |||
property contains the organizational name, and the units property is | organizations property (Figure 25). The Organization object's name | |||
an array of OrgUnit objects each containing the organizational unit | property is set to the ORG property organizational name component. | |||
name in the name property. | The Organization object's units property is an array of OrgUnit | |||
objects that each contain an organizational unit name component value | ||||
of the ORG property value. | ||||
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 25: 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 (Section 6.6.6 of [RFC6350]) converts to the | |||
property value converts to the key in the relatedTo property. The | Card object's relatedTo property (Figure 26). The property value | |||
TYPE parameters convert to the relation of the Relation object value. | converts to the key in the relatedTo property. The TYPE parameters | |||
Any other parameters convert as defined in Section 2.15.2. | convert to the Relation object's relation property (Section 2.1.8 of | |||
[RFC9553]). 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 | |||
} | } | |||
}, | }, | |||
"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 26: 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 | The TITLE (Section 6.6.1 of [RFC6350]) and ROLE (Section 6.6.2 of | |||
titles property (Figure 28). The entry value is a Title object whose | [RFC6350]) properties convert to a Title object (Section 2.2.5 of | |||
kind property is set to title or role for TITLE and ROLE vCard | [RFC9553]) in the Card object's titles property (Figure 27). The | |||
properties, respectively. The name property is set to the vCard | Title object's kind property is set to "title" or "role" for the | |||
property value. | TITLE and ROLE vCard properties, respectively. The name property is | |||
set to the vCard 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 27: 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 (Section 2.1 of [RFC6715]) converts to a | |||
PersonalInfo object in the personalInfo property (Figure 29). The | PersonalInfo object (Section 2.8.4 of [RFC9553]) in the Card object's | |||
kind property is set to "expertise". | personalInfo property (Figure 28). The PersonalInfo object's kind | |||
property is set to "expertise". | ||||
The INDEX parameter converts according to the rules as defined in | The INDEX and LEVEL parameters convert according to the rules defined | |||
Section 2.3. | in 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 28: 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 (Section 2.2 of [RFC6715]) converts to a | |||
PersonalInfo object in the personalInfo property (Figure 30). The | PersonalInfo object (Section 2.8.4 of [RFC9553]) in the Card object's | |||
kind property is set to "hobby". | personalInfo property (Figure 29). The PersonalInfo object's kind | |||
property is set to "hobby". | ||||
The INDEX parameter converts according to the rules as defined in | The INDEX and LEVEL parameters convert according to the rules defined | |||
Section 2.3. | in 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 29: 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 (Section 2.3 of [RFC6715]) converts to a | |||
PersonalInfo object in the personalInfo property (Figure 31). The | PersonalInfo object (Section 2.8.4 of [RFC9553]) in the Card object's | |||
kind property is set to "interest". | personalInfo property (Figure 30). The PersonalInfo object's kind | |||
property is set to "interest". | ||||
The INDEX parameter converts according to the rules as defined in | The INDEX and LEVEL parameters convert according to the rules defined | |||
Section 2.3. | in 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 30: 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 (Section 2.4 of [RFC6715]) [RFC6715] | |||
in the directories property (Figure 32). The kind property is set to | converts to a Directory object (Section 2.6.2 of [RFC9553]) in the | |||
directory. The uri property is set to the ORG-DIRECTORY property | Card object's directories property (Figure 31). The Directory | |||
value. | object's kind property is set to "directory". The uri property is | |||
set to the ORG-DIRECTORY property 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 31: 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 (Section 6.7.1 of [RFC6350]) converts to a | |||
property (Figure 33). The keys are the comma-separated text values | set of entries of the Card object's keywords property (Figure 32). | |||
of the CATEGORIES property. | The keys are the comma-separated text values 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 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 32: CATEGORIES Conversion Example | |||
2.11.2. CLIENTPIDMAP and PID Parameter | 2.11.2. CLIENTPIDMAP | |||
These convert to the vCardProps (Section 2.15.1) and vCardParams | The CLIENTPIDMAP property (Section 6.7.7 of [RFC6350]) converts to | |||
(Section 2.15.2) properties. | the vCardProps (Section 2.15.1) property. | |||
2.11.3. CREATED | 2.11.3. CREATED | |||
The CREATED property converts to the created property (Figure 34). | The CREATED property (Section 3.1 of [RFC9554]) converts to the Card | |||
object's created property (Figure 33). | ||||
CREATED:19940930T143510Z | CREATED:19940930T143510Z | |||
"created": "1994-09-30T14:35:10Z" | "created": "1994-09-30T14:35:10Z" | |||
Figure 34: CREATED conversion example | Figure 33: CREATED Conversion Example | |||
Note: This property is defined in | ||||
[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 (Section 6.7.2 of [RFC6350]) converts to a Note | |||
(Figure 35). | object (Section 2.8.3 of [RFC9553]) in the Card object's notes | |||
property (Figure 34). | ||||
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 34: NOTE Conversion Example | |||
2.11.5. PRODID | 2.11.5. PRODID | |||
The PRODID property converts to the prodId property (Figure 36). | The PRODID property (Section 6.7.3 of [RFC6350]) converts to the Card | |||
object's prodId property (Figure 35). | ||||
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 35: PRODID Conversion Example | |||
2.11.6. REV | 2.11.6. REV | |||
The REV property converts to the updated property (Figure 37). | The REV property (Section 6.7.4 of [RFC6350]) converts to the Card | |||
object's updated property (Figure 36). | ||||
REV:19951031T222710Z | REV:19951031T222710Z | |||
"updated": "1995-10-31T22:27:10Z" | "updated": "1995-10-31T22:27:10Z" | |||
Figure 37: REV conversion example | Figure 36: 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 (Section 6.7.5 of [RFC6350]) converts to a Media | |||
(Figure 38). The entry value is a Media object whose kind property | object (Section 2.6.4 of [RFC9553]) in the Card object's media | |||
is set to sound and uri property is set to the SOUND value. | property (Figure 37). The Media object's kind property is set to | |||
"sound" and the 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 37: SOUND Conversion Example | |||
2.11.8. UID | 2.11.8. UID | |||
The UID property corresponds to the uid property (Figure 39). | The UID property (Section 6.7.6 of [RFC6350]) converts to the Card | |||
object's uid property (Figure 38). | ||||
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 38: 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 (Section 6.7.8 of [RFC6350]) converts to a Link | |||
(Figure 40). The entry value is a Link object whose uri property is | object (Section 2.6.3 of [RFC9553]) in the Card object's links | |||
set to the URL value. | property (Figure 39). The Link object's uri property is 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 39: 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 (Section 6.7.9 of [RFC6350]) converts to the | |||
property. | vCardProps (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, | The X-ABLabel property is preceded by a vCard property group name, | |||
and the label converts to the JSContact object which got converted | and the label converts to the JSContact object, which was converted | |||
from a vCard property having the same group. | from a vCard property of 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.9. | |||
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 40: 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 (Section 6.8.1 of [RFC6350]) converts to a CryptoKey | |||
(Figure 42). The entry value is a CryptoKey object whose uri | object (Section 2.6.1 of [RFC9553]) in the Card object's cryptoKeys | |||
property is set to the KEY value. | property (Figure 41). The CryptoKey object's uri property is set to | |||
the KEY 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. | |||
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 41: 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 (Section 6.9.2 of [RFC6350]) converts to a | |||
property (Figure 43). The entry value is a SchedulingAddress object | SchedulingAddress object (Section 2.4.2 of [RFC9553]) in the Card | |||
whose uri property is set to the CALADRURI value. | object's schedulingAddresses property (Figure 42). The | |||
SchedulingAddress object's uri property is set to the CALADRURI | ||||
value. | ||||
The PREF parameter converts according to the rules as defined in | The PREF parameter (Section 5.3 of [RFC6350]) converts according to | |||
Section 2.3. | the rules defined in 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 42: 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 (Section 6.9.3 of [RFC6350]) converts to a | |||
(Figure 44). The entry value is a Calendar object whose kind | Calendar object (Section 2.4.1 of [RFC9553]) in the Card object's | |||
property is set to calendar and uri property is set to the CALURI | calendars property (Figure 43). The Calendar object's kind property | |||
value. | is set to "calendar" and the uri property is set to the CALURI 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 43: 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 (Section 6.9.1 of [RFC6350]) converts to a | |||
(Figure 45). The entry value is a Calendar object whose kind | Calendar object (Section 2.4.1 of [RFC9553]) in the Card object's | |||
property is set to freeBusy and uri property is set to the FBURL | calendars property (Figure 44). The Calendar object's kind property | |||
value. | is set to "freeBusy" and the uri property is set to the FBURL 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 44: 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. | |||
2.15.1. Property vCardProps | 2.15.1. vCardProps | |||
Name: vCardProps | ||||
Type: JCardProp[], where JCardProp denotes a jCard-encoded vCard | ||||
property as defined in Section 3.3 of [RFC7095]. | ||||
Definition: This property is set on a JSContact object that | vCardProps: JCardProp[] (optional). Contains vCard properties that | |||
represents a vCard. It contains properties that are set in the | are set in the vCard represented by this JSContact object. The | |||
vCard represented by this JSContact object. Each entry in this | JCardProp type denotes a jCard-encoded vCard property as defined | |||
list typically represents a vCard property for which no conversion | in Section 3.3 of [RFC7095]. | |||
to an IANA-registered JSContact property is defined. | ||||
Example: This illustrates how to convert a vCard extension property: | Example: This illustrates how to convert a vCard extension property: | |||
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 45: JSContact vCardProps Example | |||
2.15.2. Property vCardParams | ||||
Name: vCardParams | ||||
Type: String[String|String[]] | 2.15.2. vCardParams | |||
Definition: This property is set on a JSContact object that | vCardParams: String[String|String[]] (optional). Contains vCard | |||
represents a vCard property. Its value MUST be a JSON object | parameters that are set on the vCard property represented by this | |||
containing vCard property parameters, defined as array element 2 | JSContact object. The value MUST be a JSON object containing | |||
in Section 3.3 of [RFC7095]. Each entry represents a parameter of | vCard property parameters as defined in Section 3.3 of [RFC7095]. | |||
the vCard property that converts to the JSContact object. | Each entry represents a parameter of the vCard property that | |||
converts to the JSContact object. | ||||
Example: This illustrates how to convert a vCard extension | Example: This illustrates how to convert a vCard extension | |||
parameter: | parameter: | |||
EMAIL;X-FOO=Bar:jane_doe@example.com | EMAIL;X-FOO=Bar:jane_doe@example.com | |||
"emails": { | "emails": { | |||
"email1": { | "email1": { | |||
"address": "jane_doe@example.com", | "address": "jane_doe@example.com", | |||
"vCardParams": { | "vCardParams": { | |||
"x-foo": "Bar" | "x-foo": "Bar" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 47: JSContact vCardParams example | Figure 46: JSContact vCardParams Example | |||
2.15.3. Property vCardName | ||||
Name: vCardName | ||||
Type: String | 2.15.3. vCardName | |||
Definition: This property is set on a JSContact object that | vCardName: String (optional). Contains the name of the vCard element | |||
represents a vCard property or parameter and its value contains | that is represented by this JSContact object. For example, this | |||
the name of that vCard element. This allows to preserve the name | allows to preserve the name of a vCard property when multiple | |||
of a vCard element when multiple elements convert the same | vCard properties convert the same JSContact type. The case- | |||
JSContact object type. The case-insensitive value MUST be valid | insensitive value MUST be valid according to the "name" ABNF | |||
according to the name ABNF defined in Section 3.3 of [RFC6350]. | defined in Section 3.3 of [RFC6350]. | |||
Example: Both vCard IMPP and SOCIALPROFILE convert to OnlineService | Example: Both vCard IMPP and SOCIALPROFILE convert to an | |||
in JSContact. The vCardName property value indicates that the | OnlineService object (Section 2.3.2 of [RFC9553]) in JSContact. | |||
vCard source element was IMPP: | The vCardName property value indicates that the 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 47: 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 object converts to vCard by applying the reverse rules of | |||
vCard to JSContact. In addition to those listed in Appendix A, the | converting vCard to JSContact. In addition to those listed in | |||
following rules apply: | Appendix A, the 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-typed key of the converted value | |||
Section 2.3.16). | (see Section 2.3.18). | |||
* 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 object's full property is set, then implementations | |||
its value for the vCard FN property. | MUST use its value for the vCard FN property. | |||
- If the Name full property is not set, then implementations | - If the Name object's full property is not set, then | |||
SHOULD derive the full name from the Name components values. | implementations SHOULD derive the full name from the Name | |||
If the isOrdered property is true, then this can be done by | object's components property values. If the isOrdered property | |||
concatenating the name component values. Otherwise, or | is "true", then this can be done by concatenating the name | |||
alternatively, an implementation can choose any other heuristic | component values. Otherwise, or alternatively, an | |||
to generate the full name from its components, such as | implementation can choose any other heuristic to generate the | |||
[CLDRPersonName]. Implementations MUST set the DERIVED | full name from its components such as [CLDRPersonName]. | |||
parameter on the FN property. | Implementations MUST set the DERIVED 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 objects may contain properties for which no IANA-registered | |||
registered vCard property is defined. For example, a JSContact | vCard property is defined. For example, a JSContact object may | |||
object may contain vendor-specific properties of which the semantics | contain vendor-specific properties of which the semantics or purpose | |||
or purpose are unknown. | 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 as defined in Section 2 of [RFC8259]. | |||
to the JSContact property within the Card. | The value of the JSPTR parameter points 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 REQUIRED 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 48: 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 49: 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 50: 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 51 and 52 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 53 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. | |||
* The count of positional entries equals the count of | * The count of positional entries equals the count of | |||
deduplicated component values. Deduplication is required | deduplicated component values. Deduplication is required | |||
because some values may occur in both their designated and | because some values may occur in both their designated and | |||
skipping to change at page 50, line 19 ¶ | skipping to change at line 2181 ¶ | |||
- 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 [jscomps-entry-sep ] ";" | |||
DQUOTE ( | jscomps-entrylist DQUOTE | |||
(jscomps-entry-sep / "") ";" jscomps-entrylist | ||||
) DQUOTE | ||||
jscomps-entrylist = jscomps-entry *(";" jscomps-entry) | jscomps-entrylist = jscomps-entry *(";" jscomps-entry) | |||
jscomps-entry = jscomps-entry-pos / jscomps-entry-sep | jscomps-entry = jscomps-entry-pos / jscomps-entry-sep | |||
jscomps-entry-pos = 1*DIGIT [ "," 1*DIGIT ] | jscomps-entry-pos = 1*DIGIT [ "," 1*DIGIT ] | |||
jscomps-entry-sep = "s" "," jscomps-entry-verb | jscomps-entry-sep = "s" "," jscomps-entry-verb | |||
jscomps-entry-verb = *QSAFE-CHAR | jscomps-entry-verb = *QSAFE-CHAR ; encode according to RFC 6868 | |||
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" } | |||
skipping to change at page 50, line 48 ¶ | skipping to change at line 2207 ¶ | |||
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 51: Example of a Secondary Positional Index | |||
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 52: Example of Positional Entries | |||
Figure 53: Example for 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 53: Example of Separator Entries | |||
Figure 54: Example for 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: This parameter is set on a JSPROP (Section 3.2.1) property. | |||
relates the vCard JSPROP (Section 3.2.1) property to a JSContact | Its value is a JSON pointer [RFC6901] that points to the JSContact | |||
property. | property that has the value of the JSPROP 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 |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/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>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
Resource Identifier (URI): Generic Syntax", STD 66, | ||||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
<https://www.rfc-editor.org/info/rfc3986>. | ||||
[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>. | |||
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | ||||
Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | ||||
September 2009, <https://www.rfc-editor.org/info/rfc5646>. | ||||
[RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, | [RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, | |||
DOI 10.17487/RFC6350, August 2011, | DOI 10.17487/RFC6350, August 2011, | |||
<https://www.rfc-editor.org/info/rfc6350>. | <https://www.rfc-editor.org/info/rfc6350>. | |||
[RFC6473] Saint-Andre, P., "vCard KIND:application", RFC 6473, | [RFC6473] Saint-Andre, P., "vCard KIND:application", RFC 6473, | |||
DOI 10.17487/RFC6473, December 2011, | DOI 10.17487/RFC6473, December 2011, | |||
<https://www.rfc-editor.org/info/rfc6473>. | <https://www.rfc-editor.org/info/rfc6473>. | |||
[RFC6474] Li, K. and B. Leiba, "vCard Format Extensions: Place of | [RFC6474] Li, K. and B. Leiba, "vCard Format Extensions: Place of | |||
Birth, Place and Date of Death", RFC 6474, | Birth, Place and Date of Death", RFC 6474, | |||
skipping to change at page 56, line 14 ¶ | skipping to change at line 2410 ¶ | |||
[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 | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | ||||
DOI 10.17487/RFC8259, December 2017, | ||||
<https://www.rfc-editor.org/info/rfc8259>. | ||||
[RFC9553] Stepanek, R. and M. Loffredo, "JSContact: A JSON | ||||
Representation of Contact Data", RFC 9553, | ||||
DOI 10.17487/RFC9553, May 2024, | ||||
<https://www.rfc-editor.org/info/rfc9553>. | ||||
[RFC9554] Stepanek, R. and M. Loffredo, "vCard Format Extensions for | ||||
JSContact", RFC 9554, DOI 10.17487/RFC9554, May 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, 8 June 2018, | ||||
<https://datatracker.ietf.org/doc/html/draft-calconnect- | ||||
vobject-i18n-00>. | ||||
Table 8 lists the relevant document sections for each JSContact | Appendix A. Reverse Rules of Converting a vCard to a JSContact Card | |||
object type and property. | ||||
+===================+=====================+=================+ | Table 8 lists the relevant document sections for each JSContact type | |||
| JSContact Type | Property Name | Relevant | | and property. | |||
| | | Section(s) | | ||||
+===================+=====================+=================+ | ||||
| Address | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | components | Section 2.6.1, | | ||||
| | | Section 3.3.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | coordinates | Section 2.3.7, | | ||||
| | | Section 2.8.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | country | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | countryCode | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | defaultSeparator | Section 2.6.1, | | ||||
| | | Section 3.3.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | full | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | isOrdered | Section 2.6.1, | | ||||
| | | Section 3.3.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | locality | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | phoneticScript | Section 2.3.13, | | ||||
| | | Section 2.3.17 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | phoneticSystem | Section 2.3.13 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | postcode | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | region | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Address | timeZone | Section 2.3.21, | | ||||
| | | Section 2.8.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| AddressComponent | phonetic | Section 2.3.13 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Anniversary | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Anniversary | date | Section 2.5.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Anniversary | kind | Section 2.5.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Anniversary | place | Section 2.5.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Author | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Author | name | Section 2.3.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Author | uri | Section 2.3.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | kind | Section 2.13.1, | | ||||
| | | Section 2.13.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | mediaType | Section 2.3.12 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Calendar | uri | Section 2.13.1, | | ||||
| | | Section 2.13.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | @version | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | addresses | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | anniversaries | Section 2.5.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | calendars | Section 2.13.1, | | ||||
| | | Section 2.13.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | created | Section 2.11.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | directories | Section 2.4.3, | | ||||
| | | Section 2.10.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | emails | Section 2.7.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | keywords | Section 2.11.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | kind | Section 2.4.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | language | Section 2.7.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | links | Section 2.9.1, | | ||||
| | | Section 2.11.9 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | localizations | Section 2.3.10 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | media | Section 2.5.7, | | ||||
| | | Section 2.9.2, | | ||||
| | | Section 2.11.7 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | members | Section 2.9.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | name | Section 2.5.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | nicknames | Section 2.5.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | notes | Section 2.11.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | onlineServices | Section 2.7.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | organizations | Section 2.9.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | personalInfo | Section 2.10.1, | | ||||
| | | Section 2.10.2, | | ||||
| | | Section 2.10.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | phones | Section 2.7.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | preferredLanguages | Section 2.7.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | prodId | Section 2.11.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | relatedTo | Section 2.9.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | schedulingAddresses | Section 2.13.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | speakToAs | Section 2.5.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | titles | Section 2.9.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | uid | Section 2.11.8 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Card | updated | Section 2.11.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | kind | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | mediaType | Section 2.3.12 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| CryptoKey | uri | Section 2.12.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | kind | Section 2.4.3, | | ||||
| | | Section 2.10.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | listAs | Section 2.3.9 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | mediaType | Section 2.3.12 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Directory | uri | Section 2.4.3, | | ||||
| | | Section 2.10.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| EmailAddress | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| EmailAddress | address | Section 2.7.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| EmailAddress | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| EmailAddress | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| EmailAddress | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| LanguagePref | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| LanguagePref | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| LanguagePref | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | kind | Section 2.9.1, | | ||||
| | | Section 2.11.9 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | mediaType | Section 2.3.12 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Link | uri | Section 2.9.1, | | ||||
| | | Section 2.11.9> | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | kind | Section 2.5.7, | | ||||
| | | Section 2.9.2, | | ||||
| | | Section 2.11.7 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | mediaType | Section 2.3.12 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Media | uri | Section 2.5.7, | | ||||
| | | Section 2.9.2, | | ||||
| | | Section 2.11.7 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | components | Section 2.5.5, | | ||||
| | | Section 3.3.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | defaultSeparator | Section 2.5.5, | | ||||
| | | Section 3.3.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | full | Section 2.5.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | phoneticScript | Section 2.3.13, | | ||||
| | | Section 2.3.17 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | phoneticSystem | Section 2.3.13 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | isOrdered | Section 2.5.5, | | ||||
| | | Section 3.3.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Name | sortAs | Section 2.3.19 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| NameComponent | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| NameComponent | kind | Section 2.5.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| NameComponent | phonetic | Section 2.3.13 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| NameComponent | value | Section 2.5.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Nickname | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Nickname | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Nickname | name | Section 2.5.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Nickname | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Note | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Note | author | Section 2.3.2, | | ||||
| | | Section 2.3.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Note | created | Section 2.3.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Note | note | Section 2.11.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | kind | Section 2.7.2, | | ||||
| | | Section 2.7.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | service | Section 2.3.18 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | uri | Section 2.7.2, | | ||||
| | | Section 2.7.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OnlineService | user | Section 2.3.22 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OrgUnit | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OrgUnit | name | Section 2.9.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| OrgUnit | sortAs | Section 2.3.19 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Organization | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Organization | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Organization | name | Section 2.9.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Organization | sortAs | Section 2.3.19 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Organization | units | Section 2.9.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PartialDate | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PartialDate | calendarScale | Section 2.3.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PartialDate | day | Section 2.2.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PartialDate | month | Section 2.2.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PartialDate | year | Section 2.2.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PatchObject | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PersonalInfo | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PersonalInfo | kind | Section 2.10.1, | | ||||
| | | Section 2.10.2, | | ||||
| | | Section 2.10.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PersonalInfo | listAs | Section 2.3.9 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PersonalInfo | level | Section 2.3.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| PersonalInfo | value | Section 2.10.1, | | ||||
| | | Section 2.10.2, | | ||||
| | | Section 2.10.3 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Phone | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Phone | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Phone | features | Section 2.7.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Phone | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Phone | number | Section 2.7.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Phone | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Pronouns | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Pronouns | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Pronouns | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Pronouns | pronouns | Section 2.5.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Relation | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Relation | relation | Section 2.9.5 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Resource | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SchedulingAddress | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SchedulingAddress | contexts | Section 2.3.20 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SchedulingAddress | label | Section 2.11.11 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SchedulingAddress | pref | Section 2.3.15 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SchedulingAddress | uri | Section 2.13.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SpeakToAs | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SpeakToAs | grammaticalGender | Section 2.5.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| SpeakToAs | pronouns | Section 2.5.4 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| AddressComponent | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| AddressComponent | kind | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| AddressComponent | value | Section 2.6.1 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Timestamp | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Timestamp | utc | Section 2.2.2 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Title | @type | not applicable | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Title | kind | Section 2.9.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Title | name | Section 2.9.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
| Title | organization | Section 2.9.6 | | ||||
+-------------------+---------------------+-----------------+ | ||||
Table 8: Conversion rules by JSContact property | +===================+=====================+=====================+ | |||
| JSContact Type | Property Name | Relevant Section(s) | | ||||
+===================+=====================+=====================+ | ||||
| Address | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | components | Sections 2.6.1 and | | ||||
| | | 3.3.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | coordinates | Sections 2.3.8 and | | ||||
| | | 2.8.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | country | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | countryCode | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | defaultSeparator | Sections 2.6.1 and | | ||||
| | | 3.3.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | full | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | isOrdered | Sections 2.6.1 and | | ||||
| | | 3.3.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | locality | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | phoneticScript | Sections 2.3.15 and | | ||||
| | | 2.3.19 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | phoneticSystem | Section 2.3.15 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | postcode | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | region | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Address | timeZone | Sections 2.3.23 and | | ||||
| | | 2.8.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| AddressComponent | phonetic | Section 2.3.15 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Anniversary | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Anniversary | date | Section 2.5.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Anniversary | kind | Section 2.5.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Anniversary | place | Section 2.5.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Author | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Author | name | Section 2.3.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Author | uri | Section 2.3.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | kind | Sections 2.13.2 and | | ||||
| | | 2.13.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | mediaType | Section 2.3.14 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Calendar | uri | Sections 2.13.2 and | | ||||
| | | 2.13.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | @version | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | addresses | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | anniversaries | Section 2.5.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | calendars | Sections 2.13.2 and | | ||||
| | | 2.13.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | created | Section 2.11.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | directories | Sections 2.4.3 and | | ||||
| | | 2.10.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | emails | Section 2.7.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | keywords | Section 2.11.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | kind | Section 2.4.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | language | Section 2.7.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | links | Sections 2.9.1 and | | ||||
| | | 2.11.9 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | localizations | Section 2.3.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | media | Sections 2.5.7, | | ||||
| | | 2.9.2, and 2.11.7 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | members | Section 2.9.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | name | Section 2.5.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | nicknames | Section 2.5.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | notes | Section 2.11.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | onlineServices | Section 2.7.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | organizations | Section 2.9.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | personalInfo | Sections 2.10.1, | | ||||
| | | 2.10.2, and 2.10.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | phones | Section 2.7.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | preferredLanguages | Section 2.7.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | prodId | Section 2.11.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | relatedTo | Section 2.9.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | schedulingAddresses | Section 2.13.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | speakToAs | Section 2.5.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | titles | Section 2.9.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | uid | Section 2.11.8 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Card | updated | Section 2.11.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | kind | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | mediaType | Section 2.3.14 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| CryptoKey | uri | Section 2.12.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | kind | Sections 2.4.3 and | | ||||
| | | 2.10.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | listAs | Section 2.3.10 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | mediaType | Section 2.3.14 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Directory | uri | Sections 2.4.3 and | | ||||
| | | 2.10.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| EmailAddress | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| EmailAddress | address | Section 2.7.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| EmailAddress | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| EmailAddress | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| EmailAddress | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| LanguagePref | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| LanguagePref | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| LanguagePref | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | kind | Section 2.9.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | mediaType | Section 2.3.14 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Link | uri | Sections 2.9.1 and | | ||||
| | | 2.11.9 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | kind | Sections 2.5.7, | | ||||
| | | 2.9.2, and 2.11.7 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | mediaType | Section 2.3.14 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Media | uri | Sections 2.5.7, | | ||||
| | | 2.9.2, and 2.11.7 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | components | Sections 2.5.5 and | | ||||
| | | 3.3.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | defaultSeparator | Sections 2.5.5 and | | ||||
| | | 3.3.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | full | Section 2.5.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | phoneticScript | Sections 2.3.15 and | | ||||
| | | 2.3.19 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | phoneticSystem | Section 2.3.15 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | isOrdered | Sections 2.5.5 and | | ||||
| | | 3.3.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Name | sortAs | Section 2.3.21 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| NameComponent | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| NameComponent | kind | Section 2.5.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| NameComponent | phonetic | Section 2.3.15 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| NameComponent | value | Section 2.5.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Nickname | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Nickname | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Nickname | name | Section 2.5.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Nickname | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Note | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Note | author | Sections 2.3.2 and | | ||||
| | | 2.3.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Note | created | Section 2.3.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Note | note | Section 2.11.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | service | Section 2.3.20 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | uri | Sections 2.7.2 and | | ||||
| | | 2.7.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OnlineService | user | Section 2.3.24 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OrgUnit | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OrgUnit | name | Section 2.9.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| OrgUnit | sortAs | Section 2.3.21 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Organization | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Organization | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Organization | name | Section 2.9.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Organization | sortAs | Section 2.3.21 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Organization | units | Section 2.9.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PartialDate | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PartialDate | calendarScale | Section 2.3.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PartialDate | day | Section 2.2.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PartialDate | month | Section 2.2.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PartialDate | year | Section 2.2.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PatchObject | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PersonalInfo | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PersonalInfo | kind | Sections 2.10.1, | | ||||
| | | 2.10.2, and 2.10.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PersonalInfo | listAs | Section 2.3.10 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PersonalInfo | level | Section 2.3.13 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| PersonalInfo | value | Sections 2.10.1, | | ||||
| | | 2.10.2, and 2.10.3 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Phone | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Phone | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Phone | features | Section 2.7.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Phone | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Phone | number | Section 2.7.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Phone | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Pronouns | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Pronouns | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Pronouns | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Pronouns | pronouns | Section 2.5.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Relation | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Relation | relation | Section 2.9.5 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Resource | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SchedulingAddress | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SchedulingAddress | contexts | Section 2.3.22 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SchedulingAddress | label | Section 2.11.11 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SchedulingAddress | pref | Section 2.3.17 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SchedulingAddress | uri | Section 2.13.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SpeakToAs | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SpeakToAs | grammaticalGender | Section 2.5.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| SpeakToAs | pronouns | Section 2.5.4 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| AddressComponent | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| AddressComponent | kind | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| AddressComponent | value | Section 2.6.1 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Timestamp | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Timestamp | utc | Section 2.2.2 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Title | @type | not applicable | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Title | kind | Section 2.9.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Title | name | Section 2.9.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
| Title | organizationId | Section 2.9.6 | | ||||
+-------------------+---------------------+---------------------+ | ||||
Table 8: Conversion Rules for JSContact Types and Properties | ||||
Acknowledgements | ||||
The definition and examples of the PHONETIC (Section 2.3.15) and | ||||
SCRIPT (Section 2.3.19) 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. 387 change blocks. | ||||
1505 lines changed or deleted | 1438 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |