Internet Engineering Task Force (IETF)                      S. Perreault
Request for Comments: 6351                                      Viagenie
Category: Standards Track                                    August 2011
ISSN: 2070-1721
        
Internet Engineering Task Force (IETF)                      S. Perreault
Request for Comments: 6351                                      Viagenie
Category: Standards Track                                    August 2011
ISSN: 2070-1721
        

xCard: vCard XML Representation

xCard:vCard XML表示

Abstract

摘要

This document defines the XML schema of the vCard data format.

本文档定义vCard数据格式的XML模式。

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.

本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被互联网工程指导小组(IESG)批准出版。有关互联网标准的更多信息,请参见RFC 5741第2节。

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.

有关本文件当前状态、任何勘误表以及如何提供反馈的信息,请访问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.

版权所有(c)2011 IETF信托基金和确定为文件作者的人员。版权所有。

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.

本文件受BCP 78和IETF信托有关IETF文件的法律规定的约束(http://trustee.ietf.org/license-info)自本文件出版之日起生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文件中提取的代码组件必须包括信托法律条款第4.e节中所述的简化BSD许可证文本,并提供简化BSD许可证中所述的无担保。

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 . . . . . . . . . . . . . . . . . . . . . . . . .  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
1. 介绍

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.

vCard[RFC6350]是一种数据格式,用于表示和交换有关个人和其他实体的信息。它是一种基于文本的格式(与二进制格式相反)。本文档定义了xCard,它是vCard的一种XML[W3C.REC-XML-20081126]表示形式。底层数据结构完全相同,支持原始vCard格式和XML表示之间的1:1映射。在XML引擎随时可用的某些上下文中,XML格式可能是首选的,并且可以重复使用,而不是编写独立的vCard解析器。

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.

关于vCard的XML格式的早期工作是由Frank Dawson[vCard-DTD]于1998年开始的。可悲的是,它没有接管世界。

2. Conventions
2. 习俗

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].

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照[RFC2119]中所述进行解释。

3. The Schema
3. 模式

The schema is expressed in the RELAX NG language [ISO.19757-2.2008] and is found in Appendix A.

该模式用RELAX NG语言[ISO.19757-2.2008]表示,见附录A。

4. Example: Author's XML vCard
4. 示例:作者的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>
        
   <?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>
        
         <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>
        
         <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
5. 设计考虑

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.

一般的想法是将vCard参数、属性和值类型映射到XML元素。例如,“FN”属性映射到“FN”元素。反过来,该元素包含一个文本元素,其内容对应于vCard属性的值。

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:

vCard参数也映射到XML元素。它们包含在属性元素中的<parameters>元素中。例如,应用于“TEL”属性的“TYPE”参数在XML中如下所示:

     <tel>
       <parameters>
         <type>
           <text>voice</text>
           <text>video</text>
         </type>
       </parameters>
       <uri>tel:+1-555-555-555</uri>
     </tel>
        
     <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.

具有结构化值的属性(例如“N”属性)由XML元素树表示。该树中的元素名称(例如,“姓氏”、“给定”等)没有vCard等价物,因为它们是通过普通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.

行折叠在XML中不是问题。因此,从vCard到XML的映射是在执行展开过程之后完成的。相反,从XML到vCard的映射是在执行折叠过程之前完成的。

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.

顶级<vcards>元素用作根。它包含一个或多个<vcard>元素,每个元素表示一个完整的vcard。即使XML文档中只存在一个vCard,<vCard>元素也必须存在。

The group construct (Section 3.2 in [RFC6350]) is represented with the <group> element. The "name" attribute contains the group's name. For example:

组构造(RFC6350中的第3.2节)用<group>元素表示。“name”属性包含组的名称。例如:

     <vcards>
       <vcard>
         <group name="contact">
           <fn>...</fn>
           <email>...</email>
         </group>
         <group name="media">
           <photo>...</photo>
         </group>
         <categories>...</categories>
       </vcard>
     </vcards>
        
     <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

开始:VCARD版本:4.0 contact.FN=。。。contact.EMAIL=。。。媒体照片=。。。类别=。。。完:VCARD

5.1. Extensibility
5.1. 扩展性

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.

原始vCard格式是可扩展的。可以向IANA注册新的属性、参数、数据类型和值(统称为vCard元素,不要与XML元素混淆)(请参见[RFC6350],第10.2节)。预计这些vCard扩展还将指定对本文档中描述的XML格式的扩展。

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.

新的XML vCard属性和参数元素名称必须小写。这对于确保XML和纯文本vCard之间的往返正常工作是必要的。

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.

未注册的扩展(即以“X-”和“VND-…-”开头的扩展)通过使用以“X-”和“VND-…-”开头的元素以XML表示。对于在纯文本vCard中没有等价物的扩展,建议使用XML名称空间[W3C.REC-XML-names-20091208]进行扩展。有关在纯文本vCard和XML之间转换的含义,请参阅第6节。

Examples:

示例:

     <x-my-prop>
       <parameters>
         <pref><integer>1</integer></pref>
       </parameters>
       <text>value goes here</text>
     </x-my-prop>
        
     <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>
        
     <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.

注意,扩展元素在XML中不需要“X-”或“VND-”前缀。XML名称空间机制就足够了。

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.

vCard XML解析器必须忽略无法识别扩展名称的XML元素和属性。还必须遵循忽略目标无法识别的XML处理指令的正常行为。

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.

在最初的vCard格式中,“VERSION”属性是必需的,并且在可扩展性中起到了作用。在XML中,此属性不存在。它的角色由vCard核心命名空间标识符扮演,该标识符包括版本号。vCard修订版将使用不同的命名空间。

Parameters containing a list of values are expressed using a list of elements in XML (e.g., the <type> element).

包含值列表的参数使用XML中的元素列表(例如<type>元素)表示。

5.2. Limitations
5.2. 局限性

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.

架构不验证属性的基数。这是模式定义语言的一个限制。必须遵守原始vCard格式[RFC6350]的基数。

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.

某些构造(例如,类型参数中的值枚举)在XML中具有额外的排序约束。这是模式定义语言限制的结果,顺序是任意的。必须遵守XML中的顺序才能使vCard有效。但是,作为转换到普通vCard或从普通vCard转换的一部分,可能会发生重新排序。

6. Format Conversions
6. 格式转换

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:

使用新属性或“X-”属性时,vCard<->xCard转换器可能无法识别它们或不知道适当的默认值类型,但它们需要能够保留这些值。对于无法识别的属性参数,也会出现类似的问题。因此,在处理无法识别的属性和属性参数时,将应用以下规则:

o When converting from vCard to xCard:

o 从vCard转换为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.

* 任何不包含“VALUE”参数且默认值类型未知的属性都必须使用VALUE-type XML元素<unknown>进行转换。该元素的内容是未处理的值文本。

* 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.

* 必须使用值类型XML元素<unknown>转换任何无法识别的属性参数,并将其内容设置为参数值text,将其视为文本值或文本值列表。

* The content of "XML" properties is copied as is to XML.

* “XML”属性的内容按原样复制到XML。

* Property and parameter XML element names are converted to lower-case.

* 属性和参数XML元素名称转换为小写。

* Property value escaping is undone. For example, "\n" becomes a NEWLINE character (ASCII decimal 10).

