Описание формата файлов конфигурации

Оглавление

1. Главный файл конфигурации (файл rater.config.xml)

Содержит конфигурационную информацию о приложении: имя текущего оператора мобильной связи, текущий тарифный план, путь к файлу, содержащему информацию обо всех тарифных планах мобильных операторов Беларуси. Файл содержит следующие теги:
Корневой тег:

<application name="Rater"></application>

Имеет единственный атрибут name, в котором указывается имя приложения, использующего данную конфигурацию.
Тег <configuration> находится в корневом теге. Он содержит следующие теги:

  1. Тег <tariffs> необходим для указания приложению местонахождения файла, содержащего информацию о тарифах. Он имеет следующую структуру:
    <tariffs path=”path” />

    Имеет единственный атрибут path ‚в нем указывается путь к файлу тарифов относительно текущей директории.

  2. Теги <currentgsmoperator> и <currenttariff>. Содержат информацию о текущем мобильном операторе и текущем тарифном плане соответственно. Для этого используется атрибут name.
  3. Тег <country> содержит тег <codes>, который предназначен для описания кода страны и префиксов для междугороднего доступа.
  4. Тег <boundsfile> используется для описания имени и пути к файлу ограничений. Атрибут filename содержит имя файла, а атрибут path путь к этому файлу (относительно текущей директории).

Атрибут culture-name тег <country> содержит необходимую информацию о стране, которая позволяет корректно отображать денежные единицы. Имеет следующий формат - "[международный код государственного языка]-[международный код страны]. Например. Беларусь - culture-name = "be-BY"; Россия - "ru-RU"; Украина - "uk-UA"; Литва - "lt-LT"; Латвия - "lv-LV"; Эстония - "et-EE" и др.(остальные международные коды можно посмотреть здесь или в международных стандартах - ISO 639-1(международные коды государственных языков) и ISO 3166(международные коды стран))

Пример использования:

<?xml version="1.0" encoding="utf-8"?>
<application name="Rater">
<configuration>
<country name="be-BY">
<codes>
<code value="+375" />
<code value="80" />
<code value="8" />
</codes>
</country>
<tariffs filename="gsmoperators.xml" path="tariffs/" />
<currentgsmoperator name="MTS BY" />
<currenttariff name="ДЖИНС 0.07" />
<boundsfile filename="bounds.xml" path="tariffs/bounds/" /> ...
</configuration>
</application>

2. Файл, описывающий мобильные операторы (файл gsmoperators.xml)

Содержит все мобильные операторы Беларуси и для каждого оператора список всех тарифов. Содержит следующие теги:

Корневой тег <gsmoperators>. Он включает в себя тег <gsmoperator>, который имеет атрибут name, содержащий имя мобильного оператора, атрибут code, для указания кода оператора. Также, может содержаться атрибут flag со значением "shortdial", который показывает, что поддерживается короткий набор для этого мобильного оператора (т.е. можно использовать вместо номера +375291234567 – номер 1234567). Он включает два тега: <number> и <tariffs>.

Тег <number> используется для описания телефонных номеров оператора. Он имеет атрибут size, в котором указывается длина телефонного номера. Он включает в себя один или несколько тегов <startwith>. Он имеет атрибут value, в котором указывается начальная цифра номера.

Тег <tariffs>может содержать один или несколько тегов <tariff>, которые описывают тарифы соответствующего оператора. Тег <tariff> имеет атрибуты name и path. Атрибут name содержит название тарифного плана, а атрибут path путь к файлу, содержащего подробную информацию о соответствующем тарифе.

Пример использования:

<gsmoperators>
<gsmoperator name="MTS BY" code="29" flag="shortdial">
<number size="7">
<startwith value="7" />
<startwith value="5" />
<startwith value="2" />
</number>
<tariffs>
<tariff name="ОПТИМА-рациональный" path="mtsby/optimarational.xml" />
<tariff name="ОПТИМА+10" path="mtsby/optimaplus10.xml" />

</tariffs>
</gsmoperator>
<gsmoperator name="VELCOM GSM" code="29" flag="shortdial">
<number size="7">
<startwith value="6" />
<startwith value="3" />
<startwith value="1" />
</number>
<tariffs>
<tariff name="Легкий" path="velcomgsm/light.xml" />
<tariff name="Единый" path="velcomgsm/unified.xml" />

</tariffs>
</gsmoperator> …
</gsmoperators>

3. Структура файлов, описывающих конкретные тарифные планы

Каждый из этих файлов содержит полное описание тарифного плана: ежемесячный платеж, количество бесплатных минут, стоимость вызовов по направлениям, стоимость отправленных SMS-сообщений и т.д. Он включает в себя следующие теги:

Корневой тег <tariff>, содержит атрибут name, в котором указывается имя описываемого тарифного плана (это имя должно совпадать с именем тарифного, который указан в файле gsmoperators.xml).

