Schema:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- didn't place this in the Indivo namespace because it's not medical payload -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Principal">
<xs:sequence>
<xs:element name="fullname" type="xs:string" minOccurs="1" maxOccurs="1" />
</xs:sequence>
<!-- e.g. "fhh@apps.indivo.org" -->
<xs:attribute name="id" type="xs:string" use="required" />
<!-- e.g. "userapp" or "account" or "adminapp" -->
<xs:attribute name="type" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="Relation">
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute name="count" type="xs:integer" use="required" />
</xs:complexType>
<xs:element name="Document">
<xs:complexType>
<xs:sequence>
<xs:element name="createdAt" type="xs:dateTime" minOccurs="1" maxOccurs="1" />
<xs:element name="creator" type="Principal" minOccurs="1" maxOccurs="1" />
<!-- if suppressedAt is non-null, then suppressor should be present -->
<xs:element name="suppressedAt" type="xs:dateTime" minOccurs="0" maxOccurs="1" />
<xs:element name="suppressor" type="Principal" minOccurs="0" maxOccurs="1" />
<xs:element name="replacedBy" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="replaces" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="original" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="latest" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="createdAt" type="xs:dateTime" use="required" />
<xs:attribute name="createdBy" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="status" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="nevershare" type="xs:boolean" minOccurs="0" maxOccurs="1" />
<xs:element name="relatesTo" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="relation" type="Relation" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="isRelatedFrom" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="relation" type="Relation" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="record_id" type="xs:string" use="optional" />
<xs:attribute name="size" type="xs:string" use="required" />
<xs:attribute name="digest" type="xs:string" use="required" />
<xs:attribute name="type" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Example:
<?xml version="1.0" encoding="utf-8" ?>
<Document id="14c81023-c84f-496d-8b8e-9438280441d3" type="" digest="7e9bc09276e0829374fd810f96ed98d544649703db3a9bc231550a0b0e5bcb1c" size="77">
<createdAt>2009-05-04T17:05:33</createdAt>
<creator id="steve@indivo.org" type="account">
<fullname>Steve Zabak</fullname>
</creator>
<suppressedAt>2009-05-06T17:05:33</suppressedAt>
<suppressor id="steve@indivo.org" type="account">
<fullname>Steve Zabak</fullname>
</suppressor>
<original id="14c81023-c84f-496d-8b8e-9438280441d3" />
<latest id="14c81023-c84f-496d-8b8e-9438280441d3" createdAt="2009-05-05T17:05:33" createdBy="steve@indivo.org" />
<label>HBA1C reading</label>
<status>active</status>
<nevershare>false</nevershare>
<relatesTo>
<relation type="http://indivo.org/vocab/documentrels#attachment" count="1" />
<relation type="http://indivo.org/vocab/documentrels#annotation" count="5" />
</relatesTo>
<isRelatedFrom>
<relation type="http://indivo.org/vocab/documentrels#interpretation" count="1" />
</isRelatedFrom>
</Document>