rfc9553.original | rfc9553.txt | |||
---|---|---|---|---|
Calendaring Extensions R. Stepanek | Internet Engineering Task Force (IETF) R. Stepanek | |||
Internet-Draft Fastmail | Request for Comments: 9553 Fastmail | |||
Intended status: Standards Track M. Loffredo | Category: Standards Track M. Loffredo | |||
Expires: 12 May 2024 IIT-CNR | ISSN: 2070-1721 IIT-CNR | |||
9 November 2023 | March 2024 | |||
JSContact: A JSON representation of contact data | JSContact: A JSON Representation of Contact Data | |||
draft-ietf-calext-jscontact-16 | ||||
Abstract | Abstract | |||
This specification defines a data model and JSON representation of | This specification defines a data model and JavaScript Object | |||
contact card information that can be used for data storage and | Notation (JSON) representation of contact card information that can | |||
exchange in address book or directory applications. It aims to be an | be used for data storage and exchange in address book or directory | |||
alternative to the vCard data format and to be unambiguous, | applications. It aims to be an alternative to the vCard data format | |||
extendable and simple to process. In contrast to the JSON-based | and to be unambiguous, extendable, and simple to process. In | |||
jCard format, it is not a direct mapping from the vCard data model | contrast to the JSON-based jCard format, it is not a direct mapping | |||
and expands semantics where appropriate. | from the vCard data model and expands semantics where appropriate. | |||
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 12 May 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/rfc9553. | ||||
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. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
1.1. Motivation and Relation to vCard, jCard and xCard . . . . 5 | 1.1. Motivation and Relation to vCard, jCard, and xCard | |||
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5 | 1.2. Notational Conventions | |||
1.3. Data Type Notations . . . . . . . . . . . . . . . . . . . 6 | 1.3. Data Type Notations | |||
1.3.1. Objects and Properties . . . . . . . . . . . . . . . 6 | 1.3.1. Objects and Properties | |||
1.3.2. Type Signatures . . . . . . . . . . . . . . . . . . . 7 | 1.3.2. Type Signatures | |||
1.3.3. Property Attributes . . . . . . . . . . . . . . . . . 7 | 1.3.3. Property Attributes | |||
1.3.4. The @type Property . . . . . . . . . . . . . . . . . 8 | 1.3.4. The @type Property | |||
1.4. Common Data Types . . . . . . . . . . . . . . . . . . . . 8 | 1.4. Common Data Types | |||
1.4.1. Id . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 1.4.1. Id | |||
1.4.2. Int and UnsignedInt . . . . . . . . . . . . . . . . . 9 | 1.4.2. Int and UnsignedInt | |||
1.4.3. PatchObject . . . . . . . . . . . . . . . . . . . . . 9 | 1.4.3. PatchObject | |||
1.4.4. Resource . . . . . . . . . . . . . . . . . . . . . . 10 | 1.4.4. Resource | |||
1.4.5. UTCDateTime . . . . . . . . . . . . . . . . . . . . . 11 | 1.4.5. UTCDateTime | |||
1.5. Common Properties . . . . . . . . . . . . . . . . . . . . 12 | 1.5. Common Properties | |||
1.5.1. contexts . . . . . . . . . . . . . . . . . . . . . . 12 | 1.5.1. contexts | |||
1.5.2. extra . . . . . . . . . . . . . . . . . . . . . . . . 12 | 1.5.2. extra | |||
1.5.3. label . . . . . . . . . . . . . . . . . . . . . . . . 12 | 1.5.3. label | |||
1.5.4. pref . . . . . . . . . . . . . . . . . . . . . . . . 13 | 1.5.4. pref | |||
1.5.5. phonetic . . . . . . . . . . . . . . . . . . . . . . 13 | 1.5.5. phonetic | |||
1.6. Internationalization . . . . . . . . . . . . . . . . . . 14 | 1.6. Internationalization | |||
1.6.1. Free-form text . . . . . . . . . . . . . . . . . . . 14 | 1.6.1. Free-Form Text | |||
1.6.2. URIs . . . . . . . . . . . . . . . . . . . . . . . . 15 | 1.6.2. URIs | |||
1.7. Validating JSContact . . . . . . . . . . . . . . . . . . 15 | 1.7. Validating JSContact | |||
1.7.1. Case-Sensitivity . . . . . . . . . . . . . . . . . . 15 | 1.7.1. Case-Sensitivity | |||
1.7.2. IANA-registered Properties . . . . . . . . . . . . . 16 | 1.7.2. IANA-Registered Properties | |||
1.7.3. Unknown Properties . . . . . . . . . . . . . . . . . 16 | 1.7.3. Unknown Properties | |||
1.7.4. Enumerated Values . . . . . . . . . . . . . . . . . . 16 | 1.7.4. Enumerated Values | |||
1.8. Vendor-Specific Extensions . . . . . . . . . . . . . . . 17 | 1.8. Vendor-Specific Extensions | |||
1.8.1. Vendor-specific Properties . . . . . . . . . . . . . 17 | 1.8.1. Vendor-Specific Properties | |||
1.8.2. Vendor-specific Values . . . . . . . . . . . . . . . 18 | 1.8.2. Vendor-Specific Values | |||
1.9. Versioning . . . . . . . . . . . . . . . . . . . . . . . 19 | 1.9. Versioning | |||
1.9.1. Version Format and Requirements . . . . . . . . . . . 19 | 1.9.1. Version Format and Requirements | |||
1.9.2. Current Version . . . . . . . . . . . . . . . . . . . 19 | 1.9.2. Current Version | |||
2. Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 2. Card | |||
2.1. Metadata Properties . . . . . . . . . . . . . . . . . . . 20 | 2.1. Metadata Properties | |||
2.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 20 | 2.1.1. @type | |||
2.1.2. version . . . . . . . . . . . . . . . . . . . . . . . 20 | 2.1.2. version | |||
2.1.3. created . . . . . . . . . . . . . . . . . . . . . . . 20 | 2.1.3. created | |||
2.1.4. kind . . . . . . . . . . . . . . . . . . . . . . . . 21 | 2.1.4. kind | |||
2.1.5. language . . . . . . . . . . . . . . . . . . . . . . 21 | 2.1.5. language | |||
2.1.6. members . . . . . . . . . . . . . . . . . . . . . . . 21 | 2.1.6. members | |||
2.1.7. prodId . . . . . . . . . . . . . . . . . . . . . . . 22 | 2.1.7. prodId | |||
2.1.8. relatedTo . . . . . . . . . . . . . . . . . . . . . . 22 | 2.1.8. relatedTo | |||
2.1.9. uid . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 2.1.9. uid | |||
2.1.10. updated . . . . . . . . . . . . . . . . . . . . . . . 24 | 2.1.10. updated | |||
2.2. Name and Organization Properties . . . . . . . . . . . . 25 | 2.2. Name and Organization Properties | |||
2.2.1. name . . . . . . . . . . . . . . . . . . . . . . . . 25 | 2.2.1. name | |||
2.2.2. organizations . . . . . . . . . . . . . . . . . . . . 30 | 2.2.2. organizations | |||
2.2.3. speakToAs . . . . . . . . . . . . . . . . . . . . . . 31 | 2.2.3. speakToAs | |||
2.2.4. titles . . . . . . . . . . . . . . . . . . . . . . . 32 | 2.2.4. titles | |||
2.3. Contact Properties . . . . . . . . . . . . . . . . . . . 33 | 2.3. Contact Properties | |||
2.3.1. emails . . . . . . . . . . . . . . . . . . . . . . . 33 | 2.3.1. emails | |||
2.3.2. onlineServices . . . . . . . . . . . . . . . . . . . 34 | 2.3.2. onlineServices | |||
2.3.3. phones . . . . . . . . . . . . . . . . . . . . . . . 35 | 2.3.3. phones | |||
2.3.4. preferredLanguages . . . . . . . . . . . . . . . . . 37 | 2.3.4. preferredLanguages | |||
2.4. Calendaring and Scheduling Properties . . . . . . . . . . 38 | 2.4. Calendaring and Scheduling Properties | |||
2.4.1. calendars . . . . . . . . . . . . . . . . . . . . . . 38 | 2.4.1. calendars | |||
2.4.2. schedulingAddresses . . . . . . . . . . . . . . . . . 38 | 2.4.2. schedulingAddresses | |||
2.5. Address and Location Properties . . . . . . . . . . . . . 39 | 2.5. Address and Location Properties | |||
2.5.1. addresses . . . . . . . . . . . . . . . . . . . . . . 39 | 2.5.1. addresses | |||
2.6. Resource Properties . . . . . . . . . . . . . . . . . . . 44 | 2.6. Resource Properties | |||
2.6.1. cryptoKeys . . . . . . . . . . . . . . . . . . . . . 45 | 2.6.1. cryptoKeys | |||
2.6.2. directories . . . . . . . . . . . . . . . . . . . . . 45 | 2.6.2. directories | |||
2.6.3. links . . . . . . . . . . . . . . . . . . . . . . . . 46 | 2.6.3. links | |||
2.6.4. media . . . . . . . . . . . . . . . . . . . . . . . . 47 | 2.6.4. media | |||
2.7. Multilingual Properties . . . . . . . . . . . . . . . . . 48 | 2.7. Multilingual Properties | |||
2.7.1. localizations . . . . . . . . . . . . . . . . . . . . 48 | 2.7.1. localizations | |||
2.8. Additional Properties . . . . . . . . . . . . . . . . . . 50 | 2.8. Additional Properties | |||
2.8.1. anniversaries . . . . . . . . . . . . . . . . . . . . 50 | 2.8.1. anniversaries | |||
2.8.2. keywords . . . . . . . . . . . . . . . . . . . . . . 52 | 2.8.2. keywords | |||
2.8.3. notes . . . . . . . . . . . . . . . . . . . . . . . . 52 | 2.8.3. notes | |||
2.8.4. personalInfo . . . . . . . . . . . . . . . . . . . . 53 | 2.8.4. personalInfo | |||
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54 | 3. IANA Considerations | |||
3.1. Media Type Registration . . . . . . . . . . . . . . . . . 54 | 3.1. Media Type Registration | |||
3.2. Creation of the "JSContact" Registry Group . . . . . . . 56 | 3.2. Creation of the JSContact Registry Group | |||
3.3. Registry Policy and Change Procedures . . . . . . . . . . 56 | 3.3. Registry Policy and Change Procedures | |||
3.3.1. Preliminary Community Review . . . . . . . . . . . . 57 | 3.3.1. Preliminary Community Review | |||
3.3.2. Submit Request to IANA . . . . . . . . . . . . . . . 57 | 3.3.2. Submit Request to IANA | |||
3.3.3. Designated Expert Review . . . . . . . . . . . . . . 57 | 3.3.3. Designated Expert Review | |||
3.3.4. Change Procedures . . . . . . . . . . . . . . . . . . 58 | 3.3.4. Change Procedures | |||
3.4. Creation of the "JSContact Version" Registry . . . . . . 58 | 3.4. Creation of the JSContact Version Registry | |||
3.4.1. "JSContact Version" Registry Template . . . . . . . . 58 | 3.4.1. JSContact Version Registry Template | |||
3.4.2. Initial Contents for the "JSContact Version" | 3.4.2. Initial Contents of the JSContact Version Registry | |||
Registry . . . . . . . . . . . . . . . . . . . . . . 59 | 3.5. Creation of the JSContact Properties Registry | |||
3.5.1. JSContact Properties Registry Template | ||||
3.5. Creation of the "JSContact Properties" Registry . . . . . 59 | 3.5.2. Initial Contents of the JSContact Properties Registry | |||
3.5.1. "JSContact Properties" Registry Template . . . . . . 59 | 3.6. Creation of the JSContact Types Registry | |||
3.5.2. Initial Contents for the "JSContact Properties" | 3.6.1. JSContact Types Registry Template | |||
Registry . . . . . . . . . . . . . . . . . . . . . . 60 | 3.6.2. Initial Contents of the JSContact Types Registry | |||
3.6. Creation of the "JSContact Types" Registry . . . . . . . 69 | 3.7. Creation of the JSContact Enum Values Registry | |||
3.6.1. "JSContact Types" Registry Template . . . . . . . . . 69 | 3.7.1. JSContact Enum Values Registry Property Template | |||
3.6.2. Initial Contents for the "JSContact Types" | 3.7.2. JSContact Enum Values Registry Value Template | |||
Registry . . . . . . . . . . . . . . . . . . . . . . 70 | 3.7.3. Initial Contents of the JSContact Enum Values Registry | |||
3.7. Creation of the "JSContact Enum Values" Registry . . . . 72 | 4. Security Considerations | |||
3.7.1. "JSContact Enum Values" Registry Property Template . 72 | 4.1. JSON Parsing | |||
3.7.2. "JSContact Enum Values" Registry Value Template . . . 73 | 4.2. URI Values | |||
3.7.3. Initial Contents for the "JSContact Enum Values" | 5. References | |||
Registry . . . . . . . . . . . . . . . . . . . . . . 73 | 5.1. Normative References | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 82 | 5.2. Informative References | |||
4.1. JSON Parsing . . . . . . . . . . . . . . . . . . . . . . 82 | Authors' Addresses | |||
4.2. URI Values . . . . . . . . . . . . . . . . . . . . . . . 83 | ||||
5. References . . . . . . . . . . . . . . . . . . . . . . . . . 83 | ||||
5.1. Normative References . . . . . . . . . . . . . . . . . . 83 | ||||
5.2. Informative References . . . . . . . . . . . . . . . . . 85 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 87 | ||||
1. Introduction | 1. Introduction | |||
This document defines a data model for contact card data normally | This document defines a data model for contact card data normally | |||
used in address book or directory applications and services. It aims | used in address book or directory applications and services. It aims | |||
to be an alternative to the vCard data format [RFC6350]. | to be an alternative to the vCard data format [RFC6350]. | |||
The key design considerations for this data model are as follows: | The key design considerations for this data model are as follows: | |||
* The data model and set of attributes should mostly be compatible | * The data model and set of attributes should be mostly compatible | |||
with the one defined for the vCard data format [RFC6350] and | with the model defined for the vCard data format [RFC6350] and | |||
extensions ([RFC6473], [RFC6474], [RFC6715], [RFC6869], | extensions [RFC6473] [RFC6474] [RFC6715] [RFC6869] [RFC8605]. The | |||
[RFC8605]). The specification should add new attributes or value | specification should add new attributes or value types where | |||
types where appropriate. Not all existing vCard definitions need | appropriate. Not all existing vCard definitions need an | |||
an equivalent in JSContact, especially if the vCard definition is | equivalent in JSContact, especially if the vCard definition is | |||
considered to be obsolete or otherwise inappropriate. Conversion | considered to be obsolete or otherwise inappropriate. Conversion | |||
between the data formats need not fully preserve semantic meaning. | between the data formats need not fully preserve semantic meaning. | |||
* The attributes of the card data represented must be described as | * The attributes of the card data represented must be described as | |||
simple key-value pairs, reducing complexity of their | simple key-value pairs, reducing complexity of their | |||
representation. | representation. | |||
* The data model should avoid all ambiguities and make it difficult | * The data model should avoid all ambiguities and make it difficult | |||
to make mistakes during implementation. | to make mistakes during implementation. | |||
* Extensions, such as new properties and components, MUST NOT lead | * Extensions, such as new properties and components, MUST NOT lead | |||
to requiring an update to this document. | to a required update of this document. | |||
The representation of this data model is defined in the I-JSON format | The representation of this data model is defined in the Internet JSON | |||
[RFC7493], which is a strict subset of the JavaScript Object Notation | (I-JSON) format [RFC7493], which is a strict subset of the JSON data | |||
(JSON) Data Interchange Format [RFC8259]. Using JSON is mostly a | interchange format [RFC8259]. Using JSON is mostly a pragmatic | |||
pragmatic choice: its widespread use makes JSContact easier to adopt, | choice: its widespread use makes JSContact easier to adopt, and the | |||
and the availability of production-ready JSON implementations | availability of production-ready JSON implementations eliminates a | |||
eliminates a whole category of parser-related interoperability | whole category of parser-related interoperability issues. | |||
issues. | ||||
1.1. Motivation and Relation to vCard, jCard and xCard | 1.1. Motivation and Relation to vCard, jCard, and xCard | |||
The vCard data format [RFC6350] is an interchange format for contacts | The vCard data format [RFC6350] is an interchange format for contacts | |||
data between address book service providers and vendors. However, | data between address book service providers and vendors. However, | |||
this format has gone through multiple specifications iterations with | this format has gone through multiple specification iterations with | |||
only a subset of its deprecated version 3 [RFC2426] being widely in | only a subset of its deprecated version 3 [RFC2426] being widely in | |||
use. Consequently, products and services internally use a richer | use. Consequently, products and services use an internal contact | |||
contact data model than they expose when serializing that information | data model that is richer than what they expose when serializing that | |||
to vCard. In addition, service providers often use a proprietary | information to vCard. In addition, service providers often use a | |||
JSON representation of contact data in their APIs. | proprietary JSON representation of contact data in their APIs. | |||
JSContact provides a standard JSON-based data model and | JSContact provides a standard JSON-based data model and | |||
representation of contact data as an alternative to proprietary | representation of contact data as an alternative to proprietary | |||
formats. | formats. | |||
While writing this document, several features missing in vCard were | At the time of writing this document, several missing features in | |||
brought to the attention of the authors, such as social media | vCard were brought to the attention of the authors such as social | |||
contacts, gender pronouns and others. This highlights how vCard is | media contacts, gender pronouns, and others. This highlights how | |||
not perceived as an evolving format and consequently hasn't been | vCard is not perceived as an evolving format and, consequently, | |||
updated since close to ten years. JSContact addresses these unmet | hasn't been updated for about ten years. JSContact addresses these | |||
demands and defines new vCard properties and parameters to allow | unmet demands and defines new vCard properties and parameters to | |||
interchanging them in both formats. | allow interchanging them in both formats. | |||
The xCard [RFC6351] and jCard [RFC7095] specifications define | The xCard [RFC6351] and jCard [RFC7095] specifications define | |||
alternative representations for vCard data, in XML and JSON format | alternative representations for vCard data in XML and JSON formats, | |||
respectively. Both explicitly aim to not change the underlying data | respectively. Both explicitly aim to not change the underlying data | |||
model. Accordingly, they are regarded as equal to vCard in the | model. Accordingly, they are regarded as equal to vCard in the | |||
context of this document. | context of this document. | |||
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. | |||
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]. | |||
1.3. Data Type Notations | 1.3. Data Type Notations | |||
This section introduces the notations and terminology used to define | This section introduces the notations and terminology used to define | |||
data types in JSContact. | data types in JSContact. | |||
The underlying format for JSContact is JSON and so also its data | The underlying format for JSContact is JSON, so its data types also | |||
types build on JSON values. The terms "object" and "array" as well | build on JSON values. The terms "object" and "array" as well as the | |||
as the four primitive types ("strings", "numbers", "booleans", and | four primitive types ("strings", "numbers", "booleans", and "null") | |||
"null") are to be interpreted as described in Section 1 of [RFC8259]. | are to be interpreted as described in Section 1 of [RFC8259]. All | |||
All JSContact data MUST be valid according to the constraints given | JSContact data MUST be valid according to the constraints given in | |||
in I-JSON [RFC7493]. Unless otherwise noted, all member names in | I-JSON [RFC7493]. Unless otherwise noted, all member names in JSON | |||
JSON objects and all string values are case-sensitive. Within | objects and all string values are case-sensitive. Within the context | |||
context of JSON objects, the term "key" is synonymous with "member | of JSON objects, the term "key" is synonymous with "member name" as | |||
name" as defined in Section 1 of [RFC8259]. | defined in Section 1 of [RFC8259]. | |||
1.3.1. Objects and Properties | 1.3.1. Objects and Properties | |||
JSContact defines data types for contact information such as | JSContact defines data types for contact information such as | |||
addresses or names. This information typically consists of multiple | addresses or names. This information typically consists of multiple | |||
related elements, for example a personal name and surname together | related elements; for example, a personal name and surname together | |||
form a name. These related elements are organized in JSContact | form a name. These related elements are organized in JSContact | |||
objects. A JSContact object is a JSON object which: | objects. A JSContact object is a JSON object that has the following: | |||
1. Has a unique type name registered in the IANA JSContact Types | 1. A unique type name registered in the IANA "JSContact Types" | |||
Registry (Section 3.6). | registry (Section 3.6). | |||
2. Has one or more object members for which the name and allowed | 2. One or more object members for which the name and allowed value | |||
value types are specified. Such members are called "properties". | types are specified. Such members are called "properties". | |||
3. Has one property named @type with a string value that matches the | 3. One property named @type with a string value that matches the | |||
type name of this JSContact object. In general, this property | type name of the JSContact object. In general, this property | |||
does not need to be set explicitly as outlined in Section 1.3.4. | does not need to be set explicitly as outlined in Section 1.3.4. | |||
The following sections specify how to define JSContact object types. | The following sections specify how to define JSContact object types. | |||
Section 1.7 and Section 1.8 then define the exact requirements for | Sections 1.7 and 1.8 then define the exact requirements for property | |||
property names. | names. | |||
The next paragraph illustrates how a JSContact object is defined: | The next paragraph illustrates how a JSContact object is defined. | |||
| A Foo object has the following properties: | A Foo object has the following properties: | |||
| | ||||
| * qux: Number (mandatory). Defines the qux-ishness of this | qux: Number (mandatory). Defines the qux-ishness of this contact. | |||
| contact. The value MUST be an integer greater than 0 and less | The value MUST be an integer greater than 0 and less than 10. | |||
| than 10. | ||||
Here, a JSContact object type named Foo is defined. In addition to | Here, a JSContact object type named Foo is defined. In addition to | |||
its @type property it has a property named qux for which values MUST | its @type property, it has a property named qux for which values MUST | |||
be valid according to the definition of the Number type. The | be valid according to the definition of the Number type. The | |||
property has one attribute, mandatory, which specifies that the | property has one attribute, mandatory, which specifies that the | |||
property MUST be present for an instance of this JSContact object to | property MUST be present for an instance of this JSContact object to | |||
be valid. Finally, a free-text description describes the semantics | be valid. Finally, a free-text description describes the semantics | |||
and further restrictions. | and further restrictions. | |||
1.3.2. Type Signatures | 1.3.2. Type Signatures | |||
Type signatures are given for all JSON values and JSContact | Type signatures are given for all JSON values and JSContact | |||
definitions in this document. The following conventions are used: | definitions in this document. The following conventions are used: | |||
* String - The JSON string type. | String: The JSON string type. | |||
* Number - The JSON number type. | Number: The JSON number type. | |||
* Boolean - The JSON boolean type. | Boolean: The JSON boolean type. | |||
* A[B] - A JSON object where the keys are all of the type A, and the | A[B]: A JSON object where all keys are of type A and all values are | |||
values are all of the type B. | of type B. | |||
* A[] - A JSON array of values of type A. | A[]: A JSON array of values of type A. | |||
* A|B - The value is either of type A or of type B. | A|B: The value is either of type A or of type B. | |||
* * - The type is undefined (the value could be any type, although | * *: The type is undefined (the value could be any type, although | |||
permitted values may be constrained by the context of this value). | permitted values may be constrained by the context of this value). | |||
Section 1.4 defines common data types, including signed or unsigned | Section 1.4 defines common data types, including signed or unsigned | |||
integers and dates. | integers and dates. | |||
1.3.3. Property Attributes | 1.3.3. Property Attributes | |||
Object properties may also have a set of attributes defined along | Object properties may also have a set of attributes defined along | |||
with the type signature. These have the following meanings: | with the type signature. These have the following meanings: | |||
* mandatory: The property MUST be set for an instance of this object | mandatory: The property MUST be set for an instance of this object | |||
to be valid. | to be valid. | |||
* optional: The property can but not need be set for an instance of | optional: The property can, but need not, be set for an instance of | |||
this object to be valid. | this object to be valid. | |||
* default: This is followed by a JSON value. That value will be | default: This is followed by a JSON value. That value will be used | |||
used for this property if it is omitted. | for this property if it is omitted. | |||
* defaultType: This is followed by the name of a JSContact object | defaultType: This is followed by the name of a JSContact object | |||
type. A property value of JSContact object type is expected to be | type. A property value of JSContact object type is expected to be | |||
of this named type, in case it omits the @type property. | of this named type, in case it omits the @type property. | |||
1.3.4. The @type Property | 1.3.4. The @type Property | |||
This property is defined as: | @type: String. Specifies the type of the object. It MUST match the | |||
type name of the JSContact object of which the JSON object is an | ||||
* @type: String. Specifies the type of this object. This MUST | instance of. | |||
match the type name of the JSContact object of which this JSON | ||||
object is an instance of. | ||||
The purpose of this property is to help implementations identify | The purpose of the @type property is to help implementations identify | |||
which JSContact object type a given JSON object represents. | which JSContact object type a given JSON object represents. | |||
Implementations MUST validate that JSON objects with this property | Implementations MUST validate that JSON objects with this property | |||
conform to the specification of the JSContact object type of that | conform to the specification of the JSContact object type of that | |||
name. | name. | |||
In many cases the @type property value is implied by where its object | In many cases, the @type property value is implied by where its | |||
occurs in JSContact data. Assuming that both A and B are JSContact | object occurs in JSContact data. Assuming that both A and B are | |||
object types: | JSContact object types: | |||
* An object that is set as the value for a property with type | * An object that is set as the value for a property with type | |||
signature A MAY have the @type property set. If the @type | signature A MAY have the @type property set. If the @type | |||
property is not set then its value is implied to be A by the | property is not set, then its value is implied to be A by the | |||
property definition. | property definition. | |||
* An object that is set as the value for a property with type | * An object that is set as the value for a property with type | |||
signature A|B (defaultType: A) MAY have the @type property set if | signature A|B (defaultType: A) MAY have the @type property set if | |||
it is an instance of A. It MUST have the @type property set if it | it is an instance of A. It MUST have the @type property set if it | |||
is an instance of B. If instead the defaultType attribute is not | is an instance of B. If, instead, the defaultType attribute is | |||
defined then the @type property MUST also be set for A. | not defined, then the @type property MUST also be set for A. | |||
* An object that is not the value of a property, such as the root of | * An object that is not the value of a property, such as the root of | |||
JSON data (directly or as member of an array), MUST have the @type | JSON data (directly or as a member of an array), MUST have the | |||
property set. | @type property set. | |||
1.4. Common Data Types | 1.4. Common Data Types | |||
In addition to the standard JSON data types, a couple of additional | In addition to the standard JSON data types, a couple of additional | |||
data types are common to the definitions of JSContact objects and | data types are common to the definitions of JSContact objects and | |||
properties. | properties. | |||
1.4.1. Id | 1.4.1. Id | |||
Where Id is given as a data type, it means a String of at least 1 and | Where Id is given as a data type, it means a String of at least 1 and | |||
a maximum of 255 octets in size, and it MUST only contain characters | a maximum of 255 octets in size, and it MUST only contain characters | |||
from the URL and Filename Safe base64url alphabet, as defined in | from the URL and Filename Safe base64url alphabet, as defined in | |||
Section 5 of [RFC4648], excluding the pad character (=). This means | Section 5 of [RFC4648], excluding the pad character (=). This means | |||
the allowed characters are the ASCII alphanumeric characters (A-Za- | the allowed characters are the ASCII alphanumeric characters (A-Za- | |||
z0-9), hyphen (-), and underscore (_). | z0-9), hyphen (-), and underscore (_). | |||
In many places in JSContact a JSON map is used where the map keys are | In many places in JSContact, a JSON map is used where the map keys | |||
of type Id and the map values are all the same type of object. This | are of type Id and the map values are all the same type of object. | |||
construction represents an unordered set of objects, with the added | This construction represents an unordered set of objects, with the | |||
advantage that each entry has a name (the corresponding map key). | added advantage that each entry has a name (the corresponding map | |||
This allows for more concise patching of objects, and, when | key). This allows for more concise patching of objects and, when | |||
applicable, for the objects in question to be referenced from other | applicable, for the objects in question to be referenced from other | |||
objects within the JSContact object. The map keys MUST be preserved | objects within the JSContact object. The map keys MUST be preserved | |||
across multiple versions of the JSContact object. | across multiple versions of the JSContact object. | |||
Unless otherwise specified for a particular property, there are no | Unless otherwise specified for a particular property, there are no | |||
uniqueness constraints on an Id value (other than, of course, the | uniqueness constraints on an Id value (other than, of course, the | |||
requirement that you cannot have two values with the same key within | requirement that you cannot have two values with the same key within | |||
a single JSON map). For example, two Card (Section 2) objects might | a single JSON map). For example, two Card (Section 2) objects might | |||
use the same Ids in their respective photos properties. Or within | use the same Ids in their respective photos properties. Or within | |||
the same Card the same Id could appear in the emails and phones | the same Card, the same Id could appear in the emails and phones | |||
properties. These situations do not imply any semantic connections | properties. These situations do not imply any semantic connections | |||
among the objects. | among the objects. | |||
1.4.2. Int and UnsignedInt | 1.4.2. Int and UnsignedInt | |||
Where Int is given as a data type, it means an integer in the range | Where Int is given as a data type, it means an integer in the range | |||
-2^53+1 <= value <= 2^53-1, the safe range for integers stored in a | -2^53+1 <= value <= 2^53-1, which is the safe range for integers | |||
floating-point double, represented as a JSON Number. | stored in a floating-point double, represented as a JSON Number. | |||
Where UnsignedInt is given as a data type, it means an integer in the | Where UnsignedInt is given as a data type, it means an integer in the | |||
range 0 <= value <= 2^53-1, represented as a JSON Number. | range 0 <= value <= 2^53-1 represented as a JSON Number. | |||
1.4.3. PatchObject | 1.4.3. PatchObject | |||
A PatchObject is of type String[*], and represents an unordered set | A PatchObject is of type String[*] and represents an unordered set of | |||
of patches on a JSON object. Each key is a path represented in a | patches on a JSON object. Each key is a path represented in a subset | |||
subset of JSON pointer format [RFC6901]. The paths have an implicit | of the JSON Pointer format [RFC6901]. The paths have an implicit | |||
leading /, so each key is prefixed with / before applying the JSON | leading /, so each key is prefixed with / before applying the JSON | |||
pointer evaluation algorithm. | Pointer evaluation algorithm. | |||
A patch within a PatchObject is only valid if all the following | A patch within a PatchObject is only valid if all the following | |||
conditions apply: | conditions apply: | |||
1. The pointer MAY reference inside an array but if the last | 1. The pointer MAY reference inside an array, but if the last | |||
reference token in the pointer is an array index, then the patch | reference token in the pointer is an array index, then the patch | |||
value MUST NOT be null. The pointer MUST NOT use "-" as an array | value MUST NOT be null. The pointer MUST NOT use "-" as an array | |||
index in any of its reference tokens (i.e., you MUST NOT insert/ | index in any of its reference tokens (i.e., you MUST NOT insert/ | |||
delete from an array, but you MAY replace the contents of its | delete from an array, but you MAY replace the contents of its | |||
existing members. To add or remove members, one needs to replace | existing members. To add or remove members, one needs to replace | |||
the complete array value). | the complete array value). | |||
2. All reference tokens prior to the last (i.e., the value after the | 2. All reference tokens prior to the last (i.e., the value after the | |||
final slash) MUST already exist as values in the object being | final slash) MUST already exist as values in the object being | |||
patched. If the last reference token is an array index, then a | patched. If the last reference token is an array index, then a | |||
member at this index MUST already exist in the referenced array. | member at this index MUST already exist in the referenced array. | |||
3. There MUST NOT be two patches in the PatchObject where the | 3. There MUST NOT be two patches in the PatchObject where the | |||
pointer of one is the prefix of the pointer of the other, e.g., | pointer of one is the prefix of the pointer of the other, e.g., | |||
addresses/1/city and addresses. | addresses/1/city and addresses. | |||
4. The value for the patch MUST be valid for the property being set | 4. The value for the patch MUST be valid for the property being set | |||
(of the correct type and obeying any other applicable | (of the correct type and obeying any other applicable | |||
restrictions), or if null the property MUST be optional. | restrictions), or if null, the property MUST be optional. | |||
The value associated with each pointer determines how to apply that | The value associated with each pointer determines how to apply that | |||
patch: | patch: | |||
* If null, remove the property from the patched object. If the key | * If null, remove the property from the patched object. If the key | |||
is not present in the parent, this is a no-op. | is not present in the parent, this is a no-op. | |||
* If non-null, set the value given as the value for this property | * If non-null, set the value given as the value for this property | |||
(this may be a replacement or addition to the object being | (this may be a replacement or addition to the object being | |||
patched). | patched). | |||
A PatchObject does not define its own @type (Section 1.3.4) property. | A PatchObject does not define its own @type (Section 1.3.4) property. | |||
Instead, a @type property in a patch MUST be handled as any other | Instead, an @type property in a patch MUST be handled as any other | |||
patched property value. | patched property value. | |||
Implementations MUST reject in its entirety a PatchObject if any of | Implementations MUST reject a PatchObject in its entirety if any of | |||
its patches are invalid. Implementations MUST NOT apply partial | its patches are invalid. Implementations MUST NOT apply partial | |||
patches. | patches. | |||
1.4.4. Resource | 1.4.4. Resource | |||
This data type defines a resource associated with the entity | The Resource data type defines a resource associated with the entity | |||
represented by this Card, identified by a URI [RFC3986]. Several | represented by the Card, identified by a URI [RFC3986]. Later in | |||
property definitions later in this document refer to the Resource | this document, several property definitions refer to the Resource | |||
data type as the basis for their property-specific value types. The | data type as the basis for their property-specific value types. The | |||
Resource data type defines the properties that are common to all of | Resource data type defines the properties that are common to all of | |||
them. Property definitions making use of Resource MAY define | them. Property definitions making use of Resource MAY define | |||
additional properties for their value types. | additional properties for their value types. | |||
The @type property value MUST NOT be Resource, instead it MUST be the | The @type property value MUST NOT be Resource; instead, it MUST be | |||
name of a concrete resource type (see Section 2.6). A Resource | the name of a concrete resource type (see Section 2.6). A Resource | |||
object has the following properties. | object has the following properties. | |||
* @type: String. Specifies the type of this resource object. The | @type: String. Specifies the type of this resource object. The | |||
allowed value is defined in later sections of this document for | allowed value is defined in later sections of this document for | |||
each concrete resource type (Section 2.6). | each concrete resource type (Section 2.6). | |||
* kind: String (optional). The kind of the resource. The allowed | kind: String (optional). The kind of the resource. The allowed | |||
values are defined in the property definition that makes use of | values are defined in the property definition that makes use of | |||
the Resource type. Some property definitions may change this | the Resource type. Some property definitions may change this | |||
property from being optional to mandatory. | property from being optional to mandatory. | |||
* uri: String (mandatory). The resource value. This MUST be a | uri: String (mandatory). The resource value. This MUST be a _URI_ | |||
_URI_ as defined in Section 3 of [RFC3986]. | as defined in Section 3 of [RFC3986]. | |||
* mediaType: String (optional). Used for URI resource values. | mediaType: String (optional). Used for URI resource values. | |||
Provides the media type [RFC2046] of the resource identified by | Provides the media type [RFC2046] of the resource identified by | |||
the URI. | the URI. | |||
* contexts: String[Boolean] (optional). The contexts in which to | contexts: String[Boolean] (optional). The contexts in which to use | |||
use this resource. Also see Section 1.5.1. | this resource. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). The preference of this resource in | pref: UnsignedInt (optional). The preference of the resource in | |||
relation to other resources. Also see Section 1.5.4. | relation to other resources. Also see Section 1.5.4. | |||
* label: String (optional). A custom label for the value, see | label: String (optional). A custom label for the value. Also see | |||
Section 1.5.3. | Section 1.5.3. | |||
1.4.5. UTCDateTime | 1.4.5. UTCDateTime | |||
This is a string in [RFC3339] date-time format, with the further | UTCDateTime is a string in date-time format [RFC3339], with further | |||
restrictions that any letters MUST be in uppercase, and the time | restrictions that any letters MUST be in uppercase and the time | |||
offset MUST be the character Z. Fractional second values MUST NOT be | offset MUST be the character Z. Fractional second values MUST NOT be | |||
included unless non-zero and MUST NOT have trailing zeros, to ensure | included unless they are non-zero, and they MUST NOT have trailing | |||
there is only a single representation for each date-time. | zeros to ensure there is only a single representation for each date- | |||
time. | ||||
For example, 2010-10-10T10:10:10.003Z is conformant, but | For example, 2010-10-10T10:10:10.003Z is conformant, but | |||
2010-10-10T10:10:10.000Z is invalid and is correctly encoded as | 2010-10-10T10:10:10.000Z is invalid; the correct encoding is | |||
2010-10-10T10:10:10Z. | 2010-10-10T10:10:10Z. | |||
1.5. Common Properties | 1.5. Common Properties | |||
Most of the properties in this document are specific to a single | Most of the properties in this document are specific to a single | |||
JSContact object type. Such properties are defined along with the | JSContact object type. Such properties are defined along with the | |||
respective object type. The properties in this section are common to | respective object type. The properties in this section are common to | |||
multiple data types and are defined here to avoid repetition. Note | multiple data types and are defined here to avoid repetition. Note | |||
that these properties MUST only be set for a JSContact object if they | that these properties MUST only be set for a JSContact object if they | |||
are explicitly mentioned to be allowed for this object type. | are explicitly mentioned as allowable for this object type. | |||
1.5.1. contexts | 1.5.1. contexts | |||
Type: String[Boolean] | Type: String[Boolean] | |||
This property associates contact information with one or more | This property associates contact information with one or more | |||
contexts in which it should be used. For example, someone might have | contexts in which it should be used. For example, someone might have | |||
distinct phone numbers for work and private contexts, and may set the | distinct phone numbers for work and private contexts and may set the | |||
desired context on the respective phone number in the phones | desired context on the respective phone number in the phones | |||
(Section 2.3.3) property. | (Section 2.3.3) property. | |||
This section defines common contexts. Additional contexts may be | This section defines common contexts. Additional contexts may be | |||
defined in the properties or data types that make use of this | defined in the properties or data types that make use of this | |||
property. The enumerated (Section 1.7.4) common context values are: | property. The enumerated (Section 1.7.4) common context values are: | |||
* private: the contact information may be used in a private context. | * private: the contact information that may be used in a private | |||
context. | ||||
* work: the contact information may be used in a professional | * work: the contact information that may be used in a professional | |||
context. | context. | |||
1.5.2. extra | 1.5.2. extra | |||
This is a reserved property name. Implementations MUST NOT set this | extra is a reserved property name. Implementations MUST NOT set this | |||
property in a JSContact object. Any JSContact object including a | property in a JSContact object. Any JSContact object including a | |||
property with this name MUST be considered invalid. | property with this name MUST be considered invalid. | |||
The purpose of this reserved property name is to provide implementors | The purpose of this reserved property name is to provide implementors | |||
with a name which is certain to never occur as a property name in a | with a name that is certain to never occur as a property name in a | |||
JSContact object. Implementations might want to map unknown or | JSContact object. Implementations might want to map unknown or | |||
vendor-specific properties to a variable with this name, but this is | vendor-specific properties to a variable with this name, but this is | |||
implementation-specific. | implementation-specific. | |||
1.5.3. label | 1.5.3. label | |||
Type: String | Type: String | |||
This property allows associating contact data with user-defined | This property allows associating contact data with user-defined | |||
labels. Such labels may be set for phone numbers, email addresses | labels. Such labels may be set for phone numbers, email addresses, | |||
and resources. Typically, these labels are displayed along with | and resources. Typically, these labels are displayed along with | |||
their associated contact data in graphical user interfaces. Such | their associated contact data in graphical user interfaces. Note | |||
labels best be succinct to properly display on small graphical | that succinct labels are best for proper display on small graphical | |||
interfaces and screens. | interfaces and screens. | |||
1.5.4. pref | 1.5.4. pref | |||
Type: UnsignedInt | Type: UnsignedInt | |||
This property allows defining a preference order for contact | This property allows defining a preference order for contact | |||
information. For example, a person may have two email addresses and | information. For example, a person may have two email addresses and | |||
prefer to be contacted with one of them. | prefer to be contacted with one of them. | |||
Its value MUST be in the range 1 and 100. Lower values correspond to | Its value MUST be in the range of 1 to 100. Lower values correspond | |||
a higher level of preference, with 1 being most preferred. If no | to a higher level of preference, with 1 being most preferred. If no | |||
preference is set, then the contact information MUST be interpreted | preference is set, then the contact information MUST be interpreted | |||
as being least preferred. | as being least preferred. | |||
Note that the preference only is defined in relation to contact | Note that the preference is only defined in relation to contact | |||
information of the same type. For example, the preference orders | information of the same type. For example, the preference orders | |||
within emails and phone numbers are independent of each other. | within emails and phone numbers are independent of each other. | |||
1.5.5. phonetic | 1.5.5. phonetic | |||
This property defines how to pronounce a value in the language | The phonetic property defines how to pronounce a value in the | |||
indicated in the Card language (Section 2.1.5) property or the | language indicated in the Card language (Section 2.1.5) property or | |||
language tag of its localizations (Section 2.7.1). Exemplary uses | the language tag of its localizations (Section 2.7.1). Exemplary | |||
are to define how to pronounce Japanese names, or for romanization of | uses of this property are defining how to pronounce Japanese names | |||
Mandarin or Cantonese name and address components. The properties | and romanizing Mandarin or Cantonese name and address components. | |||
are defined as follows: | The properties are defined as follows: | |||
* phonetic: String. Contains the phonetic representation of a | phonetic: String. Contains the phonetic representation of a value. | |||
value. Any script language subtag in the Card language | Any script language subtag in the Card language (Section 2.1.5) | |||
(Section 2.1.5) property MUST be ignored for use with the phonetic | property MUST be ignored for use with the phonetic property. If | |||
property. If this property is set, then at least one of the | this property is set, then at least one of the phoneticScript or | |||
phoneticScript or phoneticSystem properties that relate to this | phoneticSystem properties that relate to this value MUST be set. | |||
value MUST be set. | ||||
* phoneticScript: String. The script used in the value of the | phoneticScript: String. The script used in the value of the related | |||
related phonetic property. This MUST be a valid script subtag as | phonetic property. This MUST be a valid script subtag as defined | |||
defined in Section 2.2.3 of [RFC5646]. | in Section 2.2.3 of [RFC5646]. | |||
* phoneticSystem: String. The phonetic system used in the related | phoneticSystem: String. The phonetic system used in the related | |||
value of the phonetic property. The enumerated values | value of the phonetic property. The enumerated (Section 1.7.4) | |||
(Section 1.7.4) are: | values are: | |||
- ipa: denotes the International Phonetic Alphabet [IPA]. | * ipa: denotes the International Phonetic Alphabet [IPA]. | |||
- jyut: denotes the Cantonese romanization system "Jyutping". | * jyut: denotes the Cantonese romanization system "Jyutping". | |||
- piny: denotes the Standard Mandarin romanization system "Hanyu | * piny: denotes the Standard Mandarin romanization system "Hanyu | |||
Pinyin". | Pinyin". | |||
The relation between the phoneticSystem, phoneticScript and phonetic | The relation between the phoneticSystem, phoneticScript, and phonetic | |||
properties is type-specific. This specification defines this | properties is type-specific. This specification defines this | |||
relation in the Name (Section 2.2.1) and Address (Section 2.5.1) | relation in the Name (Section 2.2.1) and Address (Section 2.5.1) | |||
object types, respectively. | object types, respectively. | |||
The following example illustrates the phonetic property for a name | The following example illustrates the phonetic property for a name | |||
(Section 2.2.1): | (Section 2.2.1): | |||
"name": { | "name": { | |||
"components": [{ | "components": [{ | |||
"kind": "given", | "kind": "given", | |||
"value": "John", | "value": "John", | |||
"phonetic": "/ˈdʒɑːn/" | "phonetic": "/ˈdʒɑːn/" | |||
}, { | }, { | |||
"kind": "surname", | "kind": "surname", | |||
"value": "Smith", | "value": "Smith", | |||
"phonetic": "/smɪθ/" | "phonetic": "/smɪθ/" | |||
}], | }], | |||
"phoneticSystem": "ipa" | "phoneticSystem": "ipa" | |||
} | } | |||
Figure 1: Example of phonetic for the name "John Smith" as | Figure 1: Example of a phonetic Property for the Name "John Smith" as | |||
pronounced in the USA. | Pronounced in the USA | |||
1.6. Internationalization | 1.6. Internationalization | |||
JSContact aims to be used for international contacts and addressbook | JSContact aims to be used for international contacts and address book | |||
data. Notably text values such as names and addresses are likely to | data. Notably, text values such as names and addresses are likely to | |||
cover a wide range of languages and cultures. This section describes | cover a wide range of languages and cultures. This section describes | |||
internationalization for free-form text values, as well as for | internationalization for free-form text values as well as Uniform | |||
Uniform Resource Identifiers (URIs). | Resource Identifiers (URIs). | |||
1.6.1. Free-form text | 1.6.1. Free-Form Text | |||
Properties having free-form text values MAY contain any valid | Properties having free-form text values MAY contain any valid | |||
sequence of Unicode characters encoded as a JSON string. Such values | sequence of Unicode characters encoded as a JSON string. Such values | |||
can contain unidirectional left-to-right and right-to-left text, as | can contain unidirectional left-to-right and right-to-left text, as | |||
well as bidirectional text using Unicode Directional Formatting | well as bidirectional text using Unicode Directional Formatting | |||
Characters described in Section 2 of [UBiDi]. Implementations | Characters as described in Section 2 of [UBiDi]. Implementations | |||
setting bidirectional text MUST make sure that each property value | setting bidirectional text MUST make sure that each property value | |||
complies with the requirements of the Unicode Bidirectional | complies with the requirements of the Unicode Bidirectional | |||
Algorithm. Implementations MUST NOT assume that text values of | Algorithm. Implementations MUST NOT assume that text values of | |||
adjacent properties are processed or displayed as a combined string, | adjacent properties are processed or displayed as a combined string; | |||
for example the values of a given name component and a surname | for example, the values of a given name component and a surname | |||
component may or may not to be rendered together. | component may or may not be rendered together. | |||
1.6.2. URIs | 1.6.2. URIs | |||
Several properties require their string value to be a URI as defined | Several properties require their string value to be a URI as defined | |||
in [RFC3986]. Implementations MUST make sure to use proper percent- | in [RFC3986]. Implementations MUST make sure to use proper percent- | |||
encoding for URIs that can not be represented using unreserved URI | encoding for URIs that cannot be represented using unreserved URI | |||
characters. Section 3.1 of [RFC3987] defines how to convert | characters. Section 3.1 of [RFC3987] defines how to convert | |||
Internationalized Resource Identifiers to URIs. JSContact makes no | Internationalized Resource Identifiers to URIs. JSContact makes no | |||
recommendation how to display URIs, but section "4.8.3 | recommendation on how to display URIs, but the WHATWG URL Living | |||
Internationalization and special characters" of the W3C URL Standard | Standard (see "Internationalization and special characters" | |||
[W3C-URL] provides guidance for URLs found in context of a web | (Section 4.8.3) of [WHATWG-URL]) provides guidance for URLs found in | |||
browser. | the context of a web browser. | |||
1.7. Validating JSContact | 1.7. Validating JSContact | |||
This specification distinguishes between three kinds of properties | This specification distinguishes between three kinds of properties | |||
regarding validation: IANA-registered properties and unknown | regarding validation: IANA-registered properties and unknown | |||
properties are defined in this section, while vendor-specific | properties, which are defined in this section, and vendor-specific | |||
properties are defined in Section 1.8.1. A JSContact object is | properties, which are defined in Section 1.8.1. A JSContact object | |||
invalid if any of its properties are invalid. | is invalid if any of its properties are invalid. | |||
This document defines for each property if it is mandatory or | This document defines whether each property is mandatory or optional. | |||
optional. A mandatory property MUST be present for a JSContact | A mandatory property MUST be present for a JSContact object to be | |||
object to be valid. An optional property does not need to be | valid. An optional property does not need to be present. The values | |||
present. The values of both required and optional properties MUST | of both required and optional properties MUST adhere to the data type | |||
adhere to the data type and definition of that property. | and definition of that property. | |||
1.7.1. Case-Sensitivity | 1.7.1. Case-Sensitivity | |||
All property names, object type names and enumerated values are case- | All property names, object type names, and enumerated values are | |||
sensitive, if not explicitly stated otherwise in their according | case-sensitive, unless explicitly stated otherwise in their | |||
definition. Implementations MUST handle a JSContact object as | definitions. Implementations MUST handle a JSContact object as | |||
invalid if a type name, property name or enumerated value only | invalid if a type name, property name, or enumerated value only | |||
differs in case from one defined for any JSContact version known to | differs in case from one defined for any JSContact version known to | |||
that implementation. This applies regardless of what JSContact | that implementation. This applies regardless of what JSContact | |||
version the Card object defines in its version (Section 2.1.2) | version the Card object defines in its version (Section 2.1.2) | |||
property. Section 1.7.3 defines how to handle unknown properties. | property. Section 1.7.3 defines how to handle unknown properties. | |||
1.7.2. IANA-registered Properties | 1.7.2. IANA-Registered Properties | |||
An IANA-registered property is any property that has been registered | An IANA-registered property is any property that has been registered | |||
according to the IANA property registry rules as outlined in | according to the IANA property registry rules as outlined in | |||
Section 3. All properties defined in this specification, including | Section 3. All properties defined in this specification, including | |||
their object value types and enumerated values, are registered at | their object value types and enumerated values, are registered at | |||
IANA. | IANA. | |||
Implementations MUST validate IANA-registered properties in JSContact | Implementations MUST validate IANA-registered properties in JSContact | |||
data, unless they are unknown to the implementation (see | data, unless they are unknown to the implementation (Section 1.7.3). | |||
Section 1.7.3). They MUST reject invalid IANA-registered properties. | They MUST reject invalid IANA-registered properties. A property is | |||
A property is invalid if its name matches the name of an IANA- | invalid if its name matches the name of an IANA-registered property | |||
registered property but the value violates its definition according | but the value violates its definition according to the JSContact | |||
to the JSContact specification version defined in the Card version | specification version defined in the Card version (Section 2.1.2) | |||
property (Section 2.1.2). | property. | |||
IANA-registered property names MUST NOT contain US-ASCII control | IANA-registered property names MUST NOT contain US-ASCII control | |||
characters (U+0000 to U+001F, U+007F), the COLON (U+003A) or | characters (U+0000 to U+001F, U+007F), the COLON (U+003A), or the | |||
QUOTATION MARK (U+0022) characters. They MUST only contain US-ASCII | QUOTATION MARK (U+0022). They MUST only contain US-ASCII | |||
alphanumeric characters that match the ALPHA and DIGIT rules defined | alphanumeric characters that match the ALPHA and DIGIT rules defined | |||
in Appendix B.1 of [RFC5234]) or the COMMERCIAL AT (U+0040) | in Appendix B.1 of [RFC5234] or the COMMERCIAL AT (U+0040) character. | |||
character. IANA-registered property names MUST be notated in lower | IANA-registered property names MUST be notated in lower camel case. | |||
camel case. | ||||
1.7.3. Unknown Properties | 1.7.3. Unknown Properties | |||
Implementations may encounter JSContact data where a property name is | Implementations may encounter JSContact data where a property name is | |||
unknown to that implementation, but the name adheres to the syntactic | unknown to that implementation but the name adheres to the syntactic | |||
restrictions of IANA-registered property names. Implementations MUST | restrictions of IANA-registered property names. Implementations MUST | |||
make sure that such a name does not violate the case-sensitivity | make sure that such a name does not violate the case-sensitivity | |||
rules defined in Section 1.7.1. If the property name is valid, then | rules defined in Section 1.7.1. If the property name is valid, then | |||
implementations MUST NOT treat such properties as invalid. Instead, | implementations MUST NOT treat such properties as invalid. Instead, | |||
they MUST preserve them in the JSContact object. | they MUST preserve them in the JSContact object. | |||
Implementations that create or update JSContact data MUST only set | Implementations that create or update JSContact data MUST only set | |||
IANA-registered properties or vendor-specific properties. Preserving | IANA-registered properties or vendor-specific properties. Preserving | |||
properties that are unknown to the implementation, is to allow | properties that are unknown to the implementation is to allow | |||
applications and services to interoperate without data loss, even if | applications and services to interoperate without data loss, even if | |||
not all of them implement the same set of JSContact extensions. | not all of them implement the same set of JSContact extensions. | |||
1.7.4. Enumerated Values | 1.7.4. Enumerated Values | |||
Several properties in this document restrict their allowed values to | Several properties in this document restrict their allowed values to | |||
be from a list of String values. These values are case-sensitive. | a list of String values. These values are case-sensitive. If not | |||
If not noted otherwise for a specific property, the initial list of | noted otherwise for a specific property, the initial list of values | |||
values for such properties is registered at IANA in the JSContact | for such properties is registered at IANA in the "JSContact Enum | |||
Enum Values Registry (Section 3.7). Implementations MUST only set | Values" registry (Section 3.7). Implementations MUST only set IANA- | |||
IANA-registered or vendor-specific (Section 1.8.2) values for such | registered or vendor-specific (Section 1.8.2) values for such | |||
properties. | properties. | |||
1.8. Vendor-Specific Extensions | 1.8. Vendor-Specific Extensions | |||
Vendors may extend properties and values for experimentation or to | Vendors may extend properties and values for experimentation or to | |||
store contacts data that only is useful for a single service or | store contacts data that is only useful for a single service or | |||
application. Such extensions are not meant for interoperation. If | application. Such extensions are not meant for interoperation. If, | |||
instead interoperation is desired, vendors are strongly encouraged to | instead, interoperation is desired, vendors are strongly encouraged | |||
define and register new properties, types and values at IANA. | to define and register new properties, types, and values at IANA as | |||
Section 3 defines how to register new properties, types or values at | defined in Section 3. Section 1.7.2 defines the naming conventions | |||
IANA. Section 1.7.2 defines the naming conventions for IANA- | for IANA-registered elements. | |||
registered elements. | ||||
1.8.1. Vendor-specific Properties | 1.8.1. Vendor-Specific Properties | |||
Vendor-specific property names MUST start with a vendor-specific | Vendor-specific property names MUST start with a vendor-specific | |||
prefix followed by a name, as produced by the v-extension ABNF below. | prefix followed by a name, as produced by the v-extension ABNF below. | |||
The prefix and name together form the property name. The vendor- | The prefix and name together form the property name. The vendor- | |||
specific prefix MUST be a domain name under control of the service or | specific prefix MUST be a domain name under control of the service or | |||
application that sets the property, but it need not resolve in the | application that sets the property, but it need not resolve in the | |||
Domain Name System [RFC1034] and [RFC1035]. The prefix ietf.org and | Domain Name System [RFC1034] [RFC1035]. The prefix ietf.org and its | |||
its subdomain names are reserved for IETF specifications. The name | subdomain names are reserved for IETF specifications. The name MUST | |||
MUST NOT contain the TILDE (U+007E) and SOLIDUS (U+002F) characters, | NOT contain the TILDE (U+007E) and SOLIDUS (U+002F) characters, as | |||
as these require special-escaping when encoding a JSON Pointer | these require special escaping when encoding a JSON Pointer [RFC6901] | |||
[RFC6901] for that property. | for that property. | |||
Vendor-specific properties MAY be set in any JSContact object. | Vendor-specific properties MAY be set in any JSContact object. | |||
Implementations MUST preserve vendor-specific properties in JSContact | Implementations MUST preserve vendor-specific properties in JSContact | |||
data, irrespective if they know their use. They MUST NOT reject the | data, irrespective if they know their use. They MUST NOT reject the | |||
property value as invalid, unless they are in control of the vendor- | property value as invalid, unless they are in control of the vendor- | |||
specific property as outlined in the above paragraph. | specific property as outlined in the above paragraph. | |||
The ABNF rule v-extension formally defines valid vendor-specific | The ABNF rule v-extension formally defines valid vendor-specific | |||
property names. Note that the vendor prefix allows for more values | property names. Note that the vendor prefix allows for more values | |||
than are allowed as Internationalized Domain Names (IDN) [RFC8499]. | than Internationalized Domain Names (IDNs) [RFC8499]; therefore, | |||
This is to allow JSContact implementations simply validate property | JSContact implementations can simply validate property names without | |||
names without implementing the full set of rules that apply to domain | implementing the full set of rules that apply to domain names. | |||
names. | ||||
v-extension = v-prefix ":" v-name | v-extension = v-prefix ":" v-name | |||
v-prefix = v-label *("." v-label) | v-prefix = v-label *("." v-label) | |||
v-label = alnum-int / alnum-int *(alnum-int / "-") alnum-int | v-label = alnum-int / alnum-int *(alnum-int / "-") alnum-int | |||
alnum-int = ALPHA / DIGIT / NON-ASCII | alnum-int = ALPHA / DIGIT / NON-ASCII | |||
; see RFC 6350 Section 3.3 | ; see RFC 6350, Section 3.3 | |||
v-name = 1*(WSP / "!" / %x23-2e / %x30-7d / NON-ASCII) | v-name = 1*(WSP / "!" / %x23-2e / %x30-7d / NON-ASCII) | |||
; any characters except CTLs, DQUOTE, SOLIDUS and TILDE | ; any characters except CTLs, DQUOTE, SOLIDUS, and TILDE | |||
Figure 2: ABNF rules for vendor-specific property names | Figure 2: ABNF Rules for Vendor-Specific Property Names | |||
The value of vendor-specific properties can be any valid JSON value, | The value of vendor-specific properties can be any valid JSON value, | |||
and naming restrictions do not apply to such values. Specifically, | and naming restrictions do not apply to such values. Specifically, | |||
if the property value is a JSON object then the keys of such objects | if the property value is a JSON object, then the keys of such objects | |||
need not be named as vendor-specific properties. The example in | need not be named as vendor-specific properties, as illustrated in | |||
Figure 3 illustrates this: | Figure 3: | |||
"example.com:foo": "bar", | "example.com:foo": "bar", | |||
"example.com:foo2": { | "example.com:foo2": { | |||
"bar": "baz" | "bar": "baz" | |||
} | } | |||
Figure 3: Examples of vendor-specific properties | Figure 3: Examples of Vendor-Specific Properties | |||
1.8.2. Vendor-specific Values | 1.8.2. Vendor-Specific Values | |||
Some JSContact IANA-registered properties allow their values to be | Some JSContact IANA-registered properties allow their values to be | |||
vendor-specific. One such example is the kind property | vendor-specific. One such example is the kind (Section 2.1.4) | |||
Section 2.1.4, which enumerates its standard values but also allows | property, which enumerates its standard values but also allows for | |||
for arbitrary vendor-specific values. Such vendor-specific values | arbitrary vendor-specific values. Such vendor-specific values MUST | |||
MUST be valid v-extension values as defined in Section 1.8.1. The | be valid v-extension values as defined in Section 1.8.1. The example | |||
example in Figure 4 illustrates this: | in Figure 4 illustrates this: | |||
"kind": "example.com:baz" | "kind": "example.com:baz" | |||
Figure 4: Example of a vendor-specific value | Figure 4: Example of a Vendor-Specific Value | |||
Vendors are strongly encouraged to specify a new standard value once | Vendors are strongly encouraged to specify a new standard value once | |||
a vendor-specific one turns out to be useful also for other systems. | a vendor-specific one turns out to also be useful for other systems. | |||
1.9. Versioning | 1.9. Versioning | |||
Every instance of a JSContact Card (Section 2) indicates which | Every instance of a JSContact Card (Section 2) indicates which | |||
JSContact version its IANA-registered properties and values are based | JSContact version its IANA-registered properties and values are based | |||
on. The version is indicated both in the version (Section 2.1.2) | on. The version is indicated both in the version (Section 2.1.2) | |||
property within the Card and in the version (Section 3.1) parameter | property within the Card and in the version (Section 3.1) parameter | |||
of the JSContact MIME content type. All IANA-registered elements | of the JSContact MIME content type. All IANA-registered elements | |||
indicate the version at which they got introduced or obsoleted. | indicate the version at which they were introduced or obsoleted. | |||
1.9.1. Version Format and Requirements | 1.9.1. Version Format and Requirements | |||
A JSContact version consists of a numeric major and minor version, | A JSContact version consists of a numeric major and minor version, | |||
separated by the FULL STOP character (U+002E). Later versions are | separated by the FULL STOP character (U+002E). Later versions are | |||
numerically higher than former versions, with the major version being | numerically higher than former versions, with the major version being | |||
more significant than the minor version. A version value is produced | more significant than the minor version. A version value is produced | |||
by the ABNF | by the following ABNF: | |||
jsversion = 1*DIGIT "." 1*DIGIT | jsversion = 1*DIGIT "." 1*DIGIT | |||
Figure 5 | ||||
Differing major version values indicate substantial differences in | Differing major version values indicate substantial differences in | |||
JSContact semantics and format. Implementations MUST be prepared | JSContact semantics and format. Implementations MUST be prepared for | |||
that property definitions and other JSContact elements differ in a | property definitions and other JSContact elements that differ in a | |||
backwards-incompatible manner. | backwards-incompatible manner. | |||
Differing minor version values indicate additions that enrich | Differing minor version values indicate additions that enrich | |||
JSContact data, but do not introduce backwards-incompatible changes. | JSContact data but do not introduce backwards-incompatible changes. | |||
Typically, these are new property enum values or properties with | Typically, these are new property enum values or properties with a | |||
narrow semantic scope. A new minor version MUST NOT require | narrow semantic scope. A new minor version MUST NOT require | |||
implementations to change their processing of JSContact data. | implementations to change their processing of JSContact data. | |||
Changing the major version number resets the minor version number to | Changing the major version number resets the minor version number to | |||
zero. | zero. | |||
1.9.2. Current Version | 1.9.2. Current Version | |||
This specification registers JSContact version value 1.0 (Table 1). | This specification registers JSContact version value 1.0 (Table 1). | |||
2. Card | 2. Card | |||
This section defines the JSContact object type Card. A Card stores | This section defines the JSContact object type Card. A Card stores | |||
contact information, typically that of a person, organization or | contact information, typically that of a person, organization, or | |||
company. | company. | |||
Its media type is defined in Section 3.1. | Its media type is defined in Section 3.1. | |||
Figure 5 basic Card for the person "John Doe". As the object is the | Figure 6 shows a basic Card for the person "John Doe". As the object | |||
topmost object in the JSON data it has the @type property set | is the topmost object in the JSON data, it has the @type property set | |||
according to the rules defined Section 1.3.4. | according to the rules defined in Section 1.3.4. | |||
{ | { | |||
"@type": "Card", | "@type": "Card", | |||
"version": "1.0", | "version": "1.0", | |||
"uid": "22B2C7DF-9120-4969-8460-05956FE6B065", | "uid": "22B2C7DF-9120-4969-8460-05956FE6B065", | |||
"kind": "individual", | "kind": "individual", | |||
"name": { | "name": { | |||
"components": [ | "components": [ | |||
{ "kind": "given", "value": "John" }, | { "kind": "given", "value": "John" }, | |||
{ "kind": "surname", "value": "Doe" } | { "kind": "surname", "value": "Doe" } | |||
], | ], | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
} | } | |||
Figure 5: Example of a basic Card | Figure 6: Example of a Basic Card | |||
2.1. Metadata Properties | 2.1. Metadata Properties | |||
This section defines properties about this instance of a Card, such | This section defines properties about this instance of a Card such as | |||
as its unique identifier, its creation date, how it relates to other | its unique identifier, its creation date, and how it relates to other | |||
Cards and other metadata information. | Cards and other metadata information. | |||
2.1.1. @type | 2.1.1. @type | |||
Type: String (mandatory). | Type: String (mandatory) | |||
This MUST be Card, if set. | This MUST be Card, if set. | |||
2.1.2. version | 2.1.2. version | |||
Type: String (mandatory). | Type: String (mandatory) | |||
Specifies the JSContact version used to define this Card. The value | This specifies the JSContact version used to define the Card. The | |||
MUST be one of the IANA-registered JSContact Enum Values for the | value MUST be one of the IANA-registered JSContact Enum Values for | |||
version property. Also see Section 1.9.2. | the version property. Also see Section 1.9.2. | |||
"version": "1.0" | "version": "1.0" | |||
Figure 6: version example | Figure 7: version Example | |||
2.1.3. created | 2.1.3. created | |||
Type: UTCDateTime (optional). | Type: UTCDateTime (optional) | |||
The date and time when this Card was created. | The date and time when the Card was created. | |||
"created": "2022-09-30T14:35:10Z" | "created": "2022-09-30T14:35:10Z" | |||
Figure 7: created example | ||||
Figure 8: created Example | ||||
2.1.4. kind | 2.1.4. kind | |||
Type: String (optional, default: individual). The kind of the entity | Type: String (optional; default: individual) | |||
the Card represents. | ||||
The kind of the entity the Card represents. | ||||
The enumerated (Section 1.7.4) values are: | The enumerated (Section 1.7.4) values are: | |||
* individual: a single person | * individual: a single person | |||
* group: a group person of persons or entities | * group: a group of people or entities | |||
* org: an organization | * org: an organization | |||
* location: a named location | * location: a named location | |||
* device: a device, such as appliances, computers, or network | * device: a device such as an appliance, a computer, or a network | |||
elements | element | |||
* application: a software application | * application: a software application | |||
"kind": "individual" | "kind": "individual" | |||
Figure 8: kind example | Figure 9: kind Example | |||
2.1.5. language | 2.1.5. language | |||
Type: String (optional). | Type: String (optional) | |||
This is the language tag, as defined in [RFC5646], that best | This is the language tag, as defined in [RFC5646], that best | |||
describes the language used for text in the Card, optionally | describes the language used for text in the Card, optionally | |||
including additional information such as the script. Note that | including additional information such as the script. Note that | |||
values MAY be localized in the localizations property Section 2.7.1. | values MAY be localized in the localizations (Section 2.7.1) | |||
property. | ||||
"language": "de-AT" | "language": "de-AT" | |||
Figure 9: language example | Figure 10: language Example | |||
2.1.6. members | 2.1.6. members | |||
Type: String[Boolean] (optional). | Type: String[Boolean] (optional) | |||
This identifies the set of Cards that are members of this group Card. | This identifies the set of Cards that are members of this group Card. | |||
Each key in the set is the uid property value of the member, each | Each key in the set is the uid property value of the member, and each | |||
boolean value MUST be true. If this property is set, then the value | boolean value MUST be true. If this property is set, then the value | |||
of the kind property MUST be group. | of the kind property MUST be group. | |||
The opposite is not true. A group Card will usually contain the | The opposite is not true. A group Card will usually contain the | |||
members property to specify the members of the group, but it is not | members property to specify the members of the group, but it is not | |||
required to. A group Card without the members property can be | required to. A group Card without the members property can be | |||
considered an abstract grouping, or one whose members are known | considered an abstract grouping or one whose members are known | |||
empirically (e.g., "IETF Participants"). | empirically (e.g., "IETF Participants"). | |||
"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 10: members example | Figure 11: members Example | |||
2.1.7. prodId | 2.1.7. prodId | |||
Type: String (optional). | Type: String (optional) | |||
The identifier for the product that created the Card. If set, the | The identifier for the product that created the Card. If set, the | |||
value MUST be at least one character long. | value MUST be at least one character long. | |||
"prodId": "ACME Contacts App version 1.23.5" | "prodId": "ACME Contacts App version 1.23.5" | |||
Figure 11: prodId example | Figure 12: prodId Example | |||
2.1.8. relatedTo | 2.1.8. relatedTo | |||
Type: String[Relation] (optional). | Type: String[Relation] (optional) | |||
Relates the object to other Cards. This is represented as a map, | This relates the object to other Cards. It is represented as a map, | |||
where each key is the uid of the related Card and the value defines | where each key is the uid of the related Card, and the value defines | |||
the relation. The Relation object has the following properties: | the relation. The Relation object has the following properties: | |||
* @type: String. This MUST be Relation, if set. | @type: String. This MUST be Relation, if set. | |||
* relation: String[Boolean] (optional, default: empty Object) | relation: String[Boolean] (optional; default: empty Object). | |||
Describes how the linked object is related to the linking object. | Describes how the linked object is related to the linking object. | |||
The relation is defined as a set of relation types. The key in | The relation is defined as a set of relation types. The key in | |||
the set defines the relation type, the value for each key in the | the set defines the relation type; the value for each key in the | |||
set MUST be true. The relationship between the two objects is | set MUST be true. The relationship between the two objects is | |||
undefined if the set is empty. | undefined if the set is empty. | |||
The initial list of enumerated (Section 1.7.4) relation types | The initial list of enumerated (Section 1.7.4) relation types | |||
matches the IANA-registered TYPE parameter [IANAvCard] values of | matches the IANA-registered TYPE [IANA-vCard] parameter values of | |||
the vCard RELATED property (Section 6.6.6 of [RFC6350]): | the vCard RELATED property (Section 6.6.6 of [RFC6350]): | |||
- acquaintance | * acquaintance | |||
- agent | * agent | |||
- child | * child | |||
- colleague | * co-resident | |||
- contact | * co-worker | |||
- co-resident | * colleague | |||
- co-worker | * contact | |||
- crush | * crush | |||
- date | * date | |||
- emergency | * emergency | |||
- friend | * friend | |||
- kin | * kin | |||
- me | * me | |||
- met | * met | |||
- muse | * muse | |||
- neighbor | * neighbor | |||
- parent | * parent | |||
- sibling | * sibling | |||
- spouse | * spouse | |||
- sweetheart | * sweetheart | |||
"relatedTo": { | "relatedTo": { | |||
"urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6": { | "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6": { | |||
"relation": { | "relation": { | |||
"friend": true | "friend": true | |||
} | } | |||
}, | }, | |||
"8cacdfb7d1ffdb59@example.com": { | "8cacdfb7d1ffdb59@example.com": { | |||
"relation": {} | "relation": {} | |||
} | } | |||
} | } | |||
Figure 12: relatedTo example | Figure 13: relatedTo Example | |||
2.1.9. uid | 2.1.9. uid | |||
Type: String (mandatory). | Type: String (mandatory) | |||
An identifier, used to associate the object as the same across | An identifier that is used to associate the object as the same across | |||
different systems, address books and views. The value SHOULD be a | different systems, address books, and views. The value SHOULD be a | |||
URN [RFC8141] but for compatibility with [RFC6350] it MAY also be a | URN [RFC8141], but for compatibility with [RFC6350], it MAY also be a | |||
URI [RFC3986] or free-text value. The value of the URN SHOULD be in | URI [RFC3986] or free-text value. The value of the URN SHOULD be in | |||
the uuid namespace [RFC4122]. As of this writing, a revision | the uuid namespace [RFC4122]. As of this writing, a revision [UUID] | |||
[I-D.ietf-uuidrev-rfc4122bis] of the UUID standard document is being | of the Universally Unique Identifier (UUID) Standards Track document | |||
worked on and is likely to introduce new UUID versions and best | [RFC4122] is in progress and will likely introduce new UUID versions | |||
practices to generate global unique identifiers. Implementors SHOULD | and best practices to generate global unique identifiers. | |||
follow any recommendations described there. Until then, | Implementors SHOULD follow any recommendations described there. | |||
implementations SHOULD generate identifiers using the random or | Until then, implementations SHOULD generate identifiers using the | |||
pseudo-random UUID version described in Section 4.4 of [RFC4122]. | random or pseudorandom UUID version described in Section 4.4 of | |||
[RFC4122]. | ||||
"uid": "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" | "uid": "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" | |||
Figure 13: uid example | Figure 14: uid Example | |||
2.1.10. updated | 2.1.10. updated | |||
Type: UTCDateTime (optional). | Type: UTCDateTime (optional) | |||
The date and time when the data in this Card was last modified. | The date and time when the data in the Card was last modified. | |||
"updated": "2021-10-31T22:27:10Z" | "updated": "2021-10-31T22:27:10Z" | |||
Figure 14: updated example | Figure 15: updated Example | |||
2.2. Name and Organization Properties | 2.2. Name and Organization Properties | |||
This section defines properties that name the entity represented by | This section defines properties that name the entity represented by | |||
this Card, its related organizations and roles, as well as how to | the Card and its related organizations and roles. It also describes | |||
refer the entity represented by this Card in spoken or written | how to refer to the entity represented by the Card in spoken or | |||
language. | written language. | |||
2.2.1. name | 2.2.1. name | |||
Type: Name (optional). | Type: Name (optional) | |||
The name of the entity represented by this Card. This can be any | The name of the entity represented by the Card. This can be any type | |||
type of name, e.g., it can but need not be the legal name of a | of name, e.g., it can, but need not, be the legal name of a person. | |||
person. | ||||
2.2.1.1. Name object | 2.2.1.1. Name Object | |||
A Name object has the following properties | A Name object has the following properties: | |||
* @type: String. This MUST be Name, if set. | @type: String. This MUST be Name, if set. | |||
* components: NameComponent[] (optional). The components | components: NameComponent[] (optional). The components | |||
(Section 2.2.1.2) making up this name. This property MUST be set | (Section 2.2.1.2) making up this name. This property MUST be set | |||
if the full property is not set, otherwise it SHOULD be set. The | if the full property is not set; otherwise, it SHOULD be set. The | |||
component list MUST have at least one entry having a different | component list MUST have at least one entry having a different | |||
kind than separator. | kind than separator. | |||
Name components SHOULD be ordered such that their values joined as | Name components SHOULD be ordered such that when their values are | |||
a String produce a valid full name of this entity. If so, | joined as a String, a valid full name of the entity is produced. | |||
implementations MUST set the isOrdered property value to true. | If so, implementations MUST set the isOrdered property value to | |||
true. | ||||
If the name components are ordered, then the defaultSeparator | If the name components are ordered, then the defaultSeparator | |||
property and name components of kind separator give guidance on | property and name components of kind separator give guidance on | |||
what characters to insert between components, but implementations | what characters to insert between components, but implementations | |||
are free to choose any others. In lack of a separator, inserting | are free to choose any others. When lacking a separator, | |||
a single Space character in between name component values is a | inserting a single space character in between the name component | |||
good choice. | values is a good choice. | |||
If instead the name components follow no particular order, then | If, instead, the name components follow no particular order, then | |||
the isOrdered property value MUST be false, the components | the isOrdered property value MUST be false, the components | |||
property MUST NOT contain a NameComponent of kind separator and | property MUST NOT contain a NameComponent of kind separator, and | |||
the defaultSeparator property MUST NOT be set. | the defaultSeparator property MUST NOT be set. | |||
Figure 15 is an example for the name "Vincent van Gogh". Note how | Figure 16 shows an example for the name "Vincent van Gogh". Note | |||
a single name component value may consist of multiple words. | how a single name component value may consist of multiple words. | |||
Figure 16 illustrates a name with a second surname, such as a | ||||
Spanish name. Additional examples are shown in Figure 18 and | ||||
Figure 38. | ||||
"name": { | "name": { | |||
"components": [ | "components": [ | |||
{ "kind": "given", "value": "Vincent" }, | { "kind": "given", "value": "Vincent" }, | |||
{ "kind": "surname", "value": "van Gogh" } | { "kind": "surname", "value": "van Gogh" } | |||
], | ], | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
Figure 15: Example for a surname with two words | Figure 16: Example of a Surname with Two Words | |||
Figure 17 illustrates a name with a second surname such as a | ||||
Spanish name. Additional examples are shown in Figures 19 and 39. | ||||
"name": { | "name": { | |||
"components": [ | "components": [ | |||
{ "kind": "given", "value": "Diego" }, | { "kind": "given", "value": "Diego" }, | |||
{ "kind": "surname", "value": "Rivera" }, | { "kind": "surname", "value": "Rivera" }, | |||
{ "kind": "surname2", "value": "Barrientos" } | { "kind": "surname2", "value": "Barrientos" } | |||
], | ], | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
Figure 16: Example for a second surname | Figure 17: Example of a Second Surname | |||
* isOrdered: Boolean (optional, default: false). This indicates if | isOrdered: Boolean (optional; default: false). Indicates if the | |||
the name component sequence in the components property is ordered. | name component sequence in the components property is ordered. | |||
* defaultSeparator: String (optional). The default separator to | defaultSeparator: String (optional). The default separator to | |||
insert between name component values when concatenating all name | insert between name component values when concatenating all name | |||
component values to a single String. Also see the definition of | component values to a single String. Also see the definition of | |||
the separator kind for the NameComponent object. This property | the separator kind for the NameComponent (Section 2.2.1.2) object. | |||
MUST NOT be set if the Name isOrdered property value is false or | This property MUST NOT be set if the Name isOrdered property value | |||
if the components property is not set. | is false or if the components property is not set. | |||
* full: String (optional). This is the full name representation of | full: String (optional). The full name representation of the Name. | |||
this Name. This property MUST be set if the components property | This property MUST be set if the components property is not set. | |||
is not set. | ||||
"full": "Mr. John Q. Public, Esq." | "full": "Mr. John Q. Public, Esq." | |||
Figure 17: full example | Figure 18: full Example | |||
* sortAs: String[String] (optional). | ||||
This defines how this name lexicographically sorts in relation to | sortAs: String[String] (optional). Defines how the name | |||
other names when compared by a name component type. The key in | lexicographically sorts in relation to other names when compared | |||
the map defines the name component type. The value for that key | by a name component type. The key in the map defines the name | |||
defines the verbatim string to compare when sorting by this name | component type. The value for that key defines the verbatim | |||
component type. Absence of a key indicates that this name | string to compare when sorting by the name component type. | |||
component type SHOULD NOT be considered during sort. Sorting by | Absence of a key indicates that the name component type SHOULD NOT | |||
that missing name component type or if the sortAs property is not | be considered during sort. Sorting by that missing name component | |||
set is implementation-specific. This property MUST NOT be set if | type, or if the sortAs property is not set, is implementation- | |||
the components property is not set. | specific. This property MUST NOT be set if the components | |||
property is not set. | ||||
Each key in the map MUST be a valid name component type value as | Each key in the map MUST be a valid name component type value as | |||
defined for the kind property of the NameComponent object (see | defined for the kind property of the NameComponent object (see | |||
below). For each key in the map there MUST exist at least one | below). For each key in the map, there MUST exist at least one | |||
NameComponent object having that type in the components property | NameComponent object that has the type in the components property | |||
of this name. | of the name. | |||
Figure 18 illustrates the use of sortAs. The property value | Figure 19 illustrates the use of sortAs. The property value | |||
indicates that the middle name followed by both surnames should be | indicates that the middle name followed by both surnames should be | |||
used when sorting this name by surname. The absence of the middle | used when sorting the name by surname. The absence of middle | |||
indicates that the middle name on its own should be disregarded | indicates that the middle name on its own should be disregarded | |||
during sort. Even though the name only contains one name | during sort. Even though the name only contains one name | |||
component for the given name, the sortAs property still explicitly | component for the given name, the sortAs property still explicitly | |||
defines how to sort by given name as otherwise sorting by it would | defines how to sort by the given name; otherwise, sorting by it | |||
be undefined. | would be undefined. | |||
* phoneticScript: String (optional). The script used in the value | phoneticScript: String (optional). The script used in the value of | |||
of the NameComponent phonetic property. Also see Section 1.5.5. | the NameComponent phonetic property. See Section 1.5.5 for more | |||
See Figure 19 for an example. | information and Figure 20 for an example. | |||
* phoneticSystem: String (optional). The phonetic system used in | phoneticSystem: String (optional). The phonetic system used in the | |||
the NameComponent phonetic property. Also see Section 1.5.5. See | NameComponent phonetic property. See Section 1.5.5 for more | |||
Figure 19 for an example. | information and Figure 20 for an example. | |||
"name": { | "name": { | |||
"components": [ | "components": [ | |||
{ "kind": "given", "value": "Robert" }, | { "kind": "given", "value": "Robert" }, | |||
{ "kind": "given2", "value": "Pau" }, | { "kind": "given2", "value": "Pau" }, | |||
{ "kind": "surname", "value": "Shou Chang" } | { "kind": "surname", "value": "Shou Chang" } | |||
], | ], | |||
"sortAs": { | "sortAs": { | |||
"surname": "Pau Shou Chang", | "surname": "Pau Shou Chang", | |||
"given": "Robert" | "given": "Robert" | |||
}, | }, | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
Figure 18: Example for sortAs | Figure 19: sortAs Example | |||
{ | { | |||
"@type": "Card", | "@type": "Card", | |||
"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": "逸仙" } | |||
skipping to change at page 28, line 28 ¶ | skipping to change at line 1248 ¶ | |||
"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 19: Example for phonetic and localizations | Figure 20: phonetic and localizations Example | |||
2.2.1.2. NameComponent | 2.2.1.2. NameComponent | |||
A NameComponent object has the following properties: | A NameComponent object has the following properties: | |||
* @type: String. This MUST be NameComponent, if set. | @type: String. This MUST be NameComponent, if set. | |||
* value: String (mandatory). The value of this name component. | value: String (mandatory). The value of the name component. This | |||
This can be composed of one or multiple words, such as "Poe" or | can be composed of one or multiple words such as "Poe" or "van | |||
"van Gogh". | Gogh". | |||
* kind: String (mandatory). The kind of this name component. The | kind: String (mandatory). The kind of the name component. The | |||
enumerated (Section 1.7.4) values are: | enumerated (Section 1.7.4) values are: | |||
- title: an honorific title or prefix, e.g., "Mr", "Ms", "Dr". | * title: an honorific title or prefix, e.g., "Mr.", "Ms.", or | |||
"Dr.". | ||||
- given: a given name, also known as "first name", "personal | * given: a given name, also known as "first name" or "personal | |||
name". | name". | |||
- given2: a name that appears between the given and surname, such | * given2: a name that appears between the given and surname such | |||
as a middle name or patronymic name. | as a middle name or patronymic name. | |||
- surname: a surname, also known as "last name", "family name". | * surname: a surname, also known as "last name" or "family name". | |||
- surname2: a secondary surname (used in some cultures), also | * surname2: a secondary surname (used in some cultures), also | |||
known as "maternal surname". | known as "maternal surname". | |||
- credential: a credential, also known as "accreditation | * credential: a credential, also known as "accreditation | |||
qualifier" or "honorific suffix", e.g., "B.A.", "Esq.". | qualifier" or "honorific suffix", e.g., "B.A.", "Esq.". | |||
- generation: a generation marker or qualifier, e.g., “Jr.” or | * generation: a generation marker or qualifier, e.g., "Jr." or | |||
“III”. | "III". | |||
- separator: a formatting separator between two ordered name non- | * separator: a formatting separator between two ordered name non- | |||
separator components. The value property of the component | separator components. The value property of the component | |||
includes the verbatim separator, for example a hyphen character | includes the verbatim separator, for example, a hyphen | |||
or even an empty string. This value has higher precedence than | character or even an empty string. This value has higher | |||
the defaultSeparator property of the Name. Implementations | precedence than the defaultSeparator property of the Name. | |||
MUST NOT insert two consecutive separator components, instead | Implementations MUST NOT insert two consecutive separator | |||
they SHOULD insert a single separator component with the | components; instead, they SHOULD insert a single separator | |||
combined value. This component kind MUST NOT be set if the | component with the combined value. This component kind MUST | |||
Name isOrdered property value is false. | NOT be set if the Name isOrdered property value is false. | |||
* phonetic: String (optional). This defines how to pronounce this | phonetic: String (optional). Defines how to pronounce the name | |||
name component. If this property is set, then at least one of the | component. If this property is set, then at least one of the Name | |||
Name object phoneticSystem or phoneticScript properties MUST be | object properties, phoneticSystem or phoneticScript, MUST be set. | |||
set. Also see Section 1.5.5. | Also see Section 1.5.5. | |||
2.2.1.3. nicknames | 2.2.1.3. nicknames | |||
Type: Id[Nickname] (optional). | Type: Id[Nickname] (optional) | |||
The nicknames of the entity represented by this Card. A Nickname | The nicknames of the entity represented by the Card. A Nickname | |||
object has the following properties: | object has the following properties: | |||
* @type: String. This MUST be Nickname, if set. | @type: String. This MUST be Nickname, if set. | |||
* name: String (mandatory). The nickname. | name: String (mandatory). The nickname. | |||
* contexts: String[Boolean] (optional) The contexts in which to use | contexts: String[Boolean] (optional). The contexts in which to use | |||
this nickname. Also see Section 1.5.1. | the nickname. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). The preference of this nickname in | pref: UnsignedInt (optional). The preference of the nickname in | |||
relation to other nicknames. Also see Section 1.5.4. | relation to other nicknames. Also see Section 1.5.4. | |||
"nicknames": { | "nicknames": { | |||
"k391": { | "k391": { | |||
"name": "Johnny" | "name": "Johnny" | |||
} | } | |||
} | } | |||
Figure 20: nicknames example | Figure 21: nicknames Example | |||
2.2.2. organizations | 2.2.2. organizations | |||
Type: Id[Organization] (optional). | Type: Id[Organization] (optional) | |||
The companies or organizations names and units associated with this | The company or organization names and units associated with the Card. | |||
Card. An Organization object has the following properties, of which | An Organization object has the following properties, of which at | |||
at least one of the name and units properties MUST be set: | least one of the name and units properties MUST be set: | |||
* @type: String. This MUST be Organization, if set. | @type: String. This MUST be Organization, if set. | |||
* name: String (optional). The name of this organization. | name: String (optional). The name of the organization. | |||
* units: OrgUnit[] (optional). A list of organizational units, | units: OrgUnit[] (optional). A list of organizational units, | |||
ordered descending by hierarchy (e.g., a geographic or functional | ordered as descending by hierarchy (e.g., a geographic or | |||
division sorts before a department within that division). If set, | functional division sorts before a department within that | |||
the list MUST contain at least one entry. | division). If set, the list MUST contain at least one entry. | |||
* sortAs: String (optional). This defines how this organization | sortAs: String (optional). Defines how the organization name | |||
name lexicographically sorts in relation to other organizations | lexicographically sorts in relation to other organizations when | |||
when compared by name. The value defines the verbatim string | compared by the name. The value defines the verbatim string value | |||
value to compare. In absence of this property, the name property | to compare. In absence of this property, the name property value | |||
value MAY be used for comparison. | MAY be used for comparison. | |||
* contexts: String[Boolean] (optional). The contexts in which | contexts: String[Boolean] (optional). The contexts in which | |||
association with this organization apply. For example, membership | association with the organization apply. For example, membership | |||
in a choir may only apply in a private context. Also see | in a choir may only apply in a private context. Also see | |||
Section 1.5.1. | Section 1.5.1. | |||
A OrgUnit object has the following properties: | An OrgUnit object has the following properties: | |||
* @type: String. This MUST be OrgUnit, if set. | @type: String. This MUST be OrgUnit, if set. | |||
* name: String (mandatory). The name of this organizational unit. | name: String (mandatory). The name of the organizational unit. | |||
* sortAs: String (optional). This defines how this organization | sortAs: String (optional). Defines how the organization unit name | |||
unit name lexicographically sorts in relation to other | lexicographically sorts in relation to other organizational units | |||
organizational units of the same level when compared by name. The | of the same level when compared by the name. The level is defined | |||
level is defined by the array index of this organizational unit in | by the array index of the organizational unit in the units | |||
the units property of the Organization object. The property value | property of the Organization object. The property value defines | |||
defines the verbatim string value to compare. In absence of this | the verbatim string value to compare. In absence of this | |||
property, the name property value MAY be used for comparison. | property, the name property value MAY be used for comparison. | |||
"organizations": { | "organizations": { | |||
"o1": { | "o1": { | |||
"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 21: organizations example | Figure 22: organizations Example | |||
2.2.3. speakToAs | 2.2.3. speakToAs | |||
Type: SpeakToAs (optional). | Type: SpeakToAs (optional) | |||
Provides information how to address, speak to or refer to the entity | Provides information on how to address, speak to, or refer to the | |||
that is represented by this Card. A SpeakToAs object has the | entity that is represented by the Card. A SpeakToAs object has the | |||
following properties, of which at least one of the grammaticalGender | following properties, of which at least one of the grammaticalGender | |||
and pronouns properties MUST be set: | and pronouns properties MUST be set: | |||
* @type: String. This MUST be SpeakToAs, if set. | @type: String. This MUST be SpeakToAs, if set. | |||
* grammaticalGender: String (optional). Defines which grammatical | grammaticalGender: String (optional). Defines which grammatical | |||
gender to use in salutations and other grammatical constructs. | gender to use in salutations and other grammatical constructs. | |||
For example, the German language distinguishes by grammatical | For example, the German language distinguishes by grammatical | |||
gender in salutations such as "Sehr geehrte" (feminine) and "Sehr | gender in salutations such as "Sehr geehrte" (feminine) and "Sehr | |||
geehrter" (masculine). The enumerated (Section 1.7.4) values are: | geehrter" (masculine). The enumerated (Section 1.7.4) values are: | |||
- animate | * animate | |||
* common | ||||
- common | * feminine | |||
* inanimate | ||||
- feminine | * masculine | |||
* neuter | ||||
- inanimate | ||||
- masculine | ||||
- neuter | ||||
Note that the grammatical gender does not allow inferring the | Note that the grammatical gender does not allow inferring the | |||
gender identities or assigned sex of the contact. | gender identities or assigned sex of the contact. | |||
* pronouns: Id[Pronouns] (optional). Defines the pronouns that the | pronouns: Id[Pronouns] (optional). Defines the pronouns that the | |||
contact chooses to use for themselves. | contact chooses to use for themselves. | |||
A Pronouns object has the following properties: | A Pronouns object has the following properties: | |||
* @type: String. This MUST be Pronouns, if set. | @type: String. This MUST be Pronouns, if set. | |||
* pronouns: String (mandatory). Defines the pronouns. Any value or | pronouns: String (mandatory). Defines the pronouns. Any value or | |||
form is allowed. Examples in English include she/her and | form is allowed. Examples in English include she/her and | |||
they/them/theirs. The value MAY be overridden in the | they/them/theirs. The value MAY be overridden in the | |||
localizations property (Section 2.7.1). | localizations (Section 2.7.1) property. | |||
* contexts: String[Boolean] (optional). The contexts in which to | contexts: String[Boolean] (optional). The contexts in which to use | |||
use these pronouns. Also see Section 1.5.1. | the pronouns. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). The preference of these pronouns in | pref: UnsignedInt (optional). The preference of the pronouns in | |||
relation to other pronouns in the same context. Also see | relation to other pronouns in the same context. Also see | |||
Section 1.5.4. | Section 1.5.4. | |||
"speakToAs": { | "speakToAs": { | |||
"grammaticalGender": "neuter", | "grammaticalGender": "neuter", | |||
"pronouns": { | "pronouns": { | |||
"k19": { | "k19": { | |||
"pronouns": "they/them", | "pronouns": "they/them", | |||
"pref": 2 | "pref": 2 | |||
}, | }, | |||
"k32": { | "k32": { | |||
"pronouns": "xe/xir", | "pronouns": "xe/xir", | |||
"pref": 1 | "pref": 1 | |||
} | } | |||
} | } | |||
} | } | |||
Figure 22: speakToAs example | Figure 23: speakToAs Example | |||
2.2.4. titles | 2.2.4. titles | |||
Type : Id[Title] (optional). | Type: Id[Title] (optional) | |||
The job titles or functional positions of the entity represented by | The job titles or functional positions of the entity represented by | |||
this Card. A Title object has the following properties: | the Card. A Title object has the following properties: | |||
* @type: String. This MUST be Title, if set. | @type: String. This MUST be Title, if set. | |||
* name: String (mandatory). The title or role name of the entity | name: String (mandatory). The title or role name of the entity | |||
represented by this Card. | represented by the Card. | |||
* kind: String (optional, default title). Describes the | kind: String (optional; default: title). Describes the | |||
organizational or situational kind of this title. Some | organizational or situational kind of the title. Some | |||
organizations and individuals distinguish between _titles_ as | organizations and individuals distinguish between _titles_ as | |||
organizational positions and _roles_ as more temporary | organizational positions and _roles_ as more temporary assignments | |||
assignments, such as in project management. | such as in project management. | |||
The enumerated (Section 1.7.4) values are: | The enumerated (Section 1.7.4) values are: | |||
- title | * title | |||
* role | ||||
- role | ||||
* organizationId: Id (optional). The identifier of the organization | organizationId: Id (optional). The identifier of the organization | |||
in which this title is held. | in which this title is held. | |||
"titles": { | "titles": { | |||
"le9": { | "le9": { | |||
"kind": "title", | "kind": "title", | |||
"name": "Research Scientist" | "name": "Research Scientist" | |||
}, | }, | |||
"k2": { | "k2": { | |||
"kind": "role", | "kind": "role", | |||
"name": "Project Leader", | "name": "Project Leader", | |||
"organizationId": "o2" | "organizationId": "o2" | |||
} | } | |||
}, | }, | |||
"organizations": { | "organizations": { | |||
"o2": { | "o2": { | |||
"name": "ABC, Inc." | "name": "ABC, Inc." | |||
} | } | |||
} | } | |||
Figure 23: titles example | Figure 24: titles Example | |||
2.3. Contact Properties | 2.3. Contact Properties | |||
This section defines properties how to contact the entity represented | This section defines how properties contact the entity represented by | |||
by this Card. | the Card. | |||
2.3.1. emails | 2.3.1. emails | |||
Type: Id[EmailAddress] (optional). | Type: Id[EmailAddress] (optional) | |||
The email addresses to contact the entity represented by this Card. | The email addresses in which to contact the entity represented by the | |||
An EmailAddress object has the following properties: | Card. An EmailAddress object has the following properties: | |||
* @type: String. This MUST be EmailAddress, if set. | @type: String. This MUST be EmailAddress, if set. | |||
* address: String (mandatory). The email address. This MUST be an | address: String (mandatory). The email address. This MUST be an | |||
_addr-spec_ value as defined in Section 3.4.1 of [RFC5322]. | _addr-spec_ value as defined in Section 3.4.1 of [RFC5322]. | |||
* contexts: String[Boolean] (optional). The contexts in which to | contexts: String[Boolean] (optional). The contexts in which to use | |||
use this email address. Also see Section 1.5.1. | this email address. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). The preference of this email | pref: UnsignedInt (optional). The preference of the email address | |||
address in relation to other email addresses. Also see | in relation to other email addresses. Also see Section 1.5.4. | |||
Section 1.5.4. | ||||
* label: String (optional). A custom label for the value, see | label: String (optional). A custom label for the value. Also see | |||
Section 1.5.3. | Section 1.5.3. | |||
"emails": { | "emails": { | |||
"e1": { | "e1": { | |||
"contexts": { | "contexts": { | |||
"work": true | "work": true | |||
}, | }, | |||
"address": "jqpublic@xyz.example.com" | "address": "jqpublic@xyz.example.com" | |||
}, | }, | |||
"e2": { | "e2": { | |||
"address": "jane_doe@example.com", | "address": "jane_doe@example.com", | |||
"pref": 1 | "pref": 1 | |||
} | } | |||
} | } | |||
Figure 24: emails example | Figure 25: emails Example | |||
2.3.2. onlineServices | 2.3.2. onlineServices | |||
Type: Id[OnlineService] (optional). | Type: Id[OnlineService] (optional) | |||
The online services that are associated with the entity represented | The online services that are associated with the entity represented | |||
by this Card. This can be messaging services, social media profiles, | by the Card. This can be messaging services, social media profiles, | |||
and other. An OnlineService object has the following properties, of | and other. An OnlineService object has the following properties, of | |||
which at least the uri or user property MUST be set: | which at least the uri or user property MUST be set: | |||
* @type: String. This MUST be OnlineService, if set. | @type: String. This MUST be OnlineService, if set. | |||
* service: String (optional). The name of the online service or | service: String (optional). The name of the online service or | |||
protocol. The name MAY be capitalized the same as on the | protocol. The name MAY be capitalized the same as on the | |||
service's website, app or publishing material, but names MUST be | service's website, app, or publishing material, but names MUST be | |||
considered equal is they match case-insensitively. Examples are | considered equal if they match case-insensitively. Examples are | |||
GitHub, kakao, Mastodon. | GitHub, Kakao, and Mastodon. | |||
* uri: String (optional). This identifies the entity represented by | uri: String (optional). Identifies the entity represented by the | |||
this card at the online service. This MUST be a _URI_ as defined | Card at the online service. This MUST be a _URI_ as defined in | |||
in Section 3 of [RFC3986]. | Section 3 of [RFC3986]. | |||
* user: String (optional). This names the entity represented by | user: String (optional). Names the entity represented by the Card | |||
this Card at the online service. Any free-text value is allowed. | at the online service. Any free-text value is allowed. The | |||
The service property SHOULD be set. | service property SHOULD be set. | |||
* contexts: String[Boolean] (optional). The contexts in which to | contexts: String[Boolean] (optional). The contexts in which to use | |||
use this service. Also see Section 1.5.1. | the service. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). The preference of this service in | pref: UnsignedInt (optional). The preference of the service in | |||
relation to other services. Also see Section 1.5.4. | relation to other services. Also see Section 1.5.4. | |||
* label: String (optional). A custom label for the value, see | label: String (optional). A custom label for the value. Also see | |||
Section 1.5.3. | Section 1.5.3. | |||
"onlineServices": { | "onlineServices": { | |||
"x1": { | "x1": { | |||
"uri": "xmpp:alice@example.com" | "uri": "xmpp:alice@example.com" | |||
}, | }, | |||
"x2": { | "x2": { | |||
"service": "Mastodon", | "service": "Mastodon", | |||
"user": "@alice@example2.com", | "user": "@alice@example2.com", | |||
"uri": "https://example2.com/@alice" | "uri": "https://example2.com/@alice" | |||
} | } | |||
} | } | |||
Figure 25: onlineServices example | Figure 26: onlineServices Example | |||
2.3.3. phones | 2.3.3. phones | |||
Type: Id[Phone] (optional). | Type: Id[Phone] (optional) | |||
The phone numbers to contact the entity represented by this Card. A | The phone numbers in which to contact the entity represented by the | |||
Phone object has the following properties: | Card. A Phone object has the following properties: | |||
* @type: String. This MUST be Phone, if set. | @type: String. This MUST be Phone, if set. | |||
* number: String (mandatory). The phone number, as either a URI or | number: String (mandatory). The phone number as either a URI or | |||
free-text. Typical URI schemes are the [RFC3966] tel or [RFC3261] | free text. Typical URI schemes are tel [RFC3966] or sip | |||
sip schemes, but any URI scheme is allowed. | [RFC3261], but any URI scheme is allowed. | |||
* features: String[Boolean] (optional). The set of contact features | features: String[Boolean] (optional). The set of contact features | |||
that this phone number may be used for. The set is represented as | that the phone number may be used for. The set is represented as | |||
an object, with each key being a method type. The boolean value | an object, with each key being a method type. The boolean value | |||
MUST be true. The enumerated (Section 1.7.4) method type values | MUST be true. The enumerated (Section 1.7.4) method type values | |||
are: | are: | |||
- mobile: the number is for a mobile phone. | * mobile: the number for a mobile phone. | |||
* voice: the number for calling by voice. | ||||
- voice: the number is for calling by voice. | * text: the number that supports text messages (SMS). | |||
* video: the number that supports video conferencing. | ||||
- text: the number supports text messages (SMS). | * main-number: the main phone number such as the number of the | |||
front desk at a company, as opposed to a direct-dial number of | ||||
- video: the number supports video conferencing. | an individual employee. | |||
* textphone: the number is for a device for people with hearing | ||||
- main-number: this number is the main phone number, such as the | ||||
number of the front-desk at a company, as opposed to a direct- | ||||
dial number of an individual employee. | ||||
- textphone: the number is for a device for people with hearing | ||||
or speech difficulties. | or speech difficulties. | |||
* fax: the number for sending faxes. | ||||
* pager: the number for a pager or beeper. | ||||
- fax: the number is for sending faxes. | contexts: String[Boolean] (optional). The contexts in which to use | |||
the number. Also see Section 1.5.1. | ||||
- pager: the number is for a pager or beeper. | ||||
* contexts: String[Boolean] (optional). The contexts in which to | ||||
use this number. Also see Section 1.5.1. | ||||
* pref: UnsignedInt (optional). The preference of this number in | pref: UnsignedInt (optional). The preference of the number in | |||
relation to other numbers. Also see Section 1.5.4. | relation to other numbers. Also see Section 1.5.4. | |||
* label: String (optional). A custom label for the value, see | label: String (optional). A custom label for the value. Also see | |||
Section 1.5.3. | Section 1.5.3. | |||
"phones": { | "phones": { | |||
"tel0": { | "tel0": { | |||
"contexts": { | "contexts": { | |||
"private": true | "private": true | |||
}, | }, | |||
"features": { | "features": { | |||
"voice": true | "voice": true | |||
}, | }, | |||
skipping to change at page 36, line 48 ¶ | skipping to change at line 1632 ¶ | |||
"pref": 1 | "pref": 1 | |||
}, | }, | |||
"tel3": { | "tel3": { | |||
"contexts": { | "contexts": { | |||
"work": true | "work": true | |||
}, | }, | |||
"number": "tel:+1-201-555-0123" | "number": "tel:+1-201-555-0123" | |||
} | } | |||
} | } | |||
Figure 26: phones example | Figure 27: phones Example | |||
2.3.4. preferredLanguages | 2.3.4. preferredLanguages | |||
Type : Id[LanguagePref] (optional). | Type : Id[LanguagePref] (optional) | |||
Defines the preferred languages for contacting the entity associated | Defines the preferred languages for contacting the entity associated | |||
with this Card. | with the Card. | |||
A LanguagePref object has the following properties: | A LanguagePref object has the following properties: | |||
* @type: String. This MUST be LanguagePref, if set. | @type: String. This MUST be LanguagePref, if set. | |||
* language: String (mandatory). The preferred language. This MUST | language: String (mandatory). The preferred language. This MUST be | |||
a language tag as defined in [RFC5646]. | a language tag as defined in [RFC5646]. | |||
* contexts: String[Boolean] (optional). Defines the contexts in | contexts: String[Boolean] (optional). Defines the contexts in which | |||
which to use this language. Also see Section 1.5.1. | to use the language. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). Defines the preference of this | pref: UnsignedInt (optional). Defines the preference of the | |||
language in relation to other languages of the same contexts. | language in relation to other languages of the same contexts. | |||
Also see Section 1.5.4. | Also see Section 1.5.4. | |||
"preferredLanguages": { | "preferredLanguages": { | |||
"l1": { | "l1": { | |||
"language": "en", | "language": "en", | |||
"contexts": { | "contexts": { | |||
"work": true | "work": true | |||
}, | }, | |||
"pref": 1 | "pref": 1 | |||
skipping to change at page 37, line 49 ¶ | skipping to change at line 1678 ¶ | |||
"pref": 2 | "pref": 2 | |||
}, | }, | |||
"l3": { | "l3": { | |||
"language": "fr", | "language": "fr", | |||
"contexts": { | "contexts": { | |||
"private": true | "private": true | |||
} | } | |||
} | } | |||
} | } | |||
Figure 27: preferredLanguages example | Figure 28: preferredLanguages Example | |||
2.4. Calendaring and Scheduling Properties | 2.4. Calendaring and Scheduling Properties | |||
This section defines properties how to schedule calendar events with | This section defines properties for scheduling calendar events with | |||
the entity represented by this Card. | the entity represented by the Card. | |||
2.4.1. calendars | 2.4.1. calendars | |||
Type: Id[Calendar] (optional). | Type: Id[Calendar] (optional) | |||
These are resources for calendaring, such as calendars to lookup | These are resources for calendaring such as using calendars to look | |||
free-busy information for the entity represented by this Card. A | up free-busy information for the entity represented by the Card. A | |||
Calendar object has all properties of the Resource (Section 1.4.4) | Calendar object has all properties of the Resource (Section 1.4.4) | |||
data type, with the following additional definitions: | data type, with the following additional definitions: | |||
* The @type property value MUST be Calendar, if set. | * The @type property value MUST be Calendar, if set. | |||
* The kind property is mandatory. Its enumerated (Section 1.7.4) | * The kind property is mandatory. Its enumerated (Section 1.7.4) | |||
values are: | values are: | |||
- calendar: the resource is a calendar that contains entries such | - calendar: The resource is a calendar that contains entries such | |||
as calendar events or tasks. | as calendar events or tasks. | |||
- freeBusy: the resource allows for free-busy lookups, for | - freeBusy: The resource allows for free-busy lookups, for | |||
example to schedule group events. | example, to schedule group events. | |||
"calendars": { | "calendars": { | |||
"calA": { | "calA": { | |||
"kind": "calendar", | "kind": "calendar", | |||
"uri": "webcal://calendar.example.com/calA.ics" | "uri": "webcal://calendar.example.com/calA.ics" | |||
}, | }, | |||
"project-a": { | "project-a": { | |||
"kind": "freeBusy", | "kind": "freeBusy", | |||
"uri": "https://calendar.example.com/busy/project-a" | "uri": "https://calendar.example.com/busy/project-a" | |||
} | } | |||
} | } | |||
Figure 28: calendars example | Figure 29: calendars Example | |||
2.4.2. schedulingAddresses | 2.4.2. schedulingAddresses | |||
Type: Id[SchedulingAddress] (optional). | Type: Id[SchedulingAddress] (optional) | |||
The scheduling addresses by which the entity may receive calendar | The scheduling addresses by which the entity may receive calendar | |||
scheduling invitations. A SchedulingAddress object has the following | scheduling invitations. A SchedulingAddress object has the following | |||
properties: | properties: | |||
* @type: String. This MUST be SchedulingAddress, if set. | @type: String. This MUST be SchedulingAddress, if set. | |||
* uri: String (mandatory). The address to use for calendar | uri: String (mandatory). The address to use for calendar scheduling | |||
scheduling with this contact. This MUST be a URI as defined in | with the contact. This MUST be a URI as defined in Section 3 of | |||
Section 3 of [RFC3986]. | [RFC3986]. | |||
* contexts: String[Boolean] (optional). The contexts in which to | contexts: String[Boolean] (optional). The contexts in which to use | |||
use this scheduling address. Also see Section 1.5.1. | the scheduling address. Also see Section 1.5.1. | |||
* pref: UnsignedInt (optional). The preference of this scheduling | pref: UnsignedInt (optional). The preference of the scheduling | |||
address in relation to other scheduling address. Also see | address in relation to other scheduling addresses. Also see | |||
Section 1.5.4. | Section 1.5.4. | |||
* label: String (optional). A custom label for the scheduling | label: String (optional). A custom label for the scheduling | |||
address, see Section 1.5.3. | address. Also see Section 1.5.3. | |||
"schedulingAddresses": { | "schedulingAddresses": { | |||
"sched1": { | "sched1": { | |||
"uri": "mailto:janedoe@example.com" | "uri": "mailto:janedoe@example.com" | |||
} | } | |||
} | } | |||
Figure 29: schedulingAddresses example | Figure 30: schedulingAddresses Example | |||
2.5. Address and Location Properties | 2.5. Address and Location Properties | |||
This section defines properties for postal addresses and geographical | This section defines properties for postal addresses and geographical | |||
locations associated with the entity represented by this Card. | locations associated with the entity represented by the Card. | |||
2.5.1. addresses | 2.5.1. addresses | |||
Type: Id[Address] (optional). | Type: Id[Address] (optional) | |||
A map of address identifiers to Address objects, containing physical | A map of address identifiers to Address objects, containing physical | |||
locations. | locations. | |||
2.5.1.1. Address object | 2.5.1.1. Address Object | |||
An Address object has the following properties: | An Address object has the following properties, of which at least one | |||
of components, coordinates, countryCode, full or timeZone MUST be | ||||
set: | ||||
* @type: String. This MUST be Address, if set. | @type: String. This MUST be Address, if set. | |||
* components: AddressComponent[] (optional). The components | components: AddressComponent[] (optional). The components | |||
(Section 2.5.1.2) making up this address. This property MUST be | (Section 2.5.1.2) that make up the address. The component list | |||
set if the full property is not set, otherwise it SHOULD be set. | MUST have at least one entry that has a kind other than separator. | |||
The component list MUST have at least one entry having a different | ||||
kind than separator. | ||||
Address components SHOULD be ordered such that their values joined | Address components SHOULD be ordered such that when their values | |||
as a String produce a valid full address. If so, implementations | are joined as a String, a valid full address is produced. If so, | |||
MUST set the isOrdered property value to true. | implementations MUST set the isOrdered property value to true. | |||
If the address components are ordered, then the defaultSeparator | If the address components are ordered, then the defaultSeparator | |||
property and address components of kind separator give guidance | property and address components of kind separator give guidance on | |||
what characters to insert between components, but implementations | what characters to insert between components, but implementations | |||
are free to choose any others. In lack of a separator, inserting | are free to choose any others. When lacking a separator, | |||
a single Space character in between address component values is a | inserting a single space character in between address component | |||
good choice. | values is a good choice. | |||
If instead the address components follow no particular order, then | If, instead, the address components follow no particular order, | |||
the isOrdered property value MUST be false, the components | then the isOrdered property value MUST be false, the components | |||
property MUST NOT contain a AddressComponent of kind separator and | property MUST NOT contain an AddressComponent of kind separator, | |||
the defaultSeparator property MUST NOT be set. | and the defaultSeparator property MUST NOT be set. | |||
* isOrdered: Boolean (optional, default: false). This indicates if | isOrdered: Boolean (optional; default: false). Indicates if the | |||
the address component sequence in the components property is | address component sequence in the components property is ordered. | |||
ordered. | ||||
* countryCode: String (optional). The Alpha-2 country code | countryCode: String (optional). The Alpha-2 country code | |||
[ISO.3166-1.2006]. | [ISO.3166-1]. | |||
* coordinates: String (optional). A [RFC5870] "geo:" URI for the | coordinates: String (optional). A "geo:" URI [RFC5870] for the | |||
address. | address. | |||
* timeZone: String (optional). Identifies the time zone this | timeZone: String (optional). Identifies the time zone the address | |||
address is located in. This MUST be a time zone name registered | is located in. This MUST be a time zone name registered in IANA's | |||
in the IANA Time Zone Database [IANATZ]. | Time Zone Database [IANA-TZ]. | |||
* contexts: String[Boolean] (optional). The contexts of the address | contexts: String[Boolean] (optional). The contexts of the address | |||
information. The boolean value MUST be true. In addition to the | information. The boolean value MUST be true. In addition to the | |||
common contexts (Section 1.5.1), allowed key values are: | common contexts (Section 1.5.1), allowed key values are: | |||
- billing: an address to be used for billing. | * billing: an address to be used for billing. | |||
* delivery: an address to be used for delivering physical items. | ||||
- delivery: an address to be used for delivering physical items. | ||||
* full: String (optional). This is the full address, including | full: String (optional). The full address, including street, | |||
street, region or country. The purpose of this property is to | region, or country. The purpose of this property is to define an | |||
define an address, even if the individual address components are | address, even if the individual address components are not known. | |||
not known. If the street property is set, the full property | ||||
SHOULD NOT be set. | ||||
* defaultSeparator: String (optional). The default separator to | defaultSeparator: String (optional). The default separator to | |||
insert between address component values when concatenating all | insert between address component values when concatenating all | |||
address component values to a single String. Also see the | address component values to a single String. Also see the | |||
definition of the separator kind for the AddressComponent object. | definition of the separator kind for the AddressComponent | |||
This property MUST NOT be set if the Address isOrdered property | (Section 2.5.1.2) object. This property MUST NOT be set if the | |||
value is false or if the components property is not set. | Address isOrdered property value is false or if the components | |||
property is not set. | ||||
* pref: UnsignedInt (optional). The preference of this address in | pref: UnsignedInt (optional). The preference of the address in | |||
relation to other addresses. Also see Section 1.5.4. | relation to other addresses. Also see Section 1.5.4. | |||
* phoneticScript: String (optional). The script used in the value | phoneticScript: String (optional). The script used in the value of | |||
of the AddressComponent phonetic property. Also see | ||||
Section 1.5.5. | ||||
* phoneticSystem: String (optional). The phonetic system used in | ||||
the AddressComponent phonetic property. Also see Section 1.5.5. | the AddressComponent phonetic property. Also see Section 1.5.5. | |||
phoneticSystem: String (optional). The phonetic system used in the | ||||
AddressComponent phonetic property. Also see Section 1.5.5. | ||||
The following example illustrates the use of the address property. | The following example illustrates the use of the address property. | |||
Additional examples are in Section 2.5.1.3. | Additional examples are shown in Section 2.5.1.3. | |||
"addresses": { | "addresses": { | |||
"k23": { | "k23": { | |||
"contexts": { | "contexts": { | |||
"work": true | "work": true | |||
}, | }, | |||
"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" }, | |||
skipping to change at page 41, line 46 ¶ | skipping to change at line 1855 ¶ | |||
{ "kind": "separator", "value": " " }, | { "kind": "separator", "value": " " }, | |||
{ "kind": "postcode", "value": "20190" }, | { "kind": "postcode", "value": "20190" }, | |||
{ "kind": "country", "value": "USA" } | { "kind": "country", "value": "USA" } | |||
], | ], | |||
"countryCode": "US", | "countryCode": "US", | |||
"defaultSeparator": ", ", | "defaultSeparator": ", ", | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
} | } | |||
Figure 30: Example of the address "54321 Oak St, Reston, VA | Figure 31: Example of the Address "54321 Oak St, Reston, VA | |||
20190, USA" | 20190, USA" | |||
2.5.1.2. AddressComponent object | 2.5.1.2. AddressComponent Object | |||
An AddressComponent object has the following properties: | An AddressComponent object has the following properties: | |||
* @type: String. This MUST be AddressComponent, if set. | @type: String. This MUST be AddressComponent, if set. | |||
* value: String (mandatory). The value of this address component. | ||||
* kind: String (mandatory). The kind of this address component. | ||||
The enumerated (Section 1.7.4) values are: | ||||
- room: the room or suite number or identifier. | ||||
- apartment: the extension designation, such as apartment number | value: String (mandatory). The value of the address component. | |||
or unit or box number. | ||||
- floor: the floor or level this address is located on. | kind: String (mandatory). The kind of the address component. The | |||
enumerated (Section 1.7.4) values are: | ||||
- building: the building, tower, or condominium this address is | * room: the room, suite number, or identifier. | |||
* apartment: the extension designation such as the apartment | ||||
number, unit, or box number. | ||||
* floor: the floor or level the address is located on. | ||||
* building: the building, tower, or condominium the address is | ||||
located in. | located in. | |||
* number: the street number, e.g., "123". This value is not | ||||
- number: the street number, e.g., "123". This value is not | restricted to numeric values and can include any value such as | |||
restricted to numeric values, and can include any value such as | number ranges ("112-10"), grid style ("39.2 RD"), alphanumerics | |||
number ranges ("112–10"), grid style ("39.2 RD"), alphanumerics | ("N6W23001"), or fractionals ("123 1/2"). | |||
("N6W23001") or fractionals ("123 1/2"). | * name: the street name. | |||
* block: the block name or number. | ||||
- name: the street name. | * subdistrict: the subdistrict, ward, or other subunit of a | |||
- block: the block name or number. | ||||
- subdistrict: the subdistrict, ward or other subunit of a | ||||
district. | district. | |||
* district: the district name. | ||||
- district: the district name. | * locality: the municipality, city, town, village, post town, or | |||
other locality. | ||||
- locality: the municipality, city, town, village, post-town, or | * region: the administrative area such as province, state, | |||
another locality. | prefecture, county, or canton. | |||
* postcode: the postal code, post code, ZIP code, or other short | ||||
- region: the administrative area, such as province, state, | ||||
prefecture, county, canton. | ||||
- postcode: the postal code, post code, ZIP code or other short | ||||
code associated with the address by the relevant country's | code associated with the address by the relevant country's | |||
postal system. | postal system. | |||
* country: the country name. | ||||
- country: the country name. | * direction: the cardinal direction or quadrant, e.g., "north". | |||
* landmark: the publicly known prominent feature that can | ||||
- direction: the Cardinal direction or quadrant, e.g., "North". | substitute the street name and number, e.g., "White House" or | |||
"Taj Mahal". | ||||
- landmark: the publicly known prominent feature that can | * postOfficeBox: the post office box number or identifier. | |||
substitute the street name and number, e.g., White House, Taj | * separator: a formatting separator between two ordered address | |||
Mahal. | ||||
- postOfficeBox: the post office box number or identifier. | ||||
- separator: a formatting separator between two ordered address | ||||
non-separator components. The value property of the component | non-separator components. The value property of the component | |||
includes the verbatim separator, for example a hyphen character | includes the verbatim separator, for example, a hyphen | |||
or even an empty string. This value has higher precedence than | character or even an empty string. This value has higher | |||
the defaultSeparator property of the Address. Implementations | precedence than the defaultSeparator property of the Address. | |||
MUST NOT insert two consecutive separator components, instead | Implementations MUST NOT insert two consecutive separator | |||
they SHOULD insert a single separator component with the | components; instead, they SHOULD insert a single separator | |||
combined value. This component kind MUST NOT be set if the | component with the combined value. This component kind MUST | |||
Address isOrdered property value is false. | NOT be set if the Address isOrdered property value is false. | |||
* phonetic: String (optional). This defines how to pronounce this | phonetic: String (optional). Defines how to pronounce the name | |||
name component. If this property is set, then at least one of the | component. If this property is set, then at least one of the | |||
Address object phoneticSystem or phoneticScript properties MUST be | Address object phoneticSystem or phoneticScript properties MUST be | |||
set. Also see Section 1.5.5. | set. Also see Section 1.5.5. | |||
2.5.1.3. Address examples | 2.5.1.3. Address Examples | |||
The following are examples of addresses, in addition to Figure 30. | Examples of addresses are shown below; also see Figure 31. | |||
"addresses": { | "addresses": { | |||
"k25": { | "k25": { | |||
"components": [ | "components": [ | |||
{ "kind": "number", "value": "46" }, | { "kind": "number", "value": "46" }, | |||
{ "kind": "name", "value": "1 Sukhumvit 51 Alley" }, | { "kind": "name", "value": "1 Sukhumvit 51 Alley" }, | |||
{ "kind": "subdistrict", "value": "Khlong Tan Nuea" }, | { "kind": "subdistrict", "value": "Khlong Tan Nuea" }, | |||
{ "kind": "district", "value": " Watthana" }, | { "kind": "district", "value": " Watthana" }, | |||
{ "kind": "locality", "value": "Bangkok" }, | { "kind": "locality", "value": "Bangkok" }, | |||
{ "kind": "country", "value": "Thailand" }, | { "kind": "country", "value": "Thailand" }, | |||
{ "kind": "postcode", "value": "10110" } | { "kind": "postcode", "value": "10110" } | |||
], | ], | |||
"defaultSeparator": ", ", | "defaultSeparator": ", ", | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
} | } | |||
Figure 31: Example of the address "46, 1 Sukhumvit 51 Alley, | Figure 32: Example of the Address "46, 1 Sukhumvit 51 Alley, | |||
Khlong Tan Nuea, Watthana, Bangkok 10110, Thailand" | Khlong Tan Nuea, Watthana, Bangkok 10110, Thailand" | |||
The following example illustrates the use of an address in Tokyo and | ||||
its localization (Section 2.7.1) in Japanese. | ||||
"addresses": { | "addresses": { | |||
"k26": { | "k26": { | |||
"components": [ | "components": [ | |||
{ "kind": "block", "value": "2-7" }, | { "kind": "block", "value": "2-7" }, | |||
{ "kind": "separator", "value": "-" }, | { "kind": "separator", "value": "-" }, | |||
{ "kind": "number", "value": "2" }, | { "kind": "number", "value": "2" }, | |||
{ "kind": "separator", "value": " " }, | { "kind": "separator", "value": " " }, | |||
{ "kind": "district", "value": "Marunouchi" }, | { "kind": "district", "value": "Marunouchi" }, | |||
{ "kind": "locality", "value": "Chiyoda-ku" }, | { "kind": "locality", "value": "Chiyoda-ku" }, | |||
{ "kind": "region", "value": "Tokyo" }, | { "kind": "region", "value": "Tokyo" }, | |||
skipping to change at page 44, line 42 ¶ | skipping to change at line 1975 ¶ | |||
{ "kind": "number", "value": "2" }, | { "kind": "number", "value": "2" }, | |||
{ "kind": "postcode", "value": "〒100-8994" } | { "kind": "postcode", "value": "〒100-8994" } | |||
], | ], | |||
"defaultSeparator": "", | "defaultSeparator": "", | |||
"full": "〒100-8994東京都千代田区丸ノ内2-7-2", | "full": "〒100-8994東京都千代田区丸ノ内2-7-2", | |||
"isOrdered": true | "isOrdered": true | |||
} | } | |||
} | } | |||
} | } | |||
Figure 32: Example of an address in Tokyo and its localization | Figure 33: Example of an Address in Tokyo and Its Localization in | |||
Section 2.7.1 in Japanese. | Japanese | |||
2.6. Resource Properties | 2.6. Resource Properties | |||
This section defines properties for digital resources associated with | This section defines properties for digital resources associated with | |||
the entity represented by this Card. | the entity represented by the Card. | |||
2.6.1. cryptoKeys | 2.6.1. cryptoKeys | |||
Type: Id[CryptoKey] (optional). | Type: Id[CryptoKey] (optional) | |||
These are cryptographic resources such as public keys and | These are cryptographic resources such as public keys and | |||
certificates associated with the entity represented by this Card. A | certificates associated with the entity represented by the Card. A | |||
CryptoKey object has all properties of the Resource (Section 1.4.4) | CryptoKey object has all properties of the Resource (Section 1.4.4) | |||
data type, with the following additional definitions: | data type, with the following additional definition: | |||
* The @type property value MUST be CryptoKey, if set. | * The @type property value MUST be CryptoKey, if set. | |||
The following example shows how refer to an external cryptographic | The following example shows how to refer to an external cryptographic | |||
resource. | resource. | |||
"cryptoKeys": { | "cryptoKeys": { | |||
"mykey1": { | "mykey1": { | |||
"uri": "https://www.example.com/keys/jdoe.cer" | "uri": "https://www.example.com/keys/jdoe.cer" | |||
} | } | |||
} | } | |||
Figure 33: cryptoKeys example with external data | Figure 34: Example of cryptoKeys with External Data | |||
The following example shows how to embed key data in the CryptoKey. | The following example shows how to embed key data in the CryptoKey. | |||
The key data is depicted in multiple lines only for demonstration | The key data is depicted in multiple lines only for demonstration | |||
purposes. | purposes. | |||
"cryptoKeys": { | "cryptoKeys": { | |||
"mykey2": { | "mykey2": { | |||
"uri": "data:application/pgp-keys;base64,LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtF | "uri": "data:application/pgp-keys;base64,LS0tLS1CRUdJTiBSU0EgUFVC | |||
WS0tLS0tCk1JSUJDZ0tDQVFFQSt4R1ovd2N6OXVnRnBQMDdOc3BvNlUxN2wwWWhGa | TElDIEtFWS0tLS0tCk1JSUJDZ0tDQVFFQSt4R1ovd2N6OXVnRnBQMDdOc | |||
UZweHhVNHBUazNMaWZ6OVIzenNJc3UKRVJ3dGE3K2ZXSWZ4T28yMDhldHQvamhza2 | 3BvNlUxN2wwWWhGaUZweHhVNHBUazNMaWZ6OVIzenNJc3UKRVJ3dGE3K2 | |||
lWb2RTRXQzUUJHaDRYQmlweVdvcEt3WjkzSEhhRFZaQUFMaS8yQQoreFRCdFdkRW8 | ZXSWZ4T28yMDhldHQvamhza2lWb2RTRXQzUUJHaDRYQmlweVdvcEt3Wjk | |||
3WEdVdWpLRHZDMi9hWkt1a2ZqcE9pVUk4QWhMQWZqbWxjRC9VWjFRUGgwbUhzZ2xS | zSEhhRFZaQUFMaS8yQQoreFRCdFdkRW83WEdVdWpLRHZDMi9hWkt1a2Zq | |||
TkNtcEN3Cm13U1hBOVZObWh6K1BpQitEbWw0V1duS1cvVkhvMnVqVFh4cTcrZWZNV | cE9pVUk4QWhMQWZqbWxjRC9VWjFRUGgwbUhzZ2xSTkNtcEN3Cm13U1hBO | |||
TRIMmZueTNTZTNLWU9zRlBGR1oxVE4KUVNZbEZ1U2hXckhQdGlMbVVkUG9QNkNWMm | VZObWh6K1BpQitEbWw0V1duS1cvVkhvMnVqVFh4cTcrZWZNVTRIMmZueT | |||
1NTDF0aytsN0RJSXFYclFoTFVLREFDZU01cm9NeDBrTGhVV0I4UAorMHVqMUNObE5 | NTZTNLWU9zRlBGR1oxVE4KUVNZbEZ1U2hXckhQdGlMbVVkUG9QNkNWMm1 | |||
ONEpSWmxDN3hGZnFpTWJGUlU5WjRONll3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJM | NTDF0aytsN0RJSXFYclFoTFVLREFDZU01cm9NeDBrTGhVV0I4UAorMHVq | |||
SUMgS0VZLS0tLS0K" | MUNObE5ONEpSWmxDN3hGZnFpTWJGUlU5WjRONll3SURBUUFCCi0tLS0tR | |||
U5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K" | ||||
} | } | |||
} | } | |||
Figure 34: cryptoKeys example with embedded data | Figure 35: Example of cryptoKeys with Embedded Data | |||
2.6.2. directories | 2.6.2. directories | |||
Type: Id[Directory] (optional). | Type: Id[Directory] (optional) | |||
These are directory service resources, such as entries in a directory | These are directory service resources such as entries in a directory | |||
or organizational directories for lookup. A Directory object has all | or organizational directories for lookup. A Directory object has all | |||
properties of the Resource (Section 1.4.4) data type, with the | properties of the Resource (Section 1.4.4) data type, with the | |||
following additional definitions: | following additional definitions: | |||
* The @type property value MUST be Directory, if set. | * The @type property value MUST be Directory, if set. | |||
* The kind property is mandatory. Its enumerated (Section 1.7.4) | * The kind property is mandatory. Its enumerated (Section 1.7.4) | |||
values are: | values are: | |||
- directory: the resource is a directory service where the entity | - directory: the resource is a directory service that the entity | |||
represented by this Card is part of. This typically is an | represented by the Card is a part of. This typically is an | |||
organizational directory that also contains associated | organizational directory that also contains associated | |||
entities, e.g., co-workers and management in a company | entities, e.g., co-workers and management in a company | |||
directory. | directory. | |||
- entry: the resource is a directory entry of the entity | - entry: the resource is a directory entry of the entity | |||
represented by this Card. In contrast to the directory type, | represented by the Card. In contrast to the directory type, | |||
this is the specific URI for the entity _within_ a directory. | this is the specific URI for the entity _within_ a directory. | |||
In addition, the Directory object has the following property: | In addition, the Directory object has the following property: | |||
* listAs: UnsignedInt (optional). This defines the position of this | listAs: UnsignedInt (optional). Defines the position of the | |||
directory resource in the list of all Directory objects having the | directory resource in the list of all Directory objects having the | |||
same kind in this Card. If set, the listAs value MUST be higher | same kind in the Card. If set, the listAs value MUST be higher | |||
than zero. Multiple directory resources MAY have the same listAs | than zero. Multiple directory resources MAY have the same listAs | |||
property value, or none. Sorting such entries is implementation- | property value or none. Sorting such entries is implementation- | |||
specific. | specific. | |||
"directories": { | "directories": { | |||
"dir1": { | "dir1": { | |||
"kind": "entry", | "kind": "entry", | |||
"uri": "https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf" | "uri": "https://dir.example.com/addrbook/jdoe/Jean%20Dupont.vcf" | |||
}, | }, | |||
"dir2": { | "dir2": { | |||
"kind": "directory", | "kind": "directory", | |||
"uri": "ldap://ldap.example/o=Example%20Tech,ou=Engineering", | "uri": "ldap://ldap.example/o=Example%20Tech,ou=Engineering", | |||
"pref": 1 | "pref": 1 | |||
} | } | |||
Figure 35: directories example | Figure 36: directories Example | |||
2.6.3. links | 2.6.3. links | |||
Type: Id[Link] (optional). | Type: Id[Link] (optional) | |||
These are links to resources that do not fit any of the other use- | These are links to resources that do not fit any of the other use- | |||
case specific resource properties. A Link object has all properties | case-specific resource properties. A Link object has all properties | |||
of the Resource (Section 1.4.4) data type, with the following | of the Resource (Section 1.4.4) data type, with the following | |||
additional definitions: | additional definitions: | |||
* The @type property value MUST be Link, if set. | * The @type property value MUST be Link, if set. | |||
* The kind property is optional. Its enumerated (Section 1.7.4) | * The kind property is optional. Its enumerated (Section 1.7.4) | |||
values are: | values are: | |||
- contact: the resource is a URI by which the entity represented | - contact: the resource is a URI by which the entity represented | |||
by this Card may be contacted, including web forms or other | by the Card may be contacted; this includes web forms or other | |||
media that require user interaction. | media that require user interaction. | |||
"links": { | "links": { | |||
"link3": { | "link3": { | |||
"kind": "contact", | "kind": "contact", | |||
"uri": "mailto:contact@example.com", | "uri": "mailto:contact@example.com", | |||
"pref": 1 | "pref": 1 | |||
} | } | |||
} | } | |||
Figure 36: links example | Figure 37: links Example | |||
2.6.4. media | 2.6.4. media | |||
Type: Id[Media] (optional). | Type: Id[Media] (optional) | |||
These are media resources such as photographs, avatars, or sounds | These are media resources such as photographs, avatars, or sounds | |||
associated with the entity represented by this Card. A Media object | that are associated with the entity represented by the Card. A Media | |||
has all properties of the Resource (Section 1.4.4) data type, with | object has all properties of the Resource (Section 1.4.4) data type, | |||
the following additional definitions: | with the following additional definitions: | |||
* The @type property value MUST be Media, if set. | * The @type property value MUST be Media, if set. | |||
* The kind property is mandatory. Its enumerated (Section 1.7.4) | * The kind property is mandatory. Its enumerated (Section 1.7.4) | |||
values are: | values are: | |||
- photo: the resource is a photograph or avatar. | - photo: the resource is a photograph or avatar. | |||
- sound: the resource is audio media, e.g., to specify the proper | - sound: the resource is audio media, e.g., to specify the proper | |||
pronunciation of the name property contents. | pronunciation of the name property contents. | |||
- logo: the resource is a graphic image or logo associated with | - logo: the resource is a graphic image or logo associated with | |||
the entity represented by this Card. | the entity represented by the Card. | |||
"media": { | "media": { | |||
"res45": { | "res45": { | |||
"kind": "sound", | "kind": "sound", | |||
"uri": "CID:JOHNQ.part8.19960229T080000.xyzMail@example.com" | "uri": "CID:JOHNQ.part8.19960229T080000.xyzMail@example.com" | |||
}, | }, | |||
"res47": { | "res47": { | |||
"kind": "logo", | "kind": "logo", | |||
"uri": "https://www.example.com/pub/logos/abccorp.jpg" | "uri": "https://www.example.com/pub/logos/abccorp.jpg" | |||
}, | }, | |||
"res1": { | "res1": { | |||
"kind": "photo", | "kind": "photo", | |||
"uri": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4..." | "uri": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4..." | |||
} | } | |||
} | } | |||
Figure 37: media example | Figure 38: media Example | |||
2.7. Multilingual Properties | 2.7. Multilingual Properties | |||
This section defines properties how to localize the content of this | This section defines properties for localizing the content of the | |||
Card in human languages. | Card in human languages. | |||
2.7.1. localizations | 2.7.1. localizations | |||
Type: String[PatchObject] (optional). | Type: String[PatchObject] (optional) | |||
This localizes property values in this Card to languages other than | This localizes property values to languages (other than the main | |||
the main language. Localizations provide language-specific | language) in the Card. Localizations provide language-specific | |||
alternatives for existing property values and SHOULD NOT add new | alternatives for existing property values and SHOULD NOT add new | |||
properties. | properties. | |||
The keys in the localizations property object are language tags | The keys in the localizations property object are language tags | |||
[RFC5646]. The values are patch objects which localize the Card in | [RFC5646]. The values are patch objects that localize the Card in | |||
the respective language tag. The paths in the PatchObject are | the respective language tag. The paths in the PatchObject are | |||
relative to the Card that includes the localizations property. A | relative to the Card that includes the localizations property. A | |||
patch MUST NOT target the localizations property. | patch MUST NOT target the localizations property. | |||
Conceptually, a Card is localized as follows: | Conceptually, a Card is localized as follows: | |||
* Determine the language tag in which this Card should be localized | * Determine the language tag in which the Card should be localized. | |||
in. | ||||
* If the localizations property includes a key for that language, | * If the localizations property includes a key for that language, | |||
obtain the PatchObject value. If there is no such key, stop. | obtain the PatchObject value. If there is no such key, stop. | |||
* Create a copy of the Card, but do not copy the localizations | * Create a copy of the Card, but do not copy the localizations | |||
property. | property. | |||
* Apply all patches in the PatchObject to the copy of the Card. | * Apply all patches in the PatchObject to the copy of the Card. | |||
* Optionally, set the language property in the copy of the Card. | * Optionally, set the language property in the copy of the Card. | |||
* Use the patched copy of the Card as the localized variant of the | * Use the patched copy of the Card as the localized variant of the | |||
original Card. | original Card. | |||
A patch in the PatchObject may contain any value type. Its value | A patch in the PatchObject may contain any value type. Its value | |||
MUST be a valid value according to the definition of the patched | MUST be a valid value according to the definition of the patched | |||
property. | property. | |||
Figure 38 localizes the name property by completely replacing its | Figure 39 localizes the name property by completely replacing its | |||
contents in Ukrainian language with Cyrillic script. | contents in Ukrainian language with Cyrillic script. | |||
{ | { | |||
"name": { | "name": { | |||
"components": [ | "components": [ | |||
{ "kind": "title", "value": "Mr." }, | { "kind": "title", "value": "Mr." }, | |||
{ "kind": "given", "value": "Ivan" }, | { "kind": "given", "value": "Ivan" }, | |||
{ "kind": "given2", "value": "Petrovich" }, | { "kind": "given2", "value": "Petrovich" }, | |||
{ "kind": "surname", "value": "Vasiliev" } | { "kind": "surname", "value": "Vasiliev" } | |||
] | ] | |||
skipping to change at page 49, line 42 ¶ | skipping to change at line 2207 ¶ | |||
{ "kind": "title", "value": "г-н" }, | { "kind": "title", "value": "г-н" }, | |||
{ "kind": "given", "value": "Иван" }, | { "kind": "given", "value": "Иван" }, | |||
{ "kind": "given2", "value": "Петрович" }, | { "kind": "given2", "value": "Петрович" }, | |||
{ "kind": "surname", "value": "Васильев" } | { "kind": "surname", "value": "Васильев" } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Figure 38: Example for localizing a top-level property | Figure 39: Example of Localizing a Top-Level Property | |||
Figure 39 localizes the title name by patching _inside_ the titles | Figure 40 localizes the title name by patching _inside_ the titles | |||
property. All properties but the name property in the Title object | property. All properties, except the name property in the Title | |||
are left as-is. | object, are left as is. | |||
"name": { | "name": { | |||
"full": "Gabriel García Márquez" | "full": "Gabriel García Márquez" | |||
}, | }, | |||
"titles": { | "titles": { | |||
"t1": { | "t1": { | |||
"kind": "title", | "kind": "title", | |||
"name": "novelist" | "name": "novelist" | |||
} | } | |||
}, | }, | |||
"localizations": { | "localizations": { | |||
"es": { | "es": { | |||
"titles/t1/name": "autor" | "titles/t1/name": "autor" | |||
} | } | |||
} | } | |||
Figure 39: Example for localizing a nested property | Figure 40: Example of Localizing a Nested Property | |||
2.8. Additional Properties | 2.8. Additional Properties | |||
This section defines properties for which none of the previous | This section defines properties for which none of the previous | |||
sections are appropriate. | sections are appropriate. | |||
2.8.1. anniversaries | 2.8.1. anniversaries | |||
Type : Id[Anniversary] (optional). | Type: Id[Anniversary] (optional) | |||
These are memorable dates and events for the entity represented by | These are memorable dates and events for the entity represented by | |||
this Card. An Anniversary object has the following properties: | the Card. An Anniversary object has the following properties: | |||
* @type: String. This MUST be Anniversary, if set. | ||||
* kind: String (mandatory). Specifies the kind of the anniversary. | ||||
The enumerated (Section 1.7.4) values are: | ||||
- birth: a birthday anniversary | ||||
- death: a deathday anniversary | @type: String. This MUST be Anniversary, if set. | |||
- wedding: a wedding day anniversary | kind: String (mandatory). Specifies the kind of anniversary. The | |||
enumerated (Section 1.7.4) values are: | ||||
* date: PartialDate|Timestamp (mandatory, defaultType: PartialDate). | * birth: a birthday anniversary | |||
* death: a deathday anniversary | ||||
* wedding: a wedding day anniversary | ||||
The date of this anniversary in the Gregorian calendar. This MUST | date: PartialDate|Timestamp (mandatory; defaultType: PartialDate). | |||
either be a whole or partial calendar date or a complete UTC | The date of the anniversary in the Gregorian calendar. This MUST | |||
be either a whole or partial calendar date or a complete UTC | ||||
timestamp (see the definition of the Timestamp and PartialDate | timestamp (see the definition of the Timestamp and PartialDate | |||
object types below). | object types below). | |||
* place: Address (optional). An address associated with this | place: Address (optional). An address associated with this | |||
anniversary, e.g., the place of birth or death. | anniversary, e.g., the place of birth or death. | |||
A PartialDate object represents a complete or partial calendar date | A PartialDate object represents a complete or partial calendar date | |||
in the Gregorian calendar. It represents either a complete date, or | in the Gregorian calendar. It represents a complete date, a year, a | |||
a year, or a month in a year, or a day in a month. It has the | month in a year, or a day in a month. It has the following | |||
following properties, of which at least year or month and day MUST be | properties, of which at least year or month and day MUST be set: | |||
set: | ||||
* @type: String. This MUST be PartialDate, if set. | @type: String. This MUST be PartialDate, if set. | |||
* year: UnsignedInt (optional). This is the calendar year. | year: UnsignedInt (optional). The calendar year. | |||
* month: UnsignedInt (optional). This is the calendar month, | month: UnsignedInt (optional). The calendar month, represented as | |||
represented as the integers 1 <= month <= 12. If this property is | the integers 1 <= month <= 12. If this property is set, then | |||
set then either year or day MUST be set. | either year or day MUST be set. | |||
* day: UnsignedInt (optional). This is the calendar month day, | day: UnsignedInt (optional). The calendar month day, represented as | |||
represented as the integers 1 <= day <= 31, depending on the | the integers 1 <= day <= 31, depending on the validity within the | |||
validity within the month and year. If this property is set then | month and year. If this property is set, then month MUST be set. | |||
month MUST be set. | ||||
* calendarScale: String (optional). This is the calendar system in | calendarScale: String (optional). The calendar system in which this | |||
which this date occurs, in lowercase. This MUST be either a CLDR- | date occurs, in lowercase. This MUST be either a calendar system | |||
registered calendar system name [RFC7529] or a vendor-specific | name registered as a Common Locale Data Repository (CLDR) | |||
value. The year, month and day still MUST be represented in the | [RFC7529] or a vendor-specific value. The year, month, and day | |||
Gregorian calendar. Note that the year property might be required | still MUST be represented in the Gregorian calendar. Note that | |||
to convert the date between the Gregorian calendar and the | the year property might be required to convert the date between | |||
respective calendar system. | the Gregorian calendar and the respective calendar system. | |||
A Timestamp object has the following properties: | A Timestamp object has the following properties: | |||
* @type: String. This MUST be Timestamp, if set. | @type: String. This MUST be Timestamp, if set. | |||
* utc: UTCDateTime (mandatory). Specifies the point in time in UTC | utc: UTCDateTime (mandatory). Specifies the point in time in UTC | |||
time. | time. | |||
Figure 40 illustrates anniversaries with partial dates and timestamp. | Figure 41 illustrates anniversaries with partial dates and a | |||
Note how the @type property is set for the Timestamp object value | timestamp. Note how the @type property is set for the Timestamp | |||
according to the rules defined Section 1.3.4. | object value according to the rules defined in Section 1.3.4. | |||
"anniversaries": { | "anniversaries": { | |||
"k8": { | "k8": { | |||
"kind": "birth", | "kind": "birth", | |||
"date": { | "date": { | |||
"year": 1953, | "year": 1953, | |||
"month": 4, | "month": 4, | |||
"day": 15 | "day": 15 | |||
} | } | |||
}, | }, | |||
skipping to change at page 52, line 26 ¶ | skipping to change at line 2317 ¶ | |||
"date": { | "date": { | |||
"@type": "Timestamp", | "@type": "Timestamp", | |||
"utc": "2019-10-15T23:10:00Z" | "utc": "2019-10-15T23:10:00Z" | |||
}, | }, | |||
"place": { | "place": { | |||
"full": "4445 Tree Street\nNew England, ND 58647\nUSA" | "full": "4445 Tree Street\nNew England, ND 58647\nUSA" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 40: anniversaries example | Figure 41: anniversaries Example | |||
2.8.2. keywords | 2.8.2. keywords | |||
Type: String[Boolean] (optional). A set of free-text keywords, also | Type: String[Boolean] (optional) | |||
known as _tags_. The set is represented as an object, with each key | ||||
being a keyword. The boolean value MUST be true. | A set of free-text keywords, also known as _tags_. The set is | |||
represented as an object, with each key being a keyword. The boolean | ||||
value MUST be true. | ||||
"keywords": { | "keywords": { | |||
"internet": true, | "internet": true, | |||
"IETF": true | "IETF": true | |||
} | } | |||
Figure 41: keywords example | Figure 42: keywords Example | |||
2.8.3. notes | 2.8.3. notes | |||
Type: Id[Note] (optional). | Type: Id[Note] (optional) | |||
Free-text notes associated with this Card. A Note object has the | Free-text notes that are associated with the Card. A Note object has | |||
following properties: | the following properties: | |||
* @type: String. This MUST be Note, if set. | @type: String. This MUST be Note, if set. | |||
* note: String (mandatory). The free text value of this note. | note: String (mandatory). The free-text value of this note. | |||
* created: UTCDateTime (optional). The date and time when this note | created: UTCDateTime (optional). The date and time when this note | |||
was created. | was created. | |||
* author: Author (optional). The author of this note. | author: Author (optional). The author of this note. | |||
An Author object has the following properties, of which at least one | An Author object has the following properties, of which at least one | |||
other than @type MUST be set: | property other than @type MUST be set: | |||
* @type: String. This MUST be Author, if set. | @type: String. This MUST be Author, if set. | |||
* name: String (optional). The name of this author. | name: String (optional). The name of this author. | |||
* uri: String (optional). A URI value that identifies the author. | uri: String (optional). A URI value that identifies the author. | |||
"notes": { | "notes": { | |||
"n1": { | "n1": { | |||
"note": "Open office hours are 1600 to 1715 EST, Mon-Fri", | "note": "Open office hours are 1600 to 1715 EST, Mon-Fri", | |||
"created": "2022-11-23T15:01:32Z", | "created": "2022-11-23T15:01:32Z", | |||
"author": { | "author": { | |||
"name": "John" | "name": "John" | |||
} | } | |||
} | } | |||
} | } | |||
Figure 42: notes example | Figure 43: notes Example | |||
2.8.4. personalInfo | 2.8.4. personalInfo | |||
Type: Id[PersonalInfo] (optional). | Type: Id[PersonalInfo] (optional) | |||
Defines personal information about the entity represented by this | Defines personal information about the entity represented by the | |||
Card. A PersonalInfo object has the following properties: | Card. A PersonalInfo object has the following properties: | |||
* @type: String. This MUST be PersonalInfo, if set. | @type: String. This MUST be PersonalInfo, if set. | |||
* kind: String (mandatory). Specifies the kind of this personal | kind: String (mandatory). Specifies the kind of personal | |||
information. The enumerated (Section 1.7.4) values are: | information. The enumerated (Section 1.7.4) values are: | |||
- expertise: a field of expertise or credential | * expertise: a field of expertise or a credential | |||
- hobby: a hobby | * hobby: a hobby | |||
- interest: an interest | * interest: an interest | |||
* value: String (mandatory). The actual information. | value: String (mandatory). The actual information. | |||
* level: String (optional). Indicates the level of expertise, or | level: String (optional). Indicates the level of expertise or | |||
engagement in hobby or interest. The enumerated (Section 1.7.4) | engagement in hobby or interest. The enumerated (Section 1.7.4) | |||
values are: | values are: | |||
- high | * high | |||
- medium | * medium | |||
- low | * low | |||
* listAs: UnsignedInt (optional). This defines the position of this | listAs: UnsignedInt (optional). Defines the position of the | |||
personal information in the list of all PersonalInfo objects | personal information in the list of all PersonalInfo objects that | |||
having the same kind in this Card. If set, the listAs value MUST | have the same kind in the Card. If set, the listAs value MUST be | |||
be higher than zero. Multiple personal information entries MAY | higher than zero. Multiple personal information entries MAY have | |||
have the same listAs property value, or none. Sorting such | the same listAs property value or none. Sorting such entries is | |||
entries is implementation-specific. | implementation-specific. | |||
* label: String (optional). A custom label. See Section 1.5.3. | label: String (optional). A custom label. See Section 1.5.3. | |||
"personalInfo": { | "personalInfo": { | |||
"pi2": { | "pi2": { | |||
"kind": "expertise", | "kind": "expertise", | |||
"value": "chemistry", | "value": "chemistry", | |||
"level": "high" | "level": "high" | |||
}, | }, | |||
"pi1": { | "pi1": { | |||
"kind": "hobby", | "kind": "hobby", | |||
"value": "reading", | "value": "reading", | |||
"level": "high" | "level": "high" | |||
}, | }, | |||
"pi6": { | "pi6": { | |||
"kind": "interest", | "kind": "interest", | |||
"value": "r&b music", | "value": "r&b music", | |||
"level": "medium" | "level": "medium" | |||
} | } | |||
} | } | |||
Figure 43: personalInfo example | Figure 44: personalInfo Example | |||
3. IANA Considerations | 3. IANA Considerations | |||
3.1. Media Type Registration | 3.1. Media Type Registration | |||
[I-D.ietf-calext-jscontact] defines a media type for use with | This document defines a media type for use with JSContact data | |||
JSContact data formatted in JSON. | formatted in JSON. | |||
Type name: | Type name: application | |||
application | ||||
Subtype name: | Subtype name: jscontact+json | |||
jscontact+json | ||||
Required parameters: | Required parameters: None | |||
None | ||||
Optional parameters: | Optional parameters: version | |||
version This parameter conveys the version of the JSContact data | ||||
in the body part. It MUST NOT occur more than once. If this | ||||
parameter is set, then the values of all JSContact version | ||||
(Table 2) properties in the body part MUST match the parameter | ||||
value. | ||||
Encoding considerations: | This parameter conveys the version of the JSContact data in the | |||
This is the same as the encoding considerations of application/ | body part. It MUST NOT occur more than once. If this parameter | |||
json, as specified in Section 11 of [RFC8259]. | is set, then the values of all JSContact version (Table 2) | |||
properties in the body part MUST match the parameter value. | ||||
Security considerations: | Encoding considerations: This is the same as the encoding | |||
See Section 4 of [I-D.ietf-calext-jscontact]. | considerations of application/json, as specified in Section 11 of | |||
[RFC8259]. | ||||
Interoperability considerations: | Security considerations: See Section 4 of RFC 9553. | |||
While JSContact is designed to avoid ambiguities as much as | ||||
possible, when converting objects from other contact formats to/ | ||||
from JSContact, it is possible that differing representations for | ||||
the same logical data or ambiguities in interpretation might | ||||
arise. The semantic equivalence of two JSContact objects may be | ||||
determined differently by different applications, for example, | ||||
where URL values differ in case between the two objects. | ||||
Published specification: | Interoperability considerations: While JSContact is designed to | |||
TBD | avoid ambiguities as much as possible, when converting objects | |||
from other contact formats to/from JSContact, it is possible that | ||||
differing representations for the same logical data or ambiguities | ||||
in interpretation might arise. The semantic equivalence of two | ||||
JSContact objects may be determined differently by different | ||||
applications, for example, where URL values differ in case between | ||||
the two objects. | ||||
Applications that use this media type: | Published specification: RFC 9553 | |||
Applications that currently make use of the text/vcard media type | ||||
can use this as an alternative. | ||||
Fragment identifier considerations: | Applications that use this media type: Applications that currently | |||
A JSON Pointer fragment identifier may be used, as defined in | make use of the text/vCard media type can use this as an | |||
[RFC6901], Section 6. | alternative. | |||
Fragment identifier considerations: A JSON Pointer fragment | ||||
identifier may be used, as defined in [RFC6901], Section 6. | ||||
Additional information: | Additional information: | |||
Magic number(s): N/A | ||||
Magic number(s): N/A | ||||
File extensions(s): N/A | File extensions(s): N/A | |||
Macintosh file type code(s): N/A | Macintosh file type code(s): N/A | |||
Person & email address to contact for further information: | Person & email address to contact for further information: | |||
calsify@ietf.org | calsify@ietf.org | |||
Intended usage: | Intended usage: COMMON | |||
COMMON | ||||
Restrictions on usage: | Restrictions on usage: N/A | |||
N/A | ||||
Author: | Author: See the "Authors' Addresses" section of RFC 9553. | |||
See the "Author's Address" section of [I-D.ietf-calext-jscontact]. | ||||
Change controller: | Change controller: IETF | |||
IETF | ||||
3.2. Creation of the "JSContact" Registry Group | 3.2. Creation of the JSContact Registry Group | |||
IANA is asked to create the "JSContact" registry group. The new | IANA has created the "JSContact" registry group. The new registry | |||
registry definitions in the following sections all belong to that | definitions in the following sections all belong to that group. | |||
group. | ||||
3.3. Registry Policy and Change Procedures | 3.3. Registry Policy and Change Procedures | |||
Registry assignments that introduce backwards-incompatible | Registry assignments that introduce backwards-incompatible | |||
(Section 1.9) changes require the JSContact major version to change, | (Section 1.9) changes require the JSContact major version to change; | |||
other changes only require to change the minor version. The registry | other changes only require a change to the minor version. The | |||
policy for assignments that require the JSContact major version to | registry policy for assignments that require the JSContact major | |||
change is Standards Action ([RFC8126], Section 4.9). The registry | version to change is Standards Action ([RFC8126], Section 4.9). The | |||
policy for other assignments is Specification Required ([RFC8126], | registry policy for other assignments is Specification Required | |||
Section 4.6). | ([RFC8126], Section 4.6). | |||
The Designated Expert decides if a major or minor version change is | The designated expert (DE) decides if a major or minor version change | |||
required and assigns the new version to the Version Registry | is required and assigns the new version to the "JSContact Version" | |||
(Section 3.4). Version numbers increment by one, and a major version | registry (Section 3.4). Version numbers increment by one, and a | |||
change resets the minor version to zero. An assignment may apply | major version change resets the minor version to zero. An assignment | |||
multiple changes and to more than one registry at once, in which case | may apply multiple changes and to more than one registry at once, in | |||
a single version change is sufficient. If the registry policy is | which case a single version change is sufficient. If the registry | |||
Specification Required, then the Designated Expert may decide that it | policy is Specification Required, then the DE may decide that it is | |||
is enough to document the new assignment in the Description item of | enough to document the new assignment in the Description item of the | |||
the respective registry. | respective registry. | |||
A registration MUST have an intended usage of common, reserved, or | A registration MUST have an intended usage of common, reserved, or | |||
obsolete. | obsolete. | |||
* A common usage denotes an item with shared semantics and syntax | * A common usage denotes an item with shared semantics and syntax | |||
across systems. Up-to-date systems MUST expect such items to | across systems. Up-to-date systems MUST expect such items to | |||
occur in JSContact data. | occur in JSContact data. | |||
* A reserved usage reserves an item in the registry without | * A reserved usage reserves an item in the registry without | |||
assigning semantics to avoid name collisions with future | assigning semantics to avoid name collisions with future | |||
extensions or protocol use. | extensions or protocol use. Implementations MUST NOT expect or | |||
add items with such names outside the protocols or extensions that | ||||
use them; otherwise, any such JSContact data is invalid. | ||||
* An obsolete usage denotes an item that is no longer expected to be | * An obsolete usage denotes an item that is no longer expected to be | |||
added by up-to-date systems. A new assignment has probably been | added by up-to-date systems. A new assignment has probably been | |||
defined covering the obsolete item's semantics. | defined, covering the obsolete item's semantics. Implementations | |||
MUST expect such items to occur in JSContact data up to the "Until | ||||
Version" registry field, inclusively. They MUST NOT add such | ||||
items for any version after which the item got obsolete; | ||||
otherwise, any such JSContact data is invalid. | ||||
The intended usage of registry items may change between versions, but | ||||
the designated expert must carefully consider the impact on existing | ||||
implementations and standards before doing so. | ||||
The registration procedure is not a formal standards process but | The registration procedure is not a formal standards process but | |||
rather an administrative procedure intended to allow community | rather an administrative procedure intended to allow community | |||
comment and check whether it is coherent without excessive time | comments and to check whether it is coherent without excessive time | |||
delay. It is designed to encourage vendors to document and register | delay. It is designed to encourage vendors to document and register | |||
new items they add for use cases not covered by the original | new items they add for use cases not covered by the original | |||
specification, leading to increased interoperability. | specification, leading to increased interoperability. | |||
3.3.1. Preliminary Community Review | 3.3.1. Preliminary Community Review | |||
Notice of a potential new registration MUST be sent to the Calext | Notice of a potential new registration MUST be sent to the Calext WG | |||
mailing list <calsify@ietf.org> for review. This mailing list is | mailing list <calsify@ietf.org> for review. This mailing list is | |||
appropriate to solicit community feedback on a proposed registry | appropriate for soliciting community feedback on a proposed registry | |||
assignment. | assignment. | |||
The intent of the public posting to this list is to solicit comments | The intent of the public posting to this list is to solicit comments | |||
and feedback on the choice of the item name or value, the unambiguity | and feedback on the choice of the item name or value, the unambiguity | |||
of its description, and a review of any interoperability or security | of its description, and a review of any interoperability or security | |||
considerations. The submitter may submit a revised registration | considerations. The submitter may submit a revised registration | |||
proposal or abandon the registration completely at any time. | proposal or abandon the registration completely at any time. | |||
3.3.2. Submit Request to IANA | 3.3.2. Submit Request to IANA | |||
Registration requests can be sent to <iana@iana.org>. | Registration requests can be sent to IANA <iana@iana.org>. | |||
3.3.3. Designated Expert Review | 3.3.3. Designated Expert Review | |||
The primary concern of the designated expert (DE) is preventing name | The primary concern of the DE is preventing name collisions and | |||
collisions and encouraging the submitter to document security and | encouraging the submitter to document security and privacy | |||
privacy considerations. | considerations. | |||
A new type name, property name or enumerated value MUST NOT differ | A new type name, property name, or enumerated value MUST NOT differ | |||
only in case from an already registered name or value. | only in case from an already-registered name or value. | |||
For a common-use registration, the DE is expected to confirm that | For a common-use registration, the DE is expected to confirm that | |||
suitable documentation is available to ensure interoperability. The | suitable documentation is available to ensure interoperability. The | |||
DE should also verify that the new assignment does not conflict with | DE should also verify that the new assignment does not conflict with | |||
work that is active or already published within the IETF. | work that is active or already published within the IETF. | |||
The DE will either approve or deny the registration request and | The DE will either approve or deny the registration request and | |||
publish a notice of the decision to the Calext WG mailing list or its | publish a notice of the decision to the Calext WG mailing list or its | |||
successor, as well as inform IANA. A denial notice must be justified | successor, as well as inform IANA. A denial notice must be justified | |||
by an explanation, and, in the cases where it is possible, concrete | by an explanation, and in the cases where it is possible, concrete | |||
suggestions on how the request can be modified to become acceptable | suggestions on how the request can be modified to become acceptable | |||
should be provided. | should be provided. | |||
3.3.4. Change Procedures | 3.3.4. Change Procedures | |||
Once a JSContact registry group item has been published by IANA, the | Once a JSContact registry group item has been published by IANA, the | |||
change controller may request a change to its definition. The same | Change Controller may request a change to its definition. The same | |||
procedure that would be appropriate for the original registration | procedure that would be appropriate for the original registration | |||
request is used to process a change request. | request is used to process a change request. | |||
JSContact registrations dot not get deleted; instead, items that are | JSContact registrations do not get deleted; instead, items that are | |||
no longer believed appropriate for use are declared obsolete by a | no longer believed appropriate for use are declared obsolete by a | |||
change to their "intended usage" field; such items will be clearly | change to their "Intended Usage" field; such items will be clearly | |||
marked in the IANA registry. | marked in the IANA registry. | |||
Significant changes to a JSContact registry item's definition should | Significant changes to a JSContact registry item's definition should | |||
be requested only when there are serious omissions or errors in the | be requested only when there are serious omissions or errors in the | |||
published specification, as such changes may cause interoperability | published specification, as such changes may cause interoperability | |||
issues. When review is required, a change request may be denied if | issues. When review is required, a change request may be denied if | |||
it renders entities that were valid under the previous definition | it renders entities that were valid under the previous definition | |||
invalid under the new definition. | invalid under the new definition. | |||
3.4. Creation of the "JSContact Version" Registry | 3.4. Creation of the JSContact Version Registry | |||
IANA is asked to create the "JSContact Version" registry. The | IANA has created the "JSContact Version" registry. The purpose of | |||
purpose of this new registry is to define the allowed value range of | this new registry is to define the allowed value range of JSContact | |||
JSContact major and minor version numbers. | major and minor version numbers. | |||
The registry entries sort numerically ascending by the "Major | The registry entries sort numerically in ascending order by the | |||
Version" column. | "Major Version" column. | |||
The registry process is outlined in Section 3.3. | The registry process is outlined in Section 3.3. | |||
3.4.1. "JSContact Version" Registry Template | 3.4.1. JSContact Version Registry Template | |||
Major Version: This is the numeric value of a JSContact major | Major Version: The numeric value of a JSContact major version | |||
version number. It MUST be a positive integer. | number. It MUST be a positive integer. | |||
Highest Minor Version: This is the maximum numeric value of a | Highest Minor Version: The maximum numeric value of a JSContact | |||
JSContact minor version for the given major version. It MUST be | minor version for the given major version. It MUST be zero or a | |||
zero or a positive integer. All numbers less than or equal this | positive integer. All numbers less than or equal to this value | |||
value are valid minor version values for the given major version. | are valid minor version values for the given major version. | |||
3.4.2. Initial Contents for the "JSContact Version" Registry | 3.4.2. Initial Contents of the JSContact Version Registry | |||
The following table lists the initial valid major and minor version | The following table lists the initial valid major and minor version | |||
number ranges. | number ranges. | |||
+===============+=======================+ | +===============+=======================+===========+ | |||
| Major Version | Highest Minor Version | | | Major Version | Highest Minor Version | Reference | | |||
+===============+=======================+ | +===============+=======================+===========+ | |||
| 1 | 0 | | | 1 | 0 | RFC 9553 | | |||
+---------------+-----------------------+ | +---------------+-----------------------+-----------+ | |||
Table 1: JSContact Versions | Table 1: JSContact Version Registry | |||
3.5. Creation of the "JSContact Properties" Registry | 3.5. Creation of the JSContact Properties Registry | |||
IANA is asked to create the "JSContact Properties" registry. The | IANA has created the "JSContact Properties" registry. The purpose of | |||
purpose of this new registry is to allow interoperability of | this new registry is to allow interoperability of extensions to | |||
extensions to JSContact objects | JSContact objects. | |||
The registry entries sort alphabetically ascending by the "Property | The registry entries sort alphabetically in ascending order by the | |||
Name" column first, "Property Context" second, "Since Version" third. | following columns: "Property Name" first, "Property Context" second, | |||
Equal entries sort in any order. | and "Since Version" third. Equal entries sort in any order. | |||
The registry process for a new property is outlined in Section 3.3. | The registry process for a new property is outlined in Section 3.3. | |||
3.5.1. "JSContact Properties" Registry Template | 3.5.1. JSContact Properties Registry Template | |||
Property Name: This is the name of the property. The property name | ||||
MUST NOT already be registered for any of the object types listed | ||||
in the "Property Context" field of this registration. Other | ||||
object types MAY already have registered a different property with | ||||
the same name; however, the same name MUST only be used when the | ||||
semantics are analogous. | ||||
Property Type: This is the type of this property, using type | Property Name: The name of the property. The property name MUST NOT | |||
signatures, as specified in Section 1.3.2. The property type MUST | already be registered for any of the object types listed in the | |||
be registered in the "JSContact Types" registry. | "Property Context" field of this registration. Other object types | |||
MAY have already registered a different property with the same | ||||
name; however, the same name MUST only be used when the semantics | ||||
are analogous. | ||||
Property Context: This is a comma-separated list of JSContact object | Property Type: For properties with intended usage other than | |||
types (Section 3.6.2) that contain this property. | "reserved", this is the type of this property, using type | |||
signatures as specified in Section 1.3.2. The property type MUST | ||||
be registered in the "JSContact Types" registry. For reserved | ||||
property names, the value MUST be the verbatim string "not | ||||
applicable". | ||||
Reference or Description: This is a brief description or RFC number | Property Context: A comma-separated list of JSContact object types | |||
and section reference where the property is specified (omitted for | (Section 3.6.2) that contain the property. For reserved property | |||
"reserved" property names). This must include references to all | names, the value MAY be the verbatim string "not applicable". | |||
RFC documents where this property is introduced or updated. | ||||
Intended Usage: This may be "common", "reserved", or "obsolete". | Intended Usage: May be "common", "reserved", or "obsolete". | |||
Since Version: This defines the JSContact version on which this | Since Version: The JSContact version on which the property | |||
property definition is based on. The version MUST be one of the | definition is based. The version MUST be one of the allowed | |||
allowed values of the version property in the JSContact Enum Value | values of the version property in the "JSContact Enum Values" | |||
registry (see Table 1). | registry (see Table 1). | |||
Until Version: This defines the JSContact version after which this | Until Version: The JSContact version after which the property was | |||
property got obsoleted and MUST NOT be used in later versions. | obsoleted; therefore, it MUST NOT be used in later versions. The | |||
The Until Version value either MUST NOT be set, or be one of the | Until Version value either MUST NOT be set or MUST be one of the | |||
allowed values of the version property in the JSContact Enum Value | allowed values of the version property in the "JSContact Enum | |||
registry (see Table 1). | Values" registry (see Table 1). | |||
Change Controller: This is who may request a change to this entry's | Change Controller: This is who may request a change to the entry's | |||
definition (IETF for RFCs from the IETF stream). | definition (IETF for RFCs from the IETF stream). | |||
3.5.2. Initial Contents for the "JSContact Properties" Registry | Reference or Description: A brief description or RFC number and | |||
section reference where the property is specified. This must | ||||
include references to all RFC documents where this property is | ||||
introduced or updated. For reserved property names, the reference | ||||
or description MAY be omitted. | ||||
3.5.2. Initial Contents of the JSContact Properties Registry | ||||
The following table lists the initial common usage entries of the | The following table lists the initial common usage entries of the | |||
"JSContact Properties" registry. The Since Version for all | "JSContact Properties" registry. For all properties, the Since | |||
properties is 1.0. The Until Version for all properties is not set. | Version is 1.0, the Until Version is not set, the Change Controller | |||
All RFC section references are for [I-D.ietf-calext-jscontact]. The | is IETF, and RFC section references are for RFC 9553. | |||
change controller for all these properties is IETF. | ||||
+===================+=====================+=========================+============+ | +===================+=====================+==================+========+ | |||
|Property Name |Property Type |Property Context |Reference or| | |Property Name |Property Type |Property Context |Ref | | |||
| | | |Description | | +===================+=====================+==================+========+ | |||
+===================+=====================+=========================+============+ | |@type |String |Address, |Sections| | |||
|@type |String |Address, |Section | | | | |AddressComponent, |2.5.1, | | |||
| | |AddressComponent, |2.5.1, | | | | |Anniversary, |2.8.1, | | |||
| | |Anniversary, Author, |Section | | | | |Author, Card, |2.1.1, | | |||
| | |Card, Calendar, |2.8.1, | | | | |Calendar, |2.4.1, | | |||
| | |CryptoKey, Directory, |Section | | | | |CryptoKey, |2.6.1, | | |||
| | |EmailAddress, |2.1.1, | | | | |Directory, |2.6.2, | | |||
| | |LanguagePref, Link, |Section | | | | |EmailAddress, |2.3.1, | | |||
| | |Media, Name, |2.4.1, | | | | |LanguagePref, |2.3.4, | | |||
| | |NameComponent, Nickname, |Section | | | | |Link, Media, Name,|2.6.3, | | |||
| | |Note, OnlineService, |2.6.1, | | | | |NameComponent, |2.6.4, | | |||
| | |Organization, OrgUnit, |Section | | | | |Nickname, Note, |2.2.1, | | |||
| | |PartialDate,PersonalInfo,|2.6.2, | | | | |OnlineService, |2.2.1.3,| | |||
| | |Phone, Pronouns, |Section | | | | |Organization, |2.8.3, | | |||
| | |Relation, |2.3.1, | | | | |OrgUnit, |2.3.2, | | |||
| | |SchedulingAddress, |Section | | | | |PartialDate, |2.2.2, | | |||
| | |SpeakToAs, Timestamp, |2.3.4, | | | | |PersonalInfo, |2.8.4, | | |||
| | |Title |Section | | | | |Phone, Pronouns, |2.3.3, | | |||
| | | |2.6.3, | | | | |Relation, |2.2.3, | | |||
| | | |Section | | | | |SchedulingAddress,|2.1.8, | | |||
| | | |2.6.4, | | | | |SpeakToAs, |2.4.2, | | |||
| | | |Section | | | | |Timestamp, Title |2.2.4 | | |||
| | | |2.2.1, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |address |String |EmailAddress |Section | | |||
| | | |2.2.1.3, | | | | | |2.3.1 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.3, | | |addresses |Id[Address] |Card |Section | | |||
| | | |Section | | | | | |2.5.1 | | |||
| | | |2.3.2, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |anniversaries |Id[Anniversary] |Card |Section | | |||
| | | |2.2.2, | | | | | |2.8.1 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.4, | | |author |Author |Note |Section | | |||
| | | |Section | | | | | |2.8.3 | | |||
| | | |2.3.3, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |calendars |Id[Calendar] |Card |Section | | |||
| | | |2.2.3, | | | | | |2.4.1 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.1.8, | | |calendarScale |String |PartialDate |Section | | |||
| | | |Section | | | | | |2.8.1 | | |||
| | | |2.4.2, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |components |AddressComponent[] |Address |Section | | |||
| | | |2.2.4 | | | | | |2.5.1 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|version |String |Card |Section | | |components |NameComponent[] |Name |Section | | |||
| | | |2.1.2 | | | | | |2.2.1 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|address |String |EmailAddress |Section | | |contexts |String[Boolean] |Address, Calendar,|Sections| | |||
| | | |2.3.1 | | | | |CryptoKey, |1.4.4, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |Directory, |1.5.1, | | |||
|addresses |Id[Address] |Card |Section | | | | |EmailAddress, |2.5.1, | | |||
| | | |2.5.1 | | | | |LanguagePref, |2.4.1, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |Link, Media, |2.6.1, | | |||
|anniversaries |Id[Anniversary] |Card |Section | | | | |Nickname, |2.6.2, | | |||
| | | |2.8.1 | | | | |OnlineService, |2.3.1, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |Organization, |2.3.4, | | |||
|author |Author |Note |Section | | | | |Phone, Pronouns, |2.6.3, | | |||
| | | |2.8.3 | | | | |SchedulingAddress |2.6.4, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.1.3,| | |||
|calendars |Id[Calendar] |Card |Section | | | | | |2.3.2, | | |||
| | | |2.4.1 | | | | | |2.2.2, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.3.3, | | |||
|calendarScale |String |PartialDate |Section | | | | | |2.2.3, | | |||
| | | |2.8.1 | | | | | |2.4.2 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|components |AddressComponent[] |Address |Section | | |coordinates |String |Address |Section | | |||
| | | |2.5.1 | | | | | |2.5.1 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|components |NameComponent[] |Name |Section | | |countryCode |String |Address |Section | | |||
| | | |2.2.1 | | | | | |2.5.1 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|contexts |String[Boolean] |Address, Calendar, |Section | | |created |UTCDateTime |Card, Note |Sections| | |||
| | |CryptoKey, Directory, |1.5.1, | | | | | |2.1.3, | | |||
| | |EmailAddress, |Section | | | | | |2.8.3 | | |||
| | |LanguagePref, Link, |2.5.1, | | +-------------------+---------------------+------------------+--------+ | |||
| | |Media, Nickname, |Section | | |date |PartialDate|Timestamp|Anniversary |Section | | |||
| | |OnlineService, |2.4.1, | | | | | |2.8.1 | | |||
| | |Organization, Phone, |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | |Pronouns, |2.6.1, | | |day |UnsignedInt |PartialDate |Section | | |||
| | |SchedulingAddress |Section | | | | | |2.8.1 | | |||
| | | |2.6.2, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |defaultSeparator |String |Address, Name |Sections| | |||
| | | |2.3.1, | | | | | |2.5.1, | | |||
| | | |Section | | | | | |2.2.1 | | |||
| | | |2.3.4, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |directories |Id[Directory] |Card |Section | | |||
| | | |2.6.3, | | | | | |2.6.2 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.6.4, | | |emails |Id[EmailAddress] |Card |Section | | |||
| | | |Section | | | | | |2.3.1 | | |||
| | | |2.2.1.3, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |features |String[Boolean] |Phone |Section | | |||
| | | |2.3.2, | | | | | |2.3.3 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.2, | | |full |String |Address, Name |Sections| | |||
| | | |Section | | | | | |2.5.1, | | |||
| | | |2.3.3, | | | | | |2.2.1 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.3, | | |grammaticalGender |String |SpeakToAs |Section | | |||
| | | |Section | | | | | |2.2.3 | | |||
| | | |2.4.2Section| | +-------------------+---------------------+------------------+--------+ | |||
| | | |1.4.4 | | |isOrdered |Boolean |Address, Name |Sections| | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.5.1, | | |||
|coordinates |String |Address |Section | | | | | |2.2.1 | | |||
| | | |2.5.1 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |keywords |String[Boolean] |Card |Section | | |||
|countryCode |String |Address |Section | | | | | |2.8.2 | | |||
| | | |2.5.1 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |kind |String |AddressComponent, |Sections| | |||
|created |UTCDateTime |Card, Note |Section | | | | |Anniversary, |2.5.1, | | |||
| | | |2.1.3, | | | | |Calendar, Card, |2.8.1, | | |||
| | | |Section | | | | |CryptoKey, |2.4.1, | | |||
| | | |2.8.3 | | | | |Directory, Link, |2.1.4, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |Media, |2.6.1, | | |||
|date |PartialDate|Timestamp|Anniversary |Section | | | | |NameComponent, |2.6.2, | | |||
| | | |2.8.1 | | | | |PersonalInfo, |2.6.3, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |Title |2.6.4, | | |||
|day |UnsignedInt |PartialDate |Section | | | | | |2.2.1, | | |||
| | | |2.8.1 | | | | | |2.8.4, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.4 | | |||
|defaultSeparator |String |Address, Name |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.5.1, | | |label |String |Calendar, |Sections| | |||
| | | |Section | | | | |CryptoKey, |1.4.4, | | |||
| | | |2.2.1 | | | | |Directory, |1.5.3, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |EmailAddress, |2.4.1, | | |||
|directories |Id[Directory] |Card |Section | | | | |Link, Media, |2.6.1, | | |||
| | | |2.6.2 | | | | |OnlineService, |2.6.2, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |PersonalInfo, |2.3.1, | | |||
|emails |Id[EmailAddress] |Card |Section | | | | |Phone, |2.6.3, | | |||
| | | |2.3.1 | | | | |SchedulingAddress |2.6.4, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.3.2, | | |||
|features |String[Boolean] |Phone |Section | | | | | |2.8.4, | | |||
| | | |2.3.3 | | | | | |2.3.3, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.4.2 | | |||
|full |String |Address, Name |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.5.1, | | |language |String |Card, LanguagePref|Sections| | |||
| | | |Section | | | | | |2.1.5, | | |||
| | | |2.2.1 | | | | | |2.3.4 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|grammaticalGender |String |SpeakToAs |Section | | |level |String |PersonalInfo |Section | | |||
| | | |2.2.3 | | | | | |2.8.4 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|isOrdered |Boolean |Address, Name |Section | | |links |Id[Link] |Card |Section | | |||
| | | |2.5.1, | | | | | |2.6.3 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.1 | | |listAs |UnsignedInt |Directory, |Sections| | |||
+-------------------+---------------------+-------------------------+------------+ | | | |PersonalInfo |2.6.2, | | |||
|keywords |String[Boolean] |Card |Section | | | | | |2.8.4 | | |||
| | | |2.8.2 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |localizations |String[PatchObject] |Card |Section | | |||
|kind |String |AddressComponent, |Section | | | | | |2.7.1 | | |||
| | |Anniversary, Calendar, |2.5.1, | | +-------------------+---------------------+------------------+--------+ | |||
| | |Card, CryptoKey, |Section | | |media |Id[Media] |Card |Section | | |||
| | |Directory, Link, Media, |2.8.1, | | | | | |2.6.4 | | |||
| | |NameComponent, |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | |PersonalInfo, Title |2.4.1, | | |mediaType |String |Calendar, |Sections| | |||
| | | |Section | | | | |CryptoKey, |1.4.4, | | |||
| | | |2.1.4, | | | | |Directory, Link, |2.4.1, | | |||
| | | |Section | | | | |Media |2.6.1, | | |||
| | | |2.6.1, | | | | | |2.6.2, | | |||
| | | |Section | | | | | |2.6.3, | | |||
| | | |2.6.2, | | | | | |2.6.4 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.6.3, | | |members |String[Boolean] |Card |Section | | |||
| | | |Section | | | | | |2.1.6 | | |||
| | | |2.6.4, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |month |UnsignedInt |PartialDate |Section | | |||
| | | |2.2.1, | | | | | |2.8.1 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.4, | | |name |Name |Card |Section | | |||
| | | |Section | | | | | |2.2.1 | | |||
| | | |2.2.4 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |name |String |Author, Nickname, |Sections| | |||
|label |String |Calendar, CryptoKey, |Section | | | | |Organization, |2.8.3, | | |||
| | |Directory, EmailAddress, |1.5.3, | | | | |OrgUnit, Title |2.2.1.3,| | |||
| | |Link, Media, |Section | | | | | |2.2.2, | | |||
| | |OnlineService, |2.4.1, | | | | | |2.2.4 | | |||
| | |PersonalInfo, Phone, |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | |SchedulingAddress |2.6.1, | | |nicknames |Id[Nickname] |Card |Section | | |||
| | | |Section | | | | | |2.2.1.3 | | |||
| | | |2.6.2, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |note |String |Note |Section | | |||
| | | |2.3.1, | | | | | |2.8.3 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.6.3, | | |notes |Id[Note] |Card |Section | | |||
| | | |Section | | | | | |2.8.3 | | |||
| | | |2.6.4, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |number |String |Phone |Section | | |||
| | | |2.3.2, | | | | | |2.3.3 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.4, | | |onlineServices |Id[OnlineService] |Card |Section | | |||
| | | |Section | | | | | |2.3.2 | | |||
| | | |2.3.3, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |organizationId |String |Title |Section | | |||
| | | |2.4.2, | | | | | |2.2.4 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |1.4.4 | | |organizations |Id[Organization] |Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.2 | | |||
|language |String |Card, LanguagePref |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.1.5, | | |personalInfo |Id[PersonalInfo] |Card |Section | | |||
| | | |Section | | | | | |2.8.4 | | |||
| | | |2.3.4 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |phones |Id[Phone] |Card |Section | | |||
|level |String |PersonalInfo |Section | | | | | |2.3.3 | | |||
| | | |2.8.4 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |phonetic |String |AddressComponent, |Sections| | |||
|links |Id[Link] |Card |Section | | | | |NameComponent |2.5.1.2,| | |||
| | | |2.6.3 | | | | | |2.2.1.2 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|listAs |UnsignedInt |Directory, PersonalInfo |Section | | |phoneticScript |String |Address, Name |Sections| | |||
| | | |2.6.2, | | | | | |2.2.1, | | |||
| | | |Section | | | | | |2.5.1 | | |||
| | | |2.8.4 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |phoneticSystem |String |Address, Name |Sections| | |||
|localizations |String[PatchObject] |Card |Section | | | | | |2.2.1, | | |||
| | | |2.7.1 | | | | | |2.5.1 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|media |Id[Media] |Card |Section | | |place |Address |Anniversary |Section | | |||
| | | |2.6.4 | | | | | |2.8.1 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|mediaType |String |Calendar, CryptoKey, |Section | | |pref |UnsignedInt |Address, Calendar,|Sections| | |||
| | |Directory, Link, Media |1.4.4, | | | | |CryptoKey, |1.4.4, | | |||
| | | |Section | | | | |Directory, |1.5.4, | | |||
| | | |2.4.1, | | | | |EmailAddress, |2.5.1, | | |||
| | | |Section | | | | |LanguagePref, |2.4.1, | | |||
| | | |2.6.1, | | | | |Link, Media, |2.6.1, | | |||
| | | |Section | | | | |Nickname, |2.6.2, | | |||
| | | |2.6.2, | | | | |OnlineService, |2.3.1, | | |||
| | | |Section | | | | |Phone, Pronouns, |2.3.4, | | |||
| | | |2.6.3, | | | | |SchedulingAddress |2.6.3, | | |||
| | | |Section | | | | | |2.6.4, | | |||
| | | |2.6.4 | | | | | |2.2.1.3,| | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.3.2, | | |||
|members |String[Boolean] |Card |Section | | | | | |2.3.3, | | |||
| | | |2.1.6 | | | | | |2.2.3, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.4.2 | | |||
|month |UnsignedInt |PartialDate |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.1 | | |preferredLanguages |String[LanguagePref] |Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.3.4 | | |||
|name |Name |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.1 | | |prodId |String |Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.1.7 | | |||
|name |String |Author, Nickname, |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | |Organization, OrgUnit, |2.8.3, | | |pronouns |Id[Pronouns] |SpeakToAs |Section | | |||
| | |Title |Section | | | | | |2.2.3 | | |||
| | | |2.2.1.3, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |relatedTo |String[Relation] |Card |Section | | |||
| | | |2.2.2, | | | | | |2.1.8 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.4 | | |relation |String[Boolean] |Relation |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.1.8 | | |||
|nicknames |Id[Nickname] |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.1.3 | | |schedulingAddresses|Id[SchedulingAddress]|Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.4.2 | | |||
|note |String |Note |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.3 | | |service |String |OnlineService |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.3.2 | | |||
|notes |Id[Note] |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.3 | | |sortAs |String[String] |Name |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.1 | | |||
|number |String |Phone |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.3.3 | | |sortAs |String |Organization, |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |OrgUnit |2.2.2 | | |||
|onlineServices |Id[OnlineService] |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.3.2 | | |speakToAs |SpeakToAs |Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.3 | | |||
|organizationId |String |Title |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.4 | | |timeZone |String |Address |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.5.1 | | |||
|organizations |Id[Organization] |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.2.2 | | |titles |Id[Title] |Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.4 | | |||
|personalInfo |Id[PersonalInfo] |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.8.4 | | |uid |String |Card |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.1.9 | | |||
|phones |Id[Phone] |Card |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.3.3 | | |units |OrgUnit[] |Organization |Section | | |||
+-------------------+---------------------+-------------------------+------------+ | | | | |2.2.2 | | |||
|phonetic |String |AddressComponent, |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | |NameComponent |2.5.1.2, | | |updated |UTCDateTime |Card |Section | | |||
| | | |Section | | | | | |2.1.10 | | |||
| | | |2.2.1.2 | | +-------------------+---------------------+------------------+--------+ | |||
+-------------------+---------------------+-------------------------+------------+ | |uri |String |Author, Calendar, |Sections| | |||
|phoneticScript |String |Address, Name |Section | | | | |CryptoKey, |1.4.4, | | |||
| | | |2.2.1, | | | | |Directory, Link, |2.8.3, | | |||
| | | |Section | | | | |Media, |2.4.1, | | |||
| | | |2.5.1 | | | | |OnlineService, |2.6.1, | | |||
+-------------------+---------------------+-------------------------+------------+ | | | |SchedulingAddress |2.6.2, | | |||
|phoneticSystem |String |Address, Name |Section | | | | | |2.6.3, | | |||
| | | |2.2.1, | | | | | |2.6.4, | | |||
| | | |Section | | | | | |2.3.2, | | |||
| | | |2.5.1 | | | | | |2.4.2 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|place |Address |Anniversary |Section | | |user |String |OnlineService |Section | | |||
| | | |2.8.1 | | | | | |2.3.2 | | |||
+-------------------+---------------------+-------------------------+------------+ | +-------------------+---------------------+------------------+--------+ | |||
|pref |UnsignedInt |Address, Calendar, |Section | | |utc |UTCDateTime |Timestamp |Section | | |||
| | |CryptoKey, Directory, |1.5.4, | | | | | |2.8.1 | | |||
| | |EmailAddress, |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | |LanguagePref, Link, |2.5.1, | | |value |String |AddressComponent, |Sections| | |||
| | |Media, Nickname, |Section | | | | |NameComponent, |2.5.1, | | |||
| | |OnlineService, Phone, |2.4.1, | | | | |PersonalInfo |2.2.1, | | |||
| | |Pronouns, |Section | | | | | |2.8.4 | | |||
| | |SchedulingAddress |2.6.1, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | |version |String |Card |Section | | |||
| | | |2.6.2, | | | | | |2.1.2 | | |||
| | | |Section | | +-------------------+---------------------+------------------+--------+ | |||
| | | |2.3.1, | | |year |UnsignedInt |PartialDate |Section | | |||
| | | |Section | | | | | |2.8.1 | | |||
| | | |2.3.4, | | +-------------------+---------------------+------------------+--------+ | |||
| | | |Section | | ||||
| | | |2.6.3, | | Table 2: JSContact Properties with "common" Usage | |||
| | | |Section | | ||||
| | | |2.6.4, | | ||||
| | | |Section | | ||||
| | | |2.2.1.3, | | ||||
| | | |Section | | ||||
| | | |2.3.2, | | ||||
| | | |Section | | ||||
| | | |2.3.3, | | ||||
| | | |Section | | ||||
| | | |2.2.3, | | ||||
| | | |Section | | ||||
| | | |2.4.2, | | ||||
| | | |Section | | ||||
| | | |1.4.4 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|preferredLanguages |String[LanguagePref] |Card |Section | | ||||
| | | |2.3.4 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|prodId |String |Card |Section | | ||||
| | | |2.1.7 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|pronouns |Id[Pronouns] |SpeakToAs |Section | | ||||
| | | |2.2.3 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|relatedTo |String[Relation] |Card |Section | | ||||
| | | |2.1.8 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|relation |String[Boolean] |Relation |Section | | ||||
| | | |2.1.8 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|schedulingAddresses|Id[SchedulingAddress]|Card |Section | | ||||
| | | |2.4.2 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|service |String |OnlineService |Section | | ||||
| | | |2.3.2 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|sortAs |String[String] |Name |Section | | ||||
| | | |2.2.1 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|sortAs |String |Organization, OrgUnit |Section | | ||||
| | | |2.2.2 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|speakToAs |SpeakToAs |Card |Section | | ||||
| | | |2.2.3 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|timeZone |String |Address |Section | | ||||
| | | |2.5.1 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|titles |Id[Title] |Card |Section | | ||||
| | | |2.2.4 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|uid |String |Card |Section | | ||||
| | | |2.1.9 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|units |OrgUnit[] |Organization |Section | | ||||
| | | |2.2.2 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|updated |UTCDateTime |Card |Section | | ||||
| | | |2.1.10 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|uri |String |Author, Calendar, |Section | | ||||
| | |CryptoKey, Directory, |2.8.3, | | ||||
| | |Link, Media, |Section | | ||||
| | |OnlineService, |1.4.4, | | ||||
| | |SchedulingAddress |Section | | ||||
| | | |2.4.1, | | ||||
| | | |Section | | ||||
| | | |2.6.1, | | ||||
| | | |Section | | ||||
| | | |2.6.2, | | ||||
| | | |Section | | ||||
| | | |2.6.3, | | ||||
| | | |Section | | ||||
| | | |2.6.4, | | ||||
| | | |Section | | ||||
| | | |2.3.2, | | ||||
| | | |Section | | ||||
| | | |2.4.2 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|user |String |OnlineService |Section | | ||||
| | | |2.3.2 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|utc |UTCDateTime |Timestamp |Section | | ||||
| | | |2.8.1 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|value |String |AddressComponent, |Section | | ||||
| | |NameComponent, |2.5.1, | | ||||
| | |PersonalInfo |Section | | ||||
| | | |2.2.1, | | ||||
| | | |Section | | ||||
| | | |2.8.4 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
|year |UnsignedInt |PartialDate |Section | | ||||
| | | |2.8.1 | | ||||
+-------------------+---------------------+-------------------------+------------+ | ||||
Table 2: JSContact Properties with "common" usage | ||||
The following table lists the initial reserved usage entries of the | The following table lists the initial reserved usage entries of the | |||
"JSContact Properties" registry. All RFC section references are for | "JSContact Properties" registry. For this property, the Change | |||
[I-D.ietf-calext-jscontact]. The change controller for all these | Controller is IETF, and the RFC section reference is for RFC 9553. | |||
properties is IETF. | ||||
+===============+============+============+==============+==========+ | +===============+============+============+=============+==========+ | |||
| Property | Property | Property | Reference or | Intended | | | Property Name | Property | Property | Reference/ | Intended | | |||
| Name | Type | Context | Description | Usage | | | | Type | Context | Description | Usage | | |||
+===============+============+============+==============+==========+ | +===============+============+============+=============+==========+ | |||
| extra | not | not | Section | reserved | | | extra | not | not | Section | reserved | | |||
| | applicable | applicable | 1.5.2 | | | | | applicable | applicable | 1.5.2 | | | |||
+---------------+------------+------------+--------------+----------+ | +---------------+------------+------------+-------------+----------+ | |||
Table 3: JSContact Properties with "reserved" usage | Table 3: JSContact Properties with "reserved" Usage | |||
3.6. Creation of the "JSContact Types" Registry | 3.6. Creation of the JSContact Types Registry | |||
IANA is asked to create the "JSContact Types" registry. The purpose | IANA has created the "JSContact Types" registry. The purpose of this | |||
of this new registry is to avoid name collisions for JSContact type | new registry is to avoid name collisions for JSContact type names and | |||
names and provide a complete reference for all data types used for | provide a complete reference for all data types used for JSContact | |||
JSContact property values. | property values. | |||
The registry entries sort alphabetically ascending by the "Type Name" | The registry entries sort alphabetically in ascending order by the | |||
column. Equal entries sort in any order. | "Type Name" column. Equal entries sort in any order. | |||
The registry process for a new type is outlined in Section 3.3. | The registry process for a new type is outlined in Section 3.3. | |||
3.6.1. "JSContact Types" Registry Template | 3.6.1. JSContact Types Registry Template | |||
Type Name: the name of the type | ||||
Reference or Description: a brief description or RFC number and | Type Name: The name of the type. | |||
section reference where the Type is specified (may be omitted for | ||||
"reserved" type names) | ||||
Intended Usage: common, reserved, or obsolete | Intended Usage: May be "common", "reserved", or "obsolete". | |||
Since Version: This defines the JSContact version on which this type | Since Version: The JSContact version on which this type definition | |||
definition is based on. The version MUST be one of the allowed | is based. The version MUST be one of the allowed values of the | |||
values of the version property in the JSContact Enum Value | version property in the "JSContact Enum Values" registry (see | |||
registry (see Table 1). | Table 1). | |||
Until Version: This defines the JSContact version after which this | Until Version: The JSContact version after which the type definition | |||
type definition got obsoleted and MUST NOT be used in later | was obsoleted; therefore, it MUST NOT be used in later versions. | |||
versions. The Until Version value either MUST be not set, or one | The Until Version value either MUST NOT be set or MUST be one of | |||
of the allowed values of the version property in the JSContact | the allowed values of the version property in the "JSContact Enum | |||
Enum Value registry (see Table 1). | Values" registry (see Table 1). | |||
Change Controller: This is who may request a change to this entry's | Change Controller: This is who may request a change to the entry's | |||
definition (IETF for RFCs from the IETF stream). | definition (IETF for RFCs from the IETF stream). | |||
3.6.2. Initial Contents for the "JSContact Types" Registry | Reference or Description: A brief description or RFC number and | |||
section reference where the Type is specified. For reserved type | ||||
names, the reference or description MAY be omitted. | ||||
The following table lists the initial common usage entries of the | 3.6.2. Initial Contents of the JSContact Types Registry | |||
JSContact Types registry. The Since Version for all types is 1.0. | ||||
The Until Version for all types is not set. All RFC section | The following table lists the initial common usage entries in the | |||
references are for [I-D.ietf-calext-jscontact]. The change | "JSContact Types" registry. For all of these types, the Since | |||
controller for all these properties is IETF. | Version is 1.0, the Until Version is not set, the Change Controller | |||
is IETF, and RFC section references are for RFC 9553. | ||||
+===================+==========================+ | +===================+==========================+ | |||
| Type Name | Reference or Description | | | Type Name | Reference or Description | | |||
+===================+==========================+ | +===================+==========================+ | |||
| Address | Section 2.5.1 | | | Address | Section 2.5.1 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| AddressComponent | Section 2.5.1 | | | AddressComponent | Section 2.5.1 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| Anniversary | Section 2.8.1 | | | Anniversary | Section 2.8.1 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
skipping to change at page 71, line 48 ¶ | skipping to change at line 3149 ¶ | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| Timestamp | Section 2.8.1 | | | Timestamp | Section 2.8.1 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| Title | Section 2.2.4 | | | Title | Section 2.2.4 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| UnsignedInt | Section 1.4.2 | | | UnsignedInt | Section 1.4.2 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| UTCDateTime | Section 1.4.5 | | | UTCDateTime | Section 1.4.5 | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
Table 4: JSContact Types with "common" usage | Table 4: JSContact Types with "common" Usage | |||
The following table lists the initial reserved usage entries of the | The following table lists the initial reserved usage entry of the | |||
JSContact Types registry. All types are for version 1.0. All RFC | "JSContact Types" registry. For this type, the version is 1.0, the | |||
section references are for [I-D.ietf-calext-jscontact]. The change | Change Controller is IETF, and the RFC section reference is for RFC | |||
controller for all these properties is IETF. | 9553. | |||
+===========+==========================+ | +===========+==========================+ | |||
| Type Name | Reference or Description | | | Type Name | Reference or Description | | |||
+===========+==========================+ | +===========+==========================+ | |||
| Resource | Section 1.4.4 | | | Resource | Section 1.4.4 | | |||
+-----------+--------------------------+ | +-----------+--------------------------+ | |||
Table 5: JSContact Types with | Table 5: JSContact Types with | |||
"reserved" usage | "reserved" Usage | |||
3.7. Creation of the "JSContact Enum Values" Registry | 3.7. Creation of the JSContact Enum Values Registry | |||
IANA is asked to create the "JSContact Enum Values" registry. The | IANA has created the "JSContact Enum Values" registry. The purpose | |||
purpose of the new registry is to allow interoperable extension of | of the new registry is to allow interoperable extension of semantics | |||
semantics for JSContact properties with enumerable values. Each such | for JSContact properties with enumerable values. Each such property | |||
property will have a subregistry of allowed values. | will have a subregistry of allowed values. | |||
The registry entries sort alphabetically ascending by the "Property | The registry entries sort alphabetically in ascending order by the | |||
Name" column first, "Property Context" second, "Since Version" third. | following columns: "Property Name" first, "Property Context" second, | |||
The enum values sort alphabetically ascending. Equal entries sort in | and "Since Version" third. The enum values sort alphabetically in | |||
any order. | ascending order. Equal entries sort in any order. | |||
The registry process for a new enum value or adding a new enumerable | The registry process for a new enum value or adding a new enumerable | |||
property is outlined in Section 3.3. | property is outlined in Section 3.3. | |||
3.7.1. "JSContact Enum Values" Registry Property Template | 3.7.1. JSContact Enum Values Registry Property Template | |||
This template is for adding a subregistry for a new enumerable | This template is for adding a subregistry for a new enumerable | |||
property to the "JSContact Enum" registry. | property to the "JSContact Enum Values" registry. | |||
Property Name: These are the name(s) of the property or properties | Property Name: The name(s) of the property or properties where these | |||
where these values may be used. This MUST be registered in the | values may be used. This MUST be registered in the "JSContact | |||
"JSContact Properties" registry. | Properties" registry. | |||
Context: This is the list of allowed object types where the property | Context: The list of allowed object types where the property or | |||
or properties may appear, as registered in the "JSContact | properties may appear, as registered in the "JSContact Properties" | |||
Properties" registry. This disambiguates where there may be two | registry. This disambiguates where there may be two distinct | |||
distinct properties with the same name in different contexts. | properties with the same name in different contexts. | |||
Since Version: This defines the JSContact version on which this enum | Since Version: The JSContact version on which the enum value | |||
value definition is based on. The version MUST be one of the | definition is based. The version MUST be one of the allowed | |||
allowed values of the version property in the JSContact Enum Value | values of the version property in the "JSContact Enum Values" | |||
registry (see Table 1). | registry (see Table 1). | |||
Until Version: This defines the JSContact version after which this | Until Version: The JSContact version after which the enum value | |||
enum value definition got obsoleted and MUST NOT be used in later | definition was obsoleted; therefore, the enum value definition | |||
versions. The Until Version value either MUST be not set, or one | MUST NOT be used in later versions. The Until Version value | |||
of the allowed values of the version property in the JSContact | either MUST NOT be set or MUST be one of the allowed values of the | |||
Enum Value registry (see Table 1). | version property in the "JSContact Enum Values" registry (see | |||
Table 1). | ||||
Change Controller: This is who may request a change to this entry's | Change Controller: This is who may request a change to the entry's | |||
definition (IETF for RFCs from the IETF stream). | definition (IETF for RFCs from the IETF stream). | |||
Initial Contents: This is the initial list of defined values for | Initial Contents: The initial list of defined values for the enum, | |||
this enum, using the template defined in Section 3.7.2. A | using the template defined in Section 3.7.2. A subregistry will | |||
subregistry will be created with these values for this property | be created with these values for this property name/context tuple. | |||
name/context tuple. | ||||
3.7.2. "JSContact Enum Values" Registry Value Template | 3.7.2. JSContact Enum Values Registry Value Template | |||
This template is for adding a new enum value to a subregistry in the | This template is for adding a new enum value to a subregistry in the | |||
JSContact Enum registry. | "JSContact Enum Values" registry. | |||
Enum Value: The verbatim value of the enum. | Enum Value: The verbatim value of the enum. | |||
Reference or Description: A brief description or RFC number and | ||||
section reference for the semantics of this value. | ||||
Since Version: The JSContact version on which the enum value | Since Version: The JSContact version on which the enum value | |||
definition is based on. The version MUST be one of the allowed | definition is based. The version MUST be one of the allowed | |||
values of the version property in the JSContact Enum Value | values of the version property in the "JSContact Enum Values" | |||
registry (see Table 1). | registry (see Table 1). | |||
Until Version: The JSContact version after which this enum value got | Until Version: The JSContact version after which the enum value was | |||
obsoleted and MUST NOT be used in later versions. The Until | obsoleted; therefore, the enum value MUST NOT be used in later | |||
Version value either MUST be not set, or one of the allowed values | versions. The Until Version value either MUST NOT be set or MUST | |||
of the version property in the JSContact Enum Value registry (see | be one of the allowed values of the version property in the | |||
Table 1). | "JSContact Enum Values" registry (see Table 1). | |||
3.7.3. Initial Contents for the "JSContact Enum Values" Registry | Reference or Description: A brief description or RFC number and | |||
section reference for the semantics of the value. | ||||
For each subregistry created in this section, all RFC section | 3.7.3. Initial Contents of the JSContact Enum Values Registry | |||
references are for [I-D.ietf-calext-jscontact]. For all entries, the | ||||
For all entries in each subregistry created in this section, the | ||||
Since Version is 1.0, the Until Version is not set, the Change | Since Version is 1.0, the Until Version is not set, the Change | |||
Controller is IETF. | Controller is IETF, and RFC section references are for RFC 9553. | |||
Property Name: contexts | Property Name: contexts | |||
Context: Address | Context: Address | |||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | +============+==========================+ | |||
| Enum Value | Reference or Description | | | Enum Value | Reference or Description | | |||
+============+==========================+ | +============+==========================+ | |||
| billing | Section 2.5.1 | | | billing | Section 2.5.1 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| delivery | Section 2.5.1 | | | delivery | Section 2.5.1 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| private | Section 1.5.1 | | | private | Section 1.5.1 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| work | Section 1.5.1 | | | work | Section 1.5.1 | | |||
skipping to change at page 75, line 48 ¶ | skipping to change at line 3325 ¶ | |||
| feminine | Section 2.2.3 | | | feminine | Section 2.2.3 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| inanimate | Section 2.2.3 | | | inanimate | Section 2.2.3 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| masculine | Section 2.2.3 | | | masculine | Section 2.2.3 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| neuter | Section 2.2.3 | | | neuter | Section 2.2.3 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
Table 9: JSContact Enum Values for | Table 9: JSContact Enum Values for | |||
kind (Context: SpeakToAs) | grammaticalGender (Context: | |||
SpeakToAs) | ||||
Property Name: kind | Property Name: kind | |||
Context: AddressComponent | Context: AddressComponent | |||
Initial Contents: | Initial Contents: | |||
+===============+==========================+ | +===============+==========================+ | |||
| Enum Value | Reference or Description | | | Enum Value | Reference or Description | | |||
+===============+==========================+ | +===============+==========================+ | |||
| apartment | Section 2.5.1 | | | apartment | Section 2.5.1 | | |||
+---------------+--------------------------+ | +---------------+--------------------------+ | |||
| block | Section 2.5.1 | | | block | Section 2.5.1 | | |||
+---------------+--------------------------+ | +---------------+--------------------------+ | |||
| building | Section 2.5.1 | | | building | Section 2.5.1 | | |||
+---------------+--------------------------+ | +---------------+--------------------------+ | |||
| country | Section 2.5.1 | | | country | Section 2.5.1 | | |||
skipping to change at page 80, line 32 ¶ | skipping to change at line 3538 ¶ | |||
| high | Section 2.8.4 | | | high | Section 2.8.4 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| low | Section 2.8.4 | | | low | Section 2.8.4 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
| medium | Section 2.8.4 | | | medium | Section 2.8.4 | | |||
+------------+--------------------------+ | +------------+--------------------------+ | |||
Table 20: JSContact Enum Values for | Table 20: JSContact Enum Values for | |||
level (Context: PersonalInfo) | level (Context: PersonalInfo) | |||
Property Name: phoneticSystem | ||||
Context: Address, Name | ||||
Initial Contents: | ||||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| ipa | Section 1.5.5 | | ||||
+------------+--------------------------+ | ||||
| jyut | Section 1.5.5 | | ||||
+------------+--------------------------+ | ||||
| piny | Section 1.5.5 | | ||||
+------------+--------------------------+ | ||||
Table 21: JSContact Enum Values for | ||||
phoneticSystem (Context: Address, | ||||
Name) | ||||
Property Name: relation | Property Name: relation | |||
Context: Relation | Context: Relation | |||
Initial Contents: | Initial Contents: | |||
+==============+==========================+ | +==============+==========================+ | |||
| Enum Value | Reference or Description | | | Enum Value | Reference or Description | | |||
+==============+==========================+ | +==============+==========================+ | |||
| acquaintance | Section 2.1.8 | | | acquaintance | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| agent | Section 2.1.8 | | | agent | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| child | Section 2.1.8 | | | child | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| colleague | Section 2.1.8 | | | colleague | Section 2.1.8 | | |||
skipping to change at page 81, line 49 ¶ | skipping to change at line 3602 ¶ | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| parent | Section 2.1.8 | | | parent | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| sibling | Section 2.1.8 | | | sibling | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| spouse | Section 2.1.8 | | | spouse | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
| sweetheart | Section 2.1.8 | | | sweetheart | Section 2.1.8 | | |||
+--------------+--------------------------+ | +--------------+--------------------------+ | |||
Table 21: JSContact Enum Values for | Table 22: JSContact Enum Values for | |||
relation (Context: Relation) | relation (Context: Relation) | |||
Property Name: phoneticSystem | ||||
Context: Address, Name | ||||
Initial Contents: | ||||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| ipa | Section 1.5.5 | | ||||
+------------+--------------------------+ | ||||
| jyut | Section 1.5.5 | | ||||
+------------+--------------------------+ | ||||
| piny | Section 1.5.5 | | ||||
+------------+--------------------------+ | ||||
Table 22: JSContact Enum Values for | ||||
phoneticSystem (Context: Address, | ||||
Name) | ||||
4. Security Considerations | 4. Security Considerations | |||
Contact information is very privacy-sensitive. It can reveal the | Contact information is very privacy sensitive. It can reveal the | |||
identity, location and credentials information, employment status, | identity, location, credentials information, employment status, | |||
interests and hobbies, and social network of a user. Its | interests and hobbies, and social network of a user. Its | |||
transmission and storage must be done carefully to protect it from | transmission and storage must be done carefully to protect it from | |||
possible threats, such as eavesdropping, replay, message insertion, | possible threats such as eavesdropping, replay, message insertion, | |||
deletion, modification, and on-path attacks. | deletion, modification, and on-path attacks. | |||
The data being stored and transmitted may be used in systems with | The data being stored and transmitted may be used in systems with | |||
real-world consequences. For example, a malicious actor might | real-world consequences. For example, a malicious actor might | |||
provide JSContact data that uses the name of another person but | provide JSContact data that uses the name of another person but | |||
insert their contact details to impersonate the unknown victim. Such | insert their contact details to impersonate the unknown victim. Such | |||
systems must be careful to authenticate all data they receive to | systems must be careful to authenticate all data they receive to | |||
prevent them from being subverted and ensure the change comes from an | prevent them from being subverted and ensure the change comes from an | |||
authorized entity. | authorized entity. | |||
skipping to change at page 83, line 45 ¶ | skipping to change at line 3678 ¶ | |||
number of URIs. In the case of published address books with a large | number of URIs. In the case of published address books with a large | |||
number of subscribers, such objects could be widely distributed. | number of subscribers, such objects could be widely distributed. | |||
Implementations should be careful to limit the automatic fetching of | Implementations should be careful to limit the automatic fetching of | |||
linked resources to reduce the risk of this being an amplification | linked resources to reduce the risk of this being an amplification | |||
vector for a denial-of-service attack. | vector for a denial-of-service attack. | |||
5. References | 5. References | |||
5.1. Normative References | 5.1. Normative References | |||
[IANATZ] "IANA Time Zone Database", | [IANA-TZ] IANA, "Time Zone Database", | |||
<https://www.iana.org/time-zones>. | <https://www.iana.org/time-zones>. | |||
[IANAvCard] | [IANA-vCard] | |||
"IANA vCard Elements", <https://www.iana.org/assignments/ | IANA, "vCard Elements", | |||
vcard-elements/vcard-elements.xhtml>. | <https://www.iana.org/assignments/vcard-elements>. | |||
[ISO.3166-1.2006] | [ISO.3166-1] | |||
International Organization for Standardization, "Codes for | International Organization for Standardization, "Codes for | |||
the representation of names of countries, 3rd edition", | the representation of names of countries and their | |||
ISO Standard 3166-1, 2006. | subdivisions -- Part 1: Country codes", ISO 3166-1:2020, | |||
August 2020. | ||||
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | |||
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | |||
<https://www.rfc-editor.org/info/rfc1034>. | <https://www.rfc-editor.org/info/rfc1034>. | |||
[RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
skipping to change at page 86, line 5 ¶ | skipping to change at line 3783 ¶ | |||
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>. | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
5.2. Informative References | 5.2. Informative References | |||
[I-D.ietf-calext-jscontact] | [IPA] IPA, "International Phonetic Alphabet", | |||
Stepanek, R. and M. Loffredo, "JSContact: A JSON | ||||
representation of contact data", Work in Progress, | ||||
Internet-Draft, draft-ietf-calext-jscontact-15, 18 | ||||
September 2023, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-calext-jscontact-15>. | ||||
[I-D.ietf-uuidrev-rfc4122bis] | ||||
Davis, K. R., Peabody, B., and P. Leach, "Universally | ||||
Unique IDentifiers (UUID)", Work in Progress, Internet- | ||||
Draft, draft-ietf-uuidrev-rfc4122bis-14, 6 November 2023, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev- | ||||
rfc4122bis-14>. | ||||
[IPA] "International Phonetic Alphabet", | ||||
<https://www.internationalphoneticalphabet.org/>. | <https://www.internationalphoneticalphabet.org/>. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
DOI 10.17487/RFC3261, June 2002, | DOI 10.17487/RFC3261, June 2002, | |||
<https://www.rfc-editor.org/info/rfc3261>. | <https://www.rfc-editor.org/info/rfc3261>. | |||
[RFC3966] Schulzrinne, H., "The tel URI for Telephone Numbers", | [RFC3966] Schulzrinne, H., "The tel URI for Telephone Numbers", | |||
RFC 3966, DOI 10.17487/RFC3966, December 2004, | RFC 3966, DOI 10.17487/RFC3966, December 2004, | |||
skipping to change at page 87, line 28 ¶ | skipping to change at line 3841 ¶ | |||
[RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | |||
January 2019, <https://www.rfc-editor.org/info/rfc8499>. | January 2019, <https://www.rfc-editor.org/info/rfc8499>. | |||
[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>. | |||
[UBiDi] "Unicode® Standard Annex #9: Unicode Bidirectional | [UBiDi] The Unicode Consortium, "Unicode Standard Annex #9: | |||
Algorithm", <https://www.unicode.org/reports/tr9/>. | Unicode Bidirectional Algorithm", Revision 48, | |||
Unicode 15.1.0, August 2023, | ||||
<https://www.unicode.org/reports/tr9/>. | ||||
[W3C-URL] "W3C WG URL - Living Standard — Last Updated 21 August | [UUID] Davis, K. R., Peabody, B. G., and P. Leach, "Universally | |||
2023", <https://url.spec.whatwg.org>. | Unique IDentifiers (UUID)", Work in Progress, Internet- | |||
Draft, draft-ietf-uuidrev-rfc4122bis-14, 6 November 2023, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev- | ||||
rfc4122bis-14>. | ||||
[WHATWG-URL] | ||||
WHATWG, "URL Living Standard", January 2024, | ||||
<https://url.spec.whatwg.org>. | ||||
Authors' Addresses | Authors' Addresses | |||
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 | |||
Mario Loffredo | Mario Loffredo | |||
IIT-CNR | IIT-CNR | |||
Via Moruzzi,1 | Via Moruzzi, 1 | |||
56124 Pisa | 56124 Pisa | |||
Italy | Italy | |||
Email: mario.loffredo@iit.cnr.it | Email: mario.loffredo@iit.cnr.it | |||
End of changes. 542 change blocks. | ||||
1640 lines changed or deleted | 1496 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |