summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc6351.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc6351.txt')
-rw-r--r--doc/rfc/rfc6351.txt1235
1 files changed, 1235 insertions, 0 deletions
diff --git a/doc/rfc/rfc6351.txt b/doc/rfc/rfc6351.txt
new file mode 100644
index 0000000..5ae0fa3
--- /dev/null
+++ b/doc/rfc/rfc6351.txt
@@ -0,0 +1,1235 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) S. Perreault
+Request for Comments: 6351 Viagenie
+Category: Standards Track August 2011
+ISSN: 2070-1721
+
+
+ xCard: vCard XML Representation
+
+Abstract
+
+ This document defines the XML schema of the vCard data format.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc6351.
+
+Copyright Notice
+
+ Copyright (c) 2011 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 1]
+
+RFC 6351 xCard August 2011
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 3. The Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 4. Example: Author's XML vCard . . . . . . . . . . . . . . . . . 3
+ 5. Design Considerations . . . . . . . . . . . . . . . . . . . . 4
+ 5.1. Extensibility . . . . . . . . . . . . . . . . . . . . . . 6
+ 5.2. Limitations . . . . . . . . . . . . . . . . . . . . . . . 7
+ 6. Format Conversions . . . . . . . . . . . . . . . . . . . . . . 8
+ 7. Security Considerations . . . . . . . . . . . . . . . . . . . 10
+ 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11
+ 8.1. Registration of the XML Namespace . . . . . . . . . . . . 11
+ 8.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 11
+ 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12
+ 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12
+ 10.1. Normative References . . . . . . . . . . . . . . . . . . . 12
+ 10.2. Informative References . . . . . . . . . . . . . . . . . . 13
+ Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 14
+
+1. Introduction
+
+ vCard [RFC6350] is a data format for representing and exchanging
+ information about individuals and other entities. It is a text-based
+ format (as opposed to a binary format). This document defines xCard,
+ an XML [W3C.REC-xml-20081126] representation for vCard. The
+ underlying data structure is exactly the same, enabling a 1-to-1
+ mapping between the original vCard format and the XML representation.
+ The XML formatting may be preferred in some contexts where an XML
+ engine is readily available and may be reused instead of writing a
+ standalone vCard parser.
+
+ Earlier work on an XML format for vCard was started in 1998 by Frank
+ Dawson [VCARD-DTD]. Sadly, it did not take over the world.
+
+2. Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in [RFC2119].
+
+3. The Schema
+
+ The schema is expressed in the RELAX NG language [ISO.19757-2.2008]
+ and is found in Appendix A.
+
+
+
+
+
+
+Perreault Standards Track [Page 2]
+
+RFC 6351 xCard August 2011
+
+
+4. Example: Author's XML vCard
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
+ <vcard>
+ <fn><text>Simon Perreault</text></fn>
+ <n>
+ <surname>Perreault</surname>
+ <given>Simon</given>
+ <additional/>
+ <prefix/>
+ <suffix>ing. jr</suffix>
+ <suffix>M.Sc.</suffix>
+ </n>
+ <bday><date>--0203</date></bday>
+ <anniversary>
+ <date-time>20090808T1430-0500</date-time>
+ </anniversary>
+ <gender><sex>M</sex></gender>
+ <lang>
+ <parameters><pref><integer>1</integer></pref></parameters>
+ <language-tag>fr</language-tag>
+ </lang>
+ <lang>
+ <parameters><pref><integer>2</integer></pref></parameters>
+ <language-tag>en</language-tag>
+ </lang>
+ <org>
+ <parameters><type><text>work</text></type></parameters>
+ <text>Viagenie</text>
+ </org>
+ <adr>
+ <parameters>
+ <type><text>work</text></type>
+ <label><text>Simon Perreault
+ 2875 boul. Laurier, suite D2-630
+ Quebec, QC, Canada
+ G1V 2M2</text></label>
+ </parameters>
+ <pobox/>
+ <ext/>
+ <street>2875 boul. Laurier, suite D2-630</street>
+ <locality>Quebec</locality>
+ <region>QC</region>
+ <code>G1V 2M2</code>
+ <country>Canada</country>
+ </adr>
+ <tel>
+
+
+
+Perreault Standards Track [Page 3]
+
+RFC 6351 xCard August 2011
+
+
+ <parameters>
+ <type>
+ <text>work</text>
+ <text>voice</text>
+ </type>
+ </parameters>
+ <uri>tel:+1-418-656-9254;ext=102</uri>
+ </tel>
+ <tel>
+ <parameters>
+ <type>
+ <text>work</text>
+ <text>text</text>
+ <text>voice</text>
+ <text>cell</text>
+ <text>video</text>
+ </type>
+ </parameters>
+ <uri>tel:+1-418-262-6501</uri>
+ </tel>
+ <email>
+ <parameters><type><text>work</text></type></parameters>
+ <text>simon.perreault@viagenie.ca</text>
+ </email>
+ <geo>
+ <parameters><type><text>work</text></type></parameters>
+ <uri>geo:46.766336,-71.28955</uri>
+ </geo>
+ <key>
+ <parameters><type><text>work</text></type></parameters>
+ <uri>http://www.viagenie.ca/simon.perreault/simon.asc</uri>
+ </key>
+ <tz><text>America/Montreal</text></tz>
+ <url>
+ <parameters><type><text>home</text></type></parameters>
+ <uri>http://nomis80.org</uri>
+ </url>
+ </vcard>
+ </vcards>
+
+5. Design Considerations
+
+ The general idea is to map vCard parameters, properties, and value
+ types to XML elements. For example, the "FN" property is mapped to
+ the "fn" element. In turn, that element contains a text element
+ whose content corresponds to the vCard property's value.
+
+
+
+
+
+Perreault Standards Track [Page 4]
+
+RFC 6351 xCard August 2011
+
+
+ vCard parameters are also mapped to XML elements. They are contained
+ in the <parameters> element, which is contained in property elements.
+ For example, the "TYPE" parameter applied to the "TEL" property would
+ look like the following in XML:
+
+ <tel>
+ <parameters>
+ <type>
+ <text>voice</text>
+ <text>video</text>
+ </type>
+ </parameters>
+ <uri>tel:+1-555-555-555</uri>
+ </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
+ expressed by XML element trees. Element names in that tree (e.g.,
+ "surname", "given", etc.) do not have a vCard equivalent since they
+ are identified by position in plain vCard.
+
+ Line folding is a non-issue in XML. Therefore, the mapping from
+ vCard to XML is done after the unfolding procedure is carried out.
+ Conversely, the mapping from XML to vCard is done before the folding
+ procedure is carried out.
+
+ A top-level <vcards> element is used as root. It contains one or
+ more <vcard> elements, 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 [RFC6350]) is represented with
+ the <group> element. The "name" attribute contains the group's name.
+ For example:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 5]
+
+RFC 6351 xCard August 2011
+
+
+ <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
+
+5.1. Extensibility
+
+ The original vCard format is extensible. New properties, parameters,
+ data types and values (collectively known as vCard elements, not to
+ be confused with XML elements) can be registered with IANA (see
+ [RFC6350], Section 10.2). It is expected that these vCard extensions
+ will also specify extensions to the XML format described in this
+ document.
+
+ New XML vCard property and parameter element names MUST be lower-
+ case. This is necessary to ensure that round-tripping between XML
+ and plain-text vCard works correctly.
+
+ Unregistered extensions (i.e., those starting with "X-" and
+ "VND-...-") are expressed in XML by using elements starting with "x-"
+ and "vnd-...-". Usage of XML namespaces [W3C.REC-xml-names-20091208]
+ for extensibility is RECOMMENDED for extensions that have no
+ equivalent in plain-text vCard. Refer to Section 6 for the
+ implications when converting between plain-text vCard and XML.
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 6]
+
+RFC 6351 xCard August 2011
+
+
+ Examples:
+
+ <x-my-prop>
+ <parameters>
+ <pref><integer>1</integer></pref>
+ </parameters>
+ <text>value goes here</text>
+ </x-my-prop>
+
+ <ext:my-prop
+ ext:xmlns="http://example.com/extensions/my-vcard">
+ <parameters>
+ <pref><integer>1</integer></pref>
+ </parameters> <!-- Core vCard elements -->
+ <text>value goes here</text> <!-- are still accessible -->
+ </ext:my-prop>
+
+ Note that extension elements do not need the "X-" or "VND-" prefix in
+ XML. The XML namespace mechanism is sufficient.
+
+ A vCard XML parser MUST ignore XML elements and attributes for which
+ it doesn't recognize the expanded name. The normal behavior of
+ ignoring XML processing instructions whose target is not recognized
+ MUST also be followed.
+
+ In the original vCard format, the "VERSION" property was mandatory
+ and played a role in extensibility. In XML, this property is absent.
+ Its role is played by the vCard core namespace identifier, which
+ includes the version number. vCard revisions will use a different
+ namespace.
+
+ Parameters containing a list of values are expressed using a list of
+ elements in XML (e.g., the <type> element).
+
+5.2. Limitations
+
+ The schema does not validate the cardinality of properties. This is
+ a limitation of the schema definition language. Cardinalities of the
+ original vCard format [RFC6350] MUST still be respected.
+
+ Some constructs (e.g., value enumerations in type parameters) have
+ additional ordering constraints in XML. This is a result of
+ limitations of the schema definition language, and the order is
+ arbitrary. The order MUST be respected in XML for the vCard to be
+ valid. However, reordering as part of conversion to or from plain
+ vCard MAY happen.
+
+
+
+
+
+Perreault Standards Track [Page 7]
+
+RFC 6351 xCard August 2011
+
+
+6. Format Conversions
+
+ When new properties or "X-" properties are used, a vCard<->xCard
+ converter might not recognize them or know what the appropriate
+ default value types are, yet they need to be able to preserve the
+ values. A similar issue arises for unrecognized property parameters.
+ As a result, the following rules are applied when dealing with
+ unrecognized properties and property parameters:
+
+ o When converting from vCard to xCard:
+
+ * Any property that does not include a "VALUE" parameter and
+ whose default value type is not known MUST be converted using
+ the value type XML element <unknown>. The content of that
+ element is the unprocessed value text.
+
+ * Any unrecognized property parameter MUST be converted using the
+ value type XML element <unknown>, with its content set to the
+ parameter value text, treated as if it were a text value, or
+ list of text values.
+
+ * The content of "XML" properties is copied as is to XML.
+
+ * Property and parameter XML element names are converted to
+ lower-case.
+
+ * Property value escaping is undone. For example, "\n" becomes a
+ NEWLINE character (ASCII decimal 10).
+
+ * 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>.
+
+ o When converting xCard to vCard:
+
+ * Properties in the vCard 4 namespace:
+
+ + If the converter knows of a specific plain-text
+ representation for this property, it uses it. For example,
+ the <adr> element corresponds to the "ADR" property, which
+ is encoded using comma-separated lists separated by
+ semicolons.
+
+ + Otherwise, the property name is taken from the element name,
+ property parameters are taken from the <parameters> element,
+ and the content of the property is taken from the content of
+ the value element. If the property element has attributes
+ or contains other XML elements, they are dropped.
+
+
+
+Perreault Standards Track [Page 8]
+
+RFC 6351 xCard August 2011
+
+
+ + If a standard property's XML element contains XML elements
+ and attributes for which the converter doesn't recognize the
+ expanded name, they are dropped. Therefore, it is
+ RECOMMENDED to limit extensions to the property level to
+ ensure that all data is preserved intact in round-trip
+ conversions.
+
+ * Properties in other namespaces are wrapped as is inside an
+ "XML" property.
+
+ * Any <unknown> property value XML elements are converted
+ directly into vCard values. The containing property MUST NOT
+ have a "VALUE" parameter.
+
+ * Any <unknown> parameter value XML elements are converted as if
+ they were <text> value type XML elements.
+
+ * Property and parameter names are converted to upper-case.
+
+ * Property value escaping (Section 3.3 of [RFC6350]) is carried
+ out. For example, a NEWLINE character (ASCII decimal 10)
+ becomes "\n".
+
+ * 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\"".
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 9]
+
+RFC 6351 xCard August 2011
+
+
+ For example, these two vCards are equivalent:
+
+ <?xml version="1.0"?>
+ <vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
+ <vcard>
+ <fn><text>J. Doe</text></fn>
+ <n>
+ <surname>Doe</surname>
+ <given>J.</given>
+ <additional/>
+ <prefix/>
+ <suffix/>
+ </n>
+ <x-file>
+ <parameters>
+ <mediatype><text>image/jpeg</text></mediatype>
+ </parameters>
+ <unknown>alien.jpg</unknown>
+ </x-file>
+ <a xmlns="http://www.w3.org/1999/xhtml"
+ href="http://www.example.com">My web page!</a>
+ </vcard>
+ </vcards>
+
+
+ BEGIN:VCARD
+ VERSION:4.0
+ FN:J. Doe
+ N:Doe;J.;;
+ X-FILE;MEDIATYPE=image/jpeg:alien.jpg
+ XML:<a xmlns="http://www.w3.org/1999/xhtml"\n
+ href="http://www.example.com">My web page!</a>
+ END:VCARD
+
+7. Security Considerations
+
+ All the security considerations applicable to plain vCard [RFC6350]
+ are applicable to this document as well.
+
+ XML Signature [W3C.CR-xmldsig-core1-20110303] and XML Encryption
+ [W3C.CR-xmlenc-core1-20110303] can be used with xCard to provide
+ authentication and confidentiality.
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 10]
+
+RFC 6351 xCard August 2011
+
+
+8. IANA Considerations
+
+8.1. Registration of the XML Namespace
+
+ URI: urn:ietf:params:xml:ns:vcard-4.0
+
+ Registrant Contact: The IESG <iesg@ietf.org>
+
+ XML: None. Namespace URIs do not represent an XML specification.
+
+8.2. Media Type
+
+ This section defines the MIME media type [RFC4288] 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: charset as defined for application/xml in
+ [RFC3023]; per [RFC3023], use of the charset parameter with the
+ value "utf-8" is "STRONGLY RECOMMENDED".
+
+ Encoding considerations: Same as encoding considerations of
+ application/xml as specified in [RFC3023].
+
+ Security considerations: This media type has all of the security
+ considerations described in [RFC3023], plus those listed in
+ Section 7.
+
+ Interoperability considerations: This media type provides an
+ alternative syntax to vCard data [RFC6350] based on XML.
+
+ Published specification: This specification.
+
+ Applications that use this media type: Applications that currently
+ make use of the text/vcard media type can use this as an
+ alternative. In general, applications that maintain or process
+ contact information can use this media type.
+
+
+
+
+
+
+Perreault Standards Track [Page 11]
+
+RFC 6351 xCard August 2011
+
+
+ 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
+
+9. Acknowledgments
+
+ Thanks to the following people for their input:
+
+ Alexey Melnikov, Barry Leiba, Bjorn Hoehrmann, Cyrus Daboo, Joe
+ Hildebrand, Joseph Smarr, Marc Blanchet, Mike Douglass, Peter Saint-
+ Andre, Robins George, Zahhar Kirillov, Zoltan Ordogh.
+
+
+10. References
+
+10.1. Normative References
+
+ [ISO.19757-2.2008]
+ International Organization for Standardization,
+ "Information technology -- Document Schema Definition
+ Language (DSDL) -- Part 2: Regular-grammar-based
+ validation -- RELAX NG", ISO International
+ Standard 19757-2, October 2008.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media
+ Types", RFC 3023, January 2001.
+
+ [RFC6350] Perreault, S., "vCard Format Specification", RFC 6350,
+ August 2011.
+
+
+
+Perreault Standards Track [Page 12]
+
+RFC 6351 xCard August 2011
+
+
+ [W3C.REC-xml-20081126]
+ Paoli, J., Yergeau, F., Maler, E., Bray, T., and C.
+ Sperberg-McQueen, "Extensible Markup Language (XML) 1.0
+ (Fifth Edition)", World Wide Web Consortium
+ Recommendation REC-xml-20081126, November 2008,
+ <http://www.w3.org/TR/2008/REC-xml-20081126>.
+
+ [W3C.REC-xml-names-20091208]
+ Bray, T., Hollander, D., Layman, A., Tobin, R., and H.
+ Thompson, "Namespaces in XML 1.0 (Third Edition)", World
+ Wide Web Consortium Recommendation REC-xml-names-20091208,
+ December 2009,
+ <http://www.w3.org/TR/2009/REC-xml-names-20091208>.
+
+10.2. Informative References
+
+ [RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and
+ Registration Procedures", BCP 13, RFC 4288, December 2005.
+
+ [VCARD-DTD]
+ Dawson, F., "The vCard v3.0 XML DTD", Work in Progress,
+ June 1998.
+
+ [W3C.CR-xmldsig-core1-20110303]
+ Roessler, T., Solo, D., Yiu, K., Reagle, J., Hirsch, F.,
+ Eastlake, D., and M. Nystroem, "XML Signature Syntax and
+ Processing Version 1.1", World Wide Web Consortium CR CR-
+ xmldsig-core1-20110303, March 2011,
+ <http://www.w3.org/TR/2011/CR-xmldsig-core1-20110303>.
+
+ [W3C.CR-xmlenc-core1-20110303]
+ Eastlake, D., Reagle, J., Roessler, T., and F. Hirsch,
+ "XML Encryption Syntax and Processing Version 1.1", World
+ Wide Web Consortium CR CR-xmlenc-core1-20110303,
+ March 2011,
+ <http://www.w3.org/TR/2011/CR-xmlenc-core1-20110303>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 13]
+
+RFC 6351 xCard August 2011
+
+
+Appendix A. Relax NG Schema
+
+default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
+
+### Section 3.3: vCard Format Specification
+#
+# 3.3
+iana-token = xsd:string { pattern = "[a-zA-Z0-9-]+" }
+x-name = xsd:string { pattern = "x-[a-zA-Z0-9-]+" }
+
+### Section 4: Value types
+#
+# 4.1
+value-text = element text { text }
+value-text-list = value-text+
+
+# 4.2
+value-uri = element uri { xsd:anyURI }
+
+# 4.3.1
+value-date = element date {
+ xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
+ }
+
+# 4.3.2
+value-time = element time {
+ xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
+ ~ "(Z|[+\-]\d\d(\d\d)?)?" }
+ }
+
+# 4.3.3
+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)?)?" }
+ }
+
+# 4.3.4
+value-date-and-or-time = value-date | value-date-time | value-time
+
+# 4.3.5
+value-timestamp = element timestamp {
+ xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
+ }
+
+# 4.4
+value-boolean = element boolean { xsd:boolean }
+
+
+
+
+
+Perreault Standards Track [Page 14]
+
+RFC 6351 xCard August 2011
+
+
+# 4.5
+value-integer = element integer { xsd:integer }
+
+# 4.6
+value-float = element float { xsd:float }
+
+# 4.7
+value-utc-offset = element utc-offset {
+ xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
+ }
+
+# 4.8
+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}" }
+ }
+
+### Section 5: Parameters
+#
+# 5.1
+param-language = element language { value-language-tag }?
+
+# 5.2
+param-pref = element pref {
+ element integer {
+ xsd:integer { minInclusive = "1" maxInclusive = "100" }
+ }
+ }?
+
+# 5.4
+param-altid = element altid { value-text }?
+
+# 5.5
+param-pid = element pid {
+ element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
+ }?
+
+# 5.6
+param-type = element type { element text { "work" | "home" }+ }?
+
+# 5.7
+param-mediatype = element mediatype { value-text }?
+
+
+
+
+
+Perreault Standards Track [Page 15]
+
+RFC 6351 xCard August 2011
+
+
+# 5.8
+param-calscale = element calscale { element text { "gregorian" } }?
+
+# 5.9
+param-sort-as = element sort-as { value-text+ }?
+
+# 5.10
+param-geo = element geo { value-uri }?
+
+# 5.11
+param-tz = element tz { value-text | value-uri }?
+
+### Section 6: Properties
+#
+# 6.1.3
+property-source = element source {
+ element parameters { param-altid, param-pid, param-pref,
+ param-mediatype },
+ value-uri
+ }
+
+# 6.1.4
+property-kind = element kind {
+ element text { "individual" | "group" | "org" | "location" |
+ x-name | iana-token }*
+ }
+
+# 6.2.1
+property-fn = element fn {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type }?,
+ value-text
+ }
+
+# 6.2.2
+property-n = element n {
+ element parameters { param-language, param-sort-as, param-altid }?,
+ element surname { text }+,
+ element given { text }+,
+ element additional { text }+,
+ element prefix { text }+,
+ element suffix { text }+
+ }
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 16]
+
+RFC 6351 xCard August 2011
+
+
+# 6.2.3
+property-nickname = element nickname {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type }?,
+ value-text-list
+ }
+
+# 6.2.4
+property-photo = element photo {
+ element parameters { param-altid, param-pid, param-pref, param-type,
+ param-mediatype }?,
+ value-uri
+ }
+
+# 6.2.5
+property-bday = element bday {
+ element parameters { param-altid, param-calscale }?,
+ (value-date-and-or-time | value-text)
+ }
+
+# 6.2.6
+property-anniversary = element anniversary {
+ element parameters { param-altid, param-calscale }?,
+ (value-date-and-or-time | value-text)
+ }
+
+# 6.2.7
+property-gender = element gender {
+ element sex { "" | "M" | "F" | "O" | "N" | "U" },
+ element identity { text }?
+ }
+
+# 6.3.1
+param-label = element label { value-text }?
+property-adr = element adr {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type, param-geo, param-tz,
+ param-label }?,
+ element pobox { text }+,
+ element ext { text }+,
+ element street { text }+,
+ element locality { text }+,
+ element region { text }+,
+ element code { text }+,
+ element country { text }+
+ }
+
+
+
+
+
+Perreault Standards Track [Page 17]
+
+RFC 6351 xCard August 2011
+
+
+# 6.4.1
+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" }+
+ }?,
+ param-mediatype
+ }?,
+ (value-text | value-uri)
+ }
+
+# 6.4.2
+property-email = element email {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type }?,
+ value-text
+ }
+
+# 6.4.3
+property-impp = element impp {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ value-uri
+ }
+
+# 6.4.4
+property-lang = element lang {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type }?,
+ value-language-tag
+ }
+
+# 6.5.1
+property-tz = element tz {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ (value-text | value-uri | value-utc-offset)
+ }
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 18]
+
+RFC 6351 xCard August 2011
+
+
+# 6.5.2
+property-geo = element geo {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ value-uri
+ }
+
+# 6.6.1
+property-title = element title {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type }?,
+ value-text
+ }
+
+# 6.6.2
+property-role = element role {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type }?,
+ value-text
+ }
+
+# 6.6.3
+property-logo = element logo {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type, param-mediatype }?,
+ value-uri
+ }
+
+# 6.6.4
+property-org = element org {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type, param-sort-as }?,
+ value-text-list
+ }
+
+# 6.6.5
+property-member = element member {
+ element parameters { param-altid, param-pid, param-pref,
+ param-mediatype }?,
+ value-uri
+ }
+
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 19]
+
+RFC 6351 xCard August 2011
+
+
+# 6.6.6
+property-related = element related {
+ element parameters {
+ param-altid,
+ param-pid,
+ param-pref,
+ element type {
+ element text {
+ "work" | "home" | "contact" | "acquaintance" |
+ "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
+ "neighbor" | "child" | "parent" | "sibling" | "spouse" |
+ "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" |
+ "agent" | "emergency"
+ }+
+ }?,
+ param-mediatype
+ }?,
+ (value-uri | value-text)
+ }
+
+# 6.7.1
+property-categories = element categories {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type }?,
+ value-text-list
+ }
+
+# 6.7.2
+property-note = element note {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type }?,
+ value-text
+ }
+
+# 6.7.3
+property-prodid = element prodid { value-text }
+
+# 6.7.4
+property-rev = element rev { value-timestamp }
+
+# 6.7.5
+property-sound = element sound {
+ element parameters { param-language, param-altid, param-pid,
+ param-pref, param-type, param-mediatype }?,
+ value-uri
+ }
+
+
+
+
+
+Perreault Standards Track [Page 20]
+
+RFC 6351 xCard August 2011
+
+
+# 6.7.6
+property-uid = element uid { value-uri }
+
+# 6.7.7
+property-clientpidmap = element clientpidmap {
+ element sourceid { xsd:positiveInteger },
+ value-uri
+ }
+
+# 6.7.8
+property-url = element url {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ value-uri
+ }
+
+# 6.8.1
+property-key = element key {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ (value-uri | value-text)
+ }
+
+# 6.9.1
+property-fburl = element fburl {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ value-uri
+ }
+
+# 6.9.2
+property-caladruri = element caladruri {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ value-uri
+ }
+
+# 6.9.3
+property-caluri = element caluri {
+ element parameters { param-altid, param-pid, param-pref,
+ param-type, param-mediatype }?,
+ value-uri
+ }
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 21]
+
+RFC 6351 xCard August 2011
+
+
+# Top-level grammar
+property = property-adr | property-anniversary | property-bday
+ | property-caladruri | property-caluri | property-categories
+ | property-clientpidmap | property-email | property-fburl
+ | property-fn | property-geo | property-impp | property-key
+ | property-kind | property-lang | property-logo
+ | property-member | property-n | property-nickname
+ | property-note | property-org | property-photo
+ | property-prodid | property-related | property-rev
+ | property-role | property-gender | 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*
+ })+
+ }+
+ }
+
+Author's Address
+
+ Simon Perreault
+ Viagenie
+ 2600 boul. Laurier, Suite 625
+ Quebec, QC G1V 4W1
+ Canada
+
+ Phone: +1 418 656 9254
+ EMail: simon.perreault@viagenie.ca
+ URI: http://www.viagenie.ca
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Perreault Standards Track [Page 22]
+