One document matched: draft-ietf-vcarddav-vcardxml-11.xml


<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<?rfc rfcedstyle="yes" ?>
<?rfc rfcprocack="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?><!-- default = 3 -->
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-vcarddav-vcardxml-11" category="std">

  <front>
    <title abbrev="xCard">xCard: vCard XML Representation</title>
    <author initials="S." surname="Perreault" fullname="Simon Perreault">
      <organization>Viagénie</organization>
      <address>
      <postal>
        <street>2600 boul. Laurier, suite 625</street>
        <city>Québec</city>
        <region>QC</region>
        <code>G1V 4W1</code>
        <country>Canada</country>
      </postal>
      <phone>+1 418 656 9254</phone>
      <email>simon.perreault@viagenie.ca</email>
      <uri>http://www.viagenie.ca</uri>
    </address>
    </author>
    <date year="2011"/>
    <area>Applications</area>
    <keyword>vcard</keyword>
    <abstract>
      <t>This document defines the XML schema of the vCard data format.</t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction">
      <t>vCard <xref target="I-D.ietf-vcarddav-vcardrev"/> 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 <xref target="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 stand-alone vCard parser.</t>
      <t>Earlier work on an XML format for vCard was started in 1998 by Frank
        Dawson <xref target="I-D.dawson-vcard-xml-dtd"/>. Sadly it did not take
        over the world.</t>
    </section>

    <section title="Conventions">
      <t>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 <xref
          target="RFC2119"/>.</t>
    </section>
    
    <section title="The Schema">
      <t>The schema is expressed in the RELAX NG language <xref
          target="ISO.19757-2.2008"/> and is found in <xref
          target="schema"/>.</t>
    </section>
    
    <section title="Example: Author's XML vCard">
      <figure>
        <artwork>
