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.
+1
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
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>
Just the xsd that needs updating to 14 is valid.
Ian
Please recall that this text is part of the 0.9 draft. Otherwise, this looks ok.