JEP-0xxx: rdfcard

This proposal specifies how to represent Jabber profile data in terms of the Resource Description Framework.


WARNING: This document has not yet been accepted for consideration or approved in any official manner by the Jabber Software Foundation, and this document must not be referred to as a Jabber Enhancement Proposal (JEP). If this document is accepted as a JEP by the Jabber Council, it will be published at <http://www.jabber.org/jeps/> and announced on the <standards-jig@jabber.org> mailing list.


JEP Information

Status: Experimental
Type: Standards Track
Number: 0xxx
Version: 0.0.2
Last Updated: 2005-02-06
JIG: Standards JIG
Approving Body: Jabber Council
Dependencies: XMPP Core, XMPP Instant Messaging and Presence
Supersedes: JEP-0054
Superseded By: None
Short Name: rdfcard

Author Information

Dominik Tomaszuk

Email: dominik.tomaszuk@gmail.com
JID: domel@chrome.pl

Legal Notice

This Jabber Enhancement Proposal is copyright 1999 - 2005 by the Jabber Software Foundation (JSF) and is in full conformance with the JSF's Intellectual Property Rights Policy <http://www.jabber.org/jsf/ipr-policy.php>. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at <http://www.opencontent.org/openpub/>).

Discussion Venue

The preferred venue for discussion of this document is the Standards-JIG discussion list: <http://mail.jabber.org/mailman/listinfo/standards-jig>.

Relation to XMPP

The Extensible Messaging and Presence Protocol (XMPP) is defined in the XMPP Core and XMPP IM specifications contributed by the Jabber Software Foundation to the Internet Standards Process, which is managed by the Internet Engineering Task Force in accordance with RFC 2026. Any protocols defined in this JEP have been developed outside the Internet Standards Process and are to be understood as extensions to XMPP rather than as an evolution, development, or modification of XMPP itself.

Conformance Terms

The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.


Table of Contents

  1. 1. Introduction
  2. 2. History
  3. 3. Use Cases
    1. 3.1. Retrieving One's RDFCard
    2. 3.2. Updating One's RDFCard
    3. 3.3. Viewing Another User's RDFCard
  4. 4. Internationalization
    1. 4.1. RDFCard with xml:lang
    2. 4.2. RDFCard without xml:lang
  5. 5. Elements
    1. 5.0. rdf:RDF and rdf:Description
    2. 5.1. person
    3. 5.2. home
    4. 5.3. work
    5. 5.4. organization
    6. 5.5. family
    7. 5.6. given
    8. 5.7. middle
    9. 5.8. prefix
    10. 5.9. suffix
    11. 5.10. nick
    12. 5.11. gender
    13. 5.12. bday
    14. 5.13. note
    15. 5.14. photo
    16. 5.15. avatar
    17. 5.16. homepage
    18. 5.17. keywords
    19. 5.18. quote
    20. 5.19. language
    21. 5.20. country
    22. 5.21. region
    23. 5.22. locality
    24. 5.23. area
    25. 5.24. street
    26. 5.25. building
    27. 5.26. floor
    28. 5.27. room
    29. 5.28. postalcode
    30. 5.29. pobox
    31. 5.30. pager
    32. 5.31. cell
    33. 5.32. landline
    34. 5.33. fax
    35. 5.34. message
    36. 5.35. email
    37. 5.36. lat
    38. 5.37. lon
    39. 5.38. alt
    40. 5.39. title
    41. 5.40. role
    42. 5.41. name
    43. 5.42. unit
    44. 5.43. link
    45. 5.44. logo
  6. 6. Blocking
  7. 7. Multigroups
  8. 8. RDFCard extensions
    1. 8.1. Image module
    2. 8.2. Create user modules
  9. 9. Security Considerations
  10. 10. IANA Considerations
  11. 11. Jabber Registrar Considerations
  12. 12. XML Schema
    1. 12.1. http://jabber.org/protocol/rdfcard
    2. 12.2. http://jabber.org/protocol/rdfcard#image
  13. 13. Mapping to Other Formats
  14. Notes
  15. Revision History


1. Introduction

This JEP defines metainformation about personal user.

2. History

RDF is an existing and widely-used standard for personal user information storage, somewhat like a vCard. The RDF format is defined in RDF Primer [1].

3. Use Cases

3.1 Retrieving One's RDFCard

A user MAY retrieve his or her own RDFCard by sending XML of the following form to his or her server (the 'to' attibute SHOULD NOT be included):

