RFC draft-stepanek-jscontact-profiles-00 | JSContact Profiles | February 2025 |
Stepanek | Expires 25 August 2025 | [Page] |
This document defines JSContact profiles, a named subsets of JSContact elements that are supported in context of a contact data exchange protocol or other use case. It aims to facilitate using JSContact in contexts where supporting all of JSContact semantics is not appropriate.¶
This Internet-Draft is submitted in full conformance with the 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 and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 25 August 2025.¶
Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The ABNF definitions in this document use the notations of [RFC5234]. ABNF rules not defined in this document are defined in either [RFC5234] (such as the ABNF for CRLF, WSP, DQUOTE, VCHAR, ALPHA, and DIGIT) or [RFC6350].¶
The JSContact [RFC9553] contact card data model and format is designed for use in address book applications and directory services. Intended as an alternative to the prevalent vCard [RFC6350] data format, it covers vCard core semantics and extensions, and provides a rich model for personal names, postal addresses and localization. All JSContact elements are relevant for some contact card use case and, similar to vCard, implementations are expected to support these elements when exchanging contact card information using protocols such as CardDAV [RFC6352] and JMAP for Contacts [RFC9610].¶
In contrast, other protocols and internet standards might require to exchange some contact card information, but not need all of what JSContact provides. Section 1.7.4 of [RFC9553] outlines how JSContact implementations may ignore unknown JSContact elements, but this only applies to future extensions of [RFC9553]; they are still expected to implement all of the core specification. Also, for some protocols the extensibility of JSContact and the requirement to preserve arbitrary contact elements might not be adequate.¶
To make use of JSContact under these circumstances, this document defines a new IANA registry for JSContact that allows to register named subsets of JSContact elements. These subsets are referred to as "JSContact profiles", which bring the following benefits:¶
This document is organized as follows: Section 3 defines JSContact profiles. Section 5 summarizes the relevant information for IANA to establish the JSContact Profiles registry. This document does not define any specific JSContact profile.¶
A JSContact profile is a named subset of JSContact elements. The JSContact elements MUST be registered in the IANA JSContact registry. A JSContact extension MAY define both a new profile and new elements, as long as they are registered at the same time.¶
A JSContact object conforms to a profile if all its elements are in the subset defined by that profile.¶
To define the subset of supported JSContact elements, profiles MAY:¶
Profiles MUST NOT:¶
A JSContact profile MUST be registered at IANA (see Section 5).¶
Every JSContact profile MUST have a unique name. The name MUST only contain ASCII lower case alphabetic and numeric characters, optionally separated by hyphen. Formally, it MUST be a valid "profile-name" defined in the appendix section in Figure 1.¶
The subset of JSContact elements supported by a profile is defined as a list of properties per object type. A JSContact property of an object type is part of this subset if one of the following conditions apply:¶
A profile MUST explicitly list at least one property.¶
If at least one property is listed explicitly for an object type, then all mandatory properties of that object type MUST be listed (this is to allow a profile restrict an object type to only its mandatory properties). As an exceptions to this rule the following properties need not be listed, they are always supported:¶
Each property MAY be further restricted as outlined in Section 3.1. The IANA registry template in Section 5 formally defines the format of property list entries. Section 4 illustrates this by example.¶
This section provides an example for a JSContact profile. This profile is just for illustration, it is not registered at IANA.¶
The profile name is "jscontact-profile-example". It lists the following properties:¶
Property Name | Property Context | Restricted to be Mandatory | Restricted Enum Values | Restricted Property Type |
---|---|---|---|---|
addresses | Card | |||
emails | Card | |||
kind | Card | individual | ||
name | Card | |||
uid | Card | |||
full | Address | Mandatory | ||
components | Name | |||
full | Name | |||
kind | NameComponent | |||
value | NameComponent |
This profile describes contact cards that only can contain contact information for individuals, including their full postal address lines (rather than distinct address components) and their full name and distinct name components. It neither supports phonetics nor ordered components for names and addresses. The only additional contact information that is supported in this profile are email addresses.¶
The following Card object conforms to that profile:¶
{ "@type": "Card", "version": "1.0", "uid": "f5e4cd4f-4283-4d50-bd52-61d07dda971e", "name": { "components": [ { "kind": "surname", "value": "Doe" }, { "kind": "given", "value": "Jane" } ] }, "addresses": { "a1": { "full": "71 Cherry Court, Somewhere, 123SO, UK" } }, "emails": { "e1": { "address": "[email protected]" } } }¶
This document does not provide new security considerations. The security considerations of Section 4 of [RFC9553] apply.¶
profile-name = LALPHA *[ ["-"] LALPHA ] LALPHA = %x61-7A | DIGIT ; a-z or 0-9