<![CDATA[<?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>
]]>
        </artwork>
      </figure>
    </section>
    
    <section title="Design Considerations">
      <t>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.  That element in turn contains a text element whose
        content corresponds to the vCard property's value.</t>
      <t>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:</t>
      <figure>
        <artwork><![CDATA[
  <tel>
    <parameters>
      <type>
        <text>voice</text>
        <text>video</text>
      </type>
    </parameters>
    <uri>tel:+1-555-555-555</uri>
  </tel>
        ]]></artwork>
      </figure>
      <t>Parameters taking a list of values are simply repeated multiple times,
        once for each value in the list.</t>
      <t>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.</t>
      <t>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.</t>
      <t>A top-level <vcards> element is used as root. It contains one or
        more <vcard> element, each representing a complete vCard. The
        <vcards> element MUST be present even when only a single vCard is
        present in an XML document.</t>
      <t>The group construct (Section 3.2 in <xref
          target="I-D.ietf-vcarddav-vcardrev"/>) is represented with the
        <group> element. The "name" attribute contains the group's
        name. For example:</t>
      <figure>
        <artwork><![CDATA[
  <vcards>
    <vcard>
      <group name="contact">
        <fn>...</fn>
        <email>...</email>
      </group>
      <group name="media">
        <photo>...</photo>
      </group>
      <categories>...</categories>
    </vcard>
  </vcards>
        ]]></artwork>
      </figure>
      <t>is equivalent to:</t>
      <figure>
        <artwork><![CDATA[
  BEGIN:VCARD
  VERSION:4.0
  contact.FN=...
  contact.EMAIL=...
  media.PHOTO=...
  CATEGORIES=...
  END:VCARD
        ]]></artwork>
      </figure>
      <section title="Extensibility">
        <t>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 <xref target="I-D.ietf-vcarddav-vcardrev"/>
          section 10.2). It is expected that these vCard extensions will
          also specify extensions to the XML format described in this
          document.</t>
        <t>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.</t>
        <t>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 <xref
            target="W3C.REC-xml-names-20091208"/> for extensibility is
          RECOMMENDED for extensions that have no equivalent in plain text
          vCard. Refer to <xref target="conversion"/> for the implications when
          converting between plain-text vCard and XML.</t>
        <figure>
          <preamble>Examples:</preamble>
          <artwork><![CDATA[
  <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>
          ]]></artwork>
        </figure>
        <t>Note that extension elements do not need the "X- or "VND-" prefix in
          XML. The XML namespace mechanism is sufficient.</t>
        <t>A vCard XML parser MUST ignore XML elements and attributes for which
          it doesn't recognize the expanded name. The normal behaviour of
          ignoring XML processing instructions whose target is not recognized
          MUST also be followed.</t>
        <t>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.</t>
        <t>Parameters containing a list of values are expressed using a list of
          elements in XML (e.g. the <type> element).</t>
      </section>
      <section title="Limitations">
        <t>The schema does not validate the cardinality of properties. This is a
          limitation of the schema definition language. Cardinalities of the
          original vCard format <xref target="I-D.ietf-vcarddav-vcardrev"/>
          MUST still be respected.</t>
        <t>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.</t>
      </section>
    </section>

    <section title="Format Conversions" anchor="conversion">
      <t>When new properties or "X-" proeprties used, a vCard<->xCard
        converter might not recognize them, and 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:
        <list style="symbols">
          <t>When converting from vCard to xCard:
            <list style="symbols">
              <t>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.</t>
              <t>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.</t>
              <t>The content of "XML" properties is copied as-is to XML.</t>
              <t>Property and parameter XML element names are converted to
                lower-case.</t>
              <t>Property value escaping is undone. For example, "\n" becomes a
                NEWLINE character (ASCII decimal 10).</t>
              <t>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>.</t>
            </list>
          </t>
          <t>When converting xCard to vCard:
            <list style="symbols">
              <t>Properties in the vCard 4 namespace:
                <list style="symbols">
                  <t>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
                    semi-colons.</t>
                  <t>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.</t>
                  <t>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.</t>
                </list>
              </t>
              <t>Properties in other namespaces are wrapped as-is inside an
                "XML" property.</t>
              <t>Any <unknown> property value XML elements are converted
                directly into vCard values. The containing property MUST NOT
                have a "VALUE" parameter.</t>
              <t>Any <unknown> parameter value XML elements are converted
                as if they were <text> value type XML elements.</t>
              <t>Property and parameter names are converted to upper-case.</t>
              <t>Property value escaping (Section 3.3 of <xref
                  target="I-D.ietf-vcarddav-vcardrev"/>) is carried out. For
                example, a NEWLINE character (ASCII decimal 10) becomes
                "\n".</t>
              <t>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\"".</t>
            </list>
          </t>
        </list>
      </t>
      <t>For example, these two vCards are equivalent:</t>
      <figure>
        <artwork><![CDATA[
  <?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>
        ]]></artwork>
      </figure>
      <figure>
        <artwork><![CDATA[
  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
        ]]></artwork>
      </figure>
    </section>
    
    <section title="Security Considerations" anchor="security">
      <t>All the security considerations applicable to plain vCard <xref
          target="I-D.ietf-vcarddav-vcardrev"/> are applicable to this document
        as well.</t>
      <t>XML Signature <xref target="W3C.CR-xmldsig-core1-20110303"/> and XML
        Encryption <xref target="W3C.CR-xmlenc-core1-20110303"/> can be used
        with xCard to provide authentication and confidentiality.</t>
    </section>

    <section title="IANA Considerations">
      <section title="Registration of the XML Namespace">
        <t>
          <list style="hanging">
            <t hangText="URI:">urn:ietf:params:xml:ns:vcard-4.0</t>
            <t hangText="Registrant Contact:">Simon Perreault
              <simon.perreault@viagenie.ca></t>
            <t hangText="XML:">None. Namespace URIs do not represent an XML
              specification.</t>
          </list>
        </t>
      </section>
      <section title="Media Type">
        <t>This section defines the MIME media type <xref target="RFC4288"/> for
          use with vCard-in-XML data.</t>
        <t>
          <list style="hanging">
            <t hangText="To:">ietf-types@iana.org</t>
            <t hangText="Subject:">Registration of media type
              application/vcard+xml</t>
            <t hangText="Type name:">application</t>
            <t hangText="Subtype name:">vcard+xml</t>
            <t hangText="Required parameters:">none</t>
            <t hangText="Optional parameters:">charset as defined for
              application/xml in <xref target="RFC3023"/>; per <xref
                target="RFC3023"/>, use of the charset parameter with the value
              "utf-8" is "STRONGLY RECOMMENDED"</t>
            <t hangText="Encoding considerations:">Same as encoding
              considerations of application/xml as specified in <xref
                target="RFC3023"/></t>
            <t hangText="Security considerations:">This media type has all of
              the security considerations described in <xref target="RFC3023"/>,
              plus those listed in <xref target="security"/>.</t>
            <t hangText="Interoperability considerations:">This media type
              provides an alternative syntax to vCard data <xref
                target="I-D.ietf-vcarddav-vcardrev"/> based on XML.</t>
            <t hangText="Published specification:">This specification.</t>
            <t hangText="Applications which 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.</t>
            <t hangText="Additional information:">
              <list style="hanging">
                <t hangText="Magic number(s):">none</t>
                <t hangText="File extension(s):">XML data should use ".xml" as
                  the file extension.</t>
                <t hangText="Macintosh file type code(s):">none</t>
              </list>
            </t>
            <t hangText="Person & email address to contact for further
              information:">Simon Perreault
              <simon.perreault@viagenie.ca></t>
            <t hangText="Intended usage:">COMMON</t>
            <t hangText="Restrictions on usage:">none</t>
            <t hangText="Author:">Simon Perreault</t>
            <t hangText="Change controller:">IETF</t>
          </list>
        </t>
      </section>
    </section>

    <section title="Acknowledgements">
      <t>Thanks to the following people for their input:</t>
      <t>Alexey Melnikov, Barry Leiba, Bjorn Hoehrmann, Cyrus Daboo, Joe
        Hildebrand, Joseph Smarr, Marc Blanchet, Mike Douglas, Peter
        Saint-Andre, Robins George, Zahhar Kirillov, Zoltan Ordogh.</t>
    </section>

  </middle>
  
  <back>
    
    <references title="Normative References">
      <?rfc include="reference.RFC.2119.xml"?>
      <?rfc include="reference.RFC.3023.xml"?>
      <?rfc include="reference.I-D.draft-ietf-vcarddav-vcardrev"?>
      <?rfc include="reference.W3C.REC-xml-20081126.xml"?>
      <?rfc include="reference.W3C.REC-xml-names-20091208.xml"?>
      <?rfc include="reference.ISO.19757-2.2008"?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.I-D.draft-dawson-vcard-xml-dtd-03"?>
      <?rfc include="reference.RFC.4288.xml"?>
      <?rfc include="reference.W3C.CR-xmldsig-core1-20110303"?>
      <?rfc include="reference.W3C.CR-xmlenc-core1-20110303"?>
    </references>
    
    <section title="Relax NG Schema" anchor="schema">
      <figure>
        <artwork>
