Network Working Group                                       S. Perreault
Internet-Draft                                                  Viagenie
Intended status: Standards Track                        October 21, 2009                           March 8, 2010
Expires: April 24, September 9, 2010

                        vCard XML Schema
                    draft-ietf-vcarddav-vcardxml-01 Representation
                    draft-ietf-vcarddav-vcardxml-02

Abstract

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

Status of This Memo

   This Internet-Draft is submitted to IETF in full conformance with the
   provisions of BCP 78 and 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 April 24, September 9, 2010.

Copyright Notice

   Copyright (c) 2009 2010 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document (http://trustee.ietf.org/license-info). document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.

Abstract

   This  Code Components extracted from this document defines the XML schema must
   include Simplified BSD License text as described in Section 4.e of
   the vCard data format. Trust Legal Provisions and are provided without warranty as
   described in the BSD License.

Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  The Schema . . . . . . . . . . . . . . . . . . . . . . . . . .  3
   3.  Example: Author's XML vCard  . . . . . . . . . . . . . . . . .  3
   4.  Design Considerations  . . . . . . . . . . . . . . . . . . . .  5
     4.1.  Extensibility  . . . . . . . . . . . . . . . . . . . . . .  5
     4.2.  Limitations  . . . . . . . . . . . . . . . . . . . . . . .  6
   5.  The "XML" vCard Property . . . . . . . . . . . . . . . . . . .  6
   6.  Security Considerations  . . . . . . . . . . . . . . . . . . .  7
   7.
   6.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . .  7
     7.1.  Registration of the "XML" vCard Property . . . . . . . . .  8
     7.2.
     6.1.  Registration of the XML Namespace  . . . . . . . . . . . .  8
   8.  7
   7.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  8
   9.  7
   8.  References . . . . . . . . . . . . . . . . . . . . . . . . . .  8
     9.1.  7
     8.1.  Normative References . . . . . . . . . . . . . . . . . . .  8
     9.2.  7
     8.2.  Informative References . . . . . . . . . . . . . . . . . .  8  7
   Appendix A.  Relax NG Schema . . . . . . . . . . . . . . . . . . .  8  7
   Appendix B.  Change Log (to be removed by RFC Editor prior to
                publication)  . . . . . . . . . . . . . . . . . . . . 14 13
     B.1.  Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 13
     B.2.  Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 14
     B.2.
     B.3.  Changes in -00 . . . . . . . . . . . . . . . . . . . . . . 15 14

1.  Introduction

   vCard [I-D.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, 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.

   Earlier work on an XML format for vCard was started in 1998 by Frank
   Dawson [I-D.dawson-vcard-xml-dtd].  Sadly it did not take over the
   world.

2.  The Schema

   The schema is expressed in the RELAX NG language
   [relaxng][relaxng-compact] and is found in Appendix A.

3.  Example: Author's XML vCard

   <?xml version="1.0" encoding="UTF-8"?>
   <vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
     <vcard>
       <fn><text>Simon Perreault</text></fn>
       <n>
         <surname><text>Perreault</text></surname>
         <given><text>Simon</text></given>
         <prefix><text/></prefix>
         <suffix>
           <text>ing. jr.</text>
           <text>M.Sc.</text>
         </suffix>
       </n>
       <bday><date>--0203</date></bday>
       <anniversary>
         <date-time>20090808T1430-0500</date-time>
       </anniversary>
       <sex>1</sex>
       <lang>
         <parameters><pref>1</pref></parameters>
         <language-tag>fr</language-tag>
       </lang>
       <lang>
         <parameters><pref>2</pref></parameters>
         <language-tag>en</language-tag>
       </lang>
       <org>
         <parameters><type><work/></type></parameters>
         <parameters><type>work</type></parameters>
         <text>Viagenie</text>
       </org>
       <adr>
         <parameters><type><work/></type></parameters>
         <parameters><type>work</type></parameters>
         <pobox><text/></pobox>
         <ext><text>Suite 625</text></ext>
         <street><text>2600 boul. Laurier</text></street>
         <locality><text>Quebec</text></locality>
         <region><text>QC</text></region>
         <code><text>G1V 4W1</text></code>
         <country><text>Canada</text></country>
       </adr>
       <tel>
         <parameters><type><work/><voice/></type></parameters>
         <parameters>
           <type>work</type>
           <type>voice</type>
         </parameters>
         <uri>tel:+1-418-656-9254;ext=102</uri>
       </tel>
       <tel>
         <parameters>
           <type><work/><text/><voice/><cell/><video/></type>
           <type>work</type>
           <type>text</type>
           <type>voice</type>
           <type>cell</type>
           <type>video</type>
         </parameters>
         <uri>tel:+1-418-262-6501</uri>
       </tel>
       <tel>
         <parameters><type><work/><fax/></type></parameters>
         <parameters>
           <type>work</type>
           <type>fax</type>
         </parameters>
         <uri>tel:+1-418-656-9257</uri>
       </tel>
       <email>
         <parameters><type><work/></type></parameters>
         <parameters><type>work</type></parameters>
         <text>simon.perreault@viagenie.ca</text>
       </email>
       <geo>
         <parameters><type><work/></type></parameters>
         <parameters><type>work</type></parameters>
         <uri>geo:46.772673,-71.282945</uri>
       </geo>
       <key>
         <parameters><type><work/></type></parameters>
         <uri>http://www.viagenie.ca/simon.perreault/simon.asc</uri>
       </key>
       <tz><text>America/Montreal</text></tz>
       <class>PUBLIC</class>
     </vcard>
   </vcards>

4.  Design Considerations

   The general idea is to map vCard parameters, properties, and value
   types to XML elements.  For example, the "FN" property is mapped to
   the "fn" element.  That element in turn contains a text element whose
   content corresponds to the vCard property's value.

   vCard parameters are also mapped to XML elements.  They are contained
   in the <parameters> element, which is contained in property elements.
   For example, the "TYPE" parameter applied to the "TEL" property would
   look like the following in XML:

     <tel>
       <parameters><type><voice/></type></parameters>
       <parameters>
         <type>voice</type>
         <type>video</type>
       </parameters>
       <uri>tel:+1-555-555-555</uri>
     </tel>

   Parameters taking a list of values are simply repeated multiple
   times, once for each value in the list.

   Properties having structured values (e.g. the "N" property) are
   expressed by XML element trees.  Element names in that tree (e.g.
   "surname", "given", etc.) do not have a vCard equivalent since they
   are identified by position in plain vCard.

   Line folding is a non-issue in XML.  Therefore, the mapping from
   vCard to XML is done after the unfolding procedure is carried out.
   Conversely, the mapping from XML to vCard is done before the folding
   procedure is carried out.

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 by making use of XML namespaces.
   They simply correspond to elements outside of the core namespace.
   For example:

     <ext:my-prop
         ext:xmlns="http://example.com/extensions/my-vcard">
       <parameters>
         <pref>1</pref>
       </parameters>                 <!-- Core vCard elements  -->
       <text>value goes here</text>  <!-- are still accessible -->
     </ext:my-prop>

   Note that extension elements do not need the "X- or "VND-" prefix in
   XML.  The XML namespace mechanism is sufficient.

   A vCard XML parser MUST ignore XML data qualified by a namespace elements and attributes for which
   it
   does doesn't recognize the expanded name.  The normal behaviour of
   ignoring XML processing instructions whose target is not understand. recognized
   MUST also be followed.

   In the original vCard format, the "VERSION" property was mandatory
   and played a role in extensibility.  In XML, this property is absent.
   Its role is played by the vCard core namespace identifier, which
   includes the version number. vCard revisions will use a different
   namespace.

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

4.2.  Limitations

   The schema does not validate the cardinality of properties.  This is
   a limitation of the schema definition language.  Cardinalities of the
   original vCard format [I-D.ietf-vcarddav-vcardrev] MUST still be
   respected.

   Some constructs (e.g. value enumerations in type parameters) have
   additional ordering constraints in XML.  This is a result of
   limitations of the schema definition language and the order is
   arbitrary.  The order MUST be respected in XML for the vCard to be
   valid.  However, reordering as part of conversion to or from plain
   vCard MAY happen.

5.  The "XML" vCard Property

   This document defines the following vCard property.

   Namespace:

   Property name:  XML

   Purpose:  To include XML-encoded vCard data in a plain vCard.

   Value type:  A single text value.

   Cardinality:  (0,n)

   Property parameters:  none allowed
   Description:  The content of this property is an XML chunk.  Its
      default XML namespace is "urn:ietf:params:xml:ns:vcard-4.0".  The
      elements allowed at the root level of this chunk are those that
      are allowed to be immediate children of the <vcard> element
      defined in this document.  The normal rules for extensibility
      apply (i.e. things in unknown namespaces are ignored).  The chunk
      is subject to normal line folding and escaping, i.e. replace all
      backslashes with "\\", then replace all newlines with "\n", then
      fold long lines.

   Format definition:

     XML-param = ""
     XML-value = text

   Example:  The three following vCards are equivalent.

     <?xml version="1.0"?>
     <vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
       <vcard>
         <fn><text>John Doe</text></fn>
         <email><text>jdoe@example.com</text></email>
       </vcard>
     </vcards>

     BEGIN:VCARD
     VERSION:4.0
     XML:<fn><text>John Doe>/text></fn>\n
      <email><text>jdoe@example.com</text></email>
     END:VCARD

     BEGIN:VCARD
     VERSION:4.0
     FN:John Doe
     EMAIL:jdoe@example.com
     END:VCARD

6.  Security Considerations

   All the security considerations applicable to plain vCard
   [I-D.ietf-vcarddav-vcardrev] are applicable to this document as well.

7.

6.  IANA Considerations
7.1.  Registration of the "XML" vCard Property

   The completed registration template can be found in section
   Section 5.

7.2.

6.1.  Registration of the XML Namespace

   URI:  urn:ietf:params:xml:ns:vcard-4.0

   Registrant Contact:  Simon Perreault <simon.perreault@viagenie.ca>

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

8.

7.  Acknowledgements

   Thanks to the following people for their input:

   Alexey Melnikov, Barry Leiba, Cyrus Daboo, Joe Hildebrand, Joseph
   Smarr, Marc Blanchet, Peter Saint-Andre, Robins George, Zahhar
   Kirillov, Zoltan Ordogh.

9.

8.  References

9.1.

8.1.  Normative References

   [I-D.ietf-vcarddav-vcardrev]  Perreault, S. and P. Resnick, "vCard
                                 Format Specification",
                                 draft-ietf-vcarddav-vcardrev-09 (work
                                 in progress), October 2009.

   [relaxng]                     Clark, J., "RELAX NG Specification",
                                 December 2001.

   [relaxng-compact]             Clark, J., "RELAX NG Compact Syntax",
                                 November 2002.

9.2. 2002, <http://www.relaxng.org/
                                 compact-20021121.html>.

8.2.  Informative References

   [I-D.dawson-vcard-xml-dtd]    Dawson, F., "The vCard v3.0 XML DTD",
                                 draft-dawson-vcard-xml-dtd-03 (work in
                                 progress), June 1998.

Appendix A.  Relax NG Schema

default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
# Value types
 \text
value-text = element text { text }
 text-list
value-text-list = \text+
 uri value-text+
value-uri = element uri { xsd:anyURI }
 date
value-date = element date {
    xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
  }
 time
value-time = element time {
    xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
                         ~ "(Z|[+\-]\d\d(\d\d)?)?" }
  }
 date-time
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)?)?" }
  }
 date-and-or-time
