Network Working Group                                       S. Perreault
Internet-Draft                                                  Viagenie
Obsoletes: 2425, 2426, 4770                            November 18, 2008
(if approved)
Updates: 2739 (if approved)
Intended status: Standards Track
Expires: May 22, 2009


                            vCard XML Schema
                  draft-perreault-vcarddav-vcardxml-00

Status of This Memo

   By submitting this Internet-Draft, each author represents that any
   applicable patent or other IPR claims of which he or she is aware
   have been or will be disclosed, and any of which he or she becomes
   aware will be disclosed, in accordance with Section 6 of BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on May 22, 2009.

Abstract

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











Perreault                 Expires May 22, 2009                  [Page 1]


Internet-Draft                  vCard XML                  November 2008


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . 3
   2.  The Schema  . . . . . . . . . . . . . . . . . . . . . . . . . . 3
   3.  Example: Author's XML vCard . . . . . . . . . . . . . . . . . . 4
   4.  Design Considerations . . . . . . . . . . . . . . . . . . . . . 4
     4.1.  Extensibility . . . . . . . . . . . . . . . . . . . . . . . 5
   5.  Security Considerations . . . . . . . . . . . . . . . . . . . . 5
   6.  Normative References  . . . . . . . . . . . . . . . . . . . . . 5
   Appendix A.  Relax NG Schema  . . . . . . . . . . . . . . . . . . . 5









































Perreault                 Expires May 22, 2009                  [Page 2]


Internet-Draft                  vCard XML                  November 2008


1.  Introduction

   vCard [draft-ietf-vcarddav-vcardrev] is a data format for
   representing and exchanging information about individuals.  It is a
   text-based format (as opposed to a binary format).  This document
   defines an XML representation for vCard.  The underlying data
   structure is exactly the same.  The XML formatting may be preferred
   in some contexts where an XML engine is readily available and may be
   reused instead of writing a stand-alone vCard parser.

2.  The Schema

   The schema is expressed in the Relax NG language (TODO: add
   reference) and is found in Appendix A.





































Perreault                 Expires May 22, 2009                  [Page 3]


Internet-Draft                  vCard XML                  November 2008


3.  Example: Author's XML vCard

   <?xml version="1.0" encoding="UTF-8"?>
   <vcard xmlns="vcard_namespace_goes_here">
     <!-- TODO: use final vCard XML namespace -->
     <version>4.0</version>
     <fn>Simon Perreault</fn>
     <n>
       <surname>Perreault</surname>
       <given>Simon</given>
       <suffix>ing. jr.</suffix>
       <suffix>M.Sc.</suffix>
     </n>
     <bday>1983-02-03</bday>
     <gender>M</gender>
     <org><name>Viagenie</name></org>
     <adr>
       <ext>Suite 625</ext>
       <street>2600 boul. Laurier</street>
       <locality>Quebec</locality>
       <region>QC</region>
       <postal>G1V 4W1</postal>
       <country>Canada</country>
     </adr>
     <tel type="voice">tel:+1-418-656-9254;ext=102</tel>
     <email>simon.perreault@viagenie.ca</email>
     <geo>
       <lat>46.772673</lat>
       <lon>-71.282945</lon>
     </geo>
     <key value="uri">
       http://www.viagenie.ca/simon.perreault/simon.asc
     </key>
     <class>public</class>
   </vcard>

4.  Design Considerations

   The general idea is to map vCard properties to XML element and vCard
   parameters to XML attributes.  For example, the "FN" property is
   mapped to the "fn" element.  That element's value (a text node)
   corresponds to the vCard property's value.

   vCard parameters are mapped to XML attributes.  For example, the
   "TYPE" parameter applied to the "TEL" property would look like the
   following in XML:

     <tel type="voice">tel:+1-555-555-555</tel>



Perreault                 Expires May 22, 2009                  [Page 4]


Internet-Draft                  vCard XML                  November 2008


   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.

4.1.  Extensibility

   The original vCard format is extensible.  New properties, parameters,
   data types and values (collectively known as vCard objects) can be
   registered from IANA.  It is expected that these vCard extensions
   will also specify extensions to the XML format described in this
   document.  This is not a requirement: a separate document may be used
   instead.

   Unregistered extensions (i.e. those starting with "X-" and
   "VND-...-") can be expressed in XML using the special <x-prop>
   element.  For example:

     <x-prop>
       <name>x-foo</name>
       <value>
         <bar>abc</bar>
         <baz>xyz</baz>
       </value>
     </x-prop>

   The content of the "name" element MUST start with "X-" or "VND-...-"
   as specified in [draft-ietf-vcarddav-vcardrev].  The contents of the
   "value" element is not specified and MAY be any well-formed XML
   fragment.

5.  Security Considerations

   TBD

