fyi: latest draft of Portable Contacts spec mentions OpenSocial alignment

4 views
Skip to first unread message

Joseph Smarr

unread,
Oct 10, 2008, 2:38:38 PM10/10/08
to opensocial-an...@googlegroups.com
Hi everyone, I just wanted to let you know that we've pushed a rev to the Portable Contacts spec, which fixes some typos, adds some clarification (e.g. a full XML example), and most importantly, adds a statement of intent to remain compatible with OpenSocial RESTful Protocol, i.e. the work we did to align the overlapping portions of our two specs. You can see the latest spec at http://portablecontacts.net/draft-spec.html and here's the relevant portion:

Appendix B.  Compatibility with OpenSocial

This version of the Portable Contacts specification is currently wire-compatible with the overlapping portion of the OpenSocial RESTful Protocol version 0.8.1 [OpenSocial] (Panzer, J., "OpenSocial 0.8.1 RESTful Protocol Specification," .). Specifically, any compliant OpenSocial RESTful Protocol 0.8.1 Provider is also a compliant Portable Contacts Provider, because they are specified to use the same Authorization methods (OAuth), Additional Path Information, Query Parameters, and Contact Schema. The OpenSocial and Portable Contacts communities chose to wire-align our respective specs in order to maximize widespread adoption of a single API for accessing people data.

It is our intention to maintain this compatibility going forward, so long as it is feasible, and so long as the changes required are compatible with the Goals and Approach of this spec. Although Portable Contacts is an independent spec, with a more limited scope than OpenSocial, any proposed changes to either this Portable Contacts spec or the OpenSocial RESTful Protocol should be considered in the context of both communities, and we should strive not to break compatibility unless it is truly necessary, e.g. if the goals of the two communities diverge significantly in the future.


I hope everyone is happy with the language we chose, but please let me know if you think it should be changed. I think it would be great to add similar language to the OpenSocial RESTful Protocol spec as well, so anyone looking at either spec knows that it's "not an island", and will be encouraged to work with both communities when proposing future changes. Feel free to use the similar text or tailor it as you think would be best! :)

Thanks, js

Chris Chabot

unread,
Oct 11, 2008, 3:51:17 AM10/11/08
to opensocial-an...@googlegroups.com
LGTM

John Panzer

unread,
Oct 15, 2008, 7:20:03 PM10/15/08
to opensocial-an...@googlegroups.com
Sounds fine, and I think that parallel language in the OpenSocial Protocol spec is needed as well.

Scott Seely

unread,
Oct 27, 2008, 3:44:41 PM10/27/08
to OpenSocial - OpenSocial and Gadgets Specification Discussion
+1

With that +1, we are now at 2 +1 votes (including submitter) for
including language to indicate that REST and PoCo are meant to be
aligned.

We have a separate thread to make alignment real-- this thread is
about adding the alignment text.

