<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:tns="http://webservices.groove.net/Groove/1.0/vCard/" elementFormDefault="qualified" targetNamespace="http://webservices.groove.net/Groove/1.0/vCard/" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <!-- 
        This is a wholehearted attempt to follow the vCard schema, but had to be modified in order
        to acheive interoperability with various tools
   -->

	<xs:element name="Read">
		<xs:complexType />
	</xs:element>

	<xs:element name="ReadResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="ReadResult" type="tns:vCard" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:complexType name="vCard">
		<xs:sequence>
			<xs:element minOccurs="0" name="Name" type="tns:Name" />
			<xs:element minOccurs="0" name="FullName" type="xs:string" />
			<xs:element minOccurs="0" name="NickName" type="xs:string" />
			<xs:element minOccurs="0" name="Url" type="xs:anyURI" />
			<xs:element name="Addresses" type="tns:AddressList" />
			<xs:element name="PhoneNumbers" type="tns:PhoneList" />
			<xs:element name="EmailAddresses" type="tns:EmailList" />
			<xs:element name="Organization" type="tns:Organization" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="vCardList">
		<xs:sequence>
			<xs:element minOccurs="0" maxOccurs="unbounded" name="vCard" type="tns:vCard" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Address">
		<xs:sequence>
			<xs:element minOccurs="0" name="PoBox" type="xs:string" />
			<xs:element minOccurs="0" name="Extended" type="xs:string" />
			<xs:element minOccurs="0" name="Street" type="xs:string" />
			<xs:element minOccurs="0" name="Locality" type="xs:string" />
			<xs:element minOccurs="0" name="Region" type="xs:string" />
			<xs:element minOccurs="0" name="PostCode" type="xs:string" />
			<xs:element minOccurs="0" name="Country" type="xs:string" />
			<xs:element minOccurs="0" name="DeliveryTypes" type="tns:DeliveryTypeList" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="AddressList">
		<xs:sequence>
			<xs:element minOccurs="0" maxOccurs="unbounded" name="Address" type="tns:Address" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Name">
		<xs:sequence>
			<xs:element minOccurs="0" name="Family" type="xs:string" />
			<xs:element minOccurs="0" name="Given" type="xs:string" />
			<xs:element minOccurs="0" name="Other" type="xs:string" />
			<xs:element minOccurs="0" name="Prefix" type="xs:string" />
			<xs:element minOccurs="0" name="Suffix" type="xs:string" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Email">
		<xs:sequence>
			<xs:element minOccurs="0" name="EmailAddress" type="xs:string" />
			<xs:element minOccurs="0" name="EmailTypes" type="tns:EmailTypeList" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="EmailList">
		<xs:sequence>
			<xs:element minOccurs="0" maxOccurs="unbounded" name="Email" type="tns:Email" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="EmailTypeList">
		<xs:sequence>
			<xs:element minOccurs="0" maxOccurs="3" name="EmailType" type="tns:EmailType" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Phone">
		<xs:sequence>
			<xs:element minOccurs="0" name="PhoneNumber" type="xs:string" />
			<xs:element minOccurs="0" name="PhoneTypes" type="tns:PhoneTypeList" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="PhoneList">
		<xs:sequence>
			<xs:element minOccurs="0" maxOccurs="unbounded" name="Phone" type="tns:Phone" />
		</xs:sequence>
	</xs:complexType>

	<xs:simpleType name="PhoneType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="home" />
			<xs:enumeration value="work" />
			<xs:enumeration value="voice" />
			<xs:enumeration value="fax" />
			<xs:enumeration value="pager" />
			<xs:enumeration value="message" />
			<xs:enumeration value="cell" />
			<xs:enumeration value="video" />
			<xs:enumeration value="bbs" />
			<xs:enumeration value="modem" />
			<xs:enumeration value="isdn" />
			<xs:enumeration value="car" />
			<xs:enumeration value="pcs" />
			<xs:enumeration value="preferred" />
		</xs:restriction>
	</xs:simpleType>

   <xs:complexType name="PhoneTypeList">
      <xs:sequence>
         <xs:element minOccurs="1" maxOccurs="14" name="PhoneType" type="tns:PhoneType" />
      </xs:sequence>
   </xs:complexType>

	<xs:complexType name="Organization">
		<xs:sequence>
			<xs:element minOccurs="0" name="Title" type="xs:string" />
			<xs:element minOccurs="0" name="Role" type="xs:string" />
         <xs:element name="OrganizationInfos" type="tns:OrganizationInfoList"/>
		</xs:sequence>
	</xs:complexType>

   <xs:complexType name="OrganizationInfo">
      <xs:sequence>
         <xs:element name="Name" type="xs:string"/>
         <xs:element name="Unit" type="xs:string"/>
      </xs:sequence>
   </xs:complexType>
   
	<xs:complexType name="OrganizationInfoList">
		<xs:sequence>
			<xs:element minOccurs="0" maxOccurs="unbounded" name="OrganizationInfo" type="tns:OrganizationInfo" />
		</xs:sequence>
	</xs:complexType>

	<xs:simpleType name="DeliveryType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="domestic" />
			<xs:enumeration value="international" />
			<xs:enumeration value="parcel" />
			<xs:enumeration value="postal" />
			<xs:enumeration value="home" />
			<xs:enumeration value="work" />
		</xs:restriction>
	</xs:simpleType>

   <xs:complexType name="DeliveryTypeList">
      <xs:sequence>
         <xs:element minOccurs="1" maxOccurs="6" name="DeliveryType" type="tns:DeliveryType" />
      </xs:sequence>
   </xs:complexType>

	<xs:simpleType name="EmailType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="internet" />
			<xs:enumeration value="x400" />
			<xs:enumeration value="preferred" />
		</xs:restriction>
	</xs:simpleType>
</xs:schema>