<![CDATA[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 }

# 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 }?

# 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 }+
  }

# 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 }+
  }

# 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)
  }

# 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
  }

# 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
  }

# 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
  }

# 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*
         })+
    }+
  }
]]>
        </artwork>
      </figure>
    </section>

    <section
      title="Change Log (to be removed by RFC Editor prior to publication)"
      anchor="changelog">
      <section title="Changes in -11">
        <t>
          <list style="symbols">
            <t>Refer to ISO standard for Relax NG.</t>
            <t>Adjust text on vCard extensibility through IANA.</t>
            <t>Add missing case conversion rules.</t>
            <t>Refer to XML Signature and XML Encryption in security
              considerations section.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -10">
        <t>
          <list style="symbols">
            <t>Fixed bugs in examples.</t>
            <t>New XML elements MUST be lower-case.</t>
            <t>Adjusted case conversion rules for unknown parameters.</t>
            <t>Added utc-offset as possible value type to tz property.</t>
            <t>Added "agent" and "emergency" related values.</t>
            <t>Added x-name and iana-token in kind values.</t>
            <t>Added cross-references to vcardrev sections.</t>
            <t>Add <unknown> element for round-tripping.</t>
            <t>Tweak sex grammar.</t>
            <t>"Structured" properties don't need <text> elements.</t>
            <t>Fixed wrong example.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -09">
        <t>
          <list style="symbols">
            <t>Added "Conventions" section with reference to RFC2119.</t>
            <t>Fixed bad XML in example.</t>
            <t>Updated MIME type registration following feedback from
              ietf-types@iana.org.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -08">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-17.</t>
            <t>Added some references.</t>
            <t>Fixed bad XML in example.</t>
            <t>Added <text> element around pid param value.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -07">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-16.</t>
            <t>Fixed bad XML in example.</t>
            <t>Fixed <categories> which now takes a value-text-list.</t>
            <t>All parameters now use value elements. This affects type,
              calscale, and pref.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -06">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-15.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -05">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-13.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -04">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-12.</t>
            <t>Added application/vcard+xml media type.</t>
            <t>Added rules for backslash escaping and quoting when
              converting.</t>
            <t>Added description of <vcards> element.</t>
            <t>Described group construct in XML.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -03">
        <t>
          <list style="symbols">
            <t>Created "Format Conversions" section.</t>
            <t>Turned more <type> parameter values into plain text.</t>
            <t>Removed need for empty value elements in components.</t>
            <t>Wrapped value of <sex>, <class>, and <kind> in
              value elements.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -02">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-10.</t>
            <t>Turned <type> parameter values into plain text.</t>
            <t>Moved the "XML" property to vCard base.</t>
            <t>Changed title to avoid confusion with XML Schema.</t>
            <t>Added prefixes "value-", "param-", and "property-" in schema.</t>
            <t>Better language for specifying what a parser must ignore.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -01">
        <t>
          <list style="symbols">
            <t>Synchronized with draft-ietf-vcarddav-vcardrev-09.</t>
            <t>Added the <vcards> element to allow multiple vCards in a
              single XML file.</t>
            <t>Created the <parameters> container element.</t>
            <t>Use text value for enumeration in <class> element.</t>
            <t>Created the "XML" vCard property.</t>
            <t>Added IANA considerations section.</t>
            <t>Added security considerations section.</t>
          </list>
        </t>
      </section>
      <section title="Changes in -00">
        <t>
          <list style="symbols">
            <t>Same as draft-perreault-vcarddav-vcardxml-02.</t>
          </list>
        </t>
      </section>
    </section>
    
  </back>

</rfc>

PAFTECH AB 2003-20262026-04-24 01:22:14