<?xml version="1.0" ?>
<xs:schema id="contact"
version="2.0"
targetNamespace="http://schemas.microsoft.com/sip/types"
xmlns:tns="http://schemas.microsoft.com/sip/types"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:documentation>
Live Communications Server 2005 provides Instant Messaging
capabilities among users in an enterprise. Users can store
a list of contacts that they frequently communicate with on
the server and retrieve / manage this list from any machine
from which they log on to the service. This schema specifies
the structure of XML instances containing contact-related
data returned by the server.
The server can return two types of contact lists.
1. Full List - A full list of all contacts and their
associated groups.
2. Delta List - A list containing a subset of contacts and
associated groups that were added, modified, or deleted
from the Full List.
List (1) is returned from the server in response to a SUBSCRIBE
for the event vnd-microsoft-roaming-contact.
List (2) is returned from the server in response to any of the
SetContact, DeleteContact, DeleteGroup, or
ModifyGroup SERVICE operations.
These lists are returned by the server in NOTIFY / BENOTIFY
requests generated by the server or in the body of a 200 OK
response (also called as a "piggy-back notify").
A Full List is a list of groups followed by a list of
contacts. Groups are uniquely numbered. The particular
numbering sequence is not persisted and may vary from one
transmission to the next. Contacts are cross-referenced
against groups using group ID numbers. Contacts must be
in at least one group.
A Delta List is a list of groups that were added and / or
modified, followed by a list of contacts that were added
and / or modified, followed by a list of groups that were
deleted and finally followed by a list of contacts that
were deleted.
</xs:documentation>
</xs:annotation>
<xs:include schemaLocation="common.xsd" />
<!-- *************** Common Types *************** -->
<xs:simpleType name="groupID">
<xs:annotation>
<xs:documentation>
This is a number assigned by a server to identify a group.
This number can be uniquely used to associate a contact
with a group.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger">
<xs:minInclusive value="0" />
<xs:maxInclusive value="64" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="baseGroupList">
<xs:list itemType="groupID" />
</xs:simpleType>
<xs:simpleType name="groupList">
<xs:restriction base="baseGroupList">
<xs:maxLength value="64" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="groupName">
<xs:annotation>
<xs:documentation>
The length of this string cannot exceed 256 bytes.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:simpleType name="contactName">
<xs:annotation>
<xs:documentation>
The length of this string cannot exceed 256 bytes.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:simpleType name="externalUri">
<xs:restriction base="xs:string">
<xs:annotation>
<xs:documentation>
Any string that points to an external resource. The
server enforces that the raw representation of this
string cannot exceed 1024 bytes.
</xs:documentation>
</xs:annotation>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="contactDeltaNum">
<xs:annotation>
<xs:documentation>
The server maintains a single non-negative integer version
number for the contact / group list of every user. Anytime
the user performs an operation that modifies his
contact / group list, the version number gets incremented.
The version number is returned to the client in the contact
list allowing the client to determine if it has the most
up-to-date information and to refresh the contact / group
list if its state, as seen by the server, is out-of-sync.
If the client's delta number is out-of-sync with the server,
it can obtain the current value by subscribing to the
vnd-microsoft-roaming-contact event and looking at the
deltaNum attribute of the contactList element in the body
of the notification data. The notification data will be
received in the 200 OK response or in a separate NOTIIFY or
BENOTIFY request from the server.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger" />
</xs:simpleType>
<xs:complexType name="group">
<xs:attribute name="id" type="tns:groupID" use="required" />
<xs:attribute name="name" type="tns:groupName" use="required" />
<xs:attribute name="externalURI" type="tns:externalUri">
<xs:annotation>
<xs:documentation>
An external URI is a list of contacts that is stored
elsewhere. For example this may point to a location in an
LDAP directory.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="contactExtension">
<xs:annotation>
<xs:documentation>
This element is provided for extensibility. Any valid XML
can be stored by the client. The server enforces a limit
of 1024 bytes on the size of the element body, where the
entire element body is treated as a single string.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="contact">
<xs:sequence>
<xs:element name="contactExtension"
type="tns:contactExtension"
minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="uri" type="tns:sipURI" use="required" />
<xs:attribute name="name" type="tns:contactName" />
<xs:attribute name="groups" type="tns:groupList" default="0" />
<xs:attribute name="subscribed" type="xs:boolean"
default="true">
<xs:annotation>
<xs:documentation>
This attribute specifies whether the client subscribes
to this contact's presence.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="externalURI" type="tns:externalUri">
<xs:annotation>
<xs:documentation>
Perhaps the contact is from the Outlook address book, an
LDAP directory, or some other external source. A URL can
be stored to obtain more information about this contact.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- ********* Full List ********* -->
<xs:complexType name="fullContactList">
<xs:sequence>
<xs:element name="group" type="tns:group" minOccurs="0"
maxOccurs="64" />
<xs:element name="contact" type="tns:contact" minOccurs="0"
maxOccurs="unbounded" >
<xs:annotation>
<xs:documentation>
Although the schema allows for an unbounded number of
contacts, the administrator can configure a server to
disallow more than a certain number of contacts.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="deltaNum" type="tns:contactDeltaNum"
use="required" />
</xs:complexType>
<xs:element name="contactList" type="tns:fullContactList" />
<!-- *********** Delta List *********** -->
<xs:complexType name="deltaContactList">
<xs:choice>
<xs:element name="addedGroup" type="tns:group" />
<xs:element name="modifiedGroup" type="tns:group" />
<xs:element name="addedContact" type="tns:contact" />
<xs:element name="modifiedContact" type="tns:contact" />
<xs:element name="deletedGroup">
<xs:complexType>
<xs:attribute name="id" type="tns:groupID"
use="required" />
</xs:complexType>
</xs:element>
<xs:element name="deletedContact">
<xs:complexType>
<xs:attribute name="uri" type="tns:sipURI"
use="required" />
</xs:complexType>
</xs:element>
</xs:choice>
<xs:attribute name="deltaNum" type="tns:contactDeltaNum"
use="required" >
<xs:annotation>
<xs:documentation>
The value of this attribute is the new delta number
after the SERVICE operation was performed.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="prevDeltaNum" type="tns:contactDeltaNum"
use="required" >
<xs:annotation>
<xs:documentation>
The value of this attribute equals the value of the
delta number specified in the SERVICE operation.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:element name="contactDelta" type="tns:deltaContactList" />
</xs:schema>