| <?xml version="1.0"?> |
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
| |
| <!-- The only two possible root elements are methodResponse and |
| methodCall so these are the only two I use a top-level |
| declaration for. --> |
| |
| <xsd:element name="methodCall"> |
| <xsd:complexType> |
| <xsd:all> |
| <xsd:element name="methodName"> |
| <xsd:simpleType> |
| <xsd:restriction base="ASCIIString"> |
| <xsd:pattern value="([A-Za-z0-9]|/|\.|:|_)*" /> |
| </xsd:restriction> |
| </xsd:simpleType> |
| </xsd:element> |
| <xsd:element name="params" minOccurs="0" maxOccurs="1"> |
| <xsd:complexType> |
| <xsd:sequence> |
| <xsd:element name="param" type="ParamType" |
| minOccurs="0" maxOccurs="unbounded"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| </xsd:element> |
| </xsd:all> |
| </xsd:complexType> |
| </xsd:element> |
| |
| <xsd:element name="methodResponse"> |
| <xsd:complexType> |
| <xsd:choice> |
| <xsd:element name="params"> |
| <xsd:complexType> |
| <xsd:sequence> |
| <xsd:element name="param" type="ParamType"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| </xsd:element> |
| <xsd:element name="fault"> |
| <!-- What can appear inside a fault is very restricted --> |
| <xsd:complexType> |
| <xsd:sequence> |
| <xsd:element name="value"> |
| <xsd:complexType> |
| <xsd:sequence> |
| <xsd:element name="struct"> |
| <xsd:complexType> |
| <xsd:sequence> |
| <xsd:element name="member" |
| type="MemberType"> |
| </xsd:element> |
| <xsd:element name="member" |
| type="MemberType"> |
| </xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| </xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| </xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| </xsd:element> |
| </xsd:choice> |
| </xsd:complexType> |
| </xsd:element> |
| |
| <xsd:complexType name="ParamType"> |
| <xsd:sequence> |
| <xsd:element name="value" type="ValueType"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| |
| <xsd:complexType name="ValueType" mixed="true"> |
| <!-- I need to figure out how to say that this |
| is either a simple xsd:string type or that |
| it contains one of these elements; but that otherwise |
| it does not have mixed content --> |
| <xsd:choice> |
| <xsd:element name="i4" type="xsd:int"/> |
| <xsd:element name="int" type="xsd:int"/> |
| <xsd:element name="string" type="ASCIIString"/> |
| <xsd:element name="double" type="xsd:decimal"/> |
| <xsd:element name="Base64" type="xsd:base64Binary"/> |
| <xsd:element name="boolean" type="NumericBoolean"/> |
| <xsd:element name="dateTime.iso8601" type="xsd:dateTime"/> |
| <xsd:element name="array" type="ArrayType"/> |
| <xsd:element name="struct" type="StructType"/> |
| </xsd:choice> |
| </xsd:complexType> |
| |
| <xsd:complexType name="StructType"> |
| <xsd:sequence> |
| <xsd:element name="member" type="MemberType" |
| maxOccurs="unbounded"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| |
| <xsd:complexType name="MemberType"> |
| <xsd:sequence> |
| <xsd:element name="name" type="xsd:string" /> |
| <xsd:element name="value" type="ValueType"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| |
| <xsd:complexType name="ArrayType"> |
| <xsd:sequence> |
| <xsd:element name="data"> |
| <xsd:complexType> |
| <xsd:sequence> |
| <xsd:element name="value" type="ValueType" |
| minOccurs="0" maxOccurs="unbounded"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| </xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| |
| <xsd:simpleType name="ASCIIString"> |
| <xsd:restriction base="xsd:string"> |
| <xsd:pattern value="([ -~]|\n|\r|\t)*" /> |
| </xsd:restriction> |
| </xsd:simpleType> |
| |
| <xsd:simpleType name="NumericBoolean"> |
| <xsd:restriction base="xsd:boolean"> |
| <xsd:pattern value="0|1" /> |
| </xsd:restriction> |
| </xsd:simpleType> |
| |
| </xsd:schema> |
| |