draft-ietf-vcarddav-vcardxml-01.txt   draft-ietf-vcarddav-vcardxml-02.txt 
Network Working Group S. Perreault Network Working Group S. Perreault
Internet-Draft Viagenie Internet-Draft Viagenie
Intended status: Standards Track October 21, 2009 Intended status: Standards Track March 8, 2010
Expires: April 24, 2010 Expires: September 9, 2010
vCard XML Schema vCard XML Representation
draft-ietf-vcarddav-vcardxml-01 draft-ietf-vcarddav-vcardxml-02
Abstract
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.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet- other groups may also distribute working documents as Internet-
Drafts. Drafts.
skipping to change at page 1, line 32 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 April 24, 2010. This Internet-Draft will expire on September 9, 2010.
Copyright Notice Copyright Notice
Copyright (c) 2009 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 in effect on the date of Provisions Relating to IETF Documents
publication of this document (http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info) in effect on the date of
Please review these documents carefully, as they describe your rights publication of this document. Please review these documents
and restrictions with respect to this document. carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
Abstract include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
This document defines the XML schema of the vCard data format. 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 . . . . . . . . . . . . . . . . . . . . . . 5
4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 6 4.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 6
5. The "XML" vCard Property . . . . . . . . . . . . . . . . . . . 6 5. Security Considerations . . . . . . . . . . . . . . . . . . . 7
6. Security Considerations . . . . . . . . . . . . . . . . . . . 7 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 6.1. Registration of the XML Namespace . . . . . . . . . . . . 7
7.1. Registration of the "XML" vCard Property . . . . . . . . . 8 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 7
7.2. Registration of the XML Namespace . . . . . . . . . . . . 8 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 7
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 8 8.1. Normative References . . . . . . . . . . . . . . . . . . . 7
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8.2. Informative References . . . . . . . . . . . . . . . . . . 7
9.1. Normative References . . . . . . . . . . . . . . . . . . . 8 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 7
9.2. Informative References . . . . . . . . . . . . . . . . . . 8
Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 8
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) . . . . . . . . . . . . . . . . . . . . 14 publication) . . . . . . . . . . . . . . . . . . . . 13
B.1. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 14 B.1. Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 13
B.2. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 15 B.2. Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 14
B.3. Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 14
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. It is a text-based
format (as opposed to a binary format). This document defines an XML format (as opposed to a binary format). This document defines an XML
representation for vCard. The underlying data structure is exactly representation for vCard. The underlying data structure is exactly
the same, enabling a 1-to-1 mapping between the original vCard format the same, enabling a 1-to-1 mapping between the original vCard format
and the XML representation. The XML formatting may be preferred in and the XML representation. The XML formatting may be preferred in
some contexts where an XML engine is readily available and may be some contexts where an XML engine is readily available and may be
skipping to change at page 4, line 5 skipping to change at page 4, line 5
<sex>1</sex> <sex>1</sex>
<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>work</type></parameters>
<text>Viagenie</text> <text>Viagenie</text>
</org> </org>
<adr> <adr>
<parameters><type><work/></type></parameters> <parameters><type>work</type></parameters>
<pobox><text/></pobox> <pobox><text/></pobox>
<ext><text>Suite 625</text></ext> <ext><text>Suite 625</text></ext>
<street><text>2600 boul. Laurier</text></street> <street><text>2600 boul. Laurier</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 4W1</text></code>
<country><text>Canada</text></country> <country><text>Canada</text></country>
</adr> </adr>
<tel> <tel>
<parameters><type><work/><voice/></type></parameters> <parameters>
<type>work</type>
<type>voice</type>
</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/><text/><voice/><cell/><video/></type> <type>work</type>
<type>text</type>
<type>voice</type>
<type>cell</type>
<type>video</type>
</parameters> </parameters>
<uri>tel:+1-418-262-6501</uri> <uri>tel:+1-418-262-6501</uri>
</tel> </tel>
<tel> <tel>
<parameters><type><work/><fax/></type></parameters> <parameters>
<type>work</type>
<type>fax</type>
</parameters>
<uri>tel:+1-418-656-9257</uri> <uri>tel:+1-418-656-9257</uri>
</tel> </tel>
<email> <email>
<parameters><type><work/></type></parameters> <parameters><type>work</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>work</type></parameters>
<uri>geo:46.772673,-71.282945</uri> <uri>geo:46.772673,-71.282945</uri>
</geo> </geo>
<key> <key>
<parameters><type><work/></type></parameters> <parameters><type><work/></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>
<class>PUBLIC</class> <class>PUBLIC</class>
</vcard> </vcard>
</vcards> </vcards>
skipping to change at page 5, line 18 skipping to change at page 5, line 24
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
content corresponds to the vCard property's value. content corresponds to the vCard property's value.
vCard parameters are also mapped to XML elements. They are contained vCard parameters are also mapped to XML elements. They are contained
in the <parameters> element, which is contained in property elements. in the <parameters> element, which is contained in property elements.
For example, the "TYPE" parameter applied to the "TEL" property would For example, the "TYPE" parameter applied to the "TEL" property would
look like the following in XML: look like the following in XML:
<tel> <tel>
<parameters><type><voice/></type></parameters> <parameters>
<type>voice</type>
<type>video</type>
</parameters>
<uri>tel:+1-555-555-555</uri> <uri>tel:+1-555-555-555</uri>
</tel> </tel>
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 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.
skipping to change at page 6, line 8 skipping to change at page 6, line 22
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
XML. The XML namespace mechanism is sufficient. XML. The XML namespace mechanism is sufficient.
A vCard XML parser MUST ignore XML data qualified by a namespace it A vCard XML parser MUST ignore XML elements and attributes for which
does not understand. 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 In the original vCard format, the "VERSION" property was mandatory
and played a role in extensibility. In XML, this property is absent. and played a role in extensibility. In XML, this property is absent.
Its role is played by the vCard core namespace identifier, which Its role is played by the vCard core namespace identifier, which
includes the version number. vCard revisions will use a different includes the version number. vCard revisions will use a different
namespace. namespace.
Parameters containing a list of values are expressed using a list of Parameters containing a list of values are expressed using a list of
elements in XML (e.g. the <type> element). elements in XML (e.g. the <type> element).
skipping to change at page 6, line 34 skipping to change at page 7, line 5
original vCard format [I-D.ietf-vcarddav-vcardrev] MUST still be original vCard format [I-D.ietf-vcarddav-vcardrev] MUST still be
respected. respected.
Some constructs (e.g. value enumerations in type parameters) have Some constructs (e.g. value enumerations in type parameters) have
additional ordering constraints in XML. This is a result of additional ordering constraints in XML. This is a result of
limitations of the schema definition language and the order is limitations of the schema definition language and the order is
arbitrary. The order MUST be respected in XML for the vCard to be arbitrary. The order MUST be respected in XML for the vCard to be
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. The "XML" vCard Property 5. Security Considerations
This document defines the following vCard property.
Namespace:
Property name: XML
Purpose: To include XML-encoded vCard data in a plain vCard.
Value type: A single text value.
Cardinality: (0,n)
Property parameters: none allowed
Description: The content of this property is an XML chunk. Its
default XML namespace is "urn:ietf:params:xml:ns:vcard-4.0". The
elements allowed at the root level of this chunk are those that
are allowed to be immediate children of the <vcard> element
defined in this document. The normal rules for extensibility
apply (i.e. things in unknown namespaces are ignored). The chunk
is subject to normal line folding and escaping, i.e. replace all
backslashes with "\\", then replace all newlines with "\n", then
fold long lines.
Format definition:
XML-param = ""
XML-value = text
Example: The three following vCards are equivalent.
<?xml version="1.0"?>
<vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
<vcard>
<fn><text>John Doe</text></fn>
<email><text>jdoe@example.com</text></email>
</vcard>
</vcards>
BEGIN:VCARD
VERSION:4.0
XML:<fn><text>John Doe>/text></fn>\n
<email><text>jdoe@example.com</text></email>
END:VCARD
BEGIN:VCARD
VERSION:4.0
FN:John Doe
EMAIL:jdoe@example.com
END:VCARD
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 6. IANA Considerations
7.1. Registration of the "XML" vCard Property
The completed registration template can be found in section
Section 5.
7.2. Registration of the XML Namespace 6.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.
8. Acknowledgements 7. 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 8. References
9.1. Normative References 8.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-09 (work draft-ietf-vcarddav-vcardrev-09 (work
in progress), October 2009. in progress), October 2009.
[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. November 2002, <http://www.relaxng.org/
compact-20021121.html>.
9.2. Informative References 8.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-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" }
}
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}" }
}
# Value types # Parameters
\text = element text { text } param-language = element language { value-language-tag }?
text-list = \text+ param-pref = element pref {
uri = element uri { xsd:anyURI } xsd:integer { minInclusive = "1" maxInclusive = "100" }
date = element date { }?
xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" } param-pid = element pid {
} xsd:string { pattern = "\d+(\.\d+)?" }
time = element time { }?
xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)" param-type = element type { "work" | "home" }*
~ "(Z|[+\-]\d\d(\d\d)?)?" } param-calscale = element calscale { "gregorian" }?
}
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)?)?" }
}
date-and-or-time = date | date-time | time
timestamp = element timestamp {
xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
}
boolean = element boolean { xsd:boolean }
integer = element integer { xsd:integer }
float = element float { xsd:float }
binary = element binary { xsd:base64Binary }
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 # Properties
language = element language { language-tag }? property-source = element source {
pref = element pref { element parameters { param-pid, param-pref },
xsd:integer { minInclusive = "1" maxInclusive = "100" } value-uri
}? }
pid = element pid {
xsd:string { pattern = "\d+(\.\d+)?" }
}?
type = element type {
element work { empty }?,
element home { empty }?
}?
# Properties property-name = element name { value-text }
source = element source { property-kind = element kind { "individual" | "group" | "org"
element parameters { pid, pref }, | "location" | "thing" }*
uri property-fn = element fn {
} 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)
name = element name { \text } }
kind = element kind { property-sex = element sex { "0" | "1" | "2" | "9" }
element individual { empty } property-adr = element adr {
| element group { empty } element parameters {
| element org { empty } param-language,
| element location { empty } param-pid,
} param-pref,
fn = element fn { param-type,
element parameters { language, pid, pref, type }?, element geo { value-uri }?,
\text element tz { value-text | value-uri }?
} }?,
n = element n { element pobox { value-text-list },
element parameters { language }?, element ext { value-text-list },
element surname { text-list }, element street { value-text-list },
element given { text-list }, element locality { value-text-list },
element prefix { text-list }, element region { value-text-list },
element suffix { text-list } element code { value-text-list },
} element country { value-text-list }
nickname = element nickname { }
element parameters { language, pid, pref, type }?, property-label = element label {
text-list element parameters { param-language, param-pid,
} param-pref, param-type }?,
photo = element photo { value-text
element parameters { }
pid, property-tel = element tel {
pref, element parameters {
element type { param-pid,
element work { empty }?, param-pref,
element home { empty }?, element type { "work" | "home" | "text" | "voice"
element media { \text }? | "fax" | "cell" | "video" | "pager" }*
} },
}?, value-uri
(binary | uri) }
} property-email = element email {
bday = element bday { date-and-or-time | \text } element parameters { param-pid, param-pref, param-type }?,
dday = element dday { date-and-or-time | \text } value-text
birth = element birth { }
element parameters { language }?, property-impp = element impp {
\text element parameters { param-pid, param-pref, param-type }?,
} value-uri
death = element death { }
element parameters { language }?, property-lang = element lang {
\text element parameters { param-pid, param-pref, param-type }?,
} value-language-tag
anniversary = element anniversary { date-and-or-time | \text } }
sex = element sex { "0" | "1" | "2" | "9" } property-tz = element tz {
adr = element adr { element parameters { param-pid, param-pref, param-type }?,
element parameters { (value-text | value-uri)
language,
pid,
pref,
type,
element geo { uri }?,
element tz { \text | uri }?
}?,
element pobox { text-list },
element ext { text-list },
element street { text-list },
element locality { text-list },
element region { text-list },
element code { text-list },
element country { text-list }
}
label = element label {
element parameters { language, pid, pref, type }?,
\text
}
tel = element tel {
element parameters {
pid,
pref,
element type {
element work { empty }?,
element home { empty }?,
element text { empty }?,
element voice { empty }?,
element fax { empty }?,
element cell { empty }?,
element video { empty }?,
element pager { empty }?
}?
},
uri
}
email = element email {
element parameters { pid, pref, type }?,
\text
}
impp = element impp {
element parameters { pid, pref, type }?,
uri
}
lang = element lang {
element parameters { pid, pref, type }?,
language-tag
}
tz = element tz { }
element parameters { pid, pref, type }?, property-geo = element geo {
(\text | uri) element parameters { param-pid, param-pref, param-type }?,
} value-uri
geo = element geo { }
element parameters { pid, pref, type }?, property-title = element title {
uri element parameters { param-language, param-pid,
} param-pref, param-type }?,
title = element title { value-text
element parameters { language, pid, pref, type }?, }
\text property-role = element role {
} element parameters { param-language, param-pid,
role = element role { param-pref, param-type }?,
element parameters { language, pid, pref, type }?, value-text
\text }
} property-logo = element logo {
logo = element logo { element parameters {
element parameters { param-language,
language, param-pid,
pid, param-pref,
pref, param-type,
element type { element type { element media { value-text } }?
element work { empty }?, }?,
element home { empty }?, (value-binary | value-uri)
element media { \text }? }
} property-org = element org {
}?, element parameters { param-language, param-pid,
(binary | uri) param-pref, param-type }?,
} value-text-list
org = element org { }
element parameters { language, pid, pref, type }?, property-member = element member { param-pid, param-pref, value-uri }
text-list property-related = element related {
} element parameters {
member = element member { pid, pref, uri } param-pid,
related = element related { param-pref,
element parameters { element type { "work" | "home" | "parent" | "child"
pid, | "sibling" | "spouse" | "family" | "friend"
pref, | "supervisor" | "supervisee" | "assistant"
element type { | "colleague" | "agent" | "emergency" }*
element work { empty }?, }?,
element home { empty }?, (value-uri | value-text)
( element parent { empty } }
| element child { empty } property-categories = element categories {
| element sibling { empty } element parameters { param-pid, param-pref, param-type }?,
| element spouse { empty } value-text
| element family { empty } }
| element friend { empty } property-note = element note {
| element supervisor { empty } element parameters { param-language, param-pid,
| element supervisee { empty } param-pref, param-type }?,
| element assistant { empty } value-text
| element colleague { empty } }
| element agent { empty } property-prodid = element prodid { value-text }
| element emergency { empty }) property-rev = element rev { value-timestamp }
}? property-sort-string = element sort-string {
}?, element surname { value-text }+,
(uri | \text) element given { value-text }*
} }
categories = element categories { property-sound = element sound {
element parameters { pid, pref, type }?, element parameters {
\text param-language,
} param-pid,
note = element note { param-pref,
element parameters { language, pid, pref, type }?, element type {
\text element work { empty }?,
} element home { empty }?,
prodid = element prodid { \text } element media { value-text }?
rev = element rev { timestamp } }
sort-string = element sort-string { \text } }?,
sound = element sound { (value-binary | value-uri)
element parameters { }
language, property-uid = element uid { value-uri }
pid, property-clientpidmap = element clientpidmap {
pref, element sourceid { xsd:positiveInteger },
element type { value-uri
element work { empty }?, }
element home { empty }?, property-url = element url {
element media { \text }? element parameters { param-pid, param-pref, param-type }?,
} value-uri
}?, }
(binary | uri) property-class = element class { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" }
} property-key = element key {
uid = element uid { uri } element parameters {
clientpidmap = element clientpidmap { param-pid,
element sourceid { xsd:positiveInteger }, param-pref,
uri element type {
} element work { empty }?,
url = element url { element home { empty }?,
element parameters { pid, pref, type }?, element media { value-text }?
uri }
} }?,
class = element class { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" } (value-binary | value-uri)
key = element key { }
element parameters { property-fburl = element fburl {
pid, element parameters { param-pid, param-pref, param-type }?,
pref, value-uri
element type { }
element work { empty }?,
element home { empty }?,
element media { \text }?
}
}?,
(binary | uri)
}
fburl = element fburl {
element parameters { pid, pref, type }?,
uri
}
caladruri = element caladruri {
element parameters { pid, pref, type }?,
uri
}
caluri = element caluri {
element parameters { pid, pref, type }?,
uri
}
# Top-level grammar property-caladruri = element caladruri {
property = adr | anniversary | bday | birth | caladruri | caluri element parameters { param-pid, param-pref, param-type }?,
| categories | class | clientpidmap | dday | death | email value-uri
| fburl | fn | geo | impp | key | kind | label | lang | logo }
| member | n | name | nickname | note | org | photo | prodid property-caluri = element caluri {
| related | rev | role | sex | sort-string | sound | source element parameters { param-pid, param-pref, param-type }?,
| tel | title | tz | uid | url value-uri
start = element vcards { }
element vcard {
(property # Top-level grammar
| element group { property = property-adr | property-anniversary | property-bday
attribute name { text }, | property-birth | property-caladruri | property-caluri
property* | 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 Appendix B. Change Log (to be removed by RFC Editor prior to
publication) publication)
B.1. Changes in -01 B.1. Changes in -02
o Synchronized with draft-ietf-vcarddav-vcardrev-10.
o Turned <type> 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.2. 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.2. Changes in -00 B.3. 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. 
379 lines changed or deleted 354 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/