draft-ietf-vcarddav-vcardxml-06.txt   draft-ietf-vcarddav-vcardxml-07.txt 
Network Working Group S. Perreault Network Working Group S. Perreault
Internet-Draft Viagenie Internet-Draft Viagenie
Intended status: Standards Track December 9, 2010 Intended status: Standards Track March 10, 2011
Expires: June 12, 2011 Expires: September 11, 2011
vCard XML Representation vCard XML Representation
draft-ietf-vcarddav-vcardxml-06 draft-ietf-vcarddav-vcardxml-07
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 June 12, 2011. This Internet-Draft will expire on September 11, 2011.
Copyright Notice Copyright Notice
Copyright (c) 2010 IETF Trust and the persons identified as the Copyright (c) 2011 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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
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
skipping to change at page 2, line 23 skipping to change at page 2, line 23
4.1. Extensibility . . . . . . . . . . . . . . . . . . . . . . 6 4.1. Extensibility . . . . . . . . . . . . . . . . . . . . . . 6
4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 7 4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 7
5. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 8 5. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 8
6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10
7.1. Registration of the XML Namespace . . . . . . . . . . . . 10 7.1. Registration of the XML Namespace . . . . . . . . . . . . 10
7.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 10
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 11 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 11
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11
9.1. Normative References . . . . . . . . . . . . . . . . . . . 11 9.1. Normative References . . . . . . . . . . . . . . . . . . . 11
9.2. Informative References . . . . . . . . . . . . . . . . . . 12 9.2. Informative References . . . . . . . . . . . . . . . . . . 11
Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 12 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) . . . . . . . . . . . . . . . . . . . . 18 publication) . . . . . . . . . . . . . . . . . . . . 18
B.1. Changes in -06 . . . . . . . . . . . . . . . . . . . . . . 18 B.1. Changes in -07 . . . . . . . . . . . . . . . . . . . . . . 18
B.2. Changes in -05 . . . . . . . . . . . . . . . . . . . . . . 18 B.2. Changes in -06 . . . . . . . . . . . . . . . . . . . . . . 18
B.3. Changes in -04 . . . . . . . . . . . . . . . . . . . . . . 18 B.3. Changes in -05 . . . . . . . . . . . . . . . . . . . . . . 18
B.4. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 18 B.4. Changes in -04 . . . . . . . . . . . . . . . . . . . . . . 18
B.5. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 18 B.5. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 18
B.6. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 19 B.6. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 19
B.7. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 19 B.7. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 19
B.8. 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 and other entities. It and exchanging information about individuals and other entities. It
is a text-based format (as opposed to a binary format). This is a text-based format (as opposed to a binary format). This
document defines an XML representation for vCard. The underlying document defines an XML representation for vCard. The underlying
data structure is exactly the same, enabling a 1-to-1 mapping between data structure is exactly the same, enabling a 1-to-1 mapping between
the original vCard format and the XML representation. The XML the original vCard format and the XML representation. The XML
formatting may be preferred in some contexts where an XML engine is formatting may be preferred in some contexts where an XML engine is
skipping to change at page 3, line 46 skipping to change at page 3, line 46
<prefix/> <prefix/>
<suffix> <suffix>
<text>ing. jr.</text> <text>ing. jr.</text>
<text>M.Sc.</text> <text>M.Sc.</text>
</suffix> </suffix>
</n> </n>
<bday><date>--0203</date></bday> <bday><date>--0203</date></bday>
<anniversary> <anniversary>
<date-time>20090808T1430-0500</date-time> <date-time>20090808T1430-0500</date-time>
</anniversary> </anniversary>
<gender><text>male</text></gender> <gender><sex><text>M</text></sex></gender>
<lang> <lang>
<parameters><pref>1</pref></parameters> <parameters><pref>1</pref></parameters>
<language-tag>fr</language-tag> <language-tag>fr</language-tag>
</lang> </lang>
<lang> <lang>
<parameters><pref>2</pref></parameters> <parameters><pref>2</pref></parameters>
<language-tag>en</language-tag> <language-tag>en</language-tag>
</lang> </lang>
<org> <org>
<parameters><type>work</type></parameters> <parameters><type><text>work</text></type></parameters>
<text>Viagenie</text> <text>Viagenie</text>
</org> </org>
<adr> <adr>
<parameters> <parameters>
<type>work</type> <type><text>work</text></type>
<label>Simon Perreault\n2600 boul. Laurier, suite <label>Simon Perreault\n2875 boul. Laurier, suite
625\nQuebec, QC, Canada\nG1V 4W1</label> D2-630\nQuebec, QC, Canada\nG1V 2M2</label>
</parameters> </parameters>
<pobox/> <pobox/>
<ext/> <ext/>
<street><text>2600 boul. Laurier, suite 625</text></street> <street><text>2875 boul. Laurier, suite D2-630</text></street>
<locality><text>Quebec</text></locality> <locality><text>Quebec</text></locality>
<region><text>QC</text></region> <region><text>QC</text></region>
<code><text>G1V 4W1</text></code> <code><text>G1V 2M2</text></code>
<country><text>Canada</text></country> <country><text>Canada</text></country>
</adr> </adr>
<tel> <tel>
<parameters> <parameters>
<type>work</type> <type>
<type>voice</type> <text>work</text>
<text>voice</text>
</type>
</parameters> </parameters>
<uri>tel:+1-418-656-9254;ext=102</uri> <uri>tel:+1-418-656-9254;ext=102</uri>
</tel> </tel>
<tel> <tel>
<parameters> <parameters>
<type>work</type> <type>
<type>text</type> <text>work</text>
<type>voice</type> <text>text</text>
<type>cell</type> <text>voice</text>
<type>video</type> <text>cell</text>
<text>video</text>
</type>
</parameters> </parameters>
<uri>tel:+1-418-262-6501</uri> <uri>tel:+1-418-262-6501</uri>
</tel> </tel>
<email> <email>
<parameters><type>work</type></parameters> <parameters><type><text>work</text></type></parameters>
<text>simon.perreault@viagenie.ca</text> <text>simon.perreault@viagenie.ca</text>
</email> </email>
<geo> <geo>
<parameters><type>work</type></parameters> <parameters><type><text>work</text></type></parameters>
<uri>geo:46.772673,-71.282945</uri> <uri>geo:46.766336,-71.28955</uri>
</geo> </geo>
<key> <key>
<parameters><type>work</type></parameters> <parameters><type><text>work</text></type></parameters>
<uri>http://www.viagenie.ca/simon.perreault/simon.asc</uri> <uri>http://www.viagenie.ca/simon.perreault/simon.asc</uri>
</key> </key>
<tz><text>America/Montreal</text></tz> <tz><text>America/Montreal</text></tz>
</vcard> </vcard>
</vcards> </vcards>
4. Design Considerations 4. Design Considerations
The general idea is to map vCard parameters, properties, and value The general idea is to map vCard parameters, properties, and value
types to XML elements. For example, the "FN" property is mapped to types to XML elements. For example, the "FN" property is mapped to
the "fn" element. That element in turn contains a text element whose the "fn" element. That element in turn contains a text element whose
skipping to change at page 9, line 26 skipping to change at page 9, line 26
o Property value escaping is undone. For example, "\n" becomes a o Property value escaping is undone. For example, "\n" becomes a
NEWLINE character (ASCII decimal 10). NEWLINE character (ASCII decimal 10).
o Double-quoting of parameter values, as well as backslash escaping o Double-quoting of parameter values, as well as backslash escaping
in parameter values, is undone. For example, in parameter values, is undone. For example,
PARAM="\"foo\",\"bar\"" becomes <param>"foo","bar"</param>. 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>
<additional/> <additional/>
<prefix/> <prefix/>
<suffix/> <suffix/>
</n> </n>
<x-file> <x-file>
<parameters><type>image/jpeg</type></parameters> <parameters><type>image/jpeg</type></parameters>
<text>alien.jpg</text> <text>alien.jpg</text>
</x-file> </x-file>
<a xmlns="http://www.w3.org/1999/xhtml" <a xmlns="http://www.w3.org/1999/xhtml"
href="http://www.example.com">My web page!</a> href="http://www.example.com">My web page!</a>
</vcard> </vcard>
</vcards> </vcards>
</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
skipping to change at page 11, line 47 skipping to change at page 11, line 37
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., "vCard Format
Format Specification", Specification",
draft-ietf-vcarddav-vcardrev-15 (work draft-ietf-vcarddav-vcardrev-16 (work
in progress), December 2010. in progress), March 2011.
[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
[I-D.dawson-vcard-xml-dtd] Dawson, F., "The vCard v3.0 XML DTD", [I-D.dawson-vcard-xml-dtd] Dawson, F., "The vCard v3.0 XML DTD",
draft-dawson-vcard-xml-dtd-03 (work in draft-dawson-vcard-xml-dtd-03 (work in
progress), June 1998. progress), June 1998.
Appendix A. Relax NG Schema Appendix A. Relax NG Schema
default namespace = "urn:ietf:params:xml:ns:vcard-4.0" default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
# Value types # Value types
value-text = element text { text } value-text = element text { text }
value-text-list = value-text+ value-text-list = value-text+
value-uri = element uri { xsd:anyURI } value-uri = element uri { xsd:anyURI }
value-date = element date { value-date = element date {
xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" } xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
} }
value-time = element time { value-time = element time {
xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)" xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
~ "(Z|[+\-]\d\d(\d\d)?)?" } ~ "(Z|[+\-]\d\d(\d\d)?)?" }
} }
value-date-time = element date-time { value-date-time = element date-time {
xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?" xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?"
~ "(Z|[+\-]\d\d(\d\d)?)?" } ~ "(Z|[+\-]\d\d(\d\d)?)?" }
} }
value-date-and-or-time = value-date | value-date-time | value-time value-date-and-or-time = value-date | value-date-time | value-time
value-timestamp = element timestamp { value-timestamp = element timestamp {
xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" } xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
} }
value-boolean = element boolean { xsd:boolean } value-boolean = element boolean { xsd:boolean }
value-integer = element integer { xsd:integer } value-integer = element integer { xsd:integer }
value-float = element float { xsd:float } value-float = element float { xsd:float }
value-language-tag = element language-tag { value-language-tag = element language-tag {
xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})" xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})"
~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?" ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?"
~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*" ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*"
~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*" ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*"
~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|" ~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|"
~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" } ~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" }
} }
# 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" } element integer {
}? xsd:integer { minInclusive = "1" maxInclusive = "100" }
param-altid = element altid { value-text }? }
param-pid = element pid { }?
xsd:string { pattern = "\d+(\.\d+)?" } param-altid = element altid { value-text }?
}? param-pid = element pid {
param-type = element type { "work" | "home" }* xsd:string { pattern = "\d+(\.\d+)?" }
param-calscale = element calscale { "gregorian" }? }?
param-sort-as = element sort-as { value-text+ }?
param-geo = element geo { value-uri }?
param-tz = element tz { value-text | value-uri }?
param-label = element label { value-text }?
# Properties param-type = element type { element text { "work" | "home" }+ }?
property-source = element source { param-calscale = element calscale { element text { "gregorian" } }?
element parameters { param-altid, param-pid, param-pref }, param-sort-as = element sort-as { value-text+ }?
value-uri param-geo = element geo { value-uri }?
} param-tz = element tz { value-text | value-uri }?
property-kind = element kind { param-label = element label { value-text }?
element text { "individual" | "group" | "org" | "location" }*
}
property-fn = element fn {
element parameters { param-language, param-altid, param-pid,
param-pref, param-type }?,
value-text
}
property-n = element n {
element parameters { param-language, param-sort-as, param-altid }?,
element surname { value-text-list? },
element given { value-text-list? },
element additional { value-text-list? },
element prefix { value-text-list? },
element suffix { value-text-list? }
}
property-nickname = element nickname {
element parameters { param-language, param-altid, param-pid,
param-pref, param-type }?,
value-text-list
}
property-photo = element photo {
element parameters {
param-altid,
param-pid,
param-pref,
param-type
}?,
value-uri
}
property-bday = element bday {
element parameters { param-altid, param-calscale }?,
(value-date-and-or-time | value-text)
}
property-anniversary = element anniversary {
element parameters { param-altid, param-calscale }?,
(value-date-and-or-time | value-text)
}
property-gender = element gender {
element text { "male" | "female" }
}
property-adr = element adr {
element parameters {
param-language,
param-altid,
param-pid,
param-pref,
param-type,
param-geo,
param-tz,
param-label
}?,
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-tel = element tel {
element parameters {
param-altid,
param-pid,
param-pref,
element type { "work" | "home" | "text" | "voice"
| "fax" | "cell" | "video" | "pager"
| "textphone" }*
},
(value-text | value-uri)
}
property-email = element email {
element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-text
}
property-impp = element impp { # Properties
element parameters { param-altid, param-pid, param-pref, property-source = element source {
param-type }?, element parameters { param-altid, param-pid, param-pref },
value-uri value-uri
} }
property-lang = element lang { property-kind = element kind {
element parameters { param-altid, param-pid, param-pref, element text { "individual" | "group" | "org" | "location" }*
param-type }?, }
value-language-tag property-fn = element fn {
} element parameters { param-language, param-altid, param-pid,
property-tz = element tz { param-pref, param-type }?,
element parameters { param-altid, param-pid, param-pref, value-text
param-type }?, }
(value-text | value-uri) property-n = element n {
} element parameters { param-language, param-sort-as, param-altid }?,
property-geo = element geo { element surname { value-text-list? },
element parameters { param-altid, param-pid, param-pref, element given { value-text-list? },
param-type }?, element additional { value-text-list? },
value-uri element prefix { value-text-list? },
} element suffix { value-text-list? }
property-title = element title { }
element parameters { param-language, param-altid, param-pid, property-nickname = element nickname {
param-pref, param-type }?, element parameters { param-language, param-altid, param-pid,
value-text param-pref, param-type }?,
} value-text-list
property-role = element role { }
element parameters { param-language, param-altid, param-pid, property-photo = element photo {
param-pref, param-type }?, element parameters {
value-text param-altid,
} param-pid,
property-logo = element logo { param-pref,
element parameters { param-type
param-language, }?,
param-altid, value-uri
param-pid, }
param-pref, property-bday = element bday {
param-type element parameters { param-altid, param-calscale }?,
}?, (value-date-and-or-time | value-text)
value-uri }
} property-anniversary = element anniversary {
property-org = element org { element parameters { param-altid, param-calscale }?,
element parameters { param-language, param-altid, param-pid, (value-date-and-or-time | value-text)
param-pref, param-type, param-sort-as }?, }
value-text-list property-gender = element gender {
} element sex {
property-member = element member { element text { "M" | "F" | "O" | "N" | "U" }?
element parameters { param-altid, param-pid, param-pref }?, },
value-uri element identity { value-text-list? }
}
property-adr = element adr {
element parameters {
param-language,
param-altid,
param-pid,
param-pref,
param-type,
param-geo,
param-tz,
param-label
}?,
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-tel = element tel {
element parameters {
param-altid,
param-pid,
param-pref,
element type {
element text { "work" | "home" | "text" | "voice"
| "fax" | "cell" | "video" | "pager"
| "textphone" }+
}?
}?,
(value-text | value-uri)
}
property-email = element email {
element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-text
}
property-impp = element impp {
element parameters { param-altid, param-pid, param-pref,
param-type }?,
} value-uri
property-related = element related { }
element parameters { property-lang = element lang {
param-altid, element parameters { param-altid, param-pid, param-pref,
param-pid, param-type }?,
param-pref, value-language-tag
element type { "work" | "home" | "contact" | "acquaintance" | }
"friend" | "met" | "co-worker" | "colleague" | "co-resident" | property-tz = element tz {
"neighbor" | "child" | "parent" | "sibling" | "spouse" | element parameters { param-altid, param-pid, param-pref,
"kin" | "muse" | "crush" | "date" | "sweetheart" | "me" }* param-type }?,
}?, (value-text | value-uri)
(value-uri | value-text) }
} property-geo = element geo {
property-categories = element categories { element parameters { param-altid, param-pid, param-pref,
element parameters { param-altid, param-pid, param-pref, param-type }?,
param-type }?, value-uri
value-text }
} property-title = element title {
property-note = element note { element parameters { param-language, param-altid, param-pid,
element parameters { param-language, param-altid, param-pid, param-pref, param-type }?,
param-pref, param-type }?, value-text
value-text }
} property-role = element role {
property-prodid = element prodid { value-text } element parameters { param-language, param-altid, param-pid,
property-rev = element rev { value-timestamp } param-pref, param-type }?,
property-sound = element sound { value-text
element parameters { }
param-language, property-logo = element logo {
param-altid, element parameters {
param-pid, param-language,
param-pref, param-altid,
param-type param-pid,
}?, param-pref,
value-uri param-type
} }?,
property-uid = element uid { value-uri } value-uri
property-clientpidmap = element clientpidmap { }
element sourceid { xsd:positiveInteger }, property-org = element org {
value-uri element parameters { param-language, param-altid, param-pid,
} param-pref, param-type, param-sort-as }?,
property-url = element url { value-text-list
element parameters { param-altid, param-pid, param-pref, }
param-type }?, property-member = element member {
value-uri element parameters { param-altid, param-pid, param-pref }?,
} value-uri
property-key = element key { }
element parameters { property-related = element related {
param-altid, element parameters {
param-pid, param-altid,
param-pref, param-pid,
param-type param-pref,
}?, element type {
(value-uri | value-text) element text {
} "work" | "home" | "contact" | "acquaintance" |
property-fburl = element fburl { "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
element parameters { param-altid, param-pid, param-pref, "neighbor" | "child" | "parent" | "sibling" | "spouse" |
param-type }?, "kin" | "muse" | "crush" | "date" | "sweetheart" | "me"
value-uri }+
} }?
property-caladruri = element caladruri { }?,
element parameters { param-altid, param-pid, param-pref, (value-uri | value-text)
param-type }?, }
value-uri property-categories = element categories {
} element parameters { param-altid, param-pid, param-pref,
property-caluri = element caluri { param-type }?,
element parameters { param-altid, param-pid, param-pref, value-text-list
param-type }?, }
value-uri property-note = element note {
} element parameters { param-language, param-altid, param-pid,
param-pref, param-type }?,
value-text
}
property-prodid = element prodid { value-text }
property-rev = element rev { value-timestamp }
property-sound = element sound {
element parameters {
param-language,
param-altid,
param-pid,
param-pref,
param-type
}?,
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-altid, param-pid, param-pref,
param-type }?,
value-uri
}
property-key = element key {
element parameters {
param-altid,
param-pid,
param-pref,
param-type
}?,
(value-uri | value-text)
}
property-fburl = element fburl {
element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-uri
}
property-caladruri = element caladruri {
element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-uri
}
property-caluri = element caluri {
element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-uri
}
# Top-level grammar # Top-level grammar
property = property-adr | property-anniversary | property-bday property = property-adr | property-anniversary | property-bday
| property-caladruri | property-caluri | property-categories | property-caladruri | property-caluri | property-categories
| property-clientpidmap | property-email | property-fburl | property-clientpidmap | property-email | property-fburl
| property-fn | property-geo | property-impp | property-key | property-fn | property-geo | property-impp | property-key
| property-kind | property-lang | property-logo | property-kind | property-lang | property-logo
| property-member | property-n | property-nickname | property-member | property-n | property-nickname
| property-note | property-org | property-photo | property-note | property-org | property-photo
| property-prodid | property-related | property-rev | property-prodid | property-related | property-rev
| property-role | property-gender | property-sound | property-role | property-gender | property-sound
| property-source | property-tel | property-title | property-source | property-tel | property-title
| property-tz | property-uid | property-url | property-tz | property-uid | 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 -06 B.1. Changes in -07
o Synchronized with draft-ietf-vcarddav-vcardrev-16.
o Fixed bad XML in example.
o Fixed <categories> which now takes a value-text-list.
o All parameters now use value elements. This affects type,
calscale, and pref.
B.2. Changes in -06
o Synchronized with draft-ietf-vcarddav-vcardrev-15. o Synchronized with draft-ietf-vcarddav-vcardrev-15.
B.2. Changes in -05 B.3. Changes in -05
o Synchronized with draft-ietf-vcarddav-vcardrev-13. o Synchronized with draft-ietf-vcarddav-vcardrev-13.
B.3. Changes in -04 B.4. Changes in -04
o Synchronized with draft-ietf-vcarddav-vcardrev-12. o Synchronized with draft-ietf-vcarddav-vcardrev-12.
o Added application/vcard+xml media type. o Added application/vcard+xml media type.
o Added rules for backslash escaping and quoting when converting. o Added rules for backslash escaping and quoting when converting.
o Added description of <vcards> element. o Added description of <vcards> element.
o Described group construct in XML. o Described group construct in XML.
B.4. Changes in -03 B.5. 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.5. Changes in -02 B.6. 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.6. Changes in -01 B.7. 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.7. Changes in -00 B.8. 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. 34 change blocks. 
327 lines changed or deleted 355 lines changed or added

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