value-date-and-or-time = date value-date | date-time value-date-time | time
 timestamp value-time
value-timestamp = element timestamp {
    xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
  }
 boolean
value-boolean = element boolean { xsd:boolean }
 integer
value-integer = element integer { xsd:integer }
 float
value-float = element float { xsd:float }
 binary
value-binary = element binary { xsd:base64Binary }
 language-tag
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}" }
  }

# Parameters
 language
param-language = element language { language-tag value-language-tag }?
 pref
param-pref = element pref {
    xsd:integer { minInclusive = "1" maxInclusive = "100" }
  }?
 pid
param-pid = element pid {
    xsd:string { pattern = "\d+(\.\d+)?" }
  }?
 type
param-type = element type { "work" | "home" }*
param-calscale = element work { empty }?,
     element home calscale { empty }? "gregorian" }?

# Properties
 source
property-source = element source {
    element parameters { pid, pref param-pid, param-pref },
     uri
    value-uri
  }

 name

property-name = element name { \text value-text }
 kind
property-kind = element kind {
     element individual { empty } "individual" | element group { empty } "group" | element org { empty } "org"
                             | element location { empty }
   }
 fn "location" | "thing" }*
property-fn = element fn {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     \text
    value-text
  }
 n
property-n = element n {
    element parameters { language param-language }?,
    element surname { text-list value-text-list },
    element given { text-list value-text-list },
    element prefix { text-list value-text-list },
    element suffix { text-list value-text-list }
  }
 nickname
