To be defined
The following is a draft introduction
This document describes how type definitions described using the Data Schema can be mapped to XML schema definitions by using examples. Given these Data Schemas, providing the mapping to XML schema allows XML tools to directly validate serialized XML data, for example. The XML structure for which this mapping is designed is based on EXI4JSON [exi-for-json].
This document is a work in progress
Below are some examples of payloads in JSON and their corresponding equivalent payloads in XML.
{
"brightness": 200,
"frequency": "fast"
}
<object>
<brightness>
<integer>200</integer>
</brightness>
<frequency>
<string>fast</string>
</frequency>
</object>
[
520,
184,
1314
]
<array>
<number>520</number>
<number>184</number>
<number>1314</number>
</array>
id (of type integer) and name (of
type string) where id is required to be present.
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"required": [
"id"
]
}
When the object is anonymous (i.e. it is the root, or participates in an array
definition), the above object definition transforms to the following XML Schema element
definition.
<xs:element name="object" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType>
<xs:all>
<xs:element name="id">
<xs:complexType>
<xs:sequence>
<xs:element name="integer" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="string" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
Otherwise (i.e. the object is a member of another object definition, thus has a
name), the object definition transforms to the following XML schema element definition. Note
$name represents the name of the object, and needs to be replaced by the actual name
of the object.
<xs:element name="$name" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType>
<xs:sequence>
<!--Until the next comment, it is a copy of the previous example-->
<xs:element name="object">
<xs:complexType>
<xs:all>
<xs:element name="id">
<xs:complexType>
<xs:sequence>
<xs:element name="integer" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="string" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<!--Until here-->
</xs:sequence>
</xs:complexType>
</xs:element>
array consists of exactly three number literals with each value within the value range of [ 0 ... 2047 ].
{
"type": "array",
"items": {
"type": "number",
"minimum": 0,
"maximum": 2047
},
"minItems": 3,
"maxItems": 3
}
When the array is anonymous (i.e. it is the root, or participates in another array
definition), the above array definition transforms to the following XML Schema element
definition.
<xs:element name="array" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType>
<xs:sequence>
<xs:element name="double" minOccurs="3" maxOccurs="3">
<xs:simpleType name="minInclusive">
<xs:restriction base="xs:double">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="2047"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Otherwise (i.e. the array is a member of an object definition, thus has a name), the
array definition transforms to the following XML schema element definition.
Note $name represents the name of the array, and needs to be replaced by the actual
name of the array.
<xs:element name="$name" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType>
<xs:sequence>
<!--Until the next comment, it is a copy of the previous example-->
<xs:element name="array">
<xs:complexType>
<xs:sequence>
<xs:element name="double" minOccurs="3" maxOccurs="3" >
<xs:simpleType name="minInclusive">
<xs:restriction base="xs:double">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="2047"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--Until here-->
</xs:sequence>
</xs:complexType>
</xs:element>