* 属性值转义已撤消。例如,“\n”变为换行符(ASCII十进制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>.

* 参数值的双引号以及参数值中的反斜杠转义被撤消。例如,PARAM=“\“foo\”,“bar\”变为<PARAM>“foo”,“bar”</PARAM>。

o When converting xCard to vCard:

o 将xCard转换为vCard时:

* Properties in the vCard 4 namespace:

* vCard 4命名空间中的属性:

+ 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.

+ 如果转换器知道此属性的特定纯文本表示形式,则会使用它。例如,<adr>元素对应于“adr”属性,该属性使用逗号分隔的列表(用分号分隔)进行编码。

+ 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.

+ 否则,属性名称取自元素名称,属性参数取自<parameters>元素,属性内容取自value元素的内容。如果property元素具有属性或包含其他XML元素,则会删除它们。

+ 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.

+ 如果标准属性的XML元素包含转换器无法识别扩展名称的XML元素和属性,则会删除它们。因此,建议将扩展限制在属性级别,以确保所有数据在往返转换中保持完整。

* Properties in other namespaces are wrapped as is inside an "XML" property.

* 其他名称空间中的属性包装为“XML”属性中的属性。

* Any <unknown> property value XML elements are converted directly into vCard values. The containing property MUST NOT have a "VALUE" parameter.

* 任何<unknown>属性值XML元素都直接转换为vCard值。包含的属性不能有“VALUE”参数。

* Any <unknown> parameter value XML elements are converted as if they were <text> value type XML elements.

* 任何<unknown>参数值XML元素都会转换为<text>值类型XML元素。

* 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".

* 执行属性值转义(RFC6350第3.3节)。例如,换行符(ASCII十进制10)变为“\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\"".

* 执行参数值的双引号以及参数值中的反斜杠转义。例如,<param>“foo”,“bar”</param>变成param=“\“foo\”,“bar\”。

For example, these two vCards are equivalent:

例如,这两个vCard是等效的:

     <?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>
        
     <?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
        
     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
7. 安全考虑

All the security considerations applicable to plain vCard [RFC6350] are applicable to this document as well.

适用于普通vCard[RFC6350]的所有安全注意事项也适用于本文件。

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.

XML签名[W3C.CR-xmldsig-core1-20110303]和XML加密[W3C.CR-xmlenc-core1-20110303]可与xCard一起使用,以提供身份验证和保密性。

8. IANA Considerations
8. IANA考虑
8.1. Registration of the XML Namespace
8.1. XML名称空间的注册
   URI:  urn:ietf:params:xml:ns:vcard-4.0
        
   URI:  urn:ietf:params:xml:ns:vcard-4.0
        
   Registrant Contact:  The IESG <iesg@ietf.org>
        
   Registrant Contact:  The IESG <iesg@ietf.org>
        

XML: None. Namespace URIs do not represent an XML specification.

XML:没有。命名空间URI不表示XML规范。

8.2. Media Type
8.2. 媒体类型

This section defines the MIME media type [RFC4288] for use with vCard-in-XML data.

本节定义用于XML数据中vCard的MIME媒体类型[RFC4288]。

To: ietf-types@iana.org

致:ietf-types@iana.org

   Subject:  Registration of media type application/vcard+xml
        
   Subject:  Registration of media type application/vcard+xml
        

Type name: application

类型名称:应用程序

Subtype name: vcard+xml

子类型名称: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".

可选参数:在[RFC3023]中为application/xml定义的字符集;根据[RFC3023],强烈建议使用值为“utf-8”的字符集参数。

Encoding considerations: Same as encoding considerations of application/xml as specified in [RFC3023].

编码注意事项:与[RFC3023]中指定的应用程序/xml的编码注意事项相同。

Security considerations: This media type has all of the security considerations described in [RFC3023], plus those listed in Section 7.

安全注意事项:此媒体类型具有[RFC3023]中描述的所有安全注意事项,以及第7节中列出的安全注意事项。

Interoperability considerations: This media type provides an alternative syntax to vCard data [RFC6350] based on XML.

互操作性注意事项:此媒体类型提供了基于XML的vCard数据[RFC6350]的替代语法。

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.

使用此媒体类型的应用程序:当前使用text/vcard媒体类型的应用程序可以使用此作为替代。通常,维护或处理联系人信息的应用程序可以使用此媒体类型。

Additional information:

其他信息:

Magic number(s): none

幻数:无

File extension(s): XML data should use ".xml" as the file extension.

文件扩展名:XML数据应使用“.XML”作为文件扩展名。

Macintosh file type code(s): none

Macintosh文件类型代码:无

   Person & email address to contact for further information:  Simon
      Perreault <simon.perreault@viagenie.ca>
        
   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

更改控制器:IETF

9. Acknowledgments
9. 致谢

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. 工具书类
10.1. Normative References
10.1. 规范性引用文件

[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.

[ISO.19757-2.2008]国际标准化组织,“信息技术——文档模式定义语言(DSDL)——第2部分:基于常规语法的验证——RELAXNG”,ISO国际标准19757-2,2008年10月。

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,1997年3月。

[RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media Types", RFC 3023, January 2001.

[RFC3023]Murata,M.,St.Laurent,S.,和D.Kohn,“XML媒体类型”,RFC 3023,2001年1月。

[RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, August 2011.

[RFC6350]Perreault,S.,“vCard格式规范”,RFC 63502011年8月。

[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-20081126]Paoli,J.,Yergeau,F.,Maler,E.,Bray,T.,和C.Sperberg McQueen,“可扩展标记语言(xml)1.0(第五版)”,万维网联盟建议REC-xml-20081126,2008年11月<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>.

[W3C.REC-xml-names-20091208]Bray,T.,Hollander,D.,Layman,A.,Tobin,R.,和H.Thompson,“xml 1.0中的名称空间(第三版)”,万维网联盟建议REC-xml-names-20091208,2009年12月<http://www.w3.org/TR/2009/REC-xml-names-20091208>.

10.2. Informative References
10.2. 资料性引用

[RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and Registration Procedures", BCP 13, RFC 4288, December 2005.

[RFC4288]Freed,N.和J.Klensin,“介质类型规范和注册程序”,BCP 13,RFC 4288,2005年12月。

[VCARD-DTD] Dawson, F., "The vCard v3.0 XML DTD", Work in Progress, June 1998.

[VCARD-DTD]Dawson,F.,“VCARD v3.0 XML DTD”,正在进行的工作,1998年6月。

[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-xmldsig-core1-20110303]Roessler,T.,Solo,D.,Yiu,K.,Reagle,J.,Hirsch,F.,Eastlake,D.,和M.Nystroem,“XML签名语法和处理版本1.1”,万维网联盟CR-xmldsig-core1-20110303,2011年3月<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>.

[W3C.CR-xmlenc-core1-20110303]伊斯特莱克,D.,雷格尔,J.,罗斯勒,T.,和F.赫希,“XML加密语法和处理版本1.1”,万维网联盟CR-xmlenc-core1-20110303,2011年3月<http://www.w3.org/TR/2011/CR-xmlenc-core1-20110303>.

Appendix A. Relax NG Schema
附录A.RELAXNG模式
default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
        
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 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+
        
### 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.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.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.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.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.4生效日期和/或时间=生效日期|生效日期时间|生效时间

# 4.3.5
value-timestamp = element timestamp {
    xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
  }
        
# 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 }
        
# 4.4
value-boolean = element boolean { xsd:boolean }
        
# 4.5
value-integer = element integer { xsd:integer }
        
# 4.5
value-integer = element integer { xsd:integer }
        
# 4.6
value-float = element float { xsd:float }
        
# 4.6
value-float = element float { xsd:float }
        
# 4.7
value-utc-offset = element utc-offset {
    xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
  }
        
# 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}" }
  }
        
# 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 }?
        
### 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.2
param-pref = element pref {
    element integer {
      xsd:integer { minInclusive = "1" maxInclusive = "100" }
    }
  }?
        
# 5.4
param-altid = element altid { value-text }?
        
# 5.4
param-altid = element altid { value-text }?
        
# 5.5
param-pid = element pid {
    element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
  }?
        
# 5.5
param-pid = element pid {
    element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
  }?
        
# 5.6
param-type = element type { element text { "work" | "home" }+ }?
        
# 5.6
param-type = element type { element text { "work" | "home" }+ }?
        
# 5.7
param-mediatype = element mediatype { value-text }?
        
# 5.7
param-mediatype = element mediatype { value-text }?
        
# 5.8
param-calscale = element calscale { element text { "gregorian" } }?
        
# 5.8
param-calscale = element calscale { element text { "gregorian" } }?
        
# 5.9
param-sort-as = element sort-as { value-text+ }?
        
# 5.9
param-sort-as = element sort-as { value-text+ }?
        
# 5.10
param-geo = element geo { value-uri }?
        
# 5.10
param-geo = element geo { value-uri }?
        
# 5.11
param-tz = element tz { value-text | 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
  }
        
### 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.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.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 }+
  }
        
# 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 }+
  }
        
# 6.2.3
property-nickname = element nickname {
    element parameters { param-language, param-altid, param-pid,
                         param-pref, param-type }?,
    value-text-list
  }
        
# 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.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.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.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.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 }+
  }
        
# 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 }+
  }
        