property-nickname = element nickname {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     text-list
    value-text-list
  }
 photo
property-photo = element photo {
    element parameters {
       pid,
       pref,
      param-pid,
      param-pref,
      param-type,
      element type { element work { empty }?,
         element home { empty }?,
         element media { \text }? value-text } }?
    }?,
     (binary
    (value-binary | uri) value-uri)
  }
 bday
property-bday = element bday { date-and-or-time
    element parameters { param-calscale }?,
    (value-date-and-or-time | \text value-text)
  }
 dday
property-dday = element dday { date-and-or-time
    element parameters { param-calscale }?,
    (value-date-and-or-time | \text value-text)
  }
 birth
property-birth = element birth {
    element parameters { language param-language }?,
     \text
    value-text
  }
 death
property-death = element death {
    element parameters { language param-language }?,
     \text
    value-text
  }
 anniversary
property-anniversary = element anniversary { date-and-or-time
    element parameters { param-calscale }?,
    (value-date-and-or-time | \text value-text)

  }
 sex
property-sex = element sex { "0" | "1" | "2" | "9" }
 adr
property-adr = element adr {
    element parameters {
       language,
       pid,
       pref,
       type,
      param-language,
      param-pid,
      param-pref,
      param-type,
      element geo { uri value-uri }?,
      element tz { \text value-text | uri value-uri }?
    }?,
    element pobox { text-list value-text-list },
    element ext { text-list value-text-list },
    element street { text-list value-text-list },
    element locality { text-list value-text-list },
    element region { text-list value-text-list },
    element code { text-list value-text-list },
    element country { text-list value-text-list }
  }
 label
