Internet Engineering Task Force (IETF) N. Jenkins, Ed. Request for Comments: 9610 Fastmail Category: Standards Track December 2024 ISSN: 2070-1721
This document specifies a data model for synchronising contact data with a server using the JSON Meta Application Protocol (JMAP).
このドキュメントは、JSON Metaアプリケーションプロトコル(JMAP)を使用してサーバーと連絡先データを同期するためのデータモデルを指定します。
This is an Internet Standards Track document.
これは、インターネット標準トラックドキュメントです。
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
このドキュメントは、インターネットエンジニアリングタスクフォース(IETF)の製品です。IETFコミュニティのコンセンサスを表しています。公開レビューを受けており、インターネットエンジニアリングステアリンググループ(IESG)からの出版が承認されています。インターネット標準の詳細については、RFC 7841のセクション2で入手できます。
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/rfc9610.
このドキュメントの現在のステータス、任意のERRATA、およびそのフィードバックを提供する方法に関する情報は、https://www.rfc-editor.org/info/rfc9610で取得できます。
Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved.
著作権(c)2024 IETF Trustおよび文書著者として特定された人。無断転載を禁じます。
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.
このドキュメントは、BCP 78およびIETFドキュメント(https://trustee.ietf.org/license-info)に関連するIETF Trustの法的規定の対象となります。この文書に関するあなたの権利と制限を説明するので、これらの文書を注意深く確認してください。このドキュメントから抽出されたコードコンポーネントには、セクション4.Eで説明されている法的規定のセクション4.Eで説明されており、改訂されたBSDライセンスで説明されている保証なしで提供されるように、改訂されたBSDライセンステキストを含める必要があります。
1. Introduction 1.1. Notational Conventions 1.2. Terminology 1.3. Data Model Overview 1.4. Addition to the Capabilities Object 1.4.1. urn:ietf:params:jmap:contacts 2. AddressBooks 2.1. AddressBook/get 2.2. AddressBook/changes 2.3. AddressBook/set 3. ContactCards 3.1. ContactCard/get 3.2. ContactCard/changes 3.3. ContactCard/query 3.3.1. Filtering 3.3.2. Sorting 3.4. ContactCard/queryChanges 3.5. ContactCard/set 3.6. ContactCard/copy 4. Examples 4.1. Fetching Initial Data 4.2. Changing the Default Address Book 5. Internationalisation Considerations 6. Security Considerations 7. IANA Considerations 7.1. JMAP Capability Registration for "contacts" 7.2. JMAP Data Type Registration for "AddressBook" 7.3. JMAP Data Type Registration for "ContactCard" 7.4. JMAP Error Codes Registry 7.4.1. addressBookHasContents 7.5. JSContact Property Registrations 7.5.1. id 7.5.2. addressBookIds 7.5.3. blobId 8. References 8.1. Normative References 8.2. Informative References Author's Address
The JSON Meta Application Protocol (JMAP) [RFC8620] is a generic protocol for synchronising data, such as mail, calendars, or contacts, between a client and a server. It is optimised for mobile and web environments and aims to provide a consistent interface to different data types.
JSON Meta Application Protocol(JMAP)[RFC8620]は、クライアントとサーバー間のメール、カレンダー、連絡先などのデータを同期するための一般的なプロトコルです。モバイルおよびWeb環境向けに最適化されており、さまざまなデータ型に一貫したインターフェイスを提供することを目的としています。
This specification defines a data model for synchronising contacts between a client and a server using JMAP.
この仕様は、JMAPを使用してクライアントとサーバー間の連絡先を同期するためのデータモデルを定義します。
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.
「必須」、「必要」、「必須」、「shall」、「shall」、「suff」、 "not"、 "becommended"、 "becommented"、 "may"、 "optional「このドキュメントでは、BCP 14 [RFC2119] [RFC8174]で説明されているように解釈されます。
Type signatures, examples, and property descriptions in this document follow the conventions established in Section 1.1 of [RFC8620]. The Id, UnsignedInt, and UTCDate data types defined in Sections 1.2, 1.3, and 1.4 of [RFC8620] are also used in this document.
このドキュメントのタイプシグネチャ、例、およびプロパティの説明は、[RFC8620]のセクション1.1で確立された規則に従っています。[RFC8620]のセクション1.2、1.3、および1.4で定義されているID、UnsignedInt、およびUTCDATEデータ型も、このドキュメントで使用されています。
The same terminology used in the core JMAP specification (see Section 1.6 of [RFC8620]) is also used in this document.
このドキュメントでは、コアJMAP仕様([RFC8620]のセクション1.6を参照)で使用されているのと同じ用語も使用されています。
The terms AddressBook and ContactCard (with these specific capitalizations) are used to refer to the data types defined in this document and instances of those data types.
アドレスブックとコンタクトカード(これらの特定の大文字を使用)は、このドキュメントで定義されているデータ型とそれらのデータ型のインスタンスを参照するために使用されます。
An Account (see Section 1.6.2 of [RFC8620]) with support for the contact data model contains zero or more AddressBook objects, which is a named collection of zero or more ContactCards. A ContactCard is a representation of a person, company, entity, or a group of such entities in JSContact Card format, as defined in Section 2 of [RFC9553]. Each ContactCard belongs to one or more AddressBooks.
連絡先データモデルのサポートを備えたアカウント([RFC8620]のセクション1.6.2を参照)には、ゼロ以上のアドレスブックオブジェクトが含まれています。コンタクトカードとは、[RFC9553]のセクション2で定義されているように、JSCONTACTカード形式の個人、会社、エンティティ、またはそのようなエンティティのグループの表現です。各コンタクトカードは、1つ以上のアドレスブックに属します。
In servers with support for JMAP Sharing [RFC9670], users may see and configure sharing of contact data with others. Sharing permissions are managed per AddressBook.
JMAP共有[RFC9670]をサポートするサーバーでは、ユーザーは他の人と連絡先データの共有を見て構成することができます。共有権限は、アドレスブックごとに管理されます。
The capabilities object is returned as part of the JMAP Session object; see Section 2 of [RFC8620]. This document defines one additional capability URI.
機能オブジェクトは、JMAPセッションオブジェクトの一部として返されます。[RFC8620]のセクション2を参照してください。このドキュメントでは、1つの追加の機能URIを定義します。
This represents support for the AddressBook and ContactCard data types and associated API methods. The value of this property in the JMAP Session "capabilities" property is an empty object.
これは、アドレスブックおよび連絡先データ型および関連するAPIメソッドのサポートを表しています。JMAPセッション「機能」プロパティのこのプロパティの値は、空のオブジェクトです。
The value of this property in an account's "accountCapabilities" property is an object that MUST contain the following information on server capabilities and permissions for that account:
アカウントの「accountcapability」プロパティ内のこのプロパティの値は、そのアカウントのサーバー機能と許可に関する次の情報を含める必要があるオブジェクトです。
*maxAddressBooksPerCard*: UnsignedInt|null
*maxaddressbookspercard*:unsignedint | null
The maximum number of AddressBooks (see Section 2) that can be assigned to a single ContactCard object (see Section 3). This MUST be an integer >= 1, or null for no limit (or rather, the limit is always the number of AddressBooks in the account).
単一のコンタクトカードオブジェクト(セクション3を参照)に割り当てることができるアドレスブックの最大数(セクション2を参照)。これは整数> = 1、または制限なしでnullでなければなりません(または、制限は常にアカウント内のアドレスブックの数です)。
*mayCreateAddressBook*: Boolean
*maycreateaddressbook*:boolean
The user may create an AddressBook in this account if, and only if, this is true.
ユーザーは、このアカウントにアドレスブックを作成する場合があります。
An AddressBook is a named collection of ContactCards. All ContactCards are associated with one or more AddressBooks.
アドレスブックは、コンタクトカードの名前が付けられたコレクションです。すべてのコンタクトカードは、1つ以上のアドレスブックに関連付けられています。
An *AddressBook* object has the following properties:
*アドレスブック *オブジェクトには次のプロパティがあります。
*id*: Id (immutable; server-set)
*id*:id(inmutable; server-set)
The id of the AddressBook.
アドレスブックのID。
*name*: String
*名前*:文字列
The user-visible name of the AddressBook. This MUST NOT be the empty string and MUST NOT be greater than 255 octets in size when encoded as UTF-8.
アドレスブックのユーザー可視名。これは空の文字列であってはならず、UTF-8としてエンコードされた場合、サイズが255オクテットを超えてはなりません。
*description*: String|null (default: null)
*説明*:string | null(デフォルト:null)
An optional long-form description of the AddressBook that provides context in shared environments where users need more than just the name.
ユーザーが名前以上のものを必要とする共有環境でコンテキストを提供するアドレスブックのオプションの長い形式の説明。
*sortOrder*: UnsignedInt (default: 0)
*SORTORDER*:unsignedint(デフォルト:0)
Defines the sort order of AddressBooks when presented in the client's UI so it is consistent between devices. The number MUST be an integer in the range 0 <= sortOrder < 2^31.
クライアントのUIで提示されたときにアドレス帳の並べ替え順序を定義して、デバイス間で一貫しています。数値は、範囲0 <= sortorder <2^31の整数でなければなりません。
An AddressBook with a lower order is to be displayed before a AddressBook with a higher order in any list of AddressBooks in the client's UI. AddressBooks with equal order should be sorted in alphabetical order by name. The sorting should take into account locale-specific character order convention.
低次のアドレスブックは、クライアントのUIのアドレスブックのリストに高次のアドレスブックの前に表示されます。等しい注文のアドレスブックは、名前でアルファベット順にソートする必要があります。ソートは、ロケール固有のキャラクター順序条約を考慮に入れる必要があります。
*isDefault*: Boolean (server-set)
*isdefault*:boolean(server-set)
This SHOULD be true for exactly one AddressBook in any account and MUST NOT be true for more than one AddressBook within an account. The default AddressBook should be used by clients whenever they need to choose an AddressBook for the user within this account and they do not have any other information on which to make a choice. For example, if the user creates a new contact card, the client may automatically set the card as belonging to the default AddressBook from the user's primary account.
これは、任意のアカウントの1つのアドレスブックに当てはまるはずであり、アカウント内の複数のアドレスブックに当てはまりません。デフォルトのアドレスブックは、このアカウント内のユーザーのアドレスブックを選択する必要がある場合はいつでもクライアントが使用する必要があり、選択するための他の情報がありません。たとえば、ユーザーが新しい連絡先カードを作成した場合、クライアントはユーザーのプライマリアカウントからデフォルトのアドレスブックに属するものとしてカードを自動的に設定できます。
*isSubscribed*: Boolean
*Issubscribed*:boolean
True if the user has indicated they wish to see this AddressBook in their client. This SHOULD default to false for AddressBooks in shared accounts that the user has access to and true for any new AddressBooks created by the user themself.
ユーザーがクライアントにこのアドレスブックを見たいと思っていることを示している場合は、本当です。これは、ユーザーが作成した新しいアドレスブックにアクセスし、真実である共有アカウントのアドレス帳の場合はデフォルトである必要があります。
If false, the AddressBook and its contents SHOULD only be displayed when the user explicitly requests it. The UI may offer to the user the option of subscribing to it.
falseの場合、アドレスブックとその内容は、ユーザーが明示的に要求した場合にのみ表示する必要があります。UIは、ユーザーにサブスクライブするオプションを提供する場合があります。
*shareWith*: Id[AddressBookRights]|null (default: null)
*sharewith*:id [addressbookrights] | null(default:null)
A map of the Principal id (Section 2 of [RFC9670]) to rights for Principals this AddressBook is shared with. The Principal to which this AddressBook belongs MUST NOT be in this set. This is null if the AddressBook is not shared with anyone or if the server does not support [RFC9670]. The value may be modified only if the user has the "mayShare" right. The account id for the Principals may be found in the urn:ietf:params:jmap:principals:owner capability of the Account to which the AddressBook belongs.
プリンシパルの権利に対するプリンシパルID([RFC9670]のセクション2)のマップは、このアドレスブックが共有されています。このアドレスブックが属する校長は、このセットに属してはなりません。これは、アドレスブックが誰とも共有されていない場合、またはサーバーが[RFC9670]をサポートしていない場合にヌルです。値は、ユーザーが「メイシャレ」を正しく持っている場合にのみ変更できます。プリンシパルのアカウントIDは、urn:ietf:params:jmap:principals:addersbookが属するアカウントの所有者能力に記載されている場合があります。
*myRights*: AddressBookRights (server-set)
*MyRights*:AddressBookrights(サーバーセット)
The set of access rights the user has in relation to this AddressBook.
ユーザーがこのアドレスブックに関連して持っているアクセス権のセット。
An *AddressBookRights* object has the following properties:
* addressbookrights *オブジェクトには次のプロパティがあります。
*mayRead*: Boolean
*mayread*:boolean
The user may fetch the ContactCards in this AddressBook.
ユーザーは、このアドレスブックにコンタクトカードを取得できます。
*mayWrite*: Boolean
*メイライト*:ブール
The user may create, modify, or destroy all ContactCards in this AddressBook, or move them to or from this AddressBook.
ユーザーは、このアドレスブックのすべてのコンタクトカードを作成、変更、または破壊するか、このアドレスブックとの間で移動する場合があります。
*mayShare*: Boolean
*Mayshare*:Boolean
The user may modify the "shareWith" property for this AddressBook.
ユーザーは、このアドレスブックの「ShareWith」プロパティを変更できます。
*mayDelete*: Boolean
*MayDelete*:boolean
The user may delete the AddressBook itself.
ユーザーは、アドレスブック自体を削除できます。
This is a standard "/get" method as described in Section 5.1 of [RFC8620]. The "ids" argument may be null to fetch all at once.
これは、[RFC8620]のセクション5.1で説明されている標準「/get」メソッドです。「IDS」引数は、一度にすべてを取得するためにnullになる場合があります。
This is a standard "/changes" method as described in Section 5.2 of [RFC8620].
これは、[RFC8620]のセクション5.2で説明されている標準の「/変更」メソッドです。
This is a standard "/set" method as described in Section 5.3 of [RFC8620], but with the following additional request arguments:
これは、[RFC8620]のセクション5.3で説明されている標準の「/セット」メソッドですが、次の追加リクエスト引数があります。
*onDestroyRemoveContents*: Boolean (default: false)
*OndestroyRemoveContents*:boolean(デフォルト:false)
If false, any attempt to destroy an AddressBook that still has a ContactCard in it will be rejected with an "addressBookHasContents" SetError. If true, any ContactCard that is in the AddressBook will be removed from it, and if such a ContactCard does not belong to any other AddressBook, it will be destroyed.
falseの場合、まだコンタクトカードが含まれているアドレスブックを破壊しようとする試みは、「アドレスbookhascontents」seterrorで拒否されます。真実の場合、アドレスブックにあるコンタクトカードはそこから削除され、そのようなコンタクトカードが他のアドレスブックに属していない場合、破壊されます。
*onSuccessSetIsDefault*: Id|null
*onsuccessetisdefault*:id | null
If an id is given, and all creates, updates, and destroys (if any) succeed without error, the server will try to set this AddressBook as the default. (For references to AddressBook creations, this is equivalent to a creation-reference, so the id will be the creation id prefixed with a "#".)
IDが指定され、すべてがエラーなしですべての作成、更新、破壊が成功した場合、サーバーはこのアドレスブックをデフォルトとして設定しようとします。(アドレスブックの作成への参照については、これは作成の参照に相当するため、IDは「#」が付いた作成IDになります。)
If the id is not found or if the change is not permitted by the server for policy reasons, it MUST be ignored and the current default AddressBook (if any) will remain as such. No error is returned to the client in this case.
IDが見つからない場合、またはポリシーの理由でサーバーによって変更が許可されていない場合、それは無視する必要があり、現在のデフォルトアドレスブック(もしあれば)はそのように残ります。この場合、クライアントにエラーは返されません。
As per Section 5.3 of [RFC8620], if the default AddressBook is successfully changed, any changed objects MUST be reported in either the "created" or "updated" argument in the response as appropriate, with the server-set value included.
[RFC8620]のセクション5.3によると、デフォルトのアドレスブックが正常に変更された場合、変更されたオブジェクトは、サーバーセット値を含めて、必要に応じて、応答の「作成」または「更新」引数のいずれかで報告する必要があります。
The "shareWith" property may only be set by users that have the "mayShare" right. When modifying the "shareWith" property, the user cannot give a right to a Principal if the Principal did not already have that right and the user making the change also does not have that right. Any attempt to do so MUST be rejected with a "forbidden" SetError.
「ShareWith」プロパティは、「Mayshare」が正しいユーザーによってのみ設定される場合があります。「ShareWith」プロパティを変更する場合、プリンシパルがまだその権利を持っていない場合、ユーザーは校長に権利を与えることはできません。そうする試みは、「禁じられた」セットナーで拒否されなければなりません。
Users can subscribe or unsubscribe to an AddressBook by setting the "isSubscribed" property. The server MAY forbid users from subscribing to certain AddressBooks even though they have permission to see them, rejecting the update with a "forbidden" SetError.
ユーザーは、「ISSUBScribed」プロパティを設定することにより、アドレスブックを購読または登録解除できます。サーバーは、ユーザーが特定のアドレスブックに購読することを禁止する場合があります。
The following extra SetError type is defined for "destroy":
次の追加セットエラータイプは、「破壊」用に定義されています。
*addressBookHasContents*:
*addressbookhascontents*:
The AddressBook has at least one ContactCard assigned to it and the "onDestroyRemoveContents" argument was false.
アドレスブックには、少なくとも1つのコンタクトカードが割り当てられており、「ondestroyremovocontents」の引数は虚偽でした。
A *ContactCard* object contains information about a person, company, or other entity, or represents a group of such entities. It is a JSContact Card object as defined in Section 2 of [RFC9553] with the following additional properties:
A * ContactCard *オブジェクトには、個人、会社、またはその他のエンティティに関する情報が含まれているか、そのようなエンティティのグループを表します。これは、[RFC9553]のセクション2で定義されているJScontactカードオブジェクトであり、次の追加プロパティがあります。
*id*: Id (immutable; server-set)
*id*:id(inmutable; server-set)
The id of the ContactCard. The "id" property MAY be different to the ContactCard's "uid" property (as defined in Section 2.1.9 of [RFC9553]). However, there MUST NOT be more than one ContactCard with the same uid in an Account.
コンタクトカードのID。「ID」プロパティは、ContactCardの「UID」プロパティとは異なる場合があります([RFC9553]のセクション2.1.9で定義されています)。ただし、アカウントに同じUIDを持つコンタクトカードが1つ以上ないはずです。
*addressBookIds*: Id[Boolean]
*addressbookids*:id [boolean]
The set of AddressBook ids that this ContactCard belongs to. A card MUST belong to at least one AddressBook at all times (until it is destroyed). The set is represented as an object, with each key being an AddressBook id. The value for each key in the object MUST be true.
このコンタクトカードが属するアドレス帳IDのセット。カードは、常に少なくとも1つのアドレスブックに属している必要があります(破壊されるまで)。セットはオブジェクトとして表され、各キーはアドレス帳IDです。オブジェクト内の各キーの値は真でなければなりません。
For any Media object in the card (see Section 2.6.4 of [RFC9553]), a new property is defined:
カード内のメディアオブジェクト([RFC9553]のセクション2.6.4を参照)については、新しいプロパティが定義されています。
*blobId*: Id
*Blobid*:id
An id for the Blob representing the binary contents of the resource.
リソースのバイナリコンテンツを表すBLOBのID。
When returning ContactCards, any Media with a URI that uses the "data:" URL scheme [RFC2397] SHOULD return a "blobId" property and omit the "uri" property, as this lets clients load the (potentially large) image file only when needed and avoids the overhead of Base64 encoding. The "mediaType" property MUST also be set. Similarly, when creating or updating a ContactCard, clients MAY send a "blobId" instead of the "uri" property for a Media object.
コンタクトカードを返すとき、「データ:」を使用するURIを持つメディアは、「blobid」プロパティを返し、「uri」プロパティを省略します。Base64エンコーディングのオーバーヘッドが必要で回避されます。「mediatype」プロパティも設定する必要があります。同様に、ContactCardを作成または更新するとき、クライアントはメディアオブジェクトの「URI」プロパティの代わりに「ブロビッド」を送信する場合があります。
A contact card with a "kind" property equal to "group" represents a group of contacts. Clients often present these separately from other contact cards. The "members" property, as defined in Section 2.1.6 of [RFC9553], contains a set of uids (as defined in Section 2.1.9 of [RFC9553]) for other contacts that are the members of this group. Clients should consider the group to contain any ContactCard with a matching uid from any account they have access to that has support for the urn:ietf:params:jmap:contacts capability. Any uid that cannot be found SHOULD be ignored but preserved. For example, suppose a user adds contacts from a shared address book to their private group, then temporarily loses access to this address book. The uids cannot be resolved, so the contacts will disappear from the group. However, if they are given permission to access the data again, the uids will be found and the contacts will reappear.
「グループ」に等しい「種類」プロパティを持つ連絡先カードは、連絡先のグループを表します。多くの場合、クライアントは他の連絡先とは別にこれらを提示します。[RFC9553]のセクション2.1.6で定義されている「メンバー」プロパティには、このグループのメンバーである他の連絡先のUIDS([RFC9553]のセクション2.1.9で定義されている)のセットが含まれています。クライアントは、urn:ietf:params:jmap:contacts capabilityのサポートを持っているアカウントにアクセスできる任意のアカウントから一致するuidを持つ任意のコンタクトカードを含めることをグループに検討する必要があります。見つけることができないuidは無視する必要がありますが、保存されます。たとえば、ユーザーが共有アドレス帳から個人グループに連絡先を追加してから、このアドレス帳へのアクセスを一時的に失います。UIDを解決できないため、連絡先はグループから消えます。ただし、データに再度アクセスする許可が与えられた場合、UIDSが見つかり、連絡先が再表示されます。
This is a standard "/get" method as described in Section 5.1 of [RFC8620].
これは、[RFC8620]のセクション5.1で説明されている標準「/get」メソッドです。
This is a standard "/changes" method as described in Section 5.2 of [RFC8620].
これは、[RFC8620]のセクション5.2で説明されている標準の「/変更」メソッドです。
This is a standard "/query" method as described in Section 5.5 of [RFC8620].
これは、[RFC8620]のセクション5.5で説明されている標準の「/クエリ」メソッドです。
A *FilterCondition* object has the following properties, any of which may be omitted:
A * FilterCondition *オブジェクトには、次のプロパティがあり、そのいずれかが省略される場合があります。
*inAddressBook*: Id
*inaddressbook*:id
An AddressBook id. A card must be in this address book to match the condition.
アドレス帳です。この条件に合わせて、このアドレス帳にカードが必要です。
*uid*: String
*uid*:文字列
A card must have this string exactly as its uid (as defined in Section 2.1.9 of [RFC9553]) to match.
カードには、[RFC9553]のセクション2.1.9で定義されているように)とまったく同じ文字列が必要です。
*hasMember*: String
*Hasmember*:文字列
A card must have a "members" property (as defined in Section 2.1.6 of [RFC9553]) that contains this string as one of the uids in the set to match.
カードには、[RFC9553]のセクション2.1.6で定義されているように、この文字列をセットのUIDの1つとして含む「メンバー」プロパティが必要です。
*kind*: String
*種類*:文字列
A card must have a "kind" property (as defined in Section 2.1.4 of [RFC9553]) that equals this string exactly to match.
カードには、[RFC9553]のセクション2.1.4で定義されているように、この文字列に正確に一致するように等しい「種類」プロパティが必要です。
*createdBefore*: UTCDate
*createdbefore*:utcdate
The "created" date-time of the ContactCard (as defined in Section 2.1.3 of [RFC9553]) must be before this date-time to match the condition.
コンタクトカードの「作成された」日付時間([RFC9553]のセクション2.1.3で定義されている)は、この日付の前に条件と一致する必要があります。
*createdAfter*: UTCDate
*createdafter*:utcdate
The "created" date-time of the ContactCard (as defined in Section 2.1.3 of [RFC9553]) must be the same or after this date-time to match the condition.
コンタクトカードの「作成された」日付時間([RFC9553]のセクション2.1.3で定義されている)は、条件と一致するためにこの日付時間と同じまたは後に必要です。
*updatedBefore*: UTCDate
*前に更新*:utcdate
The "updated" date-time of the ContactCard (as defined in Section 2.1.10 of [RFC9553]) must be before this date-time to match the condition.
コンタクトカードの「更新された」日付時間([RFC9553]のセクション2.1.10で定義されている)は、この日付の前に条件に一致する必要があります。
*updatedAfter*: UTCDate
*Affter*を更新:utcdate
The "updated" date-time of the ContactCard (as defined in Section 2.1.10 of [RFC9553]) must be the same or after this date-time to match the condition.
コンタクトカードの「更新された」日付時間([RFC9553]のセクション2.1.10で定義されている)は、条件と一致するためにこの日付時間と同じか、後に同じでなければなりません。
*text*: String
*テキスト*:文字列
A card matches this condition if the text matches with text in the card.
テキストがカード内のテキストと一致する場合、カードはこの状態と一致します。
*name*: String
*名前*:文字列
A card matches this condition if the value of any NameComponent in the "name" property or the "full" property in the "name" property of the card (as defined in Section 2.2.1.2 of [RFC9553]) matches the value.
カードの「名前」プロパティのnameComponentの値またはカードの「名前」プロパティ([RFC9553]のセクション2.2.1.2で定義されている)の「完全な」プロパティの値が値に一致する場合、カードはこの条件に一致します。
*name/given*: String
*名前/指定*:文字列
A card matches this condition if the value of a NameComponent with kind "given" inside the "name" property of the card (as defined in Section 2.2.1.2 of [RFC9553]) matches the value.
カードの「名前」プロパティ内に「与えられた」種類([RFC9553]のセクション2.2.1.2で定義されている)が値と一致する場合、カードはこの状態と一致します。
*name/surname*: String
*名前/姓*:文字列
A card matches this condition if the value of a NameComponent with kind "surname" inside the "name" property of the card (as defined in Section 2.2.1.2 of [RFC9553]) matches the value.
カードの「名前」プロパティ内の「姓」([RFC9553]のセクション2.2.1.2で定義されている)が値と一致する場合、カードはこの状態と一致します。
*name/surname2*: String
*name/surname2*:文字列
A card matches this condition if the value of a NameComponent with kind "surname2" inside the "name" property of the card (as defined in Section 2.2.1.2 of [RFC9553]) matches the value.
カードの「surname2」の「surname2」がある場合([rfc9553]セクション2.2.1.2で定義されている)、namecomponentの値が[rfc9553]のセクション2.2.1.2で定義されている)の場合、この状態と一致します。
*nickname*: String
*ニックネーム*:文字列
A card matches this condition if the "name" of any Nickname in the "nicknames" property of the card (as defined in Section 2.2.2 of [RFC9553]) matches the value.
カードの「ニックネーム」プロパティ([RFC9553]のセクション2.2.2で定義)のニックネームの「名前」が値に一致する場合、カードはこの状態と一致します。
*organization*: String
*組織*:文字列
A card matches this condition if the "name" of any Organization in the "organizations" property of the card (as defined in Section 2.2.3 of [RFC9553]) matches the value.
カードの「組織」プロパティ([RFC9553]のセクション2.2.3で定義)の組織の「名前」が値に一致する場合、カードはこの条件と一致します。
*email*: String
*電子メール*:文字列
A card matches this condition if the "address" or "label" of any EmailAddress in the "emails" property of the card (as defined in Section 2.3.1 of [RFC9553]) matches the value.
カードの「電子メール」プロパティ([RFC9553]のセクション2.3.1で定義されている)の電子メールアドレスの「アドレス」または「ラベル」が値に一致する場合、カードはこの状態と一致します。
*phone*: String
*電話*:文字列
A card matches this condition if the "number" or "label" of any Phone in the "phones" property of the card (as defined in Section 2.3.3 of [RFC9553]) matches the value.
カードの「電話」プロパティ([RFC9553]のセクション2.3.3で定義されている)の任意の電話の「番号」または「ラベル」が値に一致する場合、カードはこの状態と一致します。
*onlineService*: String
*onlineservice*:string
A card matches this condition if the "service", "uri", "user", or "label" of any OnlineService in the "onlineServices" property of the card (as defined in Section 2.3.2 of [RFC9553]) matches the value.
カードの「サービス」、「uri」、「user」、または「onlineservices」プロパティの任意の任意の任意の任意の任意の条件([rfc9553]のセクション2.3.2で定義)が一致する場合、カードはこの状態に一致します。価値。
*address*: String
*アドレス*:文字列
A card matches this condition if the value of any AddressComponent in the "addresses" property or the "full" property in the "addresses" property of the card (as defined in Section 2.5.1 of [RFC9553]) matches the value.
カードの「アドレス」プロパティ内のaddressComponentの値または「[RFC9553]のセクション2.5.1で定義されている」の「アドレス」プロパティの「アドレス」プロパティの値が値に一致する場合、カードはこの条件に一致します。
*note*: String
*注*:文字列
A card matches this condition if the "note" of any Note in the "notes" property of the card (as defined in Section 2.8.3 of [RFC9553]) matches the value.
カードの「ノート」プロパティ([RFC9553]のセクション2.8.3で定義されている)が値に一致する場合、カードはこの状態と一致します。
If zero properties are specified on the FilterCondition, the condition MUST always evaluate to true. If multiple properties are specified, ALL must apply for the condition to be true (it is equivalent to splitting the object into one-property conditions and making them all the child of an AND filter operator).
フィルターコンディションでゼロプロパティが指定されている場合、条件は常にtrueに評価する必要があります。複数のプロパティが指定されている場合、すべてが真であるようにすべてを適用する必要があります(オブジェクトを1つのプロパティ条件に分割し、それらをすべてのフィルター演算子の子にすることに相当します)。
The exact semantics for matching String fields is deliberately not defined to allow for flexibility in indexing implementation, subject to the following:
文字列フィールドを一致させる正確なセマンティクスは、以下に対応するインデックス作成の実装の柔軟性を可能にするために意図的に定義されていません。
* Text SHOULD be matched in a case-insensitive manner.
* テキストは、ケースに依存しない方法で一致する必要があります。
* Text contained in either (but matched) single or double quotes SHOULD be treated as a phrase search. That is, a match is required for that exact sequence of words, excluding the surrounding quotation marks. Use \", \', and \\ to match a literal ", ', and \ respectively in a phrase.
* どちらか(ただし一致した)または二重引用符に含まれるテキストは、フレーズ検索として扱う必要があります。つまり、周囲の引用符を除く、その正確な一連の単語に一致する必要があります。\ "、\ '、および\\を使用して、文字通り"、'、および\をフレーズでそれぞれ一致させます。
* Outside of a phrase, whitespace SHOULD be treated as dividing separate tokens that may be searched for separately in the contact, but MUST all be present for the contact to match the filter.
* フレーズの外では、ホワイトスペースは、接触で別々に検索される可能性のある別々のトークンとして扱われる必要がありますが、フィルターと一致するように接触するためにはすべて存在する必要があります。
* Tokens MAY be matched on a whole-word basis using stemming (e.g., a text search for bus would match "buses", but not "business").
* トークンは、ステムを使用して全単語ベースで一致する場合があります(たとえば、バスのテキスト検索は「バス」と一致しますが、「ビジネス」ではありません)。
The following values for the "property" field on the Comparator object MUST be supported for sorting:
コンパレータオブジェクトの「プロパティ」フィールドの次の値は、ソートのためにサポートする必要があります。
* "created" - The "created" date on the ContactCard.
* 「作成」 - コンタクトカードの「作成された」日付。
* "updated" - The "updated" date on the ContactCard.
* 「更新」 - 連絡先カードの「更新された」日付。
The following values for the "property" field on the Comparator object SHOULD be supported for sorting:
コンパレータオブジェクトの「プロパティ」フィールドの次の値は、ソートのためにサポートする必要があります。
* "name/given" - The value of the first NameComponent in the "name" property whose "kind" is "given".
* 「名前/与えられた」 - 「dign」プロパティの最初のnamecomponentの値は、「Dism」が与えられます。
* "name/surname" - The value of the first NameComponent in the "name" property whose "kind" is "surname".
* 「name/surname」 - 「姓」が「姓」である「name」プロパティの最初のnamecomponentの値。
* "name/surname2" - The value of the first NameComponent in the "name" property whose "kind" is "surname2".
* 「name/surname2」 - 「surname2」である「name」プロパティの最初のnamecomponentの値。
This is a standard "/queryChanges" method as described in Section 5.6 of [RFC8620].
これは、[RFC8620]のセクション5.6で説明されている標準の「/QueryChanges」メソッドです。
This is a standard "/set" method as described in Section 5.3 of [RFC8620].
これは、[RFC8620]のセクション5.3で説明されている標準の「/セット」メソッドです。
To set a new photo, the file must first be uploaded using the upload mechanism as described in Section 6.1 of [RFC8620]. This will give the client a valid blobId, size, and type to use. The server MUST reject attempts to set a file that is not a recognised image type as the photo for a card.
新しい写真を設定するには、[RFC8620]のセクション6.1で説明されているように、最初にアップロードメカニズムを使用してファイルをアップロードする必要があります。これにより、クライアントに使用する有効なブロビッド、サイズ、タイプが得られます。サーバーは、カードの写真として認識されている画像タイプではないファイルを設定しようとする試みを拒否する必要があります。
This is a standard "/copy" method as described in Section 5.4 of [RFC8620].
これは、[RFC8620]のセクション5.4で説明されている標準の「/コピー」メソッドです。
For brevity, only the "methodCalls" property of the Request object and the "methodResponses" property of the Response object is shown in the following examples.
簡潔にするために、リクエストオブジェクトの「メソッドコール」プロパティと応答オブジェクトの「メソッドレスポンズ」プロパティのみを次の例に示します。
A user has authenticated and the client has fetched the JMAP Session object. It finds a single Account with the "urn:ietf:params:jmap:contacts" capability with id "a0x9" and wants to fetch all the address books and contacts. It might make the following request:
ユーザーが認証されており、クライアントはJMAPセッションオブジェクトを取得しました。「urn:ietf:params:jmap:contacts "capability with id" a0x9」を使用した単一のアカウントを見つけ、すべてのアドレス帳と連絡先を取得したいと考えています。次のリクエストを行う可能性があります。
[ ["AddressBook/get", { "accountId": "a0x9" }, "0"], ["ContactCard/get", { "accountId": "a0x9" }, "1"] ]
Figure 1: "methodCalls" Property of a JMAP Request
図1:JMAP要求の「MethodCalls」プロパティ
The server might respond with something like:
サーバーは次のようなもので応答する場合があります。
[ ["AddressBook/get", { "accountId": "a0x9", "list": [{ "id": "062adcfa-105d-455c-bc60-6db68b69c3f3", "name": "Personal", "description": null, "sortOrder": 0, "isDefault": true, "isSubscribed": true, "shareWith": { "3f1502e0-63fe-4335-9ff3-e739c188f5dd": { "mayRead": true, "mayWrite": false, "mayShare": false, "mayDelete": false } }, "myRights": { "mayRead": true, "mayWrite": true, "mayShare": true, "mayDelete": false } }, { "id": "cd40089d-35f9-4fd7-980b-ba3a9f1d74fe", "name": "Autosaved", "description": null, "sortOrder": 1, "isDefault": false, "isSubscribed": true, "shareWith": null, "myRights": { "mayRead": true, "mayWrite": true, "mayShare": true, "mayDelete": false } }], "notFound": [], "state": "~4144" }, "0"], ["ContactCard/get", { "accountId": "a0x9", "list": [{ "id": "3", "addressBookIds": { "062adcfa-105d-455c-bc60-6db68b69c3f3": true }, "name": { "components": [ { "kind": "given", "value": "Joe" }, { "kind": "surname", "value": "Bloggs" } ], "isOrdered": true }, "emails": { "0": { "contexts": { "private": true }, "address": "joe.bloggs@example.com" } } }], "notFound": [], "state": "ewarbckaqJ::112" }, "1"] ]
Figure 2: "methodResponses" Property of a JMAP Response
図2:JMAP応答の「MethodSponses」プロパティ
The client tries to change the default address book from "Personal" to "Autosaved" (and makes no other change):
クライアントは、デフォルトのアドレス帳を「個人」から「オートセーブド」に変更しようとします(そして、他の変更はありません):
[ ["AddressBook/set", { "accountId": "a0x9", "onSuccessSetIsDefault": "cd40089d-35f9-4fd7-980b-ba3a9f1d74fe" }, "0"] ]
Figure 3: "methodCalls" Property of a JMAP Request
図3:JMAP要求の「MethodCalls」プロパティ
The server allows the change, returning the following response:
サーバーは変更を許可し、次の応答を返します。
[ ["AddressBook/set", { "accountId": "a0x9", "updated": { "cd40089d-35f9-4fd7-980b-ba3a9f1d74fe": { "isDefault": true }, "062adcfa-105d-455c-bc60-6db68b69c3f3": { "isDefault": false }, "oldState": "~4144", "newState": "~4148" } }, "0"] ]
Figure 4: "methodResponses" Property of a JMAP Response
図4:JMAP応答の「MethodSponses」プロパティ
Experience has shown that unrestricted use of Unicode can lead to problems such as inconsistent rendering, users reading text and interpreting it differently than intended, and unexpected results when copying text from one location to another. Servers MAY choose to mitigate this by restricting the set of characters allowed in otherwise unconstrained String fields. The FreeformClass, as documented in Section 4.3 of [RFC8264], might be a good starting point for this.
経験によると、Unicodeの無制限の使用は、一貫性のないレンダリング、ユーザーがテキストを読んで、意図したものとは異なる方法で解釈するなどの問題につながる可能性があり、ある場所から別の場所にテキストをコピーする際の予期しない結果が得られることが示されています。サーバーは、制約のない文字列フィールドで許可されている文字のセットを制限することにより、これを軽減することを選択できます。[RFC8264]のセクション4.3に記載されているフリーフォームクラスは、これの良い出発点かもしれません。
Attempts to set a value containing code points outside of the permissible set can be handled in a few ways by the server. The server could choose to strip the forbidden characters or replace them with U+FFFD (the Unicode replacement character) and store the resulting string. This is likely to be appropriate for non-printable characters -- such as the "Control Codes" defined in Section 23.1 (https://www.unicode.org/versions/latest/core-spec/chapter-23/#G20365) of [UNICODE], excluding newline (U+000A), carriage return (U+000D), and tab (U+0009) -- that can end up in data accidentally due to copy-and-paste issues but are invisible to the end user. JMAP allows the server to transform data on create/update as long as any changed properties are returned to the client in the "/set" response so it knows what has changed, as per Section 5.3 of [RFC8620]. Alternatively, the server MAY just reject the create/update with an "invalidProperties" SetError.
許容セットの外側にコードポイントを含む値を設定する試みは、サーバーによっていくつかの方法で処理できます。サーバーは、禁止された文字を剥がすか、u+fffd(Unicode置換文字)に置き換えて、結果の文字列を保存することを選択できます。これは、セクション23.1(https://www.unicode.org/versions/latest/core-pec/chapter-23/#g20365)で定義されている「コントロールコード」など、印刷できない文字に適している可能性があります。[Unicode]、Newline(U+000a)、キャリッジリターン(U+000D)、およびタブ(U+0009)を除く - コピーアンドパスティの問題により誤ってデータになりますが、エンドユーザー。JMAPを使用すると、[RFC8620]のセクション5.3によると、変更されたプロパティが「/set」応答でクライアントに返される限り、サーバーは作成/更新のデータを変換できます。あるいは、サーバーは、「nivalidproperties」setErrorで作成/更新を拒否するだけです。
All security considerations of JMAP [RFC8620] apply to this specification. Additional considerations specific to the data types and functionality introduced by this document are described in the following subsection.
JMAP [RFC8620]のすべてのセキュリティ上の考慮事項は、この仕様に適用されます。このドキュメントで導入されたデータ型と機能に固有の追加の考慮事項については、以下のサブセクションで説明します。
Contacts consist almost entirely of private, personally identifiable information, and represent the social connections of users. Privacy leaks can have real world consequences, and contact servers and clients MUST be mindful of the need to keep all data secure.
連絡先は、ほぼ完全にプライベートで個人的に識別可能な情報から構成され、ユーザーの社会的つながりを表しています。プライバシーリークは現実世界の結果をもたらす可能性があり、連絡先サーバーとクライアントは、すべてのデータを安全に保つ必要性に留意する必要があります。
Servers MUST enforce the Access Control Lists (ACLs) set on address books to ensure only authorised data is shared.
サーバーは、アドレス帳に設定されたアクセス制御リスト(ACLS)を実施して、認定データのみが共有されるようにする必要があります。
IANA has registered "contacts" in the "JMAP Capabilities" registry as follows:
IANAは、次のように「JMAP機能」レジストリに「連絡先」を登録しています。
Capability Name:
機能名:
urn:ietf:params:jmap:contacts
urn:ietf:params:jmap:連絡先
Intended Use:
使用目的:
common
一般
Change Controller:
Change Controller:
IETF
IETF
Security and Privacy Considerations:
セキュリティとプライバシーの考慮事項:
this document, Section 6
このドキュメント、セクション6
Reference:
参照:
this document
このドキュメント
IANA has registered "AddressBook" in the "JMAP Data Types" registry as follows:
IANAは、次のように「JMAPデータ型」レジストリに「アドレスブック」を登録しています。
Type Name:
タイプ名:
AddressBook
アドレスブック
Can Reference Blobs:
塊を参照できます:
No
いいえ
Can Use for State Change:
状態の変更に使用できます:
Yes
はい
Capability:
能力:
urn:ietf:params:jmap:contacts
urn:ietf:params:jmap:連絡先
Reference:
参照:
this document
このドキュメント
IANA has registered "ContactCard" in the "JMAP Data Types" registry as follows:
IANAは、次のように「JMAPデータ型」レジストリに「ContactCard」を登録しています。
Type Name:
タイプ名:
ContactCard
ContactCard
Can Reference Blobs:
塊を参照できます:
Yes
はい
Can Use for State Change:
状態の変更に使用できます:
Yes
はい
Capability:
能力:
urn:ietf:params:jmap:contacts
urn:ietf:params:jmap:連絡先
Reference:
参照:
this document
このドキュメント
The following subsection has registered a new error code in the "JMAP Error Codes" registry, as defined in Section 9 of [RFC8620].
次のサブセクションは、[RFC8620]のセクション9で定義されているように、「JMAPエラーコード」レジストリに新しいエラーコードを登録しています。
JMAP Error Code:
JMAPエラーコード:
addressBookHasContents
アドレスbookhascontents
Intended Use:
使用目的:
common
一般
Change Controller:
Change Controller:
IETF
IETF
Description:
説明:
The AddressBook has at least one ContactCard assigned to it, and the "onDestroyRemoveContents" argument was false.
アドレスブックには、少なくとも1つのコンタクトカードが割り当てられており、「destroyremovocontents」の引数は虚偽でした。
Reference:
参照:
This document, Section 2.3
このドキュメント、セクション2.3
IANA has registered the following additional properties in the "JSContact Properties" registry, as defined in Section 3 of [RFC9553].
IANAは、[RFC9553]のセクション3で定義されているように、「JScontactプロパティ」レジストリに次の追加プロパティを登録しています。
Property Name:
プロパティ名:
id
id
Property Type:
プロパティタイプ:
not applicable
適用できない
Property Context:
プロパティコンテキスト:
Card
カード
Intended Usage:
意図された使用法:
reserved
予約済み
Since Version:
バージョン以来:
1.0
1.0
Change Controller:
Change Controller:
IETF
IETF
Reference:
参照:
this document
このドキュメント
Property Name:
プロパティ名:
addressBookIds
addressbookids
Property Type:
プロパティタイプ:
not applicable
適用できない
Property Context:
プロパティコンテキスト:
Card
カード
Intended Usage:
意図された使用法:
reserved
予約済み
Since Version:
バージョン以来:
1.0
1.0
Change Controller:
Change Controller:
IETF
IETF
Reference:
参照:
this document
このドキュメント
Property Name:
プロパティ名:
blobId
ブロビッド
Property Type:
プロパティタイプ:
not applicable
適用できない
Property Context:
プロパティコンテキスト:
Media
メディア
Intended Usage:
意図された使用法:
reserved
予約済み
Since Version:
バージョン以来:
1.0
1.0
Change Controller:
Change Controller:
IETF
IETF
Reference:
参照:
this document
このドキュメント
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
[RFC2397] Masinter, L., "The "data" URL scheme", RFC 2397, DOI 10.17487/RFC2397, August 1998, <https://www.rfc-editor.org/info/rfc2397>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8620] Jenkins, N. and C. Newman, "The JSON Meta Application Protocol (JMAP)", RFC 8620, DOI 10.17487/RFC8620, July 2019, <https://www.rfc-editor.org/info/rfc8620>.
[RFC9553] Stepanek, R. and M. Loffredo, "JSContact: A JSON Representation of Contact Data", RFC 9553, DOI 10.17487/RFC9553, May 2024, <https://www.rfc-editor.org/info/rfc9553>.
[RFC9670] Jenkins, N., Ed., "JSON Meta Application Protocol (JMAP) Sharing", RFC 9670, DOI 10.17487/RFC9670, November 2024, <https://www.rfc-editor.org/info/rfc9670>.
[RFC8264] Saint-Andre, P. and M. Blanchet, "PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols", RFC 8264, DOI 10.17487/RFC8264, October 2017, <https://www.rfc-editor.org/info/rfc8264>.
[UNICODE] The Unicode Consortium, "The Unicode Standard", <https://www.unicode.org/versions/latest/>.
Neil Jenkins (editor) Fastmail PO Box 234, Collins St West Melbourne VIC 8007 Australia Email: neilj@fastmailteam.com URI: https://www.fastmail.com