Network Working Group S. Perreault Internet-Draft Viagenie Obsoletes: 2425, 2426, 4770 May 6, 2009 (if approved) Updates: 2739 (if approved) Intended status: Standards Track Expires: November 7, 2009 vCard XML Schema draft-perreault-vcarddav-vcardxml-01 Status of This Memo This Internet-Draft is submitted to IETF in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. 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." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire on November 7, 2009. Copyright Notice Copyright (c) 2009 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 in effect on the date of publication of this document (http://trustee.ietf.org/license-info). Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Perreault Expires November 7, 2009 [Page 1] Internet-Draft vCard XML May 2009 Abstract This document defines the XML schema of the vCard data format. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. The Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Example: Author's XML vCard . . . . . . . . . . . . . . . . . 3 4. Design Considerations . . . . . . . . . . . . . . . . . . . . 5 4.1. Extensibility . . . . . . . . . . . . . . . . . . . . . . 5 4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 6 5. Security Considerations . . . . . . . . . . . . . . . . . . . 6 6. Normative References . . . . . . . . . . . . . . . . . . . . . 6 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 6 Appendix B. Change Log (to be removed by RFC Editor prior to publication) . . . . . . . . . . . . . . . . . . . . 10 B.1. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 11 Perreault Expires November 7, 2009 [Page 2] Internet-Draft vCard XML May 2009 1. Introduction vCard [I-D.ietf-vcarddav-vcardrev] is a data format for representing and exchanging information about individuals. It is a text-based format (as opposed to a binary format). This document defines an XML representation for vCard. The underlying data structure is exactly the same, enabling a 1-to-1 mapping between the original vCard format and the XML representation. The XML formatting may be preferred in some contexts where an XML engine is readily available and may be reused instead of writing a stand-alone vCard parser. 2. The Schema The schema is expressed in the RELAX NG language [relaxng][relaxng-compact] and is found in Appendix A. 3. Example: Author's XML vCard Perreault Expires November 7, 2009 [Page 3] Internet-Draft vCard XML May 2009 Simon Perreault Perreault Simon ing. jr. M.Sc. --0203 1fr 2en Viagenie Suite 625 2600 boul. Laurier Quebec QC G1V 4W1 Canada tel:+1-418-656-9254;ext=102 tel:+1-418-262-6501 tel:+1-418-656-9257 simon.perreault@viagenie.ca geo:46.772673,-71.282945 http://www.viagenie.ca/simon.perreault/simon.asc -0500 Perreault Expires November 7, 2009 [Page 4] Internet-Draft vCard XML May 2009 4. Design Considerations The general idea is to map vCard parameters, properties, and value types to XML elements. For example, the "FN" property is mapped to the "fn" element. That element in turn contains a text element whose content corresponds to the vCard property's value. vCard parameters are also mapped to XML elements. They are contained in property elements. For example, the "TYPE" parameter applied to the "TEL" property would look like the following in XML: tel:+1-555-555-555 Properties having structured values (e.g. the N property) are expressed by XML element trees. Element names in that tree (e.g. "surname", "given", etc.) do not have a vCard equivalent since they are identified by position in plain vCard. Line folding is a non-issue in XML. Therefore, the mapping from vCard to XML is done after the unfolding procedure is carried out. Conversely, the mapping from XML to vCard is done before the folding procedure is carried out. 4.1. Extensibility The original vCard format is extensible. New properties, parameters, data types and values (collectively known as vCard objects) can be registered from IANA. It is expected that these vCard extensions will also specify extensions to the XML format described in this document. This is not a requirement: a separate document may be used instead. Unregistered extensions (i.e. those starting with "X-" and "VND-...-") can be expressed in XML by making use of XML namespaces. They simply correspond to elements outside of the core namespace. For example: 1 value goes here Note that extension elements do not need the "X- or "VND-" prefix in XML. The XML namespace mechanism is sufficient. Perreault Expires November 7, 2009 [Page 5] Internet-Draft vCard XML May 2009 A vCard XML parser MUST ignore elements that are not part of this specification. In the original vCard format, the VERSION property was mandatory and played a role in extensibility. In XML, this property is absent. Its role is played by the vCard core namespace identifier, which includes the version number. vCard revisions will use a different namespace. Since vCard also has provisions for extending value enumerations, such as the allowed TYPE parameter values, these values are expressed using tags in XML. 4.2. Limitations The schema does not validate the cardinality of properties. This is a limitation of the schema definition language. Cardinalities of the origiginal vCard format [I-D.ietf-vcarddav-vcardrev] MUST still be respected. Some constructs (e.g. value enumerations in type parameters) have additional ordering constraints in XML. This is a result of limitations of the schema definition language and the order is arbitrary. The order MUST be respected in XML for the vCard to be valid. However, reordering as part of conversion to or from plain vCard MAY happen. 5. Security Considerations TBD 6. Normative References [I-D.ietf-vcarddav-vcardrev] Perreault, S. and P. Resnick, "vCard Format Specification", draft-ietf-vcarddav-vcardrev-06 (work in progress), March 2009. [relaxng] Clark, J., "RELAX NG Specification", December 2001. [relaxng-compact] Clark, J., "RELAX NG Compact Syntax", November 2002. Appendix A. Relax NG Schema default namespace = "urn:ietf:params:xml:ns:vcard-4.0" Perreault Expires November 7, 2009 [Page 6] Internet-Draft vCard XML May 2009 # Value types \text = element text { text } text-list = \text+ uri = element uri { xsd:anyURI } date = element date { xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" } } time = element time { xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)" ~ "(Z|[+\-]\d\d(\d\d)?)?" } } date-time = element date-time { xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?" ~ "(Z|[+\-]\d\d(\d\d)?)?" } } timestamp = element timestamp { xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" } } boolean = element boolean { xsd:boolean } integer = element integer { xsd:integer } float = element float { xsd:float } binary = element binary { xsd:base64Binary } utc-offset = element utc-offset { xsd:string { pattern = "[+\-]\d\d(\d\d)?" } } language-tag = element language-tag { xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})" ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?" ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*" ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*(-x(-[0-9a-z]{1,8})+)?|" ~ "x(-[0-9a-z]{1,8})+|[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" } } data = (element type { xsd:string { pattern = "[A-Za-z\d!#$&.+\-^_]{1,127}/" ~ "[A-Za-z\d!#$&.+\-^_]{1,127}" } }, binary) | uri Perreault Expires November 7, 2009 [Page 7] Internet-Draft vCard XML May 2009 # Parameters language = element language { language-tag }? pref = element pref { xsd:integer { minInclusive = "1" maxInclusive = "100" } }? pid = element pid { xsd:string { pattern = "\d+(\.\d+)?" } }? # Properties source = element source { pid, pref, uri } name = element name { \text } kind = element kind { element individual { empty } | element group { empty } | element org { empty } | element location { empty } } fn = element fn { language, pid, pref, \text } n = element n { language, element surname { text-list }, element given { text-list }, element prefix { text-list }, element suffix { text-list } } nickname = element nickname { language, pid, pref, text-list } photo = element photo { pid, pref, data } bday = element bday { date | date-time | \text } dday = element dday { date | date-time | \text } birth = element birth { language, \text } death = element death { language, \text } gender = element gender { element M { empty } | element F { empty } } adr = element adr { language, element geo { uri }?, element tz { utc-offset }?, pid, pref, Perreault Expires November 7, 2009 [Page 8] Internet-Draft vCard XML May 2009 element pobox { text-list }, element ext { text-list }, element street { text-list }, element locality { text-list }, element region { text-list }, element code { text-list }, element country { text-list } } label = element label { language, pid, pref, \text } tel = element tel { element type { element text { empty }?, element voice { empty }?, element fax { empty }?, element cell { empty }?, element video { empty }?, element pager { empty }? }?, pid, pref, uri } email = element email { pid, pref, \text } impp = element impp { pid, pref, uri } lang = element lang { pid, pref, language-tag } tz = element tz { pid, pref, (utc-offset | \text) } geo = element geo { pid, pref, uri } title = element title { language, pid, pref, \text } role = element role { language, pid, pref, \text } logo = element logo { language, pid, pref, data } org = element org { language, pid, pref, text-list } member = element member { pid, pref, uri } related = element related { element type { element parent { empty } | element child { empty } | element sibling { empty } | element manager { empty } | element assistant { empty } | element agent { empty } | element emergency { empty } }?, pid, pref, (uri | \text) } Perreault Expires November 7, 2009 [Page 9] Internet-Draft vCard XML May 2009 categories = element categories { pid, pref, \text } note = element note { language, pid, pref, \text } prodid = element prodid { \text } rev = element rev { timestamp } sort-string = element sort-string { \text } sound = element sound { language, pid, pref, data } uid = element uid { uri } clientpidmap = element clientpidmap { element sourceid { xsd:positiveInteger }, uri } url = element url { pid, pref, uri } class = element class { element PUBLIC { empty } | element PRIVATE { empty } | element CONFIDENTIAL { empty } } key = element key { pid, pref, data } fburl = element fburl { pid, pref, uri } caladruri = element caladruri { pid, pref, uri } caluri = element caluri { pid, pref, uri } # Top-level grammar group-property = fn | nickname | photo | adr | label | tel | email | impp | lang| tz | geo | title | role | logo | org | related | categories | note | sound | url | key | fburl | caladruri | caluri any-property = group-property | source | name | kind | n | bday | dday | birth | death | gender | member | prodid | rev | sort-string | uid | clientpidmap | class start = element vcard { (any-property | element group { attribute name { text }, group-property* })* } Appendix B. Change Log (to be removed by RFC Editor prior to publication) Perreault Expires November 7, 2009 [Page 10] Internet-Draft vCard XML May 2009 B.1. Changes in -01 o Completely reworked the schema as a result of WG feedback. o Parameters and value types are now elements. o Feature parity with plain vCard has been reached. o RELAX NG compact syntax is now used. o Chose XML namespace from IANA's range. o Added section on limitations. Author's Address Simon Perreault Viagenie 2600 boul. Laurier, suite 625 Quebec, QC G1V 4W1 Canada Phone: +1 418 656 9254 EMail: simon.perreault@viagenie.ca URI: http://www.viagenie.ca Perreault Expires November 7, 2009 [Page 11]