| rfc9982v1.txt | rfc9982.txt | |||
|---|---|---|---|---|
| skipping to change at line 81 ¶ | skipping to change at line 81 ¶ | |||
| by that contact card. For the same purpose, the vCard [RFC6350] | by that contact card. For the same purpose, the vCard [RFC6350] | |||
| contact format defines the UID property, an optional property of a | contact format defines the UID property, an optional property of a | |||
| vCard instance. Throughout the rest of this document, the term uid | vCard instance. Throughout the rest of this document, the term uid | |||
| (all lowercase) denotes the JSContact uid property, and the term UID | (all lowercase) denotes the JSContact uid property, and the term UID | |||
| (all uppercase) denotes the vCard UID property. | (all uppercase) denotes the vCard UID property. | |||
| The uid property being defined as mandatory in JSContact has shown to | The uid property being defined as mandatory in JSContact has shown to | |||
| be applicable for some use cases but turned out to be an issue in | be applicable for some use cases but turned out to be an issue in | |||
| other contexts. | other contexts. | |||
| For example, the CardDAV protocol [RFC6352] requires the UID property | 1. A stated goal of JSContact is to be compatible with the semantics | |||
| of a vCard object [RFC6350] to be set. Accordingly, an internet | of the vCard data format (Section 1 of [RFC9553]). But [RFC6350] | |||
| server that implements both CardDAV and JSON Meta Application | defines the UID property of a vCard to be optional, and | |||
| Protocol (JMAP) for Contacts [RFC9610] requires the uid property of a | consequently, the semantics of JSContact and vCard differ for | |||
| JSContact Card to be set. In contrast, protocols such as | such a crucial common element. | |||
| Registration Data Access Protocol (RDAP) [RFC9083] have no use for | ||||
| the uid property, either because they use different identifiers or | ||||
| they prefer to not include any unique identifier in the contact data | ||||
| at all. JSContact should not require them to generate unique | ||||
| identifiers that are irrelevant to their use case. | ||||
| Also, one of the stated goals of JSContact is to be compatible with | 2. The CardDAV protocol [RFC6352] requires the UID property of a | |||
| the semantics of the vCard data format (Section 1 of [RFC9553]). But | vCard object [RFC6350] to be set. Accordingly, an internet | |||
| [RFC6350] defines the UID property of a vCard to be optional, and | server that in addition to CardDAV also implements JSON Meta | |||
| consequently, the semantics of JSContact and vCard differ for such a | Application Protocol (JMAP) for Contacts [RFC9610] also expects | |||
| crucial common element. | the uid property of a JSContact Card to be set. In contrast, | |||
| protocols such as RDAP [RFC9083] have no use for the uid | ||||
| property, either because they use different identifiers or they | ||||
| prefer to not include any unique identifier in the contact data | ||||
| at all. JSContact should not require them to generate unique | ||||
| identifiers that are irrelevant to their use case. | ||||
| In case of vCards without a UID property (Section 6.7.6 of [RFC6350]) | 3. Converting vCards having no UID property to JSContact is | |||
| being converted to JSContact, requiring unique identifiers is | especially problematic: Section 2.1.1 of [RFC9555] requires | |||
| especially problematic: The Card uid property is mandatory, and | implementations in this case to generate a unique identifier | |||
| accordingly, Section 2.1.1 of [RFC9555] requires implementations to | during conversion but does not require it to be the same across | |||
| generate some unique identifier for it during conversion, but it does | implementations or even one implementation converting the same | |||
| not guarantee it to be the same across implementations or even one | Card multiple times. A recipient being unaware that the uid | |||
| implementation converting the same Card multiple times. A recipient | property value of such a Card object is ephemeral might refer to | |||
| being unaware that the uid property value of such a Card object is | it in the members property or relatedTo property of another Card | |||
| ephemeral might refer to it in the members property or relatedTo | object, introducing invalid relations between contact cards. | |||
| property of another Card object, introducing invalid relations | ||||
| between contact cards. | ||||
| 2. Notational Conventions | 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 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 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]. | |||
| skipping to change at line 141 ¶ | skipping to change at line 139 ¶ | |||
| Implementations MUST create JSContact data that complies with the | Implementations MUST create JSContact data that complies with the | |||
| definitions of version "2.0" (or some later registered version) and | definitions of version "2.0" (or some later registered version) and | |||
| MUST set the version property of the JSContact Card object to that | MUST set the version property of the JSContact Card object to that | |||
| version. They MUST NOT reject a Card object without the uid property | version. They MUST NOT reject a Card object without the uid property | |||
| as invalid unless specified differently in another document or unless | as invalid unless specified differently in another document or unless | |||
| the Card version property has value "1.0". As any valid version | the Card version property has value "1.0". As any valid version | |||
| "1.0" JSContact Card is also valid according to version "2.0", there | "1.0" JSContact Card is also valid according to version "2.0", there | |||
| is no need to migrate existing JSContact data. | is no need to migrate existing JSContact data. | |||
| Setting the uid property is use case specific. If an implementation | ||||
| is able to consistently generate the exact same unique identifier for | ||||
| a JSContact Card representing the same entity and no protocol- | ||||
| specific concerns prevail, it is recommended to set the uid property. | ||||
| This document does not redefine the vCard UID property. | This document does not redefine the vCard UID property. | |||
| 4. Redefined uid Property | 4. Redefined uid Property | |||
| This document redefines the type signature of the uid property, | This document redefines the type signature of the uid property, | |||
| originally defined in Section 2.1.9 of [RFC9553]. | originally defined in Section 2.1.9 of [RFC9553]. | |||
| OLD: | OLD: | |||
| | *uid: String (mandatory).* | | *uid: String (mandatory).* | |||
| skipping to change at line 182 ¶ | skipping to change at line 175 ¶ | |||
| vCard, originally defined in Section 2.1.1 of [RFC9555]. The new | vCard, originally defined in Section 2.1.1 of [RFC9555]. The new | |||
| conversion rule is as follows: | conversion rule is as follows: | |||
| Implementations that convert a vCard without a UID property | Implementations that convert a vCard without a UID property | |||
| (Section 6.7.6 of [RFC6350]) to a Card of version "2.0" or higher | (Section 6.7.6 of [RFC6350]) to a Card of version "2.0" or higher | |||
| MUST NOT generate a unique identifier as a value for the uid property | MUST NOT generate a unique identifier as a value for the uid property | |||
| (Section 2.1.9 of [RFC9553]). | (Section 2.1.9 of [RFC9553]). | |||
| When converting a vCard without a UID property to JSContact version | When converting a vCard without a UID property to JSContact version | |||
| "1.0", implementations MUST generate a value for the uid property. | "1.0", implementations MUST generate a value for the uid property. | |||
| Generating unique identifiers is implementation specific. An | How to generate unique identifiers is implementation-specific. | |||
| implementation SHOULD generate the same value when generating the | Implementations SHOULD generate the same value when generating the | |||
| same Card multiple times. Section 1 describes why this is | same Card multiple times, but as Section 1 describes, this still | |||
| problematic. Consequently, implementations SHOULD NOT convert to | cannot prevent interoperability issues. Consequently, | |||
| version "1.0" Card objects. | implementations SHOULD NOT convert to version "1.0" Card objects. | |||
| 6. Other Changes | 6. Other Changes | |||
| This document also registers the JSCOMPS parameter in the IANA "vCard | This document also registers the JSCOMPS parameter in the IANA "vCard | |||
| Parameters" registry. The parameter was defined in Section 3.3.1 of | Parameters" registry. The parameter was defined in Section 3.3.1 of | |||
| [RFC9555] but mistakenly not registered at IANA. | [RFC9555] but mistakenly not registered at IANA. | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| 7.1. Update to the JSContact Version Registry | 7.1. Update to the JSContact Version Registry | |||
| End of changes. 5 change blocks. | ||||
| 36 lines changed or deleted | 29 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||