Example 1. Requesting One's Own RDFCard

<iq 
    from='domel@chrome.pl/Home'
    type='get'
    id='v1'>
  <query xmlns='http://jabber.org/protocol/rdfcard'/>
</iq>
    

The server SHOULD then return the RDFCard to the user:

Example 2. Receiving One's Own RDFCard

<iq 
  to='domel@chrome.pl/Home'
  type='result'
  id='v1'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:domel@chrome.pl'>
      <person>
        <family>Tomaszuk</family>
        <given>Dominik</given>
        <nick>Domel</nick> 
        <homepage rdf:resource='http://www.xhtml.b7.pl/'/> 
        <bday>1983-03-31</bday>
        <language>
          <rdf:Seq>
            <rdf:li>Pl</rdf:li>
            <rdf:li>En</rdf:li>
            <rdf:li>Ru</rdf:li>
            <rdf:li>Fr</rdf:li>
          </rdf:Seq>
        </language>
        <keywords>
          <rdf:Bag>
            <rdf:li>Jabber</rdf:li>
            <rdf:li>Mozilla</rdf:li>
            <rdf:li>Music</rdf:li>
          </rdf:Bag>
        </keywords>
      <organization>
        <name>MozillaPL.org</name>
      </organization>
      <home>
        <locality>Białystok</locality>
        <country>Poland</country>
        <email rdf:resource='mailto:dominik.tomaszuk@gmail.com'/>
      </home>
    </rdf:Description>
  </rdf:RDF>
</iq>
    

3.2 Updating One's RDFCard

A user MAY update his or her RDFCard by sending an IQ of type "set" to the server, following the format in the previous use case.

If a user attempts to perform an IQ set on another user's RDFCard, the server MUST return a <forbidden/> error.

3.3 Viewing Another User's RDFCard

A user MAY view another user's RDFCard by sending an IQ of type "get" to the other user's bare JID. A compliant server MUST return the RDFCard to the requestor and not forward the IQ to the requestee's connected resource.

Example 3. Requesting Another User's RDFCard

<iq 
  to='stpeter@jabber.org/Home'
  type='get'
  id='v2'>
  <query xmlns='http://jabber.org/protocol/rdfcard'/>
</iq>
    

The server SHOULD then return the other user's RDFCard to the requestor:

Example 4. Receiving Another User's RDFCard

<iq 
  from='stpeter@jabber.org' 
  to='domel@chrome.pl/Home' 
  type='result'
  id='v2'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:stpeter@jabber.org'>
      <person>
        <family>Saint-Andre</family>
        <given>Peter</given>
        <nick>stpeter</nick> 
        <homepage rdf:resource='http://www.jabber.org/people/stpeter.php' /> 
        <bday>1966-08-06</bday>
        <language>
          <rdf:Seq>
            <rdf:li>En</rdf:li>
          </rdf:Seq>
        </language>
        <keywords>
          <rdf:Bag>
            <rdf:li>Jabber</rdf:li>
            <rdf:li>Music</rdf:li>
            <rdf:li>Poems</rdf:li>
          </rdf:Bag>
        </keywords>
        <note> 
        More information about me is located on my 
        personal website: http://www.saint-andre.com/
        </note>
      </person>
      <organization>
        <name>Jabber Software Foundation</name>
        <title>Executive Director</title>
        <role>Patron Saint</role>
      </organization>
      <work>
        <street>1899 Wynkoop Street</street>
        <locality>Denver</locality>
        <region>CO</region>
        <postalcode>80202</postalcode>
        <country>USA</country>
        <email rdf:resource='mailto:stpeter@jabber.org'/>
      </work>
      <home>
        <locality>Denver</locality>
        <region>CO</region>
        <postalcode>80209</postalcode>
        <country>USA</country>
        <email rdf:resource='mailto:stpeter@jabber.org'/>
      </home>
    </rdf:Description>
  </rdf:RDF>
</iq>
    

4.Internationalization

Because the character data is intended to be readable by humans, the <rdf:Description/> element SHOULD possess an xml:lang attribute specifying the natural language of such character data.

4.1 Requesting RDFCard with xml:lang

A user MAY send XML with xml:lang attribute to view only one language defined in xml:lang attribute:

Example 5. Requesting One's Own RDFCard with xml:lang

<iq 
    from='domel@chrome.pl/Home'
    type='get'
    id='v3'>
  <query xmlns='http://jabber.org/protocol/rdfcard' xml:lang='en'/>