6.  Normative References

   [draft-ietf-vcarddav-vcardrev]  Perreault, S. and P. Resnick, "vCard
                                   Format Specification", 2008.

Appendix A.  Relax NG Schema

  <?xml version="1.0"?>



Perreault                 Expires May 22, 2009                  [Page 5]


Internet-Draft                  vCard XML                  November 2008


  <grammar xmlns="http://relaxng.org/ns/structure/1.0"
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
    ns="vcard_namespace_goes_here">
    <!-- TODO: define a real namespace -->


    <!-- Misc. definitions -->

    <define name="x-name">
      <data type="string">
        <param name="pattern">[Xx]-[A-Za-z0-9\-]+</param>
      </data>
    </define>

    <define name="vnd-name">
      <data type="string">
        <param name="pattern">vnd-[0-9]+-[A-Za-z0-9\-]+</param>
      </data>
    </define>

    <define name="mime-type">  <!-- See RFC 4288, Section 4.2 -->
      <data type="string">
        <param name="pattern">[A-Za-z0-9!#$&amp;.+\-^_]{1,127}
          /[A-Za-z0-9!#$&amp;.+\-^_]{1,127}</param>
      </data>
    </define>

    <define name="anything">
      <zeroOrMore>
        <choice>
          <text/>
          <element>
            <anyName/>
            <zeroOrMore><attribute><anyName/></attribute></zeroOrMore>
            <ref name="anything"/>
          </element>
        </choice>
      </zeroOrMore>
    </define>


    <!-- Value types -->

    <define name="value-text">
      <text/>  <!-- Is this more permissive than *VALUE-CHAR ? -->
    </define>

    <define name="value-uri">



Perreault                 Expires May 22, 2009                  [Page 6]


Internet-Draft                  vCard XML                  November 2008


      <data type="anyURI"/>
    </define>

    <define name="value-date">
      <data type="date"/>
    </define>

    <define name="value-time">
      <data type="time"/>
    </define>

    <define name="value-date-time">
      <data type="dateTime"/>
    </define>

    <define name="value-binary">
      <data type="string">  <!-- Is encoding parameter necessary? -->
        <param name="pattern">[A-Za-z0-9+/]*</param>
      </data>
    </define>

    <define name="value-utc-offset">
      <data type="string">
        <param name="pattern">[+\-]([01][0-9]|2[0-3]):[0-5][0-9]</param>
      </data>
    </define>


    <!-- General parameters -->

    <define name="param-language">
      <attribute name="language">
        <text/>  <!-- TODO: validate based on RFC4646 Section 2.1 -->
      </attribute>
    </define>

    <define name="param-pid">
      <attribute name="pid">
        <oneOrMore>
          <data type="nonNegativeInteger"/>
        </oneOrMore>
      </attribute>
    </define>

    <define name="param-pref">
      <attribute name="pref"/>  <!-- Probably can't be empty. -->
    </define>




Perreault                 Expires May 22, 2009                  [Page 7]


Internet-Draft                  vCard XML                  November 2008


    <!-- Properties -->

    <define name="prop-source">
      <element name="source">
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-name">
      <element name="name">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-kind">
      <element name="kind">
        <choice>
          <value>individual</value>
          <value>group</value>
          <value>org</value>
          <ref name="x-name"/>
        </choice>
      </element>
    </define>

    <define name="prop-fn">
      <element name="fn">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-n">
      <element name="n">
        <optional>
          <element name="surname">
            <ref name="value-text"/>
          </element>
        </optional>
        <zeroOrMore>
          <element name="given">
            <ref name="value-text"/>
          </element>
        </zeroOrMore>
        <zeroOrMore>
          <element name="prefix">
            <ref name="value-text"/>
          </element>
        </zeroOrMore>



Perreault                 Expires May 22, 2009                  [Page 8]


Internet-Draft                  vCard XML                  November 2008


        <zeroOrMore>
          <element name="suffix">
            <ref name="value-text"/>
          </element>
        </zeroOrMore>
      </element>
    </define>

    <define name="prop-nickname">
      <element name="nickname">
        <oneOrMore>
          <ref name="value-text"/>
        </oneOrMore>
      </element>
    </define>

    <define name="prop-photo">
      <element name="photo">
        <choice>
          <group>
            <attribute name="type">
              <ref name="mime-type"/>
            </attribute>
            <ref name="value-binary"/>
          </group>
          <group>
            <attribute name="value">
              <value>uri</value>
            </attribute>
            <ref name="value-uri"/>
          </group>
        </choice>
      </element>
    </define>

    <define name="prop-bday">
      <element name="bday">
        <choice>
          <ref name="value-date"/>
          <ref name="value-date-time"/>
          <group>
            <attribute name="value">
              <value>text</value>
            </attribute>
            <ref name="value-text"/>
          </group>
        </choice>
      </element>



Perreault                 Expires May 22, 2009                  [Page 9]


Internet-Draft                  vCard XML                  November 2008


    </define>

    <define name="prop-dday">
      <element name="dday">
        <choice>
          <ref name="value-date"/>
          <ref name="value-date-time"/>
          <group>
            <attribute name="value">
              <value>text</value>
            </attribute>
            <ref name="value-text"/>
          </group>
        </choice>
      </element>
    </define>

    <define name="prop-birth">
      <element name="birth">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-death">
      <element name="death">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-gender">
      <element name="gender">
        <choice>
          <value>M</value>
          <value>F</value>
        </choice>
      </element>
    </define>

    <define name="prop-adr">
      <element name="adr">
        <optional>
          <element name="pobox">
            <ref name="value-text"/>
          </element>
        </optional>
        <optional>
          <element name="ext">
            <ref name="value-text"/>



Perreault                 Expires May 22, 2009                 [Page 10]


Internet-Draft                  vCard XML                  November 2008


          </element>
        </optional>
        <optional>
          <element name="street">
            <ref name="value-text"/>
          </element>
        </optional>
        <optional>
          <element name="locality">
            <ref name="value-text"/>
          </element>
        </optional>
        <optional>
          <element name="region">
            <ref name="value-text"/>
          </element>
        </optional>
        <optional>
          <element name="postal">
            <ref name="value-text"/>
          </element>
        </optional>
        <optional>
          <element name="country">
            <ref name="value-text"/>
          </element>
        </optional>
      </element>
    </define>

    <define name="prop-label">
      <element name="label">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-tel">
      <element name="tel">
        <optional><ref name="param-pref"/></optional>
        <zeroOrMore>
          <attribute name="type">
            <choice>
              <value>text</value>
              <value>voice</value>
              <value>fax</value>
              <value>cell</value>
              <value>video</value>
              <value>pager</value>



Perreault                 Expires May 22, 2009                 [Page 11]


Internet-Draft                  vCard XML                  November 2008


            </choice>
          </attribute>
        </zeroOrMore>
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-email">
      <element name="email">
        <optional><ref name="param-pref"/></optional>
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-impp">
      <element name="impp">
        <ref name="param-pref"/>
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-lang">
      <element name="lang">
        <oneOrMore>
          <ref name="value-text"/>
        </oneOrMore>
      </element>
    </define>

    <define name="prop-tz">
      <element name="tz">
        <choice>
          <ref name="value-utc-offset"/>
          <group>
            <attribute name="value">
              <value>text</value>
            </attribute>
            <ref name="value-text"/>
          </group>
        </choice>
      </element>
    </define>

    <define name="prop-geo">
      <element name="geo">
        <element name="lat"><data type="float"/></element>
        <element name="lon"><data type="float"/></element>
      </element>



Perreault                 Expires May 22, 2009                 [Page 12]


Internet-Draft                  vCard XML                  November 2008


    </define>

    <define name="prop-title">
      <element name="title">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-role">
      <element name="role">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-logo">
      <element name="logo">
        <choice>
          <group>
            <attribute name="type">
              <ref name="mime-type"/>
            </attribute>
            <ref name="value-binary"/>
          </group>
          <group>
            <attribute name="value">
              <value>uri</value>
            </attribute>
            <ref name="value-uri"/>
          </group>
        </choice>
      </element>
    </define>

    <define name="prop-org">
      <element name="org">
        <element name="name">
          <ref name="value-text"/>
        </element>
        <zeroOrMore>
          <element name="unit">
            <ref name="value-text"/>
          </element>
        </zeroOrMore>
      </element>
    </define>

    <define name="prop-member">
      <element name="member">



Perreault                 Expires May 22, 2009                 [Page 13]


Internet-Draft                  vCard XML                  November 2008


        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-related">
      <element name="related">
        <attribute name="type">
          <choice>
            <value>parent</value>
            <value>child</value>
            <value>sibling</value>
            <value>manager</value>
            <value>assistant</value>
            <value>agent</value>
          </choice>
        </attribute>
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-categories">
      <element name="categories">
        <oneOrMore>
          <element name="category">
            <ref name="value-text"/>
          </element>
        </oneOrMore>
      </element>
    </define>

    <define name="prop-note">
      <element name="prop">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-prodid">
      <element name="prodid">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-rev">
      <element name="rev">
        <choice>
          <ref name="value-date"/>
          <ref name="value-date-time"/>
        </choice>



Perreault                 Expires May 22, 2009                 [Page 14]


Internet-Draft                  vCard XML                  November 2008


      </element>
    </define>

    <define name="prop-sort-string">
      <element name="sort-string">
        <ref name="value-text"/>
      </element>
    </define>

    <define name="prop-sound">
      <element name="sound">
        <choice>
          <group>
            <attribute name="type">
              <ref name="mime-type"/>
            </attribute>
            <ref name="value-binary"/>
          </group>
          <group>
            <attribute name="value">
              <value>uri</value>
            </attribute>
            <ref name="value-uri"/>
          </group>
        </choice>
      </element>
    </define>

    <define name="prop-uid">
      <element name="uid">
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-url">
      <element name="url">
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-version">
      <element name="version">
        <value>4.0</value>
      </element>
    </define>

    <define name="prop-class">
      <element name="class">



Perreault                 Expires May 22, 2009                 [Page 15]


Internet-Draft                  vCard XML                  November 2008


        <choice>
          <value>public</value>
          <value>private</value>
          <value>confidential</value>
          <ref name="x-name"/>
        </choice>
      </element>
    </define>

    <define name="prop-key">
      <element name="key">
        <choice>
          <group>
            <attribute name="type">
              <ref name="mime-type"/>
            </attribute>
            <ref name="value-binary"/>
          </group>
          <group>
            <attribute name="value">
              <value>uri</value>
            </attribute>
            <ref name="value-uri"/>
          </group>
        </choice>
      </element>
    </define>

    <define name="prop-fburl">
      <element name="fburl">
        <ref name="param-pref"/>
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-caladruri">
      <element name="caladruri">
        <ref name="param-pref"/>
        <ref name="value-uri"/>
      </element>
    </define>

    <define name="prop-caluri">
      <element name="caluri">
        <ref name="param-pref"/>
        <ref name="value-uri"/>
      </element>
    </define>



Perreault                 Expires May 22, 2009                 [Page 16]


Internet-Draft                  vCard XML                  November 2008


    <define name="extended-prop">
      <element name="x-prop">
        <element name="name">
          <choice>
            <ref name="x-name"/>
            <ref name="vnd-name"/>
          </choice>
        </element>
        <element name="value">
          <ref name="anything"/>
        </element>
      </element>
    </define>


    <!-- Top-level grammar -->

    <start>
      <element name="vcard">
        <!-- TODO: allow multiple instance properties -->
        <!-- TODO: group structure -->
        <interleave>
          <optional><ref name="prop-source"/></optional>
          <optional><ref name="prop-name"/></optional>
          <optional><ref name="prop-kind"/></optional>
          <ref name="prop-fn"/>
          <optional><ref name="prop-n"/></optional>
          <optional><ref name="prop-nickname"/></optional>
          <optional><ref name="prop-photo"/></optional>
          <optional><ref name="prop-bday"/></optional>
          <optional><ref name="prop-dday"/></optional>
          <optional><ref name="prop-birth"/></optional>
          <optional><ref name="prop-death"/></optional>
          <optional><ref name="prop-gender"/></optional>
          <optional><ref name="prop-adr"/></optional>
          <optional><ref name="prop-label"/></optional>
          <optional><ref name="prop-tel"/></optional>
          <optional><ref name="prop-email"/></optional>
          <optional><ref name="prop-impp"/></optional>
          <optional><ref name="prop-lang"/></optional>
          <optional><ref name="prop-tz"/></optional>
          <optional><ref name="prop-geo"/></optional>
          <optional><ref name="prop-title"/></optional>
          <optional><ref name="prop-role"/></optional>
          <optional><ref name="prop-logo"/></optional>
          <optional><ref name="prop-org"/></optional>
          <optional><ref name="prop-member"/></optional>
          <optional><ref name="prop-related"/></optional>



Perreault                 Expires May 22, 2009                 [Page 17]


Internet-Draft                  vCard XML                  November 2008


          <optional><ref name="prop-categories"/></optional>
          <optional><ref name="prop-note"/></optional>
          <optional><ref name="prop-prodid"/></optional>
          <optional><ref name="prop-rev"/></optional>
          <optional><ref name="prop-sort-string"/></optional>
          <optional><ref name="prop-sound"/></optional>
          <optional><ref name="prop-uid"/></optional>
          <optional><ref name="prop-url"/></optional>
          <ref name="prop-version"/>
          <optional><ref name="prop-class"/></optional>
          <optional><ref name="prop-key"/></optional>
          <optional><ref name="extended-prop"/></optional>
        </interleave>
      </element>
    </start>

  </grammar>


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                 Expires May 22, 2009                 [Page 18]


Internet-Draft                  vCard XML                  November 2008


Full Copyright Statement

   Copyright (C) The IETF Trust (2008).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

Acknowledgement

   This document was produced using xml2rfc v1.33 (of
   http://xml.resource.org/) from a source in RFC-2629 XML format.







Perreault                 Expires May 22, 2009                 [Page 19]