# 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.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.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.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.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)
  }
        
# 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)
  }
        
# 6.5.2
property-geo = element geo {
    element parameters { param-altid, param-pid, param-pref,
                         param-type, param-mediatype }?,
    value-uri
  }
        
# 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.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.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.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.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
  }
        
# 6.6.5
property-member = element member {
    element parameters { param-altid, param-pid, param-pref,
                         param-mediatype }?,
    value-uri
  }
        
# 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.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.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.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.3
property-prodid = element prodid { value-text }
        
# 6.7.4
property-rev = element rev { value-timestamp }
        
# 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
  }
        
# 6.7.5
property-sound = element sound {
    element parameters { param-language, param-altid, param-pid,
                         param-pref, param-type, param-mediatype }?,
    value-uri
  }
        
# 6.7.6
property-uid = element uid { value-uri }
        
# 6.7.6
property-uid = element uid { value-uri }
        
# 6.7.7
property-clientpidmap = element clientpidmap {
    element sourceid { xsd:positiveInteger },
    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.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.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.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.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
  }
        
# 6.9.3
property-caluri = element caluri {
    element parameters { param-altid, param-pid, param-pref,
                         param-type, param-mediatype }?,
    value-uri
  }
        
# 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*
         })+
    }+
  }
        
# 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

西蒙·佩雷尔特·维亚根尼2600波尔。加拿大魁北克QC G1V 4W1魁北克625室Laurier

   Phone: +1 418 656 9254
   EMail: simon.perreault@viagenie.ca
   URI:   http://www.viagenie.ca
        
   Phone: +1 418 656 9254
   EMail: simon.perreault@viagenie.ca
   URI:   http://www.viagenie.ca