property-label = element label {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     \text
    value-text
  }
 tel
property-tel = element tel {
    element parameters {
       pid,
       pref,
      param-pid,
      param-pref,
      element type {
         element work { empty }?,
         element home { empty }?,
         element text { empty }?,
         element voice { empty }?,
         element fax { empty }?,
         element cell { empty }?,
         element video { empty }?,
         element pager { empty }?
       }? "work" | "home" | "text" | "voice"
                   | "fax" | "cell" | "video" | "pager" }*
    },
     uri
    value-uri
  }
 email
property-email = element email {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     \text
    value-text
  }
 impp
property-impp = element impp {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     uri
    value-uri
  }
 lang
property-lang = element lang {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     language-tag
    value-language-tag
  }

 tz
property-tz = element tz {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     (\text
    (value-text | uri) value-uri)

  }
 geo
property-geo = element geo {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     uri
    value-uri
  }
 title
property-title = element title {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     \text
    value-text
  }
 role
property-role = element role {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     \text
    value-text
  }
 logo
property-logo = element logo {
    element parameters {
       language,
       pid,
       pref,
      param-language,
      param-pid,
      param-pref,
      param-type,
      element type { element work { empty }?,
         element home { empty }?,
         element media { \text }? value-text } }?
    }?,
     (binary
    (value-binary | uri) value-uri)
  }
 org
property-org = element org {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     text-list
    value-text-list
  }
 member
property-member = element member { pid, pref, uri param-pid, param-pref, value-uri }
 related
