Network Working Group R. Bhat Internet-Draft P. Saint-Andre Intended status: Standards Track Cisco Systems, Inc. Expires: December 7, 2012 June 5, 2012 A JavaScript Object Notation (JSON) Representation for vCard draft-bhat-vcarddav-json-00 Abstract This document defines a representation of vCard data in JavaScript Object Notation (JSON). Status of this Memo 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 http://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 December 7, 2012. Copyright Notice Copyright (c) 2012 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 (http://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 Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Bhat & Saint-Andre Expires December 7, 2012 [Page 1] Internet-Draft vCard in JSON June 2012 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Discussion Venue . . . . . . . . . . . . . . . . . . . . . . . 3 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 4. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5. Design Considerations . . . . . . . . . . . . . . . . . . . . 5 6. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 7 7. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 8 8. Schema definition . . . . . . . . . . . . . . . . . . . . . . 8 9. Security Considerations . . . . . . . . . . . . . . . . . . . 8 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 9 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9 12.1. Normative References . . . . . . . . . . . . . . . . . . 9 12.2. Informative References . . . . . . . . . . . . . . . . . 9 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 10 Bhat & Saint-Andre Expires December 7, 2012 [Page 2] Internet-Draft vCard in JSON June 2012 1. Introduction vCard [RFC6350] is a data format for representing and exchanging information about individuals and other entities. It is a text-based format (as opposed to a binary format). This document defines a representation for vCard data in JavaScript Object Notation (JSON), a lightweight, text-based, language-independent data interchange format derived from the ECMAScript Programming Language Standard (see [RFC4627]). As with the XML representation of vCard defined in [RFC6351], the data structure is exactly the same as for plain vCard, enabling a 1-to-1 mapping between the plain vCard format and the JSON representation (or the XML representation). The JSON formatting might be preferred in some contexts where JSON facilities are readily available and can be reused instead of writing a standalone vCard parser. 2. Discussion Venue The preferred discussion venue for this document is the vcarddav@ietf.org mailing list, for which subscription information and archives can be found at . 3. Terminology 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 [RFC2119]. 4. Example To ease comparison with both plain vCard and the XML representation, the following example is a JSON representation of the same vCard (for Simon Perreault) that is also shown in [RFC6350] and [RFC6351]. { "version":"4.0", "fn": "Simon Perreault", "n": { "surname": "Simon", "given": "Perreault", "suffix": [ "ing. jr", "M.Sc."] }, "bday": { "date": "--0203" }, Bhat & Saint-Andre Expires December 7, 2012 [Page 3] Internet-Draft vCard in JSON June 2012 "anniversary": { "date-time": "20090808T1430-0500" }, "gender": { "sex" : "M" }, "lang": [ { "pref": 1, "language-tag": "fr", }, { "pref": 2, "language-tag": "en", }, ], "org": { "type": "work", "text": "Viagenie" }, "adr": { "type": "work", "label": "Simon Perreault 2875 boul. Laurier, suite D2-630 Quebec, QC, Canada G1V 2M2", "street": "2875 boul. Laurier, suite D2-630", "locality": "Quebec", "region": "QC", "code": "G1V 2M2", "country": "CA" }, "tel": [ { "type": ["work", "voice"], "uri": "tel:+1-418-656-9254;ext=102" }, { "type": ["work", "text", "voice", "cell", "video"], "uri": "tel:+1-418-262-6501" } ], "email": { "type": "work", "text": "simon.perreault@viagenie.ca" }, "geo": { "type": "work", "uri": "geo:46.766336,-71.28955" }, "key": { "type": "work", "uri": "http://www.viagenie.ca/simon.perreault/simon.asc" }, "tz": "America/Montreal", Bhat & Saint-Andre Expires December 7, 2012 [Page 4] Internet-Draft vCard in JSON June 2012 "url": { "type": "home", "uri": "http://nomis80.org" } } Figure 1: JSON representation of RFC 6350 example 5. Design Considerations The general idea is to map vCard parameters, properties and value types to JSON property/value pairs. For example, the "FN" property is mapped to the fn property. Value contains a text string that corresponds to the vCard property's value. vCard parameters are also mapped to JSON objects which are contained in the value object. For example, the "TYPE" parameter applied to the "TEL" property would look like the following in JSON. "tel": { "type": [ "voice", "video" ], "uri": "tel:+1-555-555-555" } Figure 2: Mapping of a vCard parameter Parameters taking a list of values and properties with cardinality of more than one are converted to a JSON array object. Properties having structured values (e.g., the "N" property) are expressed by nested JSON object trees. Properties within that tree ("surname", "given", etc.) are mapped as simple name/value pairs. These pairs should follow the schema defined by the XML mapping of vCard(Appendix A in [RFC6351]) Line folding is a non-issue in JSON. Therefore, the mapping from vCard to JSON is done after the unfolding procedure is carried out. Conversely, the mapping from JSON to vCard is done before the folding procedure is carried out. The group construct (Section 3.2 in [RFC6350]) is represented with the JSON object of the same name. For example: Bhat & Saint-Andre Expires December 7, 2012 [Page 5] Internet-Draft vCard in JSON June 2012 { "version" : "4.0" "contact": { "fn": "...", "email": "..." }, "media" : { "photo": "..." }, "categories": "..." } Figure 3: Mapping of lists and structured values ... is equivalent to: BEGIN:VCARD VERSION:4.0 contact.FN=... contact.EMAIL=... media.PHOTO=... CATEGORIES=... END:VCARD Figure 4: Plain vCard equivalent The VALUE parameter from the plain VCARD format is used as the property name in the JSON format. If there is no VALUE parameter specified, it is treated as equivalent to VALUE=text. For example: { "email": { "type": "work", "text": "simon.perreault@viagenie.ca" }, "geo": { "type": "work", "uri": "geo:46.766336,-71.28955" }, "bday": { "date": "--0203" }, } Figure 5: Mapping of VALUE parameter ... is equivalent to: Bhat & Saint-Andre Expires December 7, 2012 [Page 6] Internet-Draft vCard in JSON June 2012 BEGIN:VCARD VERSION:4.0 EMAIL;VALUE=text;type=work:simon.perreault@viagenie.ca GEO;VALUE=uri;type=work:geo:46.766336,-71.28955 BDATE;VALUE=date:--0203 END:VCARD Figure 6: Plain vCard equivalent In the plain vCard format, the "VERSION" property was mandatory and played a role in extensibility. In XML, this property was dropped in favor of the XML namespace mechanism. In the JSON mapping, we keep the "version" property, which plays a similar role as in the plain vCard format. Finally, there is no reason to include a top-level name of "vcard" or "vcards", since the data type can be determined from the media type of the data file. 6. Extensibility The plain vCard format is extensible. New properties, parameters, data types and values (collectively known as vCard elements, not to be confused with XML elements) can be registered with IANA (see [RFC6350], Section 10.2). It is expected that these vCard extensions will also specify extensions to the JSON format described in this document. New JSON vCard property and parameter element names MUST be lower-case. This is necessary to ensure that round-tripping between JSON and plain-text vCard works correctly. Unregistered extensions (i.e., those starting with "X-" and "VND-...-") are expressed in JSON by using properties starting with "x-" and "vnd-...-". Refer to Section 7 for the implications when converting between plain-text vCard and JSON. For example: { "x-my-prop": { "pref": 1, "text": "value goes here" } } Figure 7: An example of extensibility A vCard JSON parser MUST ignore JSON parameters and properties for which it doesn't recognize the name. In the XML representation of vCard [RFC6351], extensibility is Bhat & Saint-Andre Expires December 7, 2012 [Page 7] Internet-Draft vCard in JSON June 2012 handled in part by using XML namespaces [XML-NAMES] for properties and parameters that have no equivalent in plain-text vCard. For extensions that might appear in both the JSON representation and the XML representation, it is RECOMMENDED to represent the JSON parameter or property name in "Clark Notation" [CLARK] by preceding the name itself with the Uniform Resource Identifier [RFC3986] of the XML namespace, enclosed in curly brackets ('{' and '}'); thus the "expanded name" will be of the form "{URI}name". For extensions that will appear in the JSON representation but not the XML representation, a mere (non-expanded) name can be used, or the name can be an expanded name formed in another manner (e.g., using the "reverse domain name" convention such as "com.example.vcard.foo"). The JSON format does not validate the cardinality of properties. This is a limitation of the JSON format specification. Cardinalities of the plain vCard format [RFC6350] MUST still be respected. 7. Format Conversions To follow 8. Schema definition To follow 9. Security Considerations All the security considerations applicable to plain vCard [RFC6350] are also applicable to the JSON representation of vCard. As explained in [RFC4627], JSON is a subset of JavaScript, but it is a safe subset that excludes assignment and invocation. A JSON text can be safely passed into JavaScript's eval() function (which compiles and executes a string) if all the characters not enclosed in strings are in the set of characters that form JSON tokens. 10. IANA Considerations To: ietf-types@iana.org Subject: Registration of media type application/vcard+json Bhat & Saint-Andre Expires December 7, 2012 [Page 8] Internet-Draft vCard in JSON June 2012 Type name: application Subtype name: vcard+json Required parameters: (none) Optional parameters: (none) Encoding considerations: 8bit if UTF-8; binary if UTF-16 or UTF-32; see RFC 4627. Security considerations: All of the security considerations specified in RFC 4627 and RFC 6350 apply. Interoperability considerations: (none) Specification: XXXX Applications that use this media type: vCard processors. Additional information: Magic number(s): (none) File extension(s): .jcard Macintosh file type code(s): TEXT Person and email address to contact for further information: vCard discussion mailing list, Intended usage: COMMON Restrictions on usage: (none) Author: Peter Saint-Andre, Change controller: Peter Saint-Andre, 11. Acknowledgements Thanks to Joe Hildebrand for his feedback. Some text in this document was borrowed from [RFC6351]. 12. References 12.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC4627] Crockford, D., "The application/json Media Type for JavaScript Object Notation (JSON)", RFC 4627, July 2006. [RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, August 2011. 12.2. Informative References [CLARK] Clark, J., "Clark Notation", February 1999, . Bhat & Saint-Andre Expires December 7, 2012 [Page 9] Internet-Draft vCard in JSON June 2012 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, January 2005. [RFC6351] Perreault, S., "xCard: vCard XML Representation", RFC 6351, August 2011. [XML-NAMES] Thompson, H., Hollander, D., Layman, A., Bray, T., and R. Tobin, "Namespaces in XML 1.0 (Third Edition)", World Wide Web Consortium Recommendation REC-xml-names-20091208, December 2009, . Authors' Addresses Raghurama Bhat Cisco Systems, Inc. 900 McCarthy Blvd. Milpitas, CA 95035 USA Phone: +1-408-902-2123 Email: ragbhat@cisco.com Peter Saint-Andre Cisco Systems, Inc. 1899 Wynkoop Street, Suite 600 Denver, CO 80202 USA Phone: +1-303-308-3282 Email: psaintan@cisco.com Bhat & Saint-Andre Expires December 7, 2012 [Page 10]