draft-ietf-vcarddav-vcardxml-04.txt   draft-ietf-vcarddav-vcardxml-05.txt 
Network Working Group S. Perreault Network Working Group S. Perreault
Internet-Draft Viagenie Internet-Draft Viagenie
Intended status: Standards Track July 12, 2010 Intended status: Standards Track August 2, 2010
Expires: January 13, 2011 Expires: February 3, 2011
vCard XML Representation vCard XML Representation
draft-ietf-vcarddav-vcardxml-04 draft-ietf-vcarddav-vcardxml-05
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 January 13, 2011. This Internet-Draft will expire on February 3, 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 27 skipping to change at page 2, line 27
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 . . . . . . . . . . . . . . . . . . 11 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 -04 . . . . . . . . . . . . . . . . . . . . . . 18 B.1. Changes in -05 . . . . . . . . . . . . . . . . . . . . . . 18
B.2. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 18 B.2. Changes in -04 . . . . . . . . . . . . . . . . . . . . . . 18
B.3. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 18 B.3. Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 18
B.4. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 18 B.4. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 19
B.5. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 19 B.5. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 19
B.6. 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 12, line 47 skipping to change at page 12, line 47
~ "(-[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" } xsd:integer { minInclusive = "1" maxInclusive = "100" }
}? }?
param-altid = element altid { value-text }?
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-sort-as = element sort-as { value-text+ }?
param-version = element version { value-text }? param-version = element version { value-text }?
param-geo = element geo { value-uri }? param-geo = element geo { value-uri }?
param-tz = element tz { value-text | value-uri }? param-tz = element tz { value-text | value-uri }?
param-fmttype = element fmttype { param-fmttype = element fmttype {
xsd:string { pattern = "[a-zA-Z0-9!#$&.+\-^_]{1,127}/" xsd:string { pattern = "[a-zA-Z0-9!#$&.+\-^_]{1,127}/"
~ "[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-altid, param-pid, param-pref },
value-uri value-uri
} }
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-altid, 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, param-sort-as }?, element parameters { param-language, param-sort-as, param-altid }?,
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-altid, 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-altid,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
param-fmttype 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-altid, 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-altid, 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-altid, param-language }?,
(value-text | value-uri) (value-text | value-uri)
} }
property-death = element death { property-death = element death {
element parameters { param-language }?, element parameters { param-altid, param-language }?,
(value-text | value-uri) (value-text | value-uri)
} }
property-anniversary = element anniversary { property-anniversary = element anniversary {
element parameters { param-calscale }?, element parameters { param-altid, 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-altid,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
param-geo, param-geo,
param-tz 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-altid, 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-altid,
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" }* | "textphone" }*
}, },
value-uri value-uri
} }
property-email = element email { property-email = element email {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-altid, 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-altid, param-pid, param-pref,
param-type }?,
value-uri value-uri
} }
property-lang = element lang { property-lang = element lang {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-language-tag value-language-tag
} }
property-tz = element tz { property-tz = element tz {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-altid, param-pid, param-pref,
param-type }?,
(value-text | value-uri) (value-text | value-uri)
} }
property-geo = element geo { property-geo = element geo {
element parameters { param-pid, param-pref, param-type }?, element parameters { param-altid, param-pid, param-pref,
param-type }?,
value-uri value-uri
} }
property-title = element title { property-title = element title {
element parameters { param-language, 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-role = element role {
element parameters { param-language, param-pid, element parameters { param-language, param-altid, 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-altid,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
param-fmttype 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-altid, param-pid,
param-pref, param-type, param-sort-as }?, 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 {
element parameters { param-altid, param-pid, param-pref }?,
value-uri
}
property-related = element related { property-related = element related {
element parameters { element parameters {
param-altid,
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" }*
}?, }?,
(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-altid, 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-altid, 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-sound = element sound { property-sound = element sound {
element parameters { element parameters {
param-language, param-language,
param-altid,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
param-fmttype 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-altid, 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-altid,
param-pid, param-pid,
param-pref, param-pref,
param-type, param-type,
param-fmttype param-fmttype
}?, }?,
(value-binary | value-uri | value-text) (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-altid, 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-altid, 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-altid, 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
| 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-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-sound | property-source | property-tel | property-sound | property-source | property-tel
| property-title | property-tz | property-uid | property-url | property-title | 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 -04 B.1. Changes in -05
o Synchronized with draft-ietf-vcarddav-vcardrev-13.
B.2. 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.2. Changes in -03 B.3. 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.3. Changes in -02 B.4. 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.4. Changes in -01 B.5. 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.5. Changes in -00 B.6. 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. 47 change blocks. 
43 lines changed or deleted 67 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/