On Oct 15, 4:20 pm, "John Panzer" <jpan...@google.com> wrote:
> Sounds fine, and I think that parallel language in the OpenSocial Protocol
> spec is needed as well.
>
> On Fri, Oct 10, 2008 at 11:38 AM, Joseph Smarr <jsm...@gmail.com> wrote:
> > Hi everyone, I just wanted to let you know that we've pushed a rev to the
> > Portable Contacts spec, which fixes some typos, adds some clarification
> > (e.g. a full XML example), and most importantly, adds a statement of intent
> > to remain compatible with OpenSocial RESTful Protocol, i.e. the work we did
> > to align the overlapping portions of our two specs. You can see the latest
> > spec athttp://portablecontacts.net/draft-spec.htmland here's the
> > relevant portion:
>
> > Appendix B.  Compatibility with OpenSocial
>
> > This version of the Portable Contacts specification is currently
> > wire-compatible with the overlapping portion of the OpenSocial RESTful
> > Protocol version 0.8.1 [OpenSocial] (Panzer, J., "OpenSocial 0.8.1 RESTful
> > Protocol Specification," .)<http://portablecontacts.net/draft-spec.html#OpenSocial>.
> > Specifically, *any compliant OpenSocial RESTful Protocol 0.8.1 Provider is
> > also a compliant Portable Contacts Provider*, because they are specified

Max Engel

unread,
Oct 27, 2008, 6:08:37 PM10/27/08
to OpenSocial - OpenSocial and Gadgets Specification Discussion
+1

On Oct 27, 12:44 pm, Scott Seely <sse...@myspace.com> wrote:
> +1
>
> With that +1, we are now at 2 +1 votes (including submitter) for
> including language to indicate that REST and PoCo are meant to be
> aligned.
>
> We have a separate thread to make alignment real-- this thread is
> about adding the alignment text.
>
> On Oct 15, 4:20 pm, "John Panzer" <jpan...@google.com> wrote:
>
> > Sounds fine, and I think that parallel language in the OpenSocial Protocol
> > spec is needed as well.
>
> > On Fri, Oct 10, 2008 at 11:38 AM, Joseph Smarr <jsm...@gmail.com> wrote:
> > > Hi everyone, I just wanted to let you know that we've pushed a rev to the
> > > Portable Contacts spec, which fixes some typos, adds some clarification
> > > (e.g. a full XML example), and most importantly, adds a statement of intent
> > > to remain compatible with OpenSocial RESTful Protocol, i.e. the work we did
> > > to align the overlapping portions of our two specs. You can see the latest
> > > spec athttp://portablecontacts.net/draft-spec.htmlandhere's the

Max Engel

unread,
Oct 27, 2008, 6:08:44 PM10/27/08
to OpenSocial - OpenSocial and Gadgets Specification Discussion
+1

On Oct 27, 12:44 pm, Scott Seely <sse...@myspace.com> wrote:
> +1
>
> With that +1, we are now at 2 +1 votes (including submitter) for
> including language to indicate that REST and PoCo are meant to be
> aligned.
>
> We have a separate thread to make alignment real-- this thread is
> about adding the alignment text.
>
> On Oct 15, 4:20 pm, "John Panzer" <jpan...@google.com> wrote:
>
> > Sounds fine, and I think that parallel language in the OpenSocial Protocol
> > spec is needed as well.
>
> > On Fri, Oct 10, 2008 at 11:38 AM, Joseph Smarr <jsm...@gmail.com> wrote:
> > > Hi everyone, I just wanted to let you know that we've pushed a rev to the
> > > Portable Contacts spec, which fixes some typos, adds some clarification
> > > (e.g. a full XML example), and most importantly, adds a statement of intent
> > > to remain compatible with OpenSocial RESTful Protocol, i.e. the work we did
> > > to align the overlapping portions of our two specs. You can see the latest
> > > spec athttp://portablecontacts.net/draft-spec.htmlandhere's the

Maxwell Newbould

unread,
Oct 27, 2008, 6:31:21 PM10/27/08
to opensocial-an...@googlegroups.com

+1

Dan Peterson

unread,
Oct 28, 2008, 12:57:18 AM10/28/08
to opensocial-an...@googlegroups.com
+1

Ian Boston

unread,
Oct 28, 2008, 2:27:51 AM10/28/08
to opensocial-an...@googlegroups.com
Jospeh,
+1, but I have a question.

I believe that the overlapping JSON part of the 0.8.1 wire spec is
compatible, but AFAICT the XML part of the same region of the spec is
not, as the XSD that is published does not map to the PC XSD (as we
discussed earlier).

So,

Are we able to post publication fix the OS 0.8.1 XSD so that it does
match ?

If we can't then perhaps there needs to be a modification to the
statement .

I would dearly love to get a fixed XSD for OS 0.8.1, then I can get
on with finalizing the implementation in Shindig and be able to
conform to the Appendix B statement.

Ian

Joseph Smarr

unread,
Oct 28, 2008, 10:23:35 AM10/28/08
to opensocial-an...@googlegroups.com
Yeah, I believe the lack of alignment of the XML schema is a bug on OpenSocial's side, and should be fixed. Given that the intent was to align the specs for 0.8.1, and given that we have agreement on what the correct schema should be (i.e. the one described in the current Portable Contacts spec), I don't think we should wait to correct this issue on OpenSocial's side, esp. since it just happened via a communication mixup and nothing intentional.
 
Thanks, js

Scott Seely

unread,
Oct 28, 2008, 12:01:01 PM10/28/08
to opensocial-an...@googlegroups.com
This item has 5 +1 votes and no -1 votes. Marking the item as accepted.


-----Original Message-----
From: opensocial-an...@googlegroups.com
[mailto:opensocial-an...@googlegroups.com] On Behalf Of Ian
Boston
Sent: Monday, October 27, 2008 11:28 PM
To: opensocial-an...@googlegroups.com
Subject: [opensocial-and-gadgets-spec] Re: fyi: latest draft of Portable
Contacts spec mentions OpenSocial alignment


Ian Boston

unread,
Oct 28, 2008, 2:15:09 PM10/28/08
to opensocial-an...@googlegroups.com
Here is a modified xsd, based on the 0.8.1 version that I think come
somewhere closer, there are quite a lot of elements that I am not
certain should be there so I have brought them to the top.

Please ignore the list.container element as this is just for my
testing.

Ian

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://ns.opensocial.org/2008/opensocial"
elementFormDefault="qualified" targetNamespace="http://
ns.opensocial.org/2008/opensocial"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--
the following element allows the tests to pass validation, its is not
part of the official opensocial xsd
-->
<xs:element name="list.container" type="tns:list.container" />
<xs:complexType name="list.container">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="person" type="tns:person" />
<xs:element name="group" type="tns:group" />
<xs:element name="account" type="tns:account" />
<xs:element name="name" type="tns:name" />
<xs:element name="appdataEntry" type="tns:appdataEntry" />
<xs:element name="appdata" type="tns:appdata" />
<xs:element name="ActivityCollection" type="tns:ActivityCollection" />
<xs:element name="AddressCollection" type="tns:AddressCollection" />
<xs:element name="CreateActivityPriority"
type="tns:CreateActivityPriority" />
<xs:element name="CreateActivityPriorityType"
type="tns:CreateActivityPriorityType" />
<xs:element name="Container" type="tns:Container" />
<xs:element name="EmailCollection" type="tns:EmailCollection" />
<xs:element name="Environment" type="tns:Environment" />
<xs:element name="EnvironmentType" type="tns:EnvironmentType" />
<xs:element name="EscapeType" type="tns:EscapeType" />
<xs:element name="EscapeTypeType" type="tns:EscapeTypeType" />
<xs:element name="GroupCollection" type="tns:GroupCollection" />
<xs:element name="LookingFor" type="tns:LookingFor" />
<xs:element name="LookingForType" type="tns:LookingForType" />
<xs:element name="Message" type="tns:Message" />
<xs:element name="MediaItemCollection"
type="tns:MediaItemCollection" />
<xs:element name="MessageType" type="tns:MessageType" />
<xs:element name="MessageTypeType" type="tns:MessageTypeType" />
<xs:element name="OrganizationCollection"
type="tns:OrganizationCollection" />
<xs:element name="PhoneCollection" type="tns:PhoneCollection" />
<xs:element name="PersonCollection" type="tns:PersonCollection" />
<xs:complexType name="ActivityCollection">
<xs:all>
<xs:element minOccurs="0" maxOccurs="unbounded" name="activities"
type="tns:Activity" />
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="Activity">
<xs:all>
<xs:element minOccurs="0" name="appId" type="xs:string" />
<xs:element minOccurs="0" name="body" type="xs:string" />
<xs:element minOccurs="0" name="bodyId" type="xs:string" />
<xs:element minOccurs="0" name="externalId" type="xs:string" />
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="mediaItems"
type="tns:MediaItem" />
<xs:element minOccurs="0" name="postedTime" type="xs:long" />
<xs:element minOccurs="0" name="priority" type="xs:double" />
<xs:element minOccurs="0" name="streamFaviconUrl" type="xs:string" />
<xs:element minOccurs="0" name="streamSourceUrl" type="xs:string" />
<xs:element minOccurs="0" name="streamTitle" type="xs:string" />
<xs:element minOccurs="0" name="streamUrl" type="xs:string" />
<xs:element minOccurs="0" name="templateParams"
type="tns:ActivityTemplateParams" />
<xs:element minOccurs="0" name="title" type="xs:string" />
<xs:element minOccurs="0" name="titleId" type="xs:string" />
<xs:element minOccurs="0" name="url" type="xs:string" />
<xs:element minOccurs="0" name="userId" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="MediaItem">
<xs:all>
<xs:element minOccurs="0" name="mimeType" type="xs:string" />
<xs:element minOccurs="0" name="type" type="tns:MediaItemType" />
<xs:element minOccurs="0" name="url" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:simpleType name="MediaItemType">
<xs:restriction base="xs:string">
<xs:enumeration value="AUDIO" />
<xs:enumeration value="IMAGE" />
<xs:enumeration value="VIDEO" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ActivityTemplateParams">
<xs:all>
<xs:element minOccurs="0" name="PersonKey" type="xs:string" />
<xs:element minOccurs="0" name="PersonKey.DisplayName"
type="xs:string" />
<xs:element minOccurs="0" name="PersonKey.Id" type="xs:string" />
<xs:element minOccurs="0" name="PersonKey.ProfileUrl"
type="xs:string" />
<xs:element minOccurs="0" name="person" type="tns:person" />
</xs:all>
</xs:complexType>
<xs:complexType name="person">
<xs:all>
<xs:element minOccurs="0" name="aboutMe" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="activities"
type="tns:Activity" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="accounts"
type="tns:account" />
<xs:element minOccurs="0" name="anniversary" type="xs:dateTime" />
<xs:element minOccurs="0" name="birthday" type="xs:dateTime" />
<xs:element minOccurs="0" name="bodyType" type="tns:BodyType" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="books"
type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="cars"
type="xs:string" />
<xs:element minOccurs="0" name="children" type="xs:string" />
<xs:element minOccurs="0" name="connected" type="tns:Presence" />
<xs:element minOccurs="0" name="currentLocation"
type="tns:Address" />
<xs:element minOccurs="0" name="displayName" type="xs:string" />
<xs:element minOccurs="0" name="drinker" type="tns:Drinker" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="emails"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" name="ethnicity" type="xs:string" />
<xs:element minOccurs="0" name="fashion" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="food"
type="xs:string" />
<xs:element minOccurs="0" name="gender" type="xs:string" />
<xs:element minOccurs="0" name="happiestWhen" type="xs:string" />
<xs:element minOccurs="0" name="hasApp" type="xs:boolean" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="heroes"
type="xs:string" />
<xs:element minOccurs="0" name="humor" type="xs:string" />
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="ims"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="interests"
type="xs:string" />
<xs:element minOccurs="0" name="jobInterests" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded"
name="languagesSpoken"
type="xs:string" />
<xs:element minOccurs="0" name="livingArrangement"
type="xs:string" />
<xs:element minOccurs="0" name="lookingFor" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="movies"
type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="music"
type="xs:string" />
<xs:element minOccurs="0" name="name" type="tns:name" />
<xs:element minOccurs="0" name="nickname" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="organizations"
type="tns:Organization" />
<xs:element minOccurs="0" name="pets" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="photos"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="phoneNumbers"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" name="politicalViews" type="xs:string" />
<xs:element minOccurs="0" name="preferredUsername"
type="xs:string" />
<xs:element minOccurs="0" name="profileSong" type="tns:Url" />
<xs:element minOccurs="0" name="profileUrl" type="xs:string" />
<xs:element minOccurs="0" name="profileVideo" type="tns:Url" />
<xs:element minOccurs="0" name="published" type="xs:dateTime" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="quotes"
type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="relationships"
type="xs:string" />
<xs:element minOccurs="0" name="relationshipStatus"
type="xs:string" />
<xs:element minOccurs="0" name="religion" type="xs:string" />
<xs:element minOccurs="0" name="romance" type="xs:string" />
<xs:element minOccurs="0" name="scaredOf" type="xs:string" />
<xs:element minOccurs="0" name="sexualOrientation"
type="xs:string" />
<xs:element minOccurs="0" name="smoker" type="tns:Smoker" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="sports"
type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="tags"
type="xs:string" />
<xs:element minOccurs="0" name="thumbnailUrl" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="turnOffs"
type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="turnOns"
type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="tvShows"
type="xs:string" />
<xs:element minOccurs="0" name="updated" type="xs:dateTime" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="urls"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" name="utcOffset" type="xs:int" />
</xs:all>
</xs:complexType>
<xs:complexType name="group">
<xs:all>
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" name="title" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="appdataEntry">
<xs:all>
<xs:element minOccurs="1" name="key" type="xs:string" />
<xs:element minOccurs="1" name="value" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="appdata">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="entry"
type="tns:appdataEntry" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupCollection">
<xs:all>
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="groups"
type="tns:group" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="BodyType">
<xs:all>
<xs:element minOccurs="0" name="build" type="xs:string" />
<xs:element minOccurs="0" name="eyeColor" type="xs:string" />
<xs:element minOccurs="0" name="hairColor" type="xs:string" />
<xs:element minOccurs="0" name="height" type="xs:double" />
<xs:element minOccurs="0" name="weight" type="xs:double" />
</xs:all>
</xs:complexType>
<xs:complexType name="Address">
<xs:all>
<xs:element minOccurs="0" name="country" type="xs:string" />
<xs:element minOccurs="0" name="extendedAddress" type="xs:string" />
<xs:element minOccurs="0" name="latitude" type="xs:double" />
<xs:element minOccurs="0" name="locality" type="xs:string" />
<xs:element minOccurs="0" name="longitude" type="xs:double" />
<xs:element minOccurs="0" name="poBox" type="xs:string" />
<xs:element minOccurs="0" name="postalCode" type="xs:string" />
<xs:element minOccurs="0" name="primary" type="xs:boolean" />
<xs:element minOccurs="0" name="region" type="xs:string" />
<xs:element minOccurs="0" name="streetAddress" type="xs:string" />
<xs:element minOccurs="0" name="type" type="xs:string" />
<xs:element minOccurs="0" name="formatted" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="Drinker">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:DrinkerType" />
</xs:all>
</xs:complexType>
<xs:simpleType name="DrinkerType">
<xs:restriction base="xs:string">
<xs:enumeration value="HEAVILY" />
<xs:enumeration value="NO" />
<xs:enumeration value="OCCASIONALLY" />
<xs:enumeration value="QUIT" />
<xs:enumeration value="QUITTING" />
<xs:enumeration value="REGULARLY" />
<xs:enumeration value="SOCIALLY" />
<xs:enumeration value="YES" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PluralPersonField">
<xs:all>
<xs:element minOccurs="0" name="value" type="xs:string" />
<xs:element minOccurs="0" name="type" type="xs:string" />
<xs:element minOccurs="0" name="primary" type="xs:boolean" />
</xs:all>
</xs:complexType>
<xs:complexType name="account">
<xs:all>
<xs:element minOccurs="0" name="domain" type="xs:string" />
<xs:element minOccurs="0" name="primary" type="xs:boolean" />
<xs:element minOccurs="0" name="userid" type="xs:string" />
<xs:element minOccurs="0" name="username" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="Organization">
<xs:all>
<xs:element minOccurs="0" name="department" type="xs:string" />
<xs:element minOccurs="0" name="description" type="xs:string" />
<xs:element minOccurs="0" name="endDate" type="xs:dateTime" />
<xs:element minOccurs="0" name="location" type="tns:Address" />
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="startDate" type="xs:dateTime" />
<xs:element minOccurs="0" name="type" type="xs:string" />
<xs:element minOccurs="0" name="title" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="name">
<xs:all>
<xs:element minOccurs="0" name="additionalName" type="xs:string" />
<xs:element minOccurs="0" name="familyName" type="xs:string" />
<xs:element minOccurs="0" name="givenName" type="xs:string" />
<xs:element minOccurs="0" name="honorificPrefix" type="xs:string" />
<xs:element minOccurs="0" name="formatted" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="Presence">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:PresenceType" />
</xs:all>
</xs:complexType>
<xs:simpleType name="PresenceType">
<xs:restriction base="xs:string">
<xs:enumeration value="AWAY" />
<xs:enumeration value="CHAT" />
<xs:enumeration value="DND" />
<xs:enumeration value="OFFLINE" />
<xs:enumeration value="ONLINE" />
<xs:enumeration value="XA" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Url">
<xs:all>
<xs:element minOccurs="0" name="address" type="xs:string" />
<xs:element minOccurs="0" name="linkText" type="xs:string" />
<xs:element minOccurs="0" name="type" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="Smoker">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:SmokerType" />
</xs:all>
</xs:complexType>
<xs:simpleType name="SmokerType">
<xs:restriction base="xs:string">
<xs:enumeration value="HEAVILY" />
<xs:enumeration value="NO" />
<xs:enumeration value="OCCASIONALLY" />
<xs:enumeration value="QUIT" />
<xs:enumeration value="QUITTING" />
<xs:enumeration value="REGULARLY" />
<xs:enumeration value="SOCIALLY" />
<xs:enumeration value="YES" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="UrlCollection">
<xs:all>
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="urls"
type="tns:Url" />
</xs:all>
</xs:complexType>
<xs:complexType name="CreateActivityPriority">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key"
type="tns:CreateActivityPriorityType" />
</xs:all>
</xs:complexType>
<xs:simpleType name="CreateActivityPriorityType">
<xs:restriction base="xs:string">
<xs:enumeration value="HIGH" />
<xs:enumeration value="LOW" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="EscapeType">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:EscapeTypeType" />
</xs:all>
</xs:complexType>
<xs:simpleType name="EscapeTypeType">
<xs:restriction base="xs:string">
<xs:enumeration value="HTML_ESCAPE" />
<xs:enumeration value="NONE" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PhoneCollection">
<xs:all>
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="phones"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="EmailCollection">
<xs:all>
<xs:element minOccurs="0" maxOccurs="unbounded" name="emails"
type="tns:PluralPersonField" />
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="Message">
<xs:all>
<xs:element minOccurs="0" name="body" type="xs:string" />
<xs:element minOccurs="0" name="bodyId" type="xs:string" />
<xs:element minOccurs="0" name="title" type="xs:string" />
<xs:element minOccurs="0" name="titleId" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="MediaItemCollection">
<xs:all>
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="mediaItems"
type="tns:MediaItem" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:simpleType name="EnvironmentType">
<xs:restriction base="xs:string">
<xs:enumeration value="ACTIVITY" />
<xs:enumeration value="ADDRESS" />
<xs:enumeration value="BODY_TYPE" />
<xs:enumeration value="EMAIL" />
<xs:enumeration value="FILTER_TYPE" />
<xs:enumeration value="MEDIAITEM" />
<xs:enumeration value="MESSAGE" />
<xs:enumeration value="MESSAGE_TYPE" />
<xs:enumeration value="NAME" />
<xs:enumeration value="ORGANIZATION" />
<xs:enumeration value="PERSON" />
<xs:enumeration value="PHONE" />
<xs:enumeration value="SORTORDER" />
<xs:enumeration value="URL" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="MessageType">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:MessageTypeType" />
</xs:all>
</xs:complexType>
<xs:simpleType name="MessageTypeType">
<xs:restriction base="xs:string">
<xs:enumeration value="EMAIL" />
<xs:enumeration value="NOTIFICATION" />
<xs:enumeration value="PRIVATE_MESSAGE" />
<xs:enumeration value="PUBLIC_MESSAGE" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LookingForType">
<xs:restriction base="xs:string">
<xs:enumeration value="ACTIVITY_PARTNERS" />
<xs:enumeration value="DATING" />
<xs:enumeration value="FRIENDS" />
<xs:enumeration value="NETWORKING" />
<xs:enumeration value="RANDOM" />
<xs:enumeration value="RELATIONSHIP" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Container">
<xs:all />
</xs:complexType>
<xs:complexType name="Environment">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:EnvironmentType" />
</xs:all>
</xs:complexType>
<xs:complexType name="AddressCollection">
<xs:all>
<xs:element minOccurs="0" maxOccurs="unbounded" name="addresses"
type="tns:Address" />
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="PersonCollection">
<xs:all>
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="people"
type="tns:person" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="OrganizationCollection">
<xs:all>
<xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="organizations"
type="tns:Organization" />
<xs:element minOccurs="0" name="startIndex" type="xs:long" />
<xs:element minOccurs="0" name="totalResults" type="xs:long" />
</xs:all>
</xs:complexType>
<xs:complexType name="LookingFor">
<xs:all>
<xs:element minOccurs="0" name="displayvalue" type="xs:string" />
<xs:element minOccurs="0" name="key" type="tns:LookingForType" />
</xs:all>
</xs:complexType>
</xs:schema>

Scott Seely

unread,
Oct 28, 2008, 5:53:05 PM10/28/08
to opensocial-an...@googlegroups.com
Section 14 has been added to the restful protocol specification. The
updated draft is at

http://sites.google.com/site/opensocialdraft/Home/restful-protocol-speci
fication

Please let me know if you have any questions or concerns.

Ian Boston

unread,
Oct 29, 2008, 8:30:11 AM10/29/08
to opensocial-an...@googlegroups.com
Section 14 looks ok to me,

Just the xsd that needs updating to 14 is valid.

Ian

Joseph Smarr

unread,
Oct 29, 2008, 10:13:49 AM10/29/08
to opensocial-an...@googlegroups.com
Great to see the Portable Contacts text in there! I think it needs a few tweaks though to be completely correct. Here's my suggested edit (in red):
 
Thanks, js
 

14. Compatibility with Portable Contacts

This version of the OpenSocial RESTful protocol specification is currently wire-compatible with the Portable Contacts version 1.0 specification for the overlapping parts of OpenSocial. Specifically, any compliant OpenSocial 0.8.1 People Provider is also a compliant Portable Contacts 1.0 Provider, because they are specified to use the same Authorization methods (OAuth), Additional Path Information, Query Parameters, and Contact Schema. The OpenSocial and Portable Contacts communities chose to wire-align our respective specs in order to maximize widespread adoption of a single API for accessing people data. It is our intention to maintain this compatibility going forward, so long as it is feasible, and so long as the changes required are compatible with the Goals and Approach of this spec. Although Portable Contacts is an independent spec, with a more limited scope than OpenSocial, any proposed changes to either this OpenSocial RESTful Protocol spec or the Portable Contacts spec should be considered in the context of both communities, and we should strive not to break compatibility unless it is truly necessary, e.g. if the goals of the two communities diverge significantly in the future.

Scott Seely

unread,
Oct 29, 2008, 12:33:13 PM10/29/08
to opensocial-an...@googlegroups.com

Please recall that this text is part of the 0.9 draft. Otherwise, this looks ok.

Reply all
Reply to author
Forward
0 new messages