Network Working Group S. Perreault
Internet-Draft Viagenie
Intended status: Standards Track May 9, 2010
Expires: November 10, 2010
vCard XML Representation
draft-ietf-vcarddav-vcardxml-03
Abstract
This document defines the XML schema of the vCard data format.
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 10, 2010.
Copyright Notice
Copyright (c) 2010 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
Perreault Expires November 10, 2010 [Page 1]
Internet-Draft vCard XML May 2010
the Trust Legal Provisions and are provided without warranty as
described in the BSD License.
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. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 7
6. Security Considerations . . . . . . . . . . . . . . . . . . . 8
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8
7.1. Registration of the XML Namespace . . . . . . . . . . . . 9
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 9
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9
9.1. Normative References . . . . . . . . . . . . . . . . . . . 9
9.2. Informative References . . . . . . . . . . . . . . . . . . 9
Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 9
Appendix B. Change Log (to be removed by RFC Editor prior to
publication) . . . . . . . . . . . . . . . . . . . . 15
B.1. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 15
B.2. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 15
B.3. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 16
B.4. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 16
Perreault Expires November 10, 2010 [Page 2]
Internet-Draft vCard XML May 2010
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.
Earlier work on an XML format for vCard was started in 1998 by Frank
Dawson [I-D.dawson-vcard-xml-dtd]. Sadly it did not take over the
world.
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
Simon Perreault
Perreault
Simon
ing. jr.
M.Sc.
--0203
20090808T1430-0500
1
1
fr
2
en
Perreault Expires November 10, 2010 [Page 3]
Internet-Draft vCard XML May 2010
work
Viagenie
work
Suite 625
2600 boul. Laurier
Quebec
QC
G1V 4W1
Canada
work
voice
tel:+1-418-656-9254;ext=102
work
text
voice
cell
video
tel:+1-418-262-6501
work
fax
tel:+1-418-656-9257
work
simon.perreault@viagenie.ca
work
geo:46.772673,-71.282945
work
Perreault Expires November 10, 2010 [Page 4]
Internet-Draft vCard XML May 2010
http://www.viagenie.ca/simon.perreault/simon.asc
America/Montreal
PUBLIC
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 the element, which is contained in property elements.
For example, the "TYPE" parameter applied to the "TEL" property would
look like the following in XML:
voice
video
tel:+1-555-555-555
Parameters taking a list of values are simply repeated multiple
times, once for each value in the list.
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
Perreault Expires November 10, 2010 [Page 5]
Internet-Draft vCard XML May 2010
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.
A vCard XML parser MUST ignore XML elements and attributes for which
it doesn't recognize the expanded name. The normal behaviour of
ignoring XML processing instructions whose target is not recognized
MUST also be followed.
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.
Parameters containing a list of values are expressed using a list of
elements in XML (e.g. the element).
4.2. Limitations
The schema does not validate the cardinality of properties. This is
a limitation of the schema definition language. Cardinalities of the
original 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.
Perreault Expires November 10, 2010 [Page 6]
Internet-Draft vCard XML May 2010
5. Format Conversions
When converting from XML vCard (this specification) to plain-text
vCard [I-D.ietf-vcarddav-vcardrev], the following rules apply:
o Properties in the vCard 4 namespace:
o
* If the converter knows of a specific plain-text representation
for this property, it uses it. For example, the element
corresponds to the "ADR" property, which is encoded using
comma-separated lists separated by semi-colons.
* Otherwise, the property name is taken from the element name,
property parameters are taken from the element,
and the content of the property is taken from the content of
the value element. If the property element has attributes or
contains other XML elements, they are dropped.
* If a standard property's XML element contains XML elements and
attributes for which the converter doesn't recognize the
expanded name, they are dropped. Therefore, it is RECOMMENDED
to limit extensions to the property level to ensure that all
data is preserved intact in round-trip conversions.
o Properties in other namespaces are wrapped as-is inside an "XML"
property.
When converting from plain-text vCard [I-D.ietf-vcarddav-vcardrev] to
XML vCard (this specification), the following rules apply:
o The content of "XML" properties is converted as-is to XML.
o Properties for which the converter knows of a specific XML
representation use it. For example, the "ADR" property is
represented using the element and related sub-elements.
o Other properties are converted to XML in the following way:
o
* The XML namespace of the property element is set to the vCard 4
namespace.
* The name of the property element is set to that of the
property.
Perreault Expires November 10, 2010 [Page 7]
Internet-Draft vCard XML May 2010
* If the property has attributes, they get translated as-is into
sub-elements of the element
* The property element contains a single element whose
content is copied as-is from the property's value.
For example, these two vCards are equivalent:
J. Doe
Doe
J.
image/jpeg
alien.jpg
My web page!
BEGIN:VCARD
VERSION:4.0
FN:J. Doe
N:Doe;J.;;
X-FILE;TYPE=image/jpeg:alien.jpg
XML:My web page!
END:VCARD
6. Security Considerations
All the security considerations applicable to plain vCard
[I-D.ietf-vcarddav-vcardrev] are applicable to this document as well.
7. IANA Considerations
Perreault Expires November 10, 2010 [Page 8]
Internet-Draft vCard XML May 2010
7.1. Registration of the XML Namespace
URI: urn:ietf:params:xml:ns:vcard-4.0
Registrant Contact: Simon Perreault
XML: None. Namespace URIs do not represent an XML specification.
8. Acknowledgements
Thanks to the following people for their input:
Alexey Melnikov, Barry Leiba, Cyrus Daboo, Joe Hildebrand, Joseph
Smarr, Marc Blanchet, Peter Saint-Andre, Robins George, Zahhar
Kirillov, Zoltan Ordogh.
9. References
9.1. Normative References
[I-D.ietf-vcarddav-vcardrev] Perreault, S. and P. Resnick, "vCard
Format Specification",
draft-ietf-vcarddav-vcardrev-11 (work
in progress), May 2010.
[relaxng] Clark, J., "RELAX NG Specification",
December 2001.
[relaxng-compact] Clark, J., "RELAX NG Compact Syntax",
November 2002, .
9.2. Informative References
[I-D.dawson-vcard-xml-dtd] Dawson, F., "The vCard v3.0 XML DTD",
draft-dawson-vcard-xml-dtd-03 (work in
progress), June 1998.
Appendix A. Relax NG Schema
default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
# Value types
value-text = element text { text }
value-text-list = value-text+
value-uri = element uri { xsd:anyURI }
value-date = element date {
xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
Perreault Expires November 10, 2010 [Page 9]
Internet-Draft vCard XML May 2010
}
value-time = element time {
xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
~ "(Z|[+\-]\d\d(\d\d)?)?" }
}
value-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)?)?" }
}
value-date-and-or-time = value-date | value-date-time | value-time
value-timestamp = element timestamp {
xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
}
value-boolean = element boolean { xsd:boolean }
value-integer = element integer { xsd:integer }
value-float = element float { xsd:float }
value-binary = element binary { xsd:base64Binary }
value-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}" }
}
# Parameters
param-language = element language { value-language-tag }?
param-pref = element pref {
xsd:integer { minInclusive = "1" maxInclusive = "100" }
}?
param-pid = element pid {
xsd:string { pattern = "\d+(\.\d+)?" }
}?
param-type = element type { "work" | "home" }*
param-calscale = element calscale { "gregorian" }?
# Properties
property-source = element source {
element parameters { param-pid, param-pref },
value-uri
}
property-name = element name { value-text }
property-kind = element kind {
element text { "individual" | "group" | "org" |
"location" | "thing" }*
}
property-fn = element fn {
Perreault Expires November 10, 2010 [Page 10]
Internet-Draft vCard XML May 2010
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text
}
property-n = element n {
element parameters { param-language }?,
element surname { value-text-list? },
element given { value-text-list? },
element prefix { value-text-list? },
element suffix { value-text-list? }
}
property-nickname = element nickname {
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text-list
}
property-photo = element photo {
element parameters {
param-pid,
param-pref,
param-type,
element type { element media { value-text } }?
}?,
(value-binary | value-uri)
}
property-bday = element bday {
element parameters { param-calscale }?,
(value-date-and-or-time | value-text)
}
property-dday = element dday {
element parameters { param-calscale }?,
(value-date-and-or-time | value-text)
}
property-birth = element birth {
element parameters { param-language }?,
value-text
}
property-death = element death {
element parameters { param-language }?,
value-text
}
property-anniversary = element anniversary {
element parameters { param-calscale }?,
(value-date-and-or-time | value-text)
}
property-sex = element sex {
element integer { "0" | "1" | "2" | "9" }
}
Perreault Expires November 10, 2010 [Page 11]
Internet-Draft vCard XML May 2010
property-adr = element adr {
element parameters {
param-language,
param-pid,
param-pref,
param-type,
element geo { value-uri }?,
element tz { value-text | value-uri }?
}?,
element pobox { value-text-list? },
element ext { value-text-list? },
element street { value-text-list? },
element locality { value-text-list? },
element region { value-text-list? },
element code { value-text-list? },
element country { value-text-list? }
}
property-label = element label {
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text
}
property-tel = element tel {
element parameters {
param-pid,
param-pref,
element type { "work" | "home" | "text" | "voice"
| "fax" | "cell" | "video" | "pager" }*
},
value-uri
}
property-email = element email {
element parameters { param-pid, param-pref, param-type }?,
value-text
}
property-impp = element impp {
element parameters { param-pid, param-pref, param-type }?,
value-uri
}
property-lang = element lang {
element parameters { param-pid, param-pref, param-type }?,
value-language-tag
}
property-tz = element tz {
element parameters { param-pid, param-pref, param-type }?,
(value-text | value-uri)
}
property-geo = element geo {
Perreault Expires November 10, 2010 [Page 12]
Internet-Draft vCard XML May 2010
element parameters { param-pid, param-pref, param-type }?,
value-uri
}
property-title = element title {
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text
}
property-role = element role {
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text
}
property-logo = element logo {
element parameters {
param-language,
param-pid,
param-pref,
param-type,
element type { element media { value-text } }?
}?,
(value-binary | value-uri)
}
property-org = element org {
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text-list
}
property-member = element member { param-pid, param-pref, value-uri }
property-related = element related {
element parameters {
param-pid,
param-pref,
element type { "work" | "home" | "parent" | "child"
| "sibling" | "spouse" | "family" | "friend"
| "supervisor" | "supervisee" | "assistant"
| "colleague" | "agent" | "emergency" }*
}?,
(value-uri | value-text)
}
property-categories = element categories {
element parameters { param-pid, param-pref, param-type }?,
value-text
}
property-note = element note {
element parameters { param-language, param-pid,
param-pref, param-type }?,
value-text
Perreault Expires November 10, 2010 [Page 13]
Internet-Draft vCard XML May 2010
}
property-prodid = element prodid { value-text }
property-rev = element rev { value-timestamp }
property-sort-string = element sort-string {
element surname { value-text }+,
element given { value-text }*
}
property-sound = element sound {
element parameters {
param-language,
param-pid,
param-pref,
element type { "work" | "home" |
element media { value-text } }*
}
}?,
(value-binary | value-uri)
}
property-uid = element uid { value-uri }
property-clientpidmap = element clientpidmap {
element sourceid { xsd:positiveInteger },
value-uri
}
property-url = element url {
element parameters { param-pid, param-pref, param-type }?,
value-uri
}
property-class = element class {
element text { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" }
}
property-key = element key {
element parameters {
param-pid,
param-pref,
element type { "work" | "home" |
element media { value-text } }*
}
}?,
(value-binary | value-uri)
}
property-fburl = element fburl {
element parameters { param-pid, param-pref, param-type }?,
value-uri
}
property-caladruri = element caladruri {
element parameters { param-pid, param-pref, param-type }?,
value-uri
}
Perreault Expires November 10, 2010 [Page 14]
Internet-Draft vCard XML May 2010
property-caluri = element caluri {
element parameters { param-pid, param-pref, param-type }?,
value-uri
}
# Top-level grammar
property = property-adr | property-anniversary | property-bday
| property-birth | property-caladruri | property-caluri
| property-categories | property-class | property-clientpidmap
| property-dday | property-death | property-email
| property-fburl | property-fn | property-geo | property-impp
| property-key | property-kind | property-label | property-lang
| property-logo | property-member | property-n | property-name
| property-nickname | property-note | property-org
| property-photo | property-prodid | property-related
| property-rev | property-role | property-sex
| property-sort-string | property-sound | property-source
| property-tel | property-title | property-tz | property-uid
| property-url
start = element vcards {
element vcard {
(property
| element group {
attribute name { text },
property*
})+
}+
}
Appendix B. Change Log (to be removed by RFC Editor prior to
publication)
B.1. Changes in -03
o Created "Format Conversions" section.
o Turned more parameter values into plain text.
o Removed need for empty value elements in components.
o Wrapped value of , , and in value elements.
B.2. Changes in -02
o Synchronized with draft-ietf-vcarddav-vcardrev-10.
Perreault Expires November 10, 2010 [Page 15]
Internet-Draft vCard XML May 2010
o Turned parameter values into plain text.
o Moved the "XML" property to vCard base.
o Changed title to avoid confusion with XML Schema.
o Added prefixes "value-", "param-", and "property-" in schema.
o Better language for specifying what a parser must ignore.
B.3. Changes in -01
o Synchronized with draft-ietf-vcarddav-vcardrev-09.
o Added the element to allow multiple vCards in a single
XML file.
o Created the container element.
o Use text value for enumeration in element.
o Created the "XML" vCard property.
o Added IANA considerations section.
o Added security considerations section.
B.4. Changes in -00
o Same as draft-perreault-vcarddav-vcardxml-02.
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 10, 2010 [Page 16]