Кодирование таблиц данных в формате XML
В этом приложении описывается, как Таблицы данных кодируются в (и декодируются из) XML. Таблицы данных кодируются в XML только, когда их необходимо передать как строковые аргументы для функций Web-сервиса, во всех других случаях SberMobile использует свой собственный синтаксис кодирования.
В большинстве остальных компонентов SberMobile (базе данных, Протоколе взаимодействия SberMobile и пр.) таблицы данных хранятся и передаются при помощи так называемого собственного кодирования. Этот формат описан в отдельном приложении. |
XML - схема для таблиц данных
Следующая XML-схема используется для кодирования таблиц данных:
XML-схема - это описание типа XML-документа, обычно выраженного в виде ограничений на структуру и содержание документов такого типа. XML-схема предоставляет документ на высоком уровне абстракции. Дополнительную информацию см. на сайте: http://www.w3.org/XML/Schema |
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element ref="format" minOccurs="0" maxOccurs="1"/>
<xs:element ref="records" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="format">
<xs:complexType>
<xs:sequence>
<xs:element ref="fields" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="maxRecords" type="xs:integer"/>
<xs:attribute name="minRecords" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="fields">
<xs:complexType>
<xs:sequence>
<xs:element ref="field" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="field">
<xs:complexType>
<xs:sequence>
<xs:element ref="selectionValues" minOccurs="0"/>
<xs:element ref="defaultValue" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="description"/>
<xs:attribute name="name" type="xs:NCName" use="required"/>
<xs:attribute name="notReplicated" type="xs:boolean"/>
<xs:attribute name="nullable" type="xs:boolean"/>
<xs:attribute name="readonly" type="xs:boolean"/>
<xs:attribute name="type" type="fieldType" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="selectionValues">
<xs:complexType>
<xs:sequence>
<xs:element ref="option" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="option">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="fieldVal">
<xs:attribute name="description" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="defaultValue" type="fieldVal"/>
<xs:element name="records">
<xs:complexType>
<xs:sequence>
<xs:element ref="record" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="record">
<xs:complexType>
<xs:sequence>
<xs:element name="value" maxOccurs="unbounded" minOccurs="0">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="fieldVal">
<xs:attribute name="name" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="fieldType">
<xs:restriction base="xs:string">
<xs:enumeration value="A"/>
<xs:enumeration value="I"/>
<xs:enumeration value="D"/>
<xs:enumeration value="T"/>
<xs:enumeration value="S"/>
<xs:enumeration value="B"/>
<xs:enumeration value="L"/>
<xs:enumeration value="F"/>
<xs:enumeration value="O"/>
<xs:enumeration value="C"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="fieldVal" mixed="true">
<xs:choice minOccurs="0">
<xs:element ref="data"/>
<xs:element ref="table"/>
</xs:choice>
</xs:complexType>
<xs:element name="data">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="contentType" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>
Эта XML-схема определяет структуру XML-документа таблицы данных. Корневой элемент - table
определяет Таблицу данных.
Элемент table
может содержать один элемент format
, который описывает формат таблиц данных. Он может также содержать опциональный элемент records
, который включает список записей таблиц с данными.
Элемент format
должен включать подэлемент fields
, содержащий список полей таблицы. Он может иметь атрибуты minRecords
и maxRecords
, которые определяют минимальное и максимальное количество записей в таблице. Если minRecords
не определён, минимальное количество записей равно нулю. Если maxRecords
не определено, максимальное количество записей не ограничено (на практике ограничено 2^64).
Элемент fields
состоит из одного или более элементов field
. Элемент field
определяет формат одного поля. Для него требуются атрибуты name
и type
. Элемент fieldType
может быть представлен одним кодом типа, определённого здесь. Атрибуты description
, notReplicated
, nullable
и readonly
опциональны. Элемент field
может быть также включать подэлементы selectionValues
и defaultValue
. Дополнительную информацию об этих атрибутах и элементах можно найти в разделе Таблицы данных.
Элемент selectionValues
может содержать один или более элементов option
. Элемент value
относится к типу fieldVal
. Элемент value
требует атрибут description
, который определяет описание определённого значения выбора.
defaultValue
тоже относится к типу fieldVal
.
Элементы типа fieldVal
используются для хранения значений данных ячеек таблиц, значений выбора и значений по умолчанию. Элементы данного типа могут быть представлены:
- элементами
table
(включённые таблицы) - элементами
data
(бинарные блоки данных) - простым текстом (все типы значений, см правила кодирования здесь)
Элементы records
содержат последовательность элементов записи. Каждая запись представляет одну запись Таблицы данных. Она содержит количество элементов value
. Их тип данных - fieldVal,
описан ранее. У каждого элемента есть необходимый атрибут name
, включая имя поля, чьё значение представляет value
.
Примеры таблицы данных, закодированных в формате XML
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- Data Table -->
<format maxRecords="1" minRecords="1"> <!-- Table Format Descriptor -->
<fields> <!-- Field Set -->
<field description="Username" name="username" notReplicated="true" readonly="true" type="S"/>
<field description="First Name" name="firstname" notReplicated="true" nullable="true" type="S"/>
<field description="Last Name" name="lastname" notReplicated="true" nullable="true" type="S"/>
<field description="Password" name="password" notReplicated="true" type="S"/>
<field description="Country" name="country" type="I">
<selectionValues>
<option description="Albania">1</option>
<option description="Algeria">2</option>
-- skipped --
</selectionValues>
</field>
<field description="Region/State/Province/Area" name="region" nullable="true" type="S"/>
<field description="ZIP Code" name="zip" nullable="true" type="S"/>
<field description="City" name="city" nullable="true" type="S"/>
<field description="Address 1" name="address1" nullable="true" type="S"/>
<field description="Address 2" name="address2" nullable="true" type="S"/>
<field description="Comments" name="comments" nullable="true" type="S"/>
<field description="Company" name="company" nullable="true" type="S"/>
<field description="Department" name="department" nullable="true" type="S"/>
<field description="E-mail Address" name="email" notReplicated="true" nullable="true" type="S"/>
<field description="Phone No." name="phone" notReplicated="true" nullable="true" type="S"/>
<field description="Fax No." name="fax" notReplicated="true" nullable="true" type="S"/>
<field description="Time Zone" name="timezone" type="S">
<selectionValues>
<option description="GMT-12:00, Etc/GMT+12">Etc/GMT+12</option>
<option description="GMT-11:00, Etc/GMT+11">Etc/GMT+11</option>
-- skipped --
</selectionValues>
<defaultValue>Europe/Moscow</defaultValue>
</field>
<field description="Locale" name="locale" type="S">
<selectionValues>
<option description="Default"/>
<option description="aa">aa</option>
<option description="ab">ab</option>
-- skipped --
</selectionValues>
<defaultValue>en</defaultValue>
</field>
<field description="Date Pattern" name="datepattern" type="S"/>
<field description="Time Pattern" name="timepattern" type="S"/>
<field description="Enable Automatic Registration of Device Servers" name="dsautoregistration" type="B"/>
</fields>
</format>
<records> <!-- Data Table Records -->
<record> <!-- First Record -->
<value name="username">ronnie</value>
<value name="firstname">Ronnie</value>
<value name="lastname">O'Sullivan</value>
<value name="password">11111</value>
<value name="country">218</value>
<value name="datepattern">dd.MM.yyyy</value>
<value name="timepattern">HH:mm:ss</value>
<value name="dsautoregistration">1</value>
</record>
<record> <!-- Second Record -->
<value name="username">john</value>
<value name="firstname">John</value>
<value name="lastname">Doe</value>
<value name="password">12345</value>
<value name="country">83</value>
<value name="datepattern">dd.MM.yyyy</value>
<value name="timepattern">HH:mm:ss</value>
<value name="dsautoregistration">1</value>
</record>
</records>
</table>