Тег <blocksize> находится в корневом теге, и используется для описания способа тарификации: посекундная, если его атрибут value=1; поминутная - value=60; или можно задать другое значение. Он может содержать атрибут bound, который используются для описания таких тарифных планов, в которых способ тарификации может изменяться в зависимости от какого-либо параметра. Например, в тарифном плане Джинс 0.07 61 используется поминутная тарификация для вызовов продолжительностью менее одной минуты и посекундная для вызовов с большей продолжительностью. В этом атрибуте указывается имя ограничения из блока <bounds> </bounds> файла bounds.xml. При этом тег <blocksize> должен содержать два или более атрибутов вида valueN (это атрибуты вида value1, value2 и т.д.).

Далее следует тег <monthlypay>, который описывает ежемесячную плату за использования услуг данного тарифа. Атрибут value содержит величину этих затрат.

Тег <freeminute> описывает предоставляемые бесплатные минуты, их количество (в минутах) – атрибут value, тип – атрибут type (для внутрисетевых звонков type="selfnet", для звонков в другие сети type="othernet" и для звонков на любые направления type="anynet").

Для описания стоимости вызовов по направления используется тег <outgoingcall>. Он может содержать атрибут bound, если стоимость вызовов зависит от каких-нибудь факторов (время и дата вызова, продолжительность вызова и другие). Атрибут bound содержит имя ограничения, которое должно существовать в файле ограничений bounds.xml.

Тег <favourite-numbers> предназначен для описания разных категорий любимых номеров. Он содержит один или несколько тегов <number>, которые испльзуются для описания одной категории любимых номеров. Это тег имеет два атрибута: в атрибуте iter указывается количество любимых номеров, которые принадлежат этой группе; в атрибуте monthlypay указывается ежемесячный платеж за один любимый номеро этой группы. Например, в тарифный план MTS BY Оптима+10 включен один бесплатный любимый номер и можно подключить еще два, с ежемесячной платой за каждый 1000 рублей. Это условие можно записать так.

...
<favourite-numbers>
<number iter="1" monthlypay="0" />
<number iter="2" monthlypay="1000" />
</favourite-numbers> ...

Тег <outgoingcall>. включает в себя следующие теги: <favourite-number>, <selfnet>, <othergsmnet>, <staticnet>. Они используются для описания стоимости вызова за минуту на любимые номера — тег <favourite-number> , номера собственной мобильной сети — <selfnet>, на номера других мобильных операторов — <othergsmnet>, либо на стационарную сеть — <staticnet>. Каждый из этих тегов может содержать атрибут value либо несколько атрибутов вида value1, value2 и т.д. Это зависит от наличия атрибута bound в теге <outgoincall>. В этих тегах указывается стоимость за минуту разговора.

Тег <sentsms> необходим для того, чтобы описать стоимость отправленных SMS-сообщений. Он содержит следующие теги: <selfnet> – для SMS-сообщений отправленных на номера собственной мобильной сети; <othergsmnet> – для SMS-сообщений отправленных на номера других мобильных операторов. Эти теги имеют один атрибут value, в котором указывается стоимость одного SMS-сообщения.

Если какой-либо тег содержит атрибут bound, то в файле bounds.xml в корневом теге <bounds> будет следующий блок:

<bounds>
<bound name="bound’s name1"> … </bound>
<bound name="bound’s name 2">

</bound> …
</bounds

Тег содержит один или несколько тегов <bound>, который используется для описания какого-либо ограничения. Этот тег содержит атрибут name, в котором указывается имя данного ограничения (используется для ссылки на это ограничение из других тегов, например, из тегов <outgoincall> и <blocksize>). Он может содержать несколько тегов <between> и один тег <else>.

Тег <between> используется для описания одной альтернативы выбора. Он содержит атрибут value, в котором указывается имя атрибута, значение которого необходимо использовать в ссылающемся теге, если эта альтернатива подходит. Он может содержать несколько тегов <and>, в которых описывается один диапазон значений. Он имеет следующую структуру:

<and type="type" start="startvalue" end="endvalue"/>

Атрибут type содержит тип параметра, который будет использоваться для определения того, находится или нет значение этого параметра в пределах выбранного диапазона. Этот атрибут может иметь только следующие значения:

  1. type=”Time”, если сравнивается время вызова;
  2. type=”DayOfWeek”, если сравниваются дни недели вызова;
  3. type=”Duration”, если сравнивается продолжительность вызова.

Атрибуты start и end содержат меньшее и большее значения диапазона. Тип значения этих атрибутов напрямую зависит от значения атрибута type. Если type=”Time” или type=”Duration”, то значения этих атрибутов имеют следующий формат: “hh:mm:ss”, где “hh” – часы, “mm” – минуты, “ss” – секунды. Для type=”DayOfWeek”, значения атрибутов – название дня недели на английском языке: “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”.

