draft-ietf-vcarddav-vcardxml-03.txt   draft-ietf-vcarddav-vcardxml-04.txt 
Network Working Group S. Perreault Network Working Group S. Perreault
Internet-Draft Viagenie Internet-Draft Viagenie
Intended status: Standards Track May 9, 2010 Intended status: Standards Track July 12, 2010
Expires: November 10, 2010 Expires: January 13, 2011
vCard XML Representation vCard XML Representation
draft-ietf-vcarddav-vcardxml-03 draft-ietf-vcarddav-vcardxml-04
Abstract Abstract
This document defines the XML schema of the vCard data format. This document defines the XML schema of the vCard data format.
Status of This Memo Status of This Memo
This Internet-Draft is submitted to IETF in full conformance with the This Internet-Draft is submitted to IETF in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
skipping to change at page 1, line 36 skipping to change at page 1, line 36
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on November 10, 2010. This Internet-Draft will expire on January 13, 2011.
Copyright Notice Copyright Notice
Copyright (c) 2010 IETF Trust and the persons identified as the Copyright (c) 2010 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 13 skipping to change at page 2, line 13
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the BSD License. described in the BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. The Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. The Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Example: Author's XML vCard . . . . . . . . . . . . . . . . . 3 3. Example: Author's XML vCard . . . . . . . . . . . . . . . . . 3
4. Design Considerations . . . . . . . . . . . . . . . . . . . . 5 4. Design Considerations . . . . . . . . . . . . . . . . . . . . 5
4.1. Extensibility . . . . . . . . . . . . . . . . . . . . . . 5 4.1. Extensibility . . . . . . . . . . . . . . . . . . . . . . 6
4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 6 4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 7
5. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 7 5. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 8
6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10
7.1. Registration of the XML Namespace . . . . . . . . . . . . 9 7.1. Registration of the XML Namespace . . . . . . . . . . . . 10
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 9 7.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 10
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 11
9.1. Normative References . . . . . . . . . . . . . . . . . . . 9 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11
9.2. Informative References . . . . . . . . . . . . . . . . . . 9 9.1. Normative References . . . . . . . . . . . . . . . . . . . 11
Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 9 9.2. Informative References . . . . . . . . . . . . . . . . . . 11
Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 12
Appendix B. Change Log (to be removed by RFC Editor prior to Appendix B. Change Log (to be removed by RFC Editor prior to
publication) . . . . . . . . . . . . . . . . . . . . 15 publication) . . . . . . . . . . . . . . . . . . . . 18
B.1. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 15 B.1. Changes in -04 . . . . . . . . . . . . . . . . . . . . . . 18
B.2. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 15 B.2. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 18
B.3. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 16 B.3. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 18
B.4. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 16 B.4. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 18
B.5. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 19
1. Introduction 1. Introduction
vCard [I-D.ietf-vcarddav-vcardrev] is a data format for representing vCard [I-D.ietf-vcarddav-vcardrev] is a data format for representing
and exchanging information about individuals. It is a text-based and exchanging information about individuals and other entities. It
format (as opposed to a binary format). This document defines an XML is a text-based format (as opposed to a binary format). This
representation for vCard. The underlying data structure is exactly document defines an XML representation for vCard. The underlying
the same, enabling a 1-to-1 mapping between the original vCard format data structure is exactly the same, enabling a 1-to-1 mapping between
and the XML representation. The XML formatting may be preferred in the original vCard format and the XML representation. The XML
some contexts where an XML engine is readily available and may be formatting may be preferred in some contexts where an XML engine is
reused instead of writing a stand-alone vCard parser. 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 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 Dawson [I-D.dawson-vcard-xml-dtd]. Sadly it did not take over the
world. world.
2. The Schema 2. The Schema
The schema is expressed in the RELAX NG language The schema is expressed in the RELAX NG language
[relaxng][relaxng-compact] and is found in Appendix A. [relaxng][relaxng-compact] and is found in Appendix A.
skipping to change at page 5, line 44 skipping to change at page 5, line 45
Properties having structured values (e.g. the "N" property) are Properties having structured values (e.g. the "N" property) are
expressed by XML element trees. Element names in that tree (e.g. expressed by XML element trees. Element names in that tree (e.g.
"surname", "given", etc.) do not have a vCard equivalent since they "surname", "given", etc.) do not have a vCard equivalent since they
are identified by position in plain vCard. are identified by position in plain vCard.
Line folding is a non-issue in XML. Therefore, the mapping from Line folding is a non-issue in XML. Therefore, the mapping from
vCard to XML is done after the unfolding procedure is carried out. vCard to XML is done after the unfolding procedure is carried out.
Conversely, the mapping from XML to vCard is done before the folding Conversely, the mapping from XML to vCard is done before the folding
procedure is carried out. procedure is carried out.
A top-level <vcards> element is used as root. It contains one or
more <vcard> element, each representing a complete vCard. The
<vcards> element MUST be present even when only a single vCard is
present in an XML document.
The group construct (Section 3.2 in [I-D.ietf-vcarddav-vcardrev]) is
represented with the <group> element. The "name" attribute contains
the group's name. For example:
<vcards>
<vcard>
<group name="contact">
<fn>...</fn>
<email>...</email>
</group>
<group name="media">
<photo>...</photo>
</group>
<categories>...</categories>
</vcard>
</vcards>
is equivalent to:
BEGIN:VCARD
VERSION:4.0
contact.FN=...
contact.EMAIL=...
media.PHOTO=...
CATEGORIES=...
END:VCARD
4.1. Extensibility 4.1. Extensibility
The original vCard format is extensible. New properties, parameters, The original vCard format is extensible. New properties, parameters,
data types and values (collectively known as vCard objects) can be data types and values (collectively known as vCard objects) can be
registered from IANA. It is expected that these vCard extensions registered with IANA. It is expected that these vCard extensions
will also specify extensions to the XML format described in this will also specify extensions to the XML format described in this
document. This is not a requirement: a separate document may be used document.
instead.
Unregistered extensions (i.e. those starting with "X-" and Unregistered extensions (i.e. those starting with "X-" and
"VND-...-") can be expressed in XML by making use of XML namespaces. "VND-...-") are expressed in XML by using elements starting with "x-"
They simply correspond to elements outside of the core namespace. and "vnd-...-". Usage of XML namespaces for extensibility is
For example: RECOMMENDED for extensions that have no equivalent in plain text
vCard. Refer to Section 5 for the implications when converting
between plain-text vCard and XML.
Examples:
<x-my-prop>
<parameters>
<pref>1</pref>
<text>value goes here</text>
<x-my-prop>
<ext:my-prop <ext:my-prop
ext:xmlns="http://example.com/extensions/my-vcard"> ext:xmlns="http://example.com/extensions/my-vcard">
<parameters> <parameters>
<pref>1</pref> <pref>1</pref>
</parameters> <!-- Core vCard elements --> </parameters> <!-- Core vCard elements -->
<text>value goes here</text> <!-- are still accessible --> <text>value goes here</text> <!-- are still accessible -->
</ext:my-prop> </ext:my-prop>
Note that extension elements do not need the "X- or "VND-" prefix in Note that extension elements do not need the "X- or "VND-" prefix in
skipping to change at page 7, line 12 skipping to change at page 8, line 12
valid. However, reordering as part of conversion to or from plain valid. However, reordering as part of conversion to or from plain
vCard MAY happen. vCard MAY happen.
5. Format Conversions 5. Format Conversions
When converting from XML vCard (this specification) to plain-text When converting from XML vCard (this specification) to plain-text
vCard [I-D.ietf-vcarddav-vcardrev], the following rules apply: vCard [I-D.ietf-vcarddav-vcardrev], the following rules apply:
o Properties in the vCard 4 namespace: o Properties in the vCard 4 namespace:
o
* If the converter knows of a specific plain-text representation * If the converter knows of a specific plain-text representation
for this property, it uses it. For example, the <adr> element for this property, it uses it. For example, the <adr> element
corresponds to the "ADR" property, which is encoded using corresponds to the "ADR" property, which is encoded using
comma-separated lists separated by semi-colons. comma-separated lists separated by semi-colons.
* Otherwise, the property name is taken from the element name, * Otherwise, the property name is taken from the element name,
property parameters are taken from the <parameters> element, property parameters are taken from the <parameters> element,
and the content of the property is taken from the content of and the content of the property is taken from the content of
the value element. If the property element has attributes or the value element. If the property element has attributes or
contains other XML elements, they are dropped. contains other XML elements, they are dropped.
* If a standard property's XML element contains XML elements and * If a standard property's XML element contains XML elements and
attributes for which the converter doesn't recognize the attributes for which the converter doesn't recognize the
expanded name, they are dropped. Therefore, it is RECOMMENDED expanded name, they are dropped. Therefore, it is RECOMMENDED
to limit extensions to the property level to ensure that all to limit extensions to the property level to ensure that all
data is preserved intact in round-trip conversions. data is preserved intact in round-trip conversions.
o Properties in other namespaces are wrapped as-is inside an "XML" o Properties in other namespaces are wrapped as-is inside an "XML"
property. property.
o Property value escaping (Section 3.3 of
[I-D.ietf-vcarddav-vcardrev]) is carried out. For example, a
NEWLINE character (ASCII decimal 10) becomes "\n".
o Double-quoting of parameter values, as well as backslash escaping
in parameter values, is carried out. For example,
<param>"foo","bar"</param> becomes PARAM="\"foo\",\"bar\"".
When converting from plain-text vCard [I-D.ietf-vcarddav-vcardrev] to When converting from plain-text vCard [I-D.ietf-vcarddav-vcardrev] to
XML vCard (this specification), the following rules apply: XML vCard (this specification), the following rules apply:
o The content of "XML" properties is converted as-is to XML. o The content of "XML" properties is converted as-is to XML.
o Properties for which the converter knows of a specific XML o Properties for which the converter knows of a specific XML
representation use it. For example, the "ADR" property is representation use it. For example, the "ADR" property is
represented using the <adr> element and related sub-elements. represented using the <adr> element and related sub-elements.
o Other properties are converted to XML in the following way: 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 * The XML namespace of the property element is set to the vCard 4
namespace. namespace.
* The name of the property element is set to that of the * The name of the property element is set to the lowercased name
property. of the property.
* If the property has attributes, they get translated as-is into * If the property has parameters, they get translated as-is
sub-elements of the <parameters> element (without lowercasing of parameter names, removal of backslash
escaping, and removal of quoting) into sub-elements of the
<parameters> element
* The property element contains a single <text> element whose * The property element contains a single <text> element whose
content is copied as-is from the property's value. content is copied as-is from the property's value.
o Property value escaping is undone. For example, "\n" becomes a
NEWLINE character (ASCII decimal 10).
o Double-quoting of parameter values, as well as backslash escaping
in parameter values, is undone. For example,
PARAM="\"foo\",\"bar\"" becomes <param>"foo","bar"</param>.
For example, these two vCards are equivalent: For example, these two vCards are equivalent:
<xml version="1.0"> <xml version="1.0">
<vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0"> <vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
<vcard> <vcard>
<fn><text>J. Doe</text></fn> <fn><text>J. Doe</text></fn>
<n> <n>
<surname><text>Doe</text></surname> <surname><text>Doe</text></surname>
<given><text>J.</text></given> <given><text>J.</text></given>
<prefix/> <prefix/>
skipping to change at page 8, line 40 skipping to change at page 10, line 4
</vcards> </vcards>
</xml> </xml>
BEGIN:VCARD BEGIN:VCARD
VERSION:4.0 VERSION:4.0
FN:J. Doe FN:J. Doe
N:Doe;J.;; N:Doe;J.;;
X-FILE;TYPE=image/jpeg:alien.jpg X-FILE;TYPE=image/jpeg:alien.jpg
XML:<a xmlns="http://www.w3.org/1999/xhtml"\n XML:<a xmlns="http://www.w3.org/1999/xhtml"\n
href="http://www.example.com">My web page!</a> href="http://www.example.com">My web page!</a>
END:VCARD END:VCARD
6. Security Considerations 6. Security Considerations
All the security considerations applicable to plain vCard All the security considerations applicable to plain vCard
[I-D.ietf-vcarddav-vcardrev] are applicable to this document as well. [I-D.ietf-vcarddav-vcardrev] are applicable to this document as well.
7. IANA Considerations 7. IANA Considerations
7.1. Registration of the XML Namespace 7.1. Registration of the XML Namespace
URI: urn:ietf:params:xml:ns:vcard-4.0 URI: urn:ietf:params:xml:ns:vcard-4.0
Registrant Contact: Simon Perreault <simon.perreault@viagenie.ca> Registrant Contact: Simon Perreault <simon.perreault@viagenie.ca>
XML: None. Namespace URIs do not represent an XML specification. XML: None. Namespace URIs do not represent an XML specification.
7.2. Media Type
This section defines the MIME media type for use with vCard-in-XML
data.
To: ietf-types@iana.org
Subject: Registration of media type application/vcard+xml
Type name: application
Subtype name: vcard+xml
Required parameters: none
Optional parameters: none
Encoding considerations: Same as for application/xml.
Security considerations: See Section 6.
Interoperability considerations: This media type provides an
alternative syntax to vCard data [I-D.ietf-vcarddav-vcardrev]
based on XML.
Published specification: This specification.
Applications which use this media type: Applications that currently
make use of the text/vcard media type can use this as an
alternative.
Additional information:
Magic number(s): none
File extension(s): XML data should use ".xml" as the file
extension.
Macintosh file type code(s): none
Person & email address to contact for further information: Simon
Perreault <simon.perreault@viagenie.ca>
Intended usage: COMMON
Restrictions on usage: none
Author: Simon Perreault
Change controller: IETF
8. Acknowledgements 8. Acknowledgements
Thanks to the following people for their input: Thanks to the following people for their input:
Alexey Melnikov, Barry Leiba, Cyrus Daboo, Joe Hildebrand, Joseph Alexey Melnikov, Barry Leiba, Cyrus Daboo, Joe Hildebrand, Joseph
Smarr, Marc Blanchet, Peter Saint-Andre, Robins George, Zahhar Smarr, Marc Blanchet, Peter Saint-Andre, Robins George, Zahhar
Kirillov, Zoltan Ordogh. Kirillov, Zoltan Ordogh.
9. References 9. References
9.1. Normative References 9.1. Normative References
[I-D.ietf-vcarddav-vcardrev] Perreault, S. and P. Resnick, "vCard [I-D.ietf-vcarddav-vcardrev] Perreault, S. and P. Resnick, "vCard
Format Specification", Format Specification",
draft-ietf-vcarddav-vcardrev-11 (work draft-ietf-vcarddav-vcardrev-12 (work
in progress), May 2010. in progress), July 2010.
[relaxng] Clark, J., "RELAX NG Specification", [relaxng] Clark, J., "RELAX NG Specification",
December 2001. December 2001.
[relaxng-compact] Clark, J., "RELAX NG Compact Syntax", [relaxng-compact] Clark, J., "RELAX NG Compact Syntax",
November 2002, <http://www.relaxng.org/ November 2002, <http://www.relaxng.org/
compact-20021121.html>. compact-20021121.html>.
9.2. Informative References 9.2. Informative References
skipping to change at page 10, line 41 skipping to change at page 13, line 4
# Parameters # Parameters
param-language = element language { value-language-tag }? param-language = element language { value-language-tag }?
param-pref = element pref { param-pref = element pref {
xsd:integer { minInclusive = "1" maxInclusive = "100" } xsd:integer { minInclusive = "1" maxInclusive = "100" }
}? }?
param-pid = element pid { param-pid = element pid {
xsd:string { pattern = "\d+(\.\d+)?" } xsd:string { pattern = "\d+(\.\d+)?" }
}? }?
param-type = element type { "work" | "home" }* param-type = element type { "work" | "home" }*
param-calscale = element calscale { "gregorian" }? param-calscale = element calscale { "gregorian" }?
param-sort-as = element sort-as { value-text+ }?
param-version = element version { value-text }?
param-geo = element geo { value-uri }?
param-tz = element tz { value-text | value-uri }?
param-fmttype = element fmttype {
xsd:string { pattern = "[a-zA-Z0-9!#$&.+\-^_]{1,127}/"
~ "[a-zA-Z0-9!#$&.+\-^_]{1,127}" }
}?
# Properties # Properties
property-source = element source { property-source = element source {
element parameters { param-pid, param-pref }, element parameters { param-pid, param-pref },
value-uri value-uri
} }
property-name = element name { value-text } property-name = element name { value-text }
property-kind = element kind { property-kind = element kind {
element text { "individual" | "group" | "org" | element text { "individual" | "group" | "org" |
"location" | "thing" }* "location" | "thing" }*
} }
property-fn = element fn { property-fn = element fn {
element parameters { param-language, param-pid, element parameters { param-language, param-pid,
param-pref, param-type }?, param-pref, param-type }?,
value-text value-text
} }
property-n = element n { property-n = element n {
element parameters { param-language }?, element parameters { param-language, param-sort-as }?,
element surname { value-text-list? }, element surname { value-text-list? },
element given { value-text-list? }, element given { value-text-list? },
element prefix { value-text-list? }, element prefix { value-text-list? },
element suffix { value-text-list? } element suffix { value-text-list? }
} }
property-nickname = element nickname { property-nickname = element nickname {
element parameters { param-language, param-pid, element parameters { param-language, param-pid,
param-pref, param-type }?, param-pref, param-type }?,
value-text-list value-text-list
} }
property-photo = element photo { property-photo = element photo {
element parameters { element parameters {
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
element type { element media { value-text } }? param-fmttype
}?, }?,
(value-binary | value-uri) (value-binary | value-uri)
} }
property-bday = element bday { property-bday = element bday {
element parameters { param-calscale }?, element parameters { param-calscale }?,
(value-date-and-or-time | value-text) (value-date-and-or-time | value-text)
} }
property-dday = element dday { property-dday = element dday {
element parameters { param-calscale }?, element parameters { param-calscale }?,
(value-date-and-or-time | value-text) (value-date-and-or-time | value-text)
} }
property-birth = element birth { property-birth = element birth {
element parameters { param-language }?, element parameters { param-language }?,
value-text (value-text | value-uri)
} }
property-death = element death { property-death = element death {
element parameters { param-language }?, element parameters { param-language }?,
value-text (value-text | value-uri)
} }
property-anniversary = element anniversary { property-anniversary = element anniversary {
element parameters { param-calscale }?, element parameters { param-calscale }?,
(value-date-and-or-time | value-text) (value-date-and-or-time | value-text)
} }
property-sex = element sex { property-sex = element sex {
element integer { "0" | "1" | "2" | "9" } element integer { "0" | "1" | "2" | "9" }
} }
property-adr = element adr { property-adr = element adr {
element parameters { element parameters {
param-language, param-language,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
element geo { value-uri }?, param-geo,
element tz { value-text | value-uri }? param-tz
}?, }?,
element pobox { value-text-list? }, element pobox { value-text-list? },
element ext { value-text-list? }, element ext { value-text-list? },
element street { value-text-list? }, element street { value-text-list? },
element locality { value-text-list? }, element locality { value-text-list? },
element region { value-text-list? }, element region { value-text-list? },
element code { value-text-list? }, element code { value-text-list? },
element country { value-text-list? } element country { value-text-list? }
} }
property-label = element label { property-label = element label {
element parameters { param-language, param-pid, element parameters { param-language, param-pid,
param-pref, param-type }?, param-pref, param-type }?,
value-text value-text
} }
property-tel = element tel { property-tel = element tel {
element parameters { element parameters {
param-pid, param-pid,
param-pref, param-pref,
element type { "work" | "home" | "text" | "voice" element type { "work" | "home" | "text" | "voice"
| "fax" | "cell" | "video" | "pager" }* | "fax" | "cell" | "video" | "pager"
| "textphone" }*
}, },
value-uri value-uri
} }
property-email = element email { property-email = element email {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-text value-text
} }
property-impp = element impp { property-impp = element impp {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-uri value-uri
skipping to change at page 13, line 23 skipping to change at page 15, line 44
element parameters { param-language, param-pid, element parameters { param-language, param-pid,
param-pref, param-type }?, param-pref, param-type }?,
value-text value-text
} }
property-logo = element logo { property-logo = element logo {
element parameters { element parameters {
param-language, param-language,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
element type { element media { value-text } }? param-fmttype
}?, }?,
(value-binary | value-uri) (value-binary | value-uri)
} }
property-org = element org { property-org = element org {
element parameters { param-language, param-pid, element parameters { param-language, param-pid,
param-pref, param-type }?, param-pref, param-type, param-sort-as }?,
value-text-list value-text-list
} }
property-member = element member { param-pid, param-pref, value-uri } property-member = element member { param-pid, param-pref, value-uri }
property-related = element related { property-related = element related {
element parameters { element parameters {
param-pid, param-pid,
param-pref, param-pref,
element type { "work" | "home" | "parent" | "child" element type { "work" | "home" | "parent" | "child"
| "sibling" | "spouse" | "family" | "friend" | "sibling" | "spouse" | "family" | "friend"
| "supervisor" | "supervisee" | "assistant" | "supervisor" | "supervisee" | "assistant"
| "colleague" | "agent" | "emergency" }* | "colleague" | "agent" | "emergency" }*
skipping to change at page 14, line 4 skipping to change at page 16, line 26
(value-uri | value-text) (value-uri | value-text)
} }
property-categories = element categories { property-categories = element categories {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-text value-text
} }
property-note = element note { property-note = element note {
element parameters { param-language, param-pid, element parameters { param-language, param-pid,
param-pref, param-type }?, param-pref, param-type }?,
value-text value-text
} }
property-prodid = element prodid { value-text } property-prodid = element prodid { value-text }
property-rev = element rev { value-timestamp } property-rev = element rev { value-timestamp }
property-sort-string = element sort-string {
element surname { value-text }+,
element given { value-text }*
}
property-sound = element sound { property-sound = element sound {
element parameters { element parameters {
param-language, param-language,
param-pid, param-pid,
param-pref, param-pref,
element type { "work" | "home" | param-type,
element media { value-text } }* param-fmttype
}
}?, }?,
(value-binary | value-uri) (value-binary | value-uri)
} }
property-uid = element uid { value-uri } property-uid = element uid { value-uri }
property-clientpidmap = element clientpidmap { property-clientpidmap = element clientpidmap {
element sourceid { xsd:positiveInteger }, element sourceid { xsd:positiveInteger },
value-uri value-uri
} }
property-url = element url { property-url = element url {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-uri value-uri
} }
property-class = element class { property-class = element class {
element text { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" } element text { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" }
} }
property-key = element key { property-key = element key {
element parameters { element parameters {
param-pid, param-pid,
param-pref, param-pref,
element type { "work" | "home" | param-type,
element media { value-text } }* param-fmttype
}
}?, }?,
(value-binary | value-uri) (value-binary | value-uri | value-text)
} }
property-fburl = element fburl { property-fburl = element fburl {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-uri value-uri
} }
property-caladruri = element caladruri { property-caladruri = element caladruri {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-uri value-uri
} }
property-caluri = element caluri { property-caluri = element caluri {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-pid, param-pref, param-type }?,
value-uri value-uri
} }
# Top-level grammar # Top-level grammar
property = property-adr | property-anniversary | property-bday property = property-adr | property-anniversary | property-bday
| property-birth | property-caladruri | property-caluri | property-birth | property-caladruri | property-caluri
| property-categories | property-class | property-clientpidmap | property-categories | property-class | property-clientpidmap
| property-dday | property-death | property-email | property-dday | property-death | property-email
skipping to change at page 15, line 21 skipping to change at page 17, line 35
property = property-adr | property-anniversary | property-bday property = property-adr | property-anniversary | property-bday
| property-birth | property-caladruri | property-caluri | property-birth | property-caladruri | property-caluri
| property-categories | property-class | property-clientpidmap | property-categories | property-class | property-clientpidmap
| property-dday | property-death | property-email | property-dday | property-death | property-email
| property-fburl | property-fn | property-geo | property-impp | property-fburl | property-fn | property-geo | property-impp
| property-key | property-kind | property-label | property-lang | property-key | property-kind | property-label | property-lang
| property-logo | property-member | property-n | property-name | property-logo | property-member | property-n | property-name
| property-nickname | property-note | property-org | property-nickname | property-note | property-org
| property-photo | property-prodid | property-related | property-photo | property-prodid | property-related
| property-rev | property-role | property-sex | property-rev | property-role | property-sex
| property-sort-string | property-sound | property-source | property-sound | property-source | property-tel
| property-tel | property-title | property-tz | property-uid | property-title | property-tz | property-uid | property-url
| property-url
start = element vcards { start = element vcards {
element vcard { element vcard {
(property (property
| element group { | element group {
attribute name { text }, attribute name { text },
property* property*
})+ })+
}+ }+
} }
Appendix B. Change Log (to be removed by RFC Editor prior to Appendix B. Change Log (to be removed by RFC Editor prior to
publication) publication)
B.1. Changes in -03 B.1. Changes in -04
o Synchronized with draft-ietf-vcarddav-vcardrev-12.
o Added application/vcard+xml media type.
o Added rules for backslash escaping and quoting when converting.
o Added description of <vcards> element.
o Described group construct in XML.
B.2. Changes in -03
o Created "Format Conversions" section. o Created "Format Conversions" section.
o Turned more <type> parameter values into plain text. o Turned more <type> parameter values into plain text.
o Removed need for empty value elements in components. o Removed need for empty value elements in components.
o Wrapped value of <sex>, <class>, and <kind> in value elements. o Wrapped value of <sex>, <class>, and <kind> in value elements.
B.2. Changes in -02 B.3. Changes in -02
o Synchronized with draft-ietf-vcarddav-vcardrev-10. o Synchronized with draft-ietf-vcarddav-vcardrev-10.
o Turned <type> parameter values into plain text. o Turned <type> parameter values into plain text.
o Moved the "XML" property to vCard base. o Moved the "XML" property to vCard base.
o Changed title to avoid confusion with XML Schema. o Changed title to avoid confusion with XML Schema.
o Added prefixes "value-", "param-", and "property-" in schema. o Added prefixes "value-", "param-", and "property-" in schema.
o Better language for specifying what a parser must ignore. o Better language for specifying what a parser must ignore.
B.3. Changes in -01 B.4. Changes in -01
o Synchronized with draft-ietf-vcarddav-vcardrev-09. o Synchronized with draft-ietf-vcarddav-vcardrev-09.
o Added the <vcards> element to allow multiple vCards in a single o Added the <vcards> element to allow multiple vCards in a single
XML file. XML file.
o Created the <parameters> container element. o Created the <parameters> container element.
o Use text value for enumeration in <class> element. o Use text value for enumeration in <class> element.
o Created the "XML" vCard property. o Created the "XML" vCard property.
o Added IANA considerations section. o Added IANA considerations section.
o Added security considerations section. o Added security considerations section.
B.4. Changes in -00 B.5. Changes in -00
o Same as draft-perreault-vcarddav-vcardxml-02. o Same as draft-perreault-vcarddav-vcardxml-02.
Author's Address Author's Address
Simon Perreault Simon Perreault
Viagenie Viagenie
2600 boul. Laurier, suite 625 2600 boul. Laurier, suite 625
Quebec, QC G1V 4W1 Quebec, QC G1V 4W1
Canada Canada
 End of changes. 43 change blocks. 
73 lines changed or deleted 196 lines changed or added

This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/