property-related = element related {
    element parameters {
       pid,
       pref,
      param-pid,
      param-pref,
      element type {
         element work { empty }?,
         element home { empty }?,
         (  element parent { empty } "work" | element child { empty } "home" | element sibling { empty } "parent" | element spouse { empty } "child"
        | element family { empty } "sibling" | element friend { empty } "spouse" | element supervisor { empty } "family" | element supervisee { empty } "friend"
        | element assistant { empty } "supervisor" | element colleague { empty } "supervisee" | element agent { empty } "assistant"
        | element emergency { empty })
       }? "colleague" | "agent" | "emergency" }*
    }?,
     (uri
    (value-uri | \text) value-text)
  }
 categories
property-categories = element categories {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     \text
    value-text
  }
 note
property-note = element note {
    element parameters { language, pid, pref, type param-language, param-pid,
                         param-pref, param-type }?,
     \text
    value-text
  }
 prodid
property-prodid = element prodid { \text value-text }
 rev
property-rev = element rev { timestamp value-timestamp }
 sort-string
property-sort-string = element sort-string { \text
    element surname { value-text }+,
    element given { value-text }*
  }
 sound
property-sound = element sound {
    element parameters {
       language,
       pid,
       pref,
      param-language,
      param-pid,
      param-pref,
      element type {
        element work { empty }?,
        element home { empty }?,
        element media { \text value-text }?
      }
    }?,
     (binary
    (value-binary | uri) value-uri)
  }
 uid
property-uid = element uid { uri value-uri }
 clientpidmap
property-clientpidmap = element clientpidmap {
    element sourceid { xsd:positiveInteger },
     uri
    value-uri
  }
 url
property-url = element url {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     uri
    value-uri
  }
 class
property-class = element class { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" }
 key
property-key = element key {
    element parameters {
       pid,
       pref,
      param-pid,
      param-pref,
      element type {
        element work { empty }?,
        element home { empty }?,
        element media { \text value-text }?
      }
    }?,
     (binary
    (value-binary | uri) value-uri)
  }
 fburl
property-fburl = element fburl {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     uri
    value-uri
  }
 caladruri

property-caladruri = element caladruri {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     uri
    value-uri
  }
 caluri
property-caluri = element caluri {
    element parameters { pid, pref, type param-pid, param-pref, param-type }?,
     uri
    value-uri
  }

# Top-level grammar
property = adr property-adr | anniversary property-anniversary | bday property-bday
         | birth property-birth | caladruri property-caladruri | caluri property-caluri
         | categories property-categories | class property-class | clientpidmap property-clientpidmap
         | dday property-dday | death property-death | email property-email
         | fburl property-fburl | fn property-fn | geo property-geo | impp property-impp
         | key property-key | kind property-kind | label property-label | lang property-lang
         | logo property-logo | member property-member | n property-n | name property-name
         | nickname property-nickname | note property-note | org property-org
         | photo property-photo | prodid property-prodid | related property-related
         | rev property-rev | role property-role | sex property-sex
         | sort-string property-sort-string | sound property-sound | source property-source
         | tel property-tel | title property-title | tz property-tz | uid property-uid
         | url property-url
start = element vcards {
    element vcard {
      (property
       | element group {
           attribute name { text },
           property*
         })+
    }+
  }

Appendix B.  Change Log (to be removed by RFC Editor prior to
             publication)

B.1.  Changes in -02

   o  Synchronized with draft-ietf-vcarddav-vcardrev-10.

   o  Turned <type> parameter values into plain text.

   o  Moved the "XML" property to vCard base.

   o  Changed title to avoid confusion with XML Schema.

   o  Added prefixes "value-", "param-", and "property-" in schema.

   o  Better language for specifying what a parser must ignore.

B.2.  Changes in -01

   o  Synchronized with draft-ietf-vcarddav-vcardrev-09.

   o  Added the <vcards> element to allow multiple vCards in a single
      XML file.

   o  Created the <parameters> container element.

   o  Use text value for enumeration in <class> element.

   o  Created the "XML" vCard property.

   o  Added IANA considerations section.

   o  Added security considerations section.

B.2.

B.3.  Changes in -00

   o  Same as draft-perreault-vcarddav-vcardxml-02.

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