Тег <else> описывает альтернативу, которая используется в том случае, если другие альтернативы не подошли.

Например, для указания того, что в тарифном плане "Супер Джинс 61" используется поминутная тарификация для вызовов продолжительностью менее одной минуты и посекундная для вызовов с большей продолжительностью, необходимо использовать следующую конструкцию:

<tariff name="Супер ДЖИНС 61">
<blocksize bound="my bound" value1="1" value2="60" />

</tariff>

А в файле bounds.xml должен быть следующий код:

<bounds>

<bound name="my bound"> <between value="value2">
<and type="Duration" start="00:00:00:" end="00:01:00" />
</between>
<else value="value2" />
</bound>

</bounds>

В тарифном плане "Старт" мобильного оператора Velcom стоимость исходящих вызовов зависит дня недели и времени суток. Т.е. имеет следующие диапазоны: в будние дни (т.е. с понедельника по пятницу) с 9:00 до 21:00; ночью с 00:00 до 06:00; и оставшееся время. В следующий пример поясняется сказанное выше.

Файл velcomgsm\start.xml:

<?xml version="1.0" encoding="utf-8"?>
<tariff name="Старт">
<blocksize value="12" />
<monthlypay value="7500" />
<freeminute value="0" type="" />
<favourite-numbers>
<number iter="1" monthlypay="0" />
</favourite-numbers>
<outgoingcall bound="bound1">
<favourite-number value1="52.5" value2="52.5" value3="37.5" />
<selfnet value1="105" value2="105" value3="75" />
<othergsmnet value1="450" value2="420" value3="225" />
<staticnet value1="400" value2="370" value3="200" />
</outgoingcall>
<sentsms>
<selfnet value="110" />
<othergsmnet value="110" />
</sentsms>
</tariff>

В файле bounds.xml должен быть следующий код:

<?xml version="1.0" encoding="utf-8"?>
<bounds>
<bound name="bound1">
<between value="value1">
<and type="Time" start="09:00:00" end="21:00:00" />
<and type="DayOfWeek" start="Monday" end="Friday" />
</between>
<between value="value3">
<and type="Time" start="00:00:00" end="06:00:00" />
</between>
<else value="value2" />
</bound> ... </bounds>

4. Структура файла, описывающего правила определения номеров стационарной сети

В этом файле указываются правила определения стационарных номеров. Здесь указываются фиксированные части телефонного номера(областные, районные и т.п. коды). Необязательно указывать все коды, необходимо указать только те, наличие которых будет достаточным для явного определения номера стационарной сети. Так для Беларуси, чтобы явно идентифицировать стационарный телефонный номер достаточно указать только областные коды.

Корневой тег <static-number> имеет один атрибут size, в котором указывается полная длина номера стационарной сети без кодов доступа (например: для Беларуси - +375, 80; а для России - +7, 8). Например: номер +375172979797 - его областной код 17, длина номера 9 цифр(без учета кода +375).

Тег <static-number> может содержать один или несколько тегов <part>, который используется для указания какого-либо кода. В теге <part> в атрибуте startwith указывается код(например области). Если кодов областей не достаточно можно добавить и коды районов. Для этого тег парт может включать такие же теги part. Наример:

<static-number size="9">
<part startwith="1">
<part startwith="2" />
<part startwith="3" />
<part startwith="4" />
</part>
<part startwith="5" />
</static-number>

Это неправильная конструкция. Необходимо добавить и в <part startwith="5"></part> теги <part></part>.

<static-number size="9">
<part startwith="1">
<part startwith="2" />
<part startwith="3" />
<part startwith="4" />
</part>
<part startwith="5">
<part startwith="6" />
<part startwith="7">
и т.д.
</part>
</static-number>

Пример файла для описания номеров стационарной сети Беларуси.

<?xml version="1.0" encoding="utf-8"?>
<static-number>
  <!--Гродненская область, код 15-->
<part startwith="15" />
<!--Брестская область, код 16-->
<part startwith="16" />
<!--Минская область, код 17-->
<part startwith="17" />
<!--Витебская область, код 21-->
<part startwith="21" />
<!--Могилевская область, код 22-->
<part startwith="22" />
<!--Гомельская область, код 23-->
<part startwith="23" />
</static-number>

Прилжение. Список всех стран и их международных кодов