</iq>

The server SHOULD then return the RDFCard to the user:

Example 6. Receiving One's Own RDFCard (one language)

<iq 
  from='domel@chrome.pl' 
  to='domel@chrome.pl/Home' 
  type='result'
  id='v3'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:domel@chrome.pl' xml:lang='en'>
      <person>
        <family>Tomaszuk</family>
        <given>Dominik</given>
        <keywords>
          <rdf:Bag>
            <rdf:li>Music</rdf:li>
            <rdf:li>Browsers</rdf:li>
          </rdf:Bag>
        </keywords>
        <note>My homepage: http://xhtml.b7.pl/</note>
      </person>
      <home>
        <country>Poland</country>
      </home>
    </rdf:Description>
  </rdf:RDF>
</iq>

4.2 Requesting RDFCard without xml:lang

A user MAY send XML without xml:lang attribute to view all languages:

Example 7. Requesting One's Own RDFCard without xml:lang

<iq 
    to='domel@chrome.pl/Home'
    type='get'
    id='v4'>
  <query xmlns='http://jabber.org/protocol/rdfcard'/>
</iq>

The server SHOULD then return the RDFCard to the user:

Example 8. Receiving One's Own RDFCard (all languages)

<iq 
  from='domel@chrome.pl' 
  to='domel@chrome.pl/Home' 
  type='result'
  id='v4'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:domel@chrome.pl' xml:lang='en'>
      <person>
        <family>Tomaszuk</family>
        <given>Dominik</given>
        <keywords>
          <rdf:Bag>
            <rdf:li>Music</rdf:li>
            <rdf:li>Browsers</rdf:li>
          </rdf:Bag>
        </keywords>
        <note>My homepage: http://xhtml.b7.pl/</note>
      </person>
      <home>
        <country>Poland</country>
      </home>
    </rdf:Description>
    <rdf:Description rdf:about='xmpp:domel@chrome.pl' xml:lang='pl'>
      <person>
        <family>Tomaszuk</family>
        <given>Dominik</given>
        <keywords>
          <rdf:Bag>
            <rdf:li>Muzyka</rdf:li>
            <rdf:li>Przeglądarki</rdf:li>
          </rdf:Bag>
        </keywords>
        <note>Moja strona domowa: http://xhtml.b7.pl/</note>
      </person>
      <home>
        <country>Polska</country>
      </home>
    </rdf:Description>
  </rdf:RDF>
</iq>

5. Elements

5.0 rdf: RDF and rdf:Description

Element Parent
rdf:RDF none

<rdf:RDF/> is the root element. It MUST have namespace declaration.

Element Parent
rdf:Description rdf:RDF

<rdf:Description/> SHOULD have rdf:about with user JID.

Example xx. rdf: RDF and rdf:Description

<rdf:RDF 
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
  xmlns='http://jabber.org/protocol/rdfcard'>
  <rdf:Description rdf:about='xmpp:domel@chrome.pl'>    
  </rdf:Description>
</rdf:RDF>

5.1 person

Group of person informations.

Element Parent
person rdf:Description

Example xx. person

<person>
  <family>Tomaszuk</family>
</person>

5.2 home

Group of home informations.

Element Parent
home rdf:Description

Example xx. home

<home>
  <locality>Bialystok</locality>
</home>

5.3 work

Group of work informations.

Element Parent
work rdf:Description

Example xx. work

<work>
  <country>Poland</country>
</work>

5.4 organization

Group of organization informations.

Element Parent
organization rdf:Description

Example xx. organization

<organization>
  <name>MozillaPL.org</name>
</organization>

5.5 family

A family name is that part of a person's name which signifies the person's primary family association. Sometimes also called a "last name" or "surname".

Family name represents family element.

Element Parent Range Module
family person http://www.w3.org/2001/XMLSchema#string none

Example xx. family

<family>Tomaszuk</family>

5.6 given

A given name is that part of a person's name which signifies the person's primary individual identity. Sometimes also called a "first name" or (in some countries) a "Christian name".

Given name represents given element.

Element Parent Range Module
given person http://www.w3.org/2001/XMLSchema#string none

Example xx. given

<given>Dominik</given>

5.7 middle

A middle name is that part of a person's name which signifies the person's secondary individual identity. Sometimes also called a "middle initial".

Middle name represents middle element.

Element Parent Range Module
middle person http://www.w3.org/2001/XMLSchema#string none

