• Техногрет
  • Телефонные номера

    HTML и CSSXSLTJavaScriptИзображенияСофтEtc
    Андрей Шитов

    13 января 2006


    Задача. На реальных примерах показать, почему телефонные номера удобнее записывать в виде XML.

    На сайтах, созданных с применением XSLT, содержимое страниц обычно хранят в виде XML-документов (не важно, в файлах или в базе данных). Телефонные номера, упоминаемые на сайте, разумнее записывать не простым текстом, а с помощью специально выделенного тега, например, <phone>. Это не только сделает XML-данные более структурированными, но и даст новые возможности для отображения сайта разным группам пользователей.

    Историческое отступление

    В качестве иллюстрации посмотрим на телефонный код, выделенный Украине. Одни источники приводят код 38, другие (как правило, зарубежные) 380. Даже на сайтах «Ростелекома» и МГТС разные данные. Люди иногда спорят, но ответ вполне можно найти, если покопаться в веб-архивах или в собственной памяти, и понять, откуда взялся код 38, и почему к нему приписали нуль.

    Официальный международный код Украины — 380. Он был введен в действие 16 апреля 1995 года, о чем сообщается в бюллетене МСЭ № 590. Там же приведен пример набора киевского номера до (+7 044 XXXXXXX) и после (+380 44 XXXXXXX) указанной даты.

    Когда Украина пользовалась кодом СССР (7), из Москвы в Киев можно было позвонить, набрав 8 044, то есть так же, как и в любой другой город на территории СССР. При этом коды всех украинских городов начинались c нуля. А теперь нуль оказывается то последней цифрой в коде страны, то первой в коде города. Интересно, что такая проблема коснулась не только замены кода 7 в бывших союзных республиках. Желающим предлагаю ознакомиться с таблицей A reference scenario for moving to an open and unified European numbering environment в приложении 5 документа Green paper on a numbering policy for telecommunications services in Europe.

    На сайте Министерства транспорта и связи Украины 18 апреля 2005 года было опубликовано сообщение о десятилетии введения международного кода 380. К сожалению, от новости остались только заголовок в кеше Гугла и перепечатанный текст на сайте «Портал 2000».

    На одном из сайтов, который сделан в студии, принят такой формат записи телефонных номеров в XML-коде: <phone country="7" city="495">5401800</phone>. Если подряд идут несколько номеров, они записаны в единой группе:

    <phone country="7" city="495">
    	<item>1112233</item>
    	<item>4445566</item>
    	<item>7778899</item>
    </phone>
    

    Обратите внимание на отсутствие дефисов в номерах. Оформление номера (расстановка скобок и дефисов) полностью определено правилами в XSLT-шаблоне. Польза от применения XML еще и в том, что теперь нетрудно изменить формат отображения номеров на всем сайте, исправив лишь один фрагмент в XSLT.

    Менее очевидное преимущество — легкость замены кодов городов и стран. Когда у Москвы сменился код (вместо 095 стал 495), правки достаточно было сделать лишь в XSLT. Так же просто было изменить отображение номеров, когда 28 февраля 2004 года в Екатеринбурге ввели семизначную нумерацию (вместо шестизначной), заменив попутно и код города (343 вместо 3432). Правила изменения екатеринбургских номеров четко определены и легко поддаются автоматизации.

    При таком прямолинейном решении возникает противоречие: например, в старом XML-файле записано city="095", а на выходе появляется (495). Чтобы избежать этого, достаточно указывать не цифровые коды, а названия городов и стран. Например: <phone country="russia" city="moscow">5401800</phone>, хотя это потребует дополнительных затрат на создание списка кодов.

    Само XSLT-преобразование настолько простое, что его создание предлагается читателю в качестве упражнения.

    Геотаргетинг (geotargeting) — замечательная вещь, если в вашем распоряжении есть база распределения IP-адресов (простейшая и наименее точная реализация геотаргетинга — это попытка угадать страну на основе значения переменной окружения HTTP_ACCEPT_LANGUAGE).

    Один и тот же телефонный номер следует показывать по-разному в зависимости от того, где находится читатель. Например, московский номер для посетителя, читающего сайт в Москве, достаточно показывать в самом коротком варианте: 540-18-00. Для человека, зашедшего из другого города России, номер желательно снабдить междугородным кодом: (495) 540-18-00. Тем, кто находится за границей, покажем и код страны: +7 495 540-18-00.