Culture Name Language-Country/Region
af-ZA Afrikaans - South Africa
sq-AL Albanian - Albania
ar-DZ Arabic - Algeria
ar-BH Arabic - Bahrain
ar-EG Arabic - Egypt
ar-IQ Arabic - Iraq
ar-JO Arabic - Jordan
ar-KW Arabic - Kuwait
ar-LB Arabic - Lebanon
ar-LY Arabic - Libya
ar-MA Arabic - Morocco
ar-OM Arabic - Oman
ar-QA Arabic - Qatar
ar-SA Arabic - Saudi Arabia
ar-SY Arabic - Syria
ar-TN Arabic - Tunisia
ar-AE Arabic - United Arab Emirates
ar-YE Arabic - Yemen
hy-AM Armenian - Armenia
az-AZ-Cyrl Azeri (Cyrillic) - Azerbaijan
az-AZ-Latn Azeri (Latin) - Azerbaijan
eu-ES Basque - Basque
be-BY Belarusian - Belarus
bg-BG Bulgarian - Bulgaria
ca-ES Catalan - Catalan
zh-HK Chinese - Hong Kong SAR
zh-MO Chinese - Macau SAR
zh-CN Chinese - China
zh-CHS Chinese (Simplified)
zh-SG Chinese - Singapore
zh-TW Chinese - Taiwan
zh-CHT Chinese (Traditional)
hr-HR Croatian - Croatia
cs-CZ Czech - Czech Republic
da-DK Danish - Denmark
div-MV Dhivehi - Maldives
nl-BE Dutch - Belgium
nl-NL Dutch - The Netherlands
en-AU English - Australia
en-BZ English - Belize
en-CA English - Canada
en-CB English - Caribbean
en-IE English - Ireland
en-JM English - Jamaica
en-NZ English - New Zealand
en-PH English - Philippines
en-ZA English - South Africa
en-TT English - Trinidad and Tobago
en-GB English - United Kingdom
en-US English - United States
en-ZW English - Zimbabwe
et-EE Estonian - Estonia
fo-FO Faroese - Faroe Islands
fa-IR Farsi - Iran
fi-FI Finnish - Finland
fr-BE French - Belgium
fr-CA French - Canada
fr-FR French - France
fr-LU French - Luxembourg
fr-MC French - Monaco
fr-CH French - Switzerland
gl-ES Galician - Galician
ka-GE Georgian - Georgia
de-AT German - Austria
de-DE German - Germany
de-LI German - Liechtenstein
de-LU German - Luxembourg
de-CH German - Switzerland
el-GR Greek - Greece
gu-IN Gujarati - India
he-IL Hebrew - Israel
hi-IN Hindi - India
hu-HU Hungarian - Hungary
is-IS Icelandic - Iceland
id-ID Indonesian - Indonesia
it-IT Italian - Italy
it-CH Italian - Switzerland
ja-JP Japanese - Japan
kn-IN Kannada - India
kk-KZ Kazakh - Kazakhstan
kok-IN Konkani - India
ko-KR Korean - Korea
ky-KZ Kyrgyz - Kazakhstan
lv-LV Latvian - Latvia
lt-LT Lithuanian - Lithuania
mk-MK Macedonian - FYROM
ms-BN Malay - Brunei
ms-MY Malay - Malaysia
mr-IN Marathi - India
mn-MN Mongolian - Mongolia
nb-NO Norwegian (Bokm?l) - Norway
nn-NO Norwegian (Nynorsk) - Norway
pl-PL Polish - Poland
pt-BR Portuguese - Brazil
pt-PT Portuguese - Portugal
pa-IN Punjabi - India
ro-RO Romanian - Romania
ru-RU Russian - Russia
sa-IN Sanskrit - India
sr-SP-Cyrl Serbian (Cyrillic) - Serbia
sr-SP-Latn Serbian (Latin) - Serbia
sk-SK Slovak - Slovakia
sl-SI Slovenian - Slovenia
es-AR Spanish - Argentina
es-BO Spanish - Bolivia
es-CL Spanish - Chile
es-CO Spanish - Colombia
es-CR Spanish - Costa Rica
es-DO Spanish - Dominican Republic
es-EC Spanish - Ecuador
es-SV Spanish - El Salvador
es-GT Spanish - Guatemala
es-HN Spanish - Honduras
es-MX Spanish - Mexico
es-NI Spanish - Nicaragua
es-PA Spanish - Panama
es-PY Spanish - Paraguay
es-PE Spanish - Peru
es-PR Spanish - Puerto Rico
es-ES Spanish - Spain
es-UY Spanish - Uruguay
es-VE Spanish - Venezuela
sw-KE Swahili - Kenya
sv-FI Swedish - Finland
sv-SE Swedish - Sweden
syr-SY Syriac - Syria
ta-IN Tamil - India
tt-RU Tatar - Russia
te-IN Telugu - India
th-TH Thai - Thailand
tr-TR Turkish - Turkey
uk-UA Ukrainian - Ukraine
ur-PK Urdu - Pakistan
uz-UZ-Cyrl Uzbek (Cyrillic) - Uzbekistan
uz-UZ-Latn Uzbek (Latin) - Uzbekistan
vi-VN Vietnamese - Vietnam