Кодирование свойств в формате XML

В этом приложении описывается, как переменные (свойства) контекста кодируются (и декодируются) в формате XML.

Свойства кодируются и декодируются только если их экспортируют или импортируют, используя Редактор свойств. В противном случае, SberMobile хранит и обрабатывает свойства как Таблицы данных. Каждое свойство - это отдельная Таблица данных.

Схема XML для свойств

Схема XML для кодирования свойств выглядит следующим образом:

Схема XML  - это описание XML-документа, обычно с точки зрения правил структуры и содержания документов такого типа, а не только базовых правил синтаксиса, накладываемых самим форматом XML. Схема XML дает представление о типа документа на относительно высоком уровне абстракции.

Более подробно об этом см. http://www.w3.org/XML/Schema.

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">

<xs:element name="properties" type="propertiesType"/>

<xs:complexType name="validatorsType">

       <xs:simpleContent>

               <xs:extension base="xs:string">

                       <xs:attribute type="xs:string" name="contentType" use="optional"/>

               </xs:extension>

       </xs:simpleContent>

</xs:complexType>

<xs:complexType name="fieldType">

       <xs:sequence>

               <xs:element type="validatorsType" name="validators" minOccurs="0"/>

               <xs:element type="xs:string" name="help" minOccurs="0"/>

               <xs:element type="selectionValuesType" name="selectionValues" minOccurs="0"/>

               <xs:element type="xs:string" name="group" minOccurs="0"/>

               <xs:element name="defaultValue">

                       <xs:complexType mixed="true">

                               <xs:sequence>

                                       <xs:element type="xs:string" name="nullValue" minOccurs="0"/>

                                       <xs:element type="tableType" name="table" minOccurs="0"/>

                                       <xs:element type="dataType" name="data" minOccurs="0"/>

                               </xs:sequence>

                       </xs:complexType>

               </xs:element>

       </xs:sequence>

       <xs:attribute type="xs:string" name="name" use="optional"/>

       <xs:attribute type="xs:string" name="type" use="optional"/>

       <xs:attribute type="xs:string" name="hidden" use="optional"/>

       <xs:attribute type="xs:string" name="keyfield" use="optional"/>

       <xs:attribute type="xs:string" name="notReplicated" use="optional"/>

       <xs:attribute type="xs:string" name="nullable" use="optional"/>

       <xs:attribute type="xs:string" name="description" use="optional"/>

       <xs:attribute type="xs:string" name="editor" use="optional"/>

       <xs:attribute type="xs:string" name="advanced" use="optional"/>

       <xs:attribute type="xs:string" name="readonly" use="optional"/>

       <xs:attribute type="xs:string" name="inline" use="optional"/>

       <xs:attribute type="xs:string" name="extendableSelectionValues" use="optional"/>

</xs:complexType>

<xs:complexType name="fieldsType">

       <xs:sequence>

               <xs:element type="fieldType" name="field" maxOccurs="unbounded" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="formatType">

       <xs:sequence>

               <xs:element type="fieldsType" name="fields"/>

               <xs:element type="bindingsType" name="bindings" minOccurs="0"/>

               <xs:element type="validatorsType" name="validators" minOccurs="0"/>

       </xs:sequence>

       <xs:attribute type="xs:int" name="maxRecords" use="optional"/>

       <xs:attribute type="xs:byte" name="minRecords" use="optional"/>

       <xs:attribute type="xs:string" name="reorderable" use="optional"/>

</xs:complexType>

<xs:complexType name="valueType" mixed="true">

       <xs:sequence>

               <xs:element type="xs:string" name="nullValue" minOccurs="0"/>

               <xs:element type="tableType" name="table" minOccurs="0"/>

       </xs:sequence>

       <xs:attribute type="xs:string" name="name" use="optional"/>

</xs:complexType>

<xs:complexType name="recordType" mixed="true">

       <xs:sequence>

               <xs:element type="valueType" name="value" maxOccurs="unbounded" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="recordsType">

       <xs:sequence>

               <xs:element type="recordType" name="record" maxOccurs="unbounded" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="tableType">

       <xs:sequence>

               <xs:element type="formatType" name="format"/>

               <xs:element type="recordsType" name="records" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="entryType">

       <xs:sequence>

               <xs:element type="xs:string" name="string"/>

               <xs:element type="tableType" name="table"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="defaultValueType">

       <xs:sequence>

               <xs:element type="xs:string" name="nullValue" minOccurs="0"/>

               <xs:element type="tableType" name="table" minOccurs="0"/>

               <xs:element type="dataType" name="data" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="bindingType">

       <xs:sequence>

               <xs:element type="xs:string" name="reference"/>

               <xs:element type="xs:string" name="expression"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="bindingsType">

       <xs:sequence>

               <xs:element type="bindingType" name="binding" maxOccurs="unbounded" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="optionType" mixed="true">

       <xs:sequence>

               <xs:element type="xs:string" name="nullValue" minOccurs="0"/>

       </xs:sequence>

       <xs:attribute type="xs:string" name="description" use="optional"/>

</xs:complexType>

<xs:complexType name="selectionValuesType">

       <xs:sequence>

               <xs:element type="optionType" name="option" maxOccurs="unbounded" minOccurs="0"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="dataType">

       <xs:sequence>

               <xs:element type="xs:string" name="nullValue"/>

       </xs:sequence>

</xs:complexType>

<xs:complexType name="propertiesType">

       <xs:sequence>

               <xs:element type="entryType" name="entry" maxOccurs="unbounded" minOccurs="0"/>

               <xs:element type="propertiesType" name="properties" minOccurs="0"/>

       </xs:sequence>

       <xs:attribute type="xs:string" name="class" use="optional"/>

</xs:complexType>

</xs:schema>

Данная схема XML определяет структуру XML-файла с экспортированными свойствами контекста. Корневой элемент - properties, содержит все экспортированные свойства.

Элемент properties содержит 0 или более элементов entry. Эти элементы содержат индивидуальные свойства.

Элемент entry включает два дочерних элемента: string и table. Элемент string содержит имя свойства. Элемент table содержит таблицу данных для этого свойства.

Таблицы данных для свойств внутри элементов table хранятся в формате XML.

Примеры кодирования свойств в формате XML

<?xml version="1.0" ?>

<properties>

<properties class="linked-hash-map">

       <entry>

               <string>connectionProperties</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>performanceTesting</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>genericProperties</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>managedVariables</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>managedFunctions</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>managedEvents</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>statisticsProperties</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>granulator</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>settingSyncOptions</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>ccmConfigurationManagement</string>

               <table>

                       -- skipped --

               </table>

       </entry>

       <entry>

               <string>ccmCompliancePolicies</string>

               <table>

                       -- skipped --

               </table>

       </entry>

</properties>

</properties>