Содержит
конфигурационную информацию о приложении: имя текущего оператора мобильной связи,
текущий тарифный план, путь к файлу, содержащему информацию обо всех тарифных
планах мобильных операторов Беларуси. Файл содержит следующие теги:
Корневой тег:
<application name="Rater"></application>
Имеет
единственный атрибут name, в котором указывается имя приложения, использующего
данную конфигурацию.
Тег <configuration> находится в корневом теге. Он содержит следующие
теги:
<tariffs path=”path” />
Имеет единственный атрибут 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>
Содержит все мобильные операторы Беларуси и для каждого оператора список всех тарифов. Содержит следующие теги:
Корневой тег <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>
Каждый из этих файлов содержит полное описание тарифного плана: ежемесячный платеж, количество бесплатных минут, стоимость вызовов по направлениям, стоимость отправленных 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-сообщения.
<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 содержит тип параметра, который будет использоваться для определения того, находится или нет значение этого параметра в пределах выбранного диапазона. Этот атрибут может иметь только следующие значения:
Атрибуты 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>
В этом файле указываются правила определения стационарных номеров. Здесь указываются фиксированные части телефонного номера(областные, районные и т.п. коды). Необязательно указывать все коды, необходимо указать только те, наличие которых будет достаточным для явного определения номера стационарной сети. Так для Беларуси, чтобы явно идентифицировать стационарный телефонный номер достаточно указать только областные коды.
Корневой тег <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 |