6 Appendix A: Full XML Schema

For ease of implementation, the following is the full XML schema for this protocol.

 <?xml version="1.0" encoding="utf-8"?>
 <xs:schema id="Discovery"
   targetNamespace="http://tempuri.org/Discovery.xsd"
   elementFormDefault="qualified"
   xmlns="http://tempuri.org/Discovery.xsd"
   xmlns:mstns="http://tempuri.org/Discovery.xsd"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
 > 
 <xs:simpleType name="st_wopi-action-values">
   <xs:restriction base="xs:string">
     <xs:enumeration value="view" />
     <xs:enumeration value="edit" />
     <xs:enumeration value="mobileView" />
     <xs:enumeration value="embedview" />
     <xs:enumeration value="embededit" />
     <xs:enumeration value="present" />
     <xs:enumeration value="presentservice" />
     <xs:enumeration value="attend" />
     <xs:enumeration value="attendservice" />
     <xs:enumeration value="editnew" />
     <xs:enumeration value="imagepreview" />
     <xs:enumeration value="interactivepreview" />
     <xs:enumeration value="formsubmit" />
     <xs:enumeration value="formedit" />
     <xs:enumeration value="rest" />
     <xs:enumeration value="preloadview" />
     <xs:enumeration value="preloadedit" />
     <xs:enumeration value="rtc" />
     <xs:enumeration value="getinfo" />
     <xs:enumeration value="convert" />
     <xs:enumeration value="syndicate" />
     <xs:enumeration value="legacywebservice" />
     <xs:enumeration value="collab" />
     <xs:enumeration value="formpreview" />
     <xs:enumeration value="documentchat" />
   </xs:restriction>
 </xs:simpleType>
  
 <xs:simpleType name="st_wopi-action-requirements">
   <xs:restriction base="xs:string">
     <xs:pattern value="/^((update|locks|cobalt|containers)\s*(,\s*|$))*((update|locks|cobalt|containers)\s*$)/" />
   </xs:restriction>
 </xs:simpleType>
  
 <xs:simpleType name="st_wopi-url-source">
   <xs:restriction base="xs:string">
     <xs:pattern value="/^([a-z0-9+.-]+):(?://(?:((?:[a-z0-9-._~!$&amp;'()*+,;=:]|%[0-9A-F]{2})*)@)?((?:[a-z0-9-._~!$&amp;'()*+,;=]|%[0-9A-F]{2})*)(?::(\d*))?(/(?:[a-z0-9-._~!$&amp;'()*+,;=:@/]|%[0-9A-F]{2})*)?|(/?(?:[a-z0-9-._~!$&amp;'()*+,;=:@]|%[0-9A-F]{2})+(?:[a-z0-9-._~!$&amp;'()*+,;=:@/]|%[0-9A-F]{2})*)?)(?:\?((?:[a-z0-9-._~!$&amp;'()*+,;=:/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&amp;'()*+,;=:/?@]|%[0-9A-F]{2})*))?$/i" />
   </xs:restriction>
 </xs:simpleType>
        
 <xs:complexType name="ct_wopi-action">
   <xs:attribute name="name" use="required" type="st_wopi-action-values"/>
   <xs:attribute name="default" type="xs:boolean" default="false"/>
   <xs:attribute name="requires" type="st_wopi-action-requirements"/>
   <xs:attribute name="urlsrc"  use="required" type="st_wopi-url-source"/>
   <xs:attribute name="ext" type="xs:string" use="optional"/>  
   <xs:attribute name="progid" type="xs:string" use="optional"/>
   <xs:attribute name="newprogid" type="xs:string" use="optional"/>
   <xs:attribute name="newext" type="xs:string" use="optional"/>
   <xs:attribute name="useParent" type="xs:boolean" default="false"/>
   <xs:attribute name="targetext" type="xs:string" use="optional"/>
 </xs:complexType>
  
 <xs:simpleType name="st_wopi-zone">
   <xs:restriction base="xs:string">
     <xs:enumeration value="internal-http" />
     <xs:enumeration value="internal-https" />
     <xs:enumeration value="external-http" />
     <xs:enumeration value="external-https" />
   </xs:restriction>
 </xs:simpleType>
  
 <xs:complexType name="ct_net-zone">
   <xs:sequence>
     <xs:element name="app" minOccurs="1" maxOccurs="unbounded" type="ct_app-name"/>
   </xs:sequence>
   <xs:attribute name="name" type="mstns:st_wopi-zone"/>
 </xs:complexType>
  
 <xs:complexType name="ct_wopi-discovery">
   <xs:sequence>
     <xs:element name="net-zone" minOccurs="1" maxOccurs="4" type="ct_net-zone"/>
     <xs:element name="proof-key" minOccurs="0" maxOccurs="1" type="ct_proof-key"/>
   </xs:sequence>
 </xs:complexType>
  
 <xs:element name="wopi-discovery" type="ct_wopi-discovery"/>
  
 <xs:complexType name="ct_app-name">
   <xs:sequence>
     <xs:element name="action" minOccurs="1" maxOccurs="unbounded" 
         type="ct_wopi-action"/>
   </xs:sequence>
   <xs:attribute name="name" type="xs:string" use="required"/>
   <xs:attribute name="favIconUrl" type="xs:string" use="optional"/>
   <xs:attribute name="checkLicense" type="xs:boolean" use="optional" 
         default="false"/>
 </xs:complexType>
<xs:complexType name="ct_proof-key">
  <xs:attribute name="exponent" type="xs:string" use="required"/>
  <xs:attribute name="modulus" type="xs:string" use="required"/>
  <xs:attribute name="oldexponent" type="xs:string" use="required"/>
  <xs:attribute name="oldmodulus" type="xs:string" use="required"/>
  <xs:attribute name="oldvalue" type="xs:string" use="required"/>
  <xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
 
 </xs:schema>