Example xx. middle

<middle>Peter</middle>

5.8 prefix

A name prefix is that part of a person's name which prepends the person's full name (e.g., Mr or Dr). Sometimes also called an "honorific" or "title".

Name prefix represents prefix element.

Element Parent Range Module
prefix person http://www.w3.org/2001/XMLSchema#string none

Example xx. prefix

<prefix>Dr</prefix>

5.9 suffix

A name suffix is that part of a person's name which is appended to the person's full name (e.g., Jr or Esq).

Name suffix represents suffix element.

Element Parent Range Module
suffix person http://www.w3.org/2001/XMLSchema#string none

Example xx. suffix

<suffix>Jr</suffix>

5.10 nick

A nick is a familiar name by which a person is called in informal contexts. Sometimes also called an "alias" or "nickname".

Nick represents nick element.

Element Parent Range Module
nick person http://www.w3.org/2001/XMLSchema#string none

Example xx. nick

<nick>Domel</nick> 

5.11 gender

Gender is the self-defined gender of a person (this is not limited to "male" and "female", although those are the expected values in most instances). Sometimes also called "sex" or "gender identification".

Gender represents gender element.

Element Parent Range Module
gender person http://www.w3.org/2001/XMLSchema#string none

Example xx. gender

<genter>male</genter> 

5.12 bday

A birthday is the date (day, month, year) in which a person was born.

Birthday represents bday element.

Element Parent Range Module
bday person http://www.w3.org/2001/XMLSchema#date none

Value of <pager/> SHOULD be consonant with Jabber Date and Time Profiles [14].

Example xx. bday

<bday>1983-31-03</bday>

5.13 note

A note is comment and other supplemental informations which do not match to specify RDFCard elements.

Note represents note element.

Element Parent Range Module
note person http://www.w3.org/2001/XMLSchema#string none

Example xx. note

<note>My homepage: http://xhtml.b7.pl/</note>

5.14 photo

A photo provides a pictorial representation of a person. Sometimes also called a "mugshot".

Photo represents photo element.

Element Parent Range Module
photo person http://www.w3.org/2001/XMLSchema#anyURI Image module

Photos MAY be insert by data: scheme [4] or by traditional URI (for example http:// scheme) [6]. First is internal. Second is external. If the URI is external, client SHOULD download an image. If the URI is internal it SHOULD be coded in Base64 [8].

Example xx. photo

<i:photo rdf:resource="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7"/>

5.14 avatar

A avatar is a small image with user application. Sometimes also called a "buddy icon".

Avatar represents avatar element.

Element Parent Range Module
avatar person http://www.w3.org/2001/XMLSchema#anyURI Image module

Avatar MAY be insert by data: scheme [4] or by traditional URI (for example http:// scheme) [6]. First is internal. Second is external. If the URI is external, client SHOULD download an image. If the URI is internal it SHOULD be coded in Base64 [8].

Example xx. avatar

<i:avatar rdf:resource="http://example.com/av.png"/>

5.15 homepage

A homepage is personal webpage.

Homepage represents homepage element.

Element Parent Range Module
homepage person http://www.w3.org/2001/XMLSchema#anyURI none

Links SHOULD insert by traditional URI (for example http:// scheme) [6].

Example xx. homepage

<homepage rdf:resource="http://www.xhtml.b7.pl/"/> 

5.16 keywords

A keywords is self-defined area of interest.

Keywords represents keywords element.

Element Parent Range (rdf:li) Module
keywords person http://www.w3.org/2001/XMLSchema#string none

Keywords sequence is not important so <rdf:Bag/> element SHOULD be used. It MAY have more then one value.

Example 25. keywords

<keywords>
  <rdf:Bag>
    <rdf:li>Jabber</rdf:li>
    <rdf:li>Mozilla</rdf:li>
    <rdf:li>Music</rdf:li>
  </rdf:Bag>
</keywords>

5.17 quote

A quote is a phrase or saying that a person identifies with in some way.

Quote represents quote element.

Element Parent Range (rdf:li) Module
quote person http://www.w3.org/2001/XMLSchema#string none

Quote sequence is not important so <rdf:Bag/> element SHOULD be used. It MAY have more then one value.

Example xx. quote

<quote>
  <rdf:Bag>
    <rdf:li>I am large, I contain contradictions.</rdf:li>
    <rdf:li>One crowded hour of glorious life is worth an age without a name.</rdf:li>
  </rdf:Bag>
</quote>

5.18 language

A languages define which language does person know.

Languages represents languages element.

Element Parent Range (rdf:li) Module
languages person http://www.w3.org/2001/XMLSchema#language none

Languages sequence is important so <rdf:Seq/> element SHOULD be used. First language code [7] means that person know this language the best. Last means that person know this language the worst.  It MAY have more then one value.

Example xx. languages

<language>
  <rdf:Seq>
    <rdf:li>En</rdf:li>
    <rdf:li>Pl</rdf:li>
    <rdf:li>Fr</rdf:li>
  </rdf:Seq>
</language>

5.19 country

A country is the sovereign nation in which a person is located. Sometimes also called a "nation".

Country represents country element.

Element Parent Range Module
country home, work, organization http://www.w3.org/2001/XMLSchema#string none

<country/> element is the same as <country/> element from User Physical Location [5]

Example xx. country

<country>Poland</country>

5.20 region

A region is a second-level administrative unit within the nation in which a person is located. Sometimes also called a "province", "state", or "administrative area".

Region represents region element.

Element Parent Range Module
region home, work, organization http://www.w3.org/2001/XMLSchema#string none

<region/> element is the same as <region/> element from User Physical Location [5]

Example xx. region

<region>Texas</region>

5.21 locality

A locality is a defined place within the region in which a person is located. Sometimes also called a "city", "town", or "village".

Locality represents locality element.

Element Parent Range Module
locality home, work, organization http://www.w3.org/2001/XMLSchema#string none

<locality/> element is the same as <locality/> element from User Physical Location [5]

Example xx. locality

<locality>New York City</locality>

5.22 area

An area is a sub-division within the locality in which a person is located. Sometimes also called a "neighborhood", "suburb", "district", or "section".

Area represents area element.

Element Parent Range Module
area home, work, organization http://www.w3.org/2001/XMLSchema#string none

<area/> element is the same as <area/> element from User Physical Location [5]

Example xx. bcbcvb

<area>Manhattan</area>

5.23 street

A street is the street address. Sometimes also called a "thoroughfare".

Street represents street element.

Element Parent Range Module
street home, work, organization http://www.w3.org/2001/XMLSchema#string none

Example xx. street

<street>Fifth Avenue</street>

5.24 building

A building is the name for a specific structure on a street or within an area.

Building represents building element.

Element Parent Range Module
building work, organization http://www.w3.org/2001/XMLSchema#string none

<building/> element is the same as <building/> element from User Physical Location [5]

Example xx. building

<building>Empire State Building</building>

5.25 floor

A floor is a named or numbered floor or level within a building. Sometimes also called a "level", "block", or "suite".

Floor represents floor element.

Element Parent Range Module
floor work, organization http://www.w3.org/2001/XMLSchema#string none

<floor/> element is the same as <floor/> element from User Physical Location [5]

Example xx. floor

<floor>58</floor>

5.26 room

A room is a named or numbered subdivision of a floor. Sometimes also called a "unit" or "apartment".

Room represents room element.

Element Parent Range Module
room work, organization http://www.w3.org/2001/XMLSchema#string none

<room/> element is the same as <room/> element from User Physical Location [5]

Example xx. room

<room>584</room>

5.27 postalcode

A postal code is a set of numeric or alphanumeric characters used to identify an area for postal delivery. Sometimes also called a "ZIP code".

Postal code represents postalcode element.

Element Parent Range Module
postalcode home, work, organization http://www.w3.org/2001/XMLSchema#string none

<postalcode/> element is the same as <postalcode/> element from User Physical Location [5]

Example xx. postalcode

<postalcode>10002</postalcode>

5.28 pobox

A postal box is a number for physical mail delivery.

Postal box represents pobox element.

Element Parent Range Module
pobox home, work, organization http://www.w3.org/2001/XMLSchema#string none

Example xx. pobox

<pobox>773</pobox>

5.29 pager

A pager number is a number to pager contact.

Pager number represents pager element.

Element Parent Range Module
pager home, work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Value of <pager/> SHOULD be reprezent by tel: scheme [9].

Example xx. pager

<pager rdf:resource="tel:+1-111-111-1111"/>

5.30 cell

A cell number is a number to cell contact. Sometimes also called a "mobile".

Cell number represents cell element.

Element Parent Range Module
cell home, work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Value of <cell/> SHOULD be reprezent by tel: scheme [9].

Example xx. cell

<cell rdf:resource="tel:+1-111-111-1111"/>

5.31 landline

A landline number is a number to landline contact.

Landline number represents landline element.

Element Parent Range Module
landline home, work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Value of <landline/> SHOULD be reprezent by tel: scheme [9].

Example xx. landline

<landline rdf:resource="tel:+1-111-111-1111"/>

5.32 fax

A fax number is a number to fax contact.

Fax number represents fax element.

Element Parent Range Module
fax home, work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Value of <fax/> SHOULD be reprezent by tel: scheme [9].

Example xx. fax

<fax rdf:resource="tel:+1-111-111-1111"/>

5.33 message

A message number is a number to send messages. Sometimes also called a "sms" ("Short Message Service"), or a "mms" ("Multimedia Messaging System").

Message number represents message element.

Element Parent Range Module
name home, work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Value of <message/> SHOULD be reprezent by tel: scheme [9].

Example xx. name

<message rdf:resource="tel:+1-111-111-1111"/>

5.34 email

An email address is electronic address to send mails. Sometimes also called a "mbox" or "electronic mail".

Email represents email element.

Element Parent Range Module
email home, work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Value of <email/> SHOULD be reprezent by mailto: scheme [6].

Example xx. email

<email rdf:resource="mailto:dominik.tomaszuk@gmail.com"/>

5.35 lat

Latitude is a person's latitude in relation to the equator, where positive latitude is north of the equator and negative latitude is south of the equator.

Latitude represents lat element.

Element Parent Range Module
lat home, work, organization http://www.w3.org/2001/XMLSchema#decimal none

<lat/> element is the same as <lat/> element from User Geolocation [3]

Example xx. lat

<lat>39.75477</lat>

5.36 lon

Longitude is a person's longitude in relation to the equator, where positive longitude is east of the meridian and negative longitude is west of the equator.

Longitude represents lon element.

Element Parent Range Module
lon home, work, organization http://www.w3.org/2001/XMLSchema#decimal none

<lon/> element is the same as <lon/> element from User Geolocation [3]

Example xx. lon

<lon>-104.99768</lon>

5.37 alt

Altitude is a person's height or depth in relationship to sea level, where positive altitude is meters above sea level and negative altitude is meters below sea level.

Altitude represents alt element.

Element Parent Range Module
alt home, work, organization http://www.w3.org/2001/XMLSchema#decimal none

<alt/> element is the same as <alt/> element from User Geolocation [3]

Example xx. alt

<alt>1609</alt>

5.38 title

Title is a job title or organization title. Sometimes also called a "functional position".

Title represents title element.

Element Parent Range Module
title work, organization http://www.w3.org/2001/XMLSchema#string none

Example xx. title

<title>Executive Director</title>

5.39 role

Role is a person's role in work or organization. Sometimes also called a "occupation".

Role represents role element.

Element Parent Range Module
role work, organization http://www.w3.org/2001/XMLSchema#string none

Example xx. role

<role>Programmer</role>

5.40 name

Name is a work name or organizations name.

Name represents name element.

Element Parent Range Module
name work, organization http://www.w3.org/2001/XMLSchema#string none

Example xx. name

<name>Jabber Software Foundation</name>

5.41 unit

Unit is a name of organization or work unit.

Unit represents unit element.

Element Parent Range Module
name work, organization http://www.w3.org/2001/XMLSchema#string none

Example xx. unit

<unit>marketing</unit>

5.42 link

Link is an URI to work or organization webpage. Sometimes also called a "webpage" or a "website"

Link represents link element.

Element Parent Range Module
link work, organization http://www.w3.org/2001/XMLSchema#anyURI none

Links SHOULD insert by traditional URI (for example http:// scheme) [6].

Example xx. link

<link rdf:resource="http://www.jabber.org/"/>

5.43 logo

Logo is a graphic image of a work or organization logo.

Logo represents logo element.

Element Parent Range Module
logo work, organization http://www.w3.org/2001/XMLSchema#anyURI Image module

Photos MAY be insert by data: scheme [4] or by traditional URI (for example http:// scheme) [6]. First is internal. Second is external. If the URI is external client SHOULD download an image. If the URI is internal it SHOULD be coded in Base64 [8].

Example xx. link

<i:logo rdf:resource="http://www.jabber.org/images/jsf-banner.png"/>

6. Blocking RDFCard

A user MAY define one or more privacy lists, which are stored by the user's server. Each <list/> element contains one or more rules in the form of <item/> elements, and each <item/> element uses attributes to define a privacy rule type, a specific value to which the rule applies, the relevant action, and the place of the item in the processing order.

Example 9. Sending privacy lists

<iq
  from='stpeter@jabber.org' 
  type='set'
  id='v5'>
  <query xmlns='jabber:iq:privacy'>
    <list name='block'>
      <item type='subscribe'
        value='none'
        action='deny'
        order='1'/>
    </list>
  </query>
</iq>

Example 10. Sending RDFCard reference to privacy lists

<iq 
  from='stpeter@jabber.org' 
  type='set'
  id='v5'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:stpeter@jabber.org'>
      <person>
        <family>Saint-Andre</family>
        <given>Peter</given>
        <nick>stpeter</nick> 
      </person>
      <work>
        <street access='block'>1899 Wynkoop Street</street>
        <locality>Denver</locality>
        <region>CO</region>
        <postalcode>80202</postalcode>
        <country>USA</country>
        <email access='block' rdf:resource='mailto:stpeter@jabber.org'/>
      </work>
    </rdf:Description>
  </rdf:RDF>
</iq>

When user do not have subscription:

Example 11. Receiving Another User's RDFCard without blocking information

<iq
  from='stpeter@jabber.org' 
  to='domel@chrome.pl/Home' 
  type='result'
  id='v5'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:stpeter@jabber.org'>
      <person>
        <family>Saint-Andre</family>
        <given>Peter</given>
        <nick>stpeter</nick> 
      </person>
      <work>
        <locality>Denver</locality>
        <region>CO</region>
        <postalcode>80202</postalcode>
        <country>USA</country>
      </work>
    </rdf:Description>
  </rdf:RDF>
</iq>

7. Multigrouping

When we define more then one home, work, or organization we SHOULD add to this elements rdf:ID attribute.

Example 12. Define more then one organization

<iq 
  to='domel@chrome.pl/Home'
  type='result'
  id='v6'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://jabber.org/protocol/rdfcard'>
    <rdf:Description rdf:about='xmpp:domel@chrome.pl'>
      <person>
        <family>Tomaszuk</family>
        <given>Dominik</given>
        <nick>Domel</nick> 
      </person>
      <organization rdf:ID='moz'>
        <name>MozillaPL.org</name>
      </organization>
      <organization rdf:ID='jab'>
        <name>JabberPL.org</name>
      </organization>
      <home>
        <locality>Białystok</locality>
        <country>Poland</country>
      </home>
    </rdf:Description>
  </rdf:RDF>
</iq>

8. RDFCard extensions

RDFCard MAY be expand to others elements. Modules MUST have own namespace.

8.1 Image module

Image module MAY be supported. Image module consists of <photo/>, <avatar/> and <logo/>.

Example 1. Requesting One's Own RDFCard with Image Module

<iq 
    from='domel@chrome.pl/Home'
    type='get'
    id='v7'>
  <query xmlns='http://jabber.org/protocol/rdfcard'
   xmlns:i='http://jabber.org/protocol/rdfcard#image'/>
</iq>
    

The server SHOULD then return the RDFCard to the user:

Example 2. Receiving One's Own RDFCard with Image Module

<iq 
  to='domel@chrome.pl/Home'
  type='result'
  id='v7'>
  <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
   xmlns='http://jabber.org/protocol/rdfcard'
   xmlns:i='http://jabber.org/protocol/rdfcard#image'>
    <rdf:Description rdf:about='xmpp:domel@chrome.pl'>
      <person>
        <family>Tomaszuk</family>
        <given>Dominik</given>
        <nick>Domel</nick> 
        <homepage rdf:resource='http://www.xhtml.b7.pl/'/> 
        <bday>1983-03-31</bday>
        <i:photo rdf:resource='http://www.example.com/photo.png'/>
      </person>
    </rdf:Description>
  </rdf:RDF>
</iq>

8.2 Create user modules

User can expand RDFCard to own but support is OPTIONAL.

9. Security Considerations

There are no security features or concerns related to this proposal.

10. IANA Considerations

This JEP requires no interaction with the Internet Assigned Numbers Authority (IANA) [2].

11. Jabber Registrar Considerations

The Jabber Registrar [10] shall include 'http://jabber.org/protocol/rdfcard' and 'http://jabber.org/protocol/rdfcard#image' in its registry of protocol namespaces.

12. XML Schema

12.1 http://jabber.org/protocol/rdfcard

<?xml version='1.0' encoding='UTF-8'?>

<xs:schema 
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    targetNamespace='http://jabber.org/protocol/rdfcard' 
    xmlns='http://jabber.org/protocol/rdfcard'
    elementFormDefault='qualified'>

  <xs:annotation>
    <xs:documentation>
      The protocol documented by this schema is defined in JEP-0xxx.
    </xs:documentation>
  </xs:annotation>

  TBD
</xs:schema> 

12.2 http://jabber.org/protocol/rdfcard#image

<?xml version='1.0' encoding='UTF-8'?>

<xs:schema 
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    targetNamespace='http://jabber.org/protocol/rdfcard#image' 
    xmlns='http://jabber.org/protocol/rdfcard#image'
    elementFormDefault='qualified'>

  <xs:annotation>
    <xs:documentation>
      The protocol documented by this schema is defined in JEP-0xxx.
    </xs:documentation>
  </xs:annotation>

  TBD
</xs:schema> 

13. Mapping to Other Formats

There are many XML data formats for physical location, address information or person information. It is beyond the scope of this JEP to provide a mapping from the extension defined herein to every such format. However, it would be valuable to provide a mapping from the Jabber/XMPP format to the formats used in other presence or extended presence protocols.

Table 1: Mapping RDFCard to vCard XML, FOAF [12] and xNAL [13]

Jabber/XMPP vCard XML FOAF 0.1 xNL and xAL
family FAMILY family_name/surname LastName
given GIVEN first_name/givenname FirstName
middle MIDDLE   MiddleName
prefix PREFIX title Title
suffix SUFFIX   GeneralSuffix
nick NICKNAME nick Alias
gender   gender  
bday BDAY    
note NOTE    
photo PHOTO depiction/img  
homepage URL homepage  
keywords   topic_interest  
quote      
languages      
country CTRY   CountryName
region REGION   AdministrativeAreaName
locality LOCALITY   LocalityName
area     DependentLocalityName
street STREET   ThoroughfareName
building EXTADD   BuildingName
floor EXTADD   SubPremiseNumber
room EXTADD   SubPremiseNumber
postalcode PCODE   PostalCodeNumber
pobox POBOX   PostBoxNumber
pager PAGER phone  
cell CELL phone  
landline   phone  
fax FAX phone  
message   phone  
email EMAIL mbox  
lat LAT    
lon LON    
alt      
title TITLE    
role ROLE    
name ORGNAME    
unit ORGUNIT    
link URL workplaceHomepage/schoolHomepage  
logo LOGO logo  

 


Notes

1. RDF Primer <http://www.w3.org/TR/rdf-primer/>. For further information, see <http://www.w3.org/RDF/>

2. The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols, such as port numbers and URI schemes. For further information, see <http://www.iana.org/>.

3. JEP-0080: User Geolocation <http://www.jabber.org/jeps/jep-0080.html>.

4. RFC 2397: "data" URL scheme <www.ietf.org/rfc/rfc2397.txt>.

5. JEP-0112: User Physical Location <http://www.jabber.org/jeps/jep-0112.html>.

6. RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax <http://www.ietf.org/rfc/rfc2396.txt>.

7. ISO 639: Language Codes. See <http://www.w3.org/WAI/ER/IG/ert/iso639.htm>

8. RFC 3548: The Base16, Base32, and Base64 Data Encodings <http://www.ietf.org/rfc/rfc3548.txt>.

9. RFC 3966: The tel URI for Telephone Numbers <http://www.ietf.org/rfc/rfc3966.txt>.

10. The Jabber Registrar maintains a list of reserved Jabber protocol namespaces as well as registries of parameters used in the context of protocols approved by the Jabber Software Foundation. For further information, see <http://www.jabber.org/registrar/>.

11. XML Schema Part 2: Datatypes <http://www.w3.org/TR/xmlschema-2/>.

12. Friend of a Friend (FOAF) 0.1 <http://xmlns.com/foaf/0.1/>.

13. Extensible Name and Address Language <http://xml.coverpages.org/xnal.html>. For further information, see <http://www.oasis-open.org/>.

14. JEP-0082: Jabber Date and Time Profiles <http://www.jabber.org/jeps/jep-0082.html>.

 


Revision History

Version 0.0.2 (2005-02-06)

New elements and protocol update. (ddt)

Version 0.0.1 (2004-12-04)

Initial version. (ddt)