mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-11-14 21:42:54 +00:00
1235 lines
33 KiB
Text
1235 lines
33 KiB
Text
|
||
|
||
|
||
|
||
|
||
|
||
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]
|
||
|