В предыдущей статье было рассказано о появлении нового стандарта для обмена статистическими данными и метаданными - SDMX (Statistical Data and Metadata Exchange). Предлагаемый ниже материал посвящен техническим деталям нового стандарта - описанию его основных конструкций и понятий; в нем также приводится фрагмент кода. Первая версия стандарта SDMX выпущена в двух вариантах - на основе XML и синтаксиса EDIFACT1.
Основным положением стандарта SDMX является структурированность статистических данных, эта структура названа "ключевым понятием" (key family). "Наборы данных" (data sets) состоят из категорий более низкого порядка - "групп" (groups), которые формируются в зависимости от степени их сходства. Каждая группа, в свою очередь, состоит из одного или нескольких "рядов" (series) данных (или "профилей" (sections) в том случае, если данные представлены не во временных рядах). Каждому ряду или профилю ставится в соответствие так называемый "ключ" (key), т.е. набор значений, соответствующих каждому кластеру так называемых "понятий" (concepts), которые также именуются "измерениями" (dimensions). Этот ключ определяет (идентифицирует) ряд или профиль данных. При этом каждый ряд или профиль данных состоит из одного или более так называемых "наблюдений" (observations), которые обычно включают два элемента: время получения данных и собственно значение (т.е. наблюдаемая величина). Помимо того, метаданные могут быть добавлены на любом уровне этой структуры в качестве описательных "атрибутов" (attributes). "Списки кодов" (сode lists) (или "перечисления" - enumerations) и другие элементы, необходимые для представления данных и метаданных, также используются в тех случаях, когда они могут быть представлены в соответствующих синтаксических форматах.
Между структурой "куба" (cube structure), обычно используемой для обработки статистических данных, и "ключевым понятием" информационной модели SDMX существует некоторое сходство. Важно отметить, что данные, структурированные в соответствие с информационной моделью SDMX, оптимизированы для обмена, в т.ч. с партнерами, которые не имеют технической возможности для обработки данных, поступающих от сложных статистических систем в виде кубических структур. Временные ряды стандарта SDMX могут рассматриваться как "продольные срезы" (slices) куба. Такой срез определяется своим ключом. Ключ содержит значения всех характеристик, входящих в ключевое понятие, за исключением временного измерения. Данные, структурированные в соответствии со стандартом SDMX, могут быть преобразованы в кубические форматы; полученные в результате базы данных могут использоваться для обмена в соответствие с этим стандартом.
В отличие от формата SDMX-EDI, который разработан для поддержки преимущественно пакетного обмена, формат SDMX-ML должен удовлетворять более широкому спектру требований. Действительно, XML-форматы используются для множества различных видов автоматизированной обработки данных и, следовательно, должны поддерживать более разнообразные сценарии обработки. Вот почему язык SDMX-ML включает несколько типов сообщений. Каждый из них приспособлен для поддержки определенного набора требований к обработке данных:
Поскольку все форматы SDMX-ML являются практическим воплощением одной и той же информационной модели, а все сообщения о данных могут быть получены из сообщения об определении структуры, которое описывает набор данных, то между всеми форматами данных возможно осуществление стандартных операций преобразования. Эти операции могут проводиться с помощью родовых инструментов трансформации, полезных для всех пользователей SDMX-ML. Помимо того, эти инструменты не относятся только к отдельным ключевым понятиям наборов данных, а являются общеупотребительными (даже если форматы, с которыми они имеют дело, являются таковыми).
В рассматриваемой архитектуре XML-схемы существует так называемая "схема упаковки" (packaging scheme). В основе этой схемы лежит идея, что пространства имен XML могут быть использованы как модули для того, чтобы любой пользователь или приложение могли иметь доступ ко всей библиотеке, даже зная только часть ее.
Каждый модуль - это отдельный экземпляр элемента схемы W3C XML (W3C XML Schema Language), связанный со своим собственным пространством имен XML. В тех случаях, когда эти модули взаимозависимы, они используют механизм импортирования XML-схемы для использования конструкций, описанных в других модулях. Ниже приведено краткое описание этих модулей:
В заключение кратко рассмотрим основных конструкций языка SDMX-ML, для чего воспользуемся небольшим примером, входящим в состав пакета спецификаций языка SDMX-ML.
Статистические данные, приведенные в этом примере, это величины внешнего долга, подлежащие погашению, в млн. долларов США. Данные приводятся на каждый месяц на начало отчетного периода:
Отчетный период | Данные |
2000-01 | 3.14 |
2000-02 | 3.14 |
2000-03 | 4.29 |
2000-04 | 6.04 |
2000-05 | 5.18 |
2000-06 | 5.07 |
2000-07 | 3.13 |
2008-08 | 1.17 |
2000-09 | 1.14 |
2000-10 | 3.04 |
2000-11 | 1.14 |
2000-12 | 3.24 |
XML-код этого примера представлен в Листинге 1.
Прежде всего стоит обратить внимание на объявления пространств имен, реализующее принцип модульности, о котором шла речь выше.
Корневой элемент <GenericData> используется для передачи данных относящихся к различным основных понятиям. В данном примере в элементе <GenericData> содержатся два сложенных элемента <Header> и <DataSet>. Остановимся на каждом из них.
Элемент первого уровня <Header> определяет заголовочные поля, некоторые из которых представлены в этом примере. Элемент <ID> описывает поток данных, которое в сочетании с указанием времени однозначно идентифицирует набор данных. Элемент <Test> показывает, является ли сообщение тестовым или нет. <Truncated> используется в сообщениях, которые генерируются в ответ на запрос (<Query>), и содержит значение true (истина) только в том случае, если ответ был сокращен в соответствии с требованиями, предъявляемыми к размеру и задаваемыми с помощью атрибута defaultLimit в сообщении запроса. Элементы <Name> и <Prepared> - указывают имя передачи и дату подготовки, соответственно, а <Sender> и <Receiver> несут информацию о передающей и получающей стороне. Элемент <DataSetAgency> содержит идентификатор/сокращение учреждения, хранящего набор данных, а <DataSetID> - идентификатор передаваемого набора данных. Значение элемента <DataSetAction> определяет, является ли данное сообщение обновлением (Update) или подразумевает удаление (Delete) - сообщение нельзя использовать с сообщением UtilityData. <Extracted> -это временная отметка из системы, предоставляющей данные. Наконец, <ReportingBegin> и <ReportingEnd> указывают начало и конец отрезка времени, к которому относится сообщение.
Элемент второго уровня <DataSet> включает одну или несколько групп, которые составляют передаваемый набор данных. Рассмотрим некоторые элементы, входящие в состав <DataSet>: <GroupKey>, <Attributes> и <Series>.
Элемент <GroupKey> содержит знания ключей (элементы <Value>); заметим, что все эти элементы, если они не являются групповыми символами, должны присутствовать и в элементе <Series>. <GroupKey> - необязательный элемент, однако если передаются элементы <Attributes> (т.е. документация - значения ключевых понятий), то <GroupKey> должен присутствовать в сообщении.
Элемент <Series> определяет структуру временного ряда и включает значения ключей (элемент <SeriesKey>), значения для всех атрибутов (элемент <Attributes>) и совокупность наблюдений (элемент <Obs>). Элемент <SeriesKey> описывает содержание ключа временного ряда, при этом для каждого невременного измерения должно быть передано значение (элемент <Value>), причем в том порядке, в котором во ключевом понятии определены измерения. Элемент <Obs> определяет структуру наблюдения - время (элемент <Time>) и значение (элемент <ObsValue>), а также значения для каждого атрибута (<Attributes>), назначенного ключевым понятием для наблюдения.
В этой и предыдущей статье был рассмотрен новый стандарт SDMX для обмена статистическими данными и метаданными между различными организациями как на национальном, так и на международном уровне. Данный формат был разработан в рамках так называемой инициативы SDMX - Statistical Data and Metadata Exchange Initiative2, возникшей при непосредственном участии крупнейших финансовых и экономических международных организаций, таких как Международный валютный фонд, Европейский Центральный Банк и др.
С полной спецификацией этого стандарта можно познакомиться на сайте SDMX-инициативы: http://www.sdmx.org.
1См. прим. 4 в статье "Инициатива SDMX: новые подходы к обмену статистическими данными".
2Инициатива обмена статистическим данными и метаданными.