В предыдущей
статье было рассказано о появлении нового стандарта для обмена
статистическими данными и метаданными - 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
В отличие от формата SDMX-EDI, который разработан для поддержки
преимущественно пакетного обмена, формат SDMX-ML должен удовлетворять
более широкому спектру требований. Действительно, XML-форматы
используются для множества различных видов автоматизированной обработки
данных и, следовательно, должны поддерживать более разнообразные
сценарии обработки. Вот почему язык SDMX-ML включает несколько типов
сообщений. Каждый из них приспособлен для поддержки определенного набора
требований к обработке данных:
- Определение структуры (Structure Definition). Все типы
сообщений формата SDMX-ML имеют общий способ представления
метаданных, необходимых для понимания и обработки набора данных.
Этот способ представления основывается на языке XML.
- Данные родового типа (Generic Data). Все статистические
данные, которые можно оформить с помощью стандарта SDMX-ML, могут
быть размечены в соответствии с этим форматом данных согласно
содержанию сообщения об определении структуры. Этот формат
разработан для предоставления данных на web-сайтах, а также для
работы с ними при таких сценариях, когда приложения, получающие
данные, не могут детально распознать структуру набора данных до его
окончательной загрузки. Данные, оформленные в таком формате, не
отличаются компактностью, но зато предоставляют возможность легко
использовать все аспекты набора данных. Однако этот формат не
обеспечивает строгой проверки соответствия между набором данных и
его структурным определением с помощью родового XML-парсера.
- Компактные данные (Compact Data). Этот формат имеет
отношение только к ключевому понятию того набора данных, который он
определяет. Он создается путем последовательных операций
преобразования ("мэппинга") между конструкциями метаданных, заданных
в сообщении об определении структуры, и компактным
форматом. Формат поддерживает обмен больших наборов данных в формате
XML (похожем на SDMX-EDI) и предусматривает передачу как неполных
(поэтапное обновление), так и целых наборов данных.
- Вспомогательные данные (Utility Data). От многих
инструментов и технологий XML ожидают выполнения функций, за которые
"отвечает" схема XML. Одна из этих функций - тесная связь между
XML-конструкциями, описанными в схеме, и данными в соответствующем
XML-документе. Жесткое определение типа данных также рассматривается
как нормальное явление; оно поддерживает полную проверку данных,
снабженных тэгами. Этот тип сообщений, также как и сообщения
компактных данных, относится только к ключевому понятию набора
данных, но он разработан для поддержки проверки и других функций
XML-схемы. Он также может быть получен из сообщения об
определении структуры путем проведения ряда стандартных
операций преобразования. Для проведения проверки с помощью
XML-парсера необходимо, чтобы набор данных был полным.
- Перекрестные данные (Cross-Sectional Data). В отличие
от данных, ориентированных на обработку в виде временных рядов,
часть статистических данных состоит из большого количества
наблюдений, полученных в один и тот же момент времени. Этот тип
сообщений, так же как и сообщения компактных данных,
относится только к ключевому понятию набора данных, но ориентирован
на этот отличный от временных рядов способ представления данных.
Перекрестный формат основывается на том же описании структуры набора
данных, что и другие форматы (форматы временных рядов) для того,
чтобы поиск мог осуществляться среди временных рядов, а его
результаты затем форматировались для этого типа обработки, если это
необходимо.
- Запрос (Query). Данные и метаданные часто находятся в
базах данных, доступных через интернет. Поэтому возникает
необходимость в стандартном документе запроса, который позволял бы
осуществлять поиск в базах данных и возвращать результаты в формате
SDMX-ML. Документ запроса - это практическое применение
информационной модели SDMX для использования в web-сервисах и
приложениях, которые управляются базами данных. Он позволяет
посылать стандартные запросы провайдерам данных, используя эти
технологии.
Поскольку все форматы SDMX-ML являются практическим воплощением одной
и той же информационной модели, а все сообщения о данных могут быть
получены из сообщения об определении структуры, которое
описывает набор данных, то между всеми форматами данных возможно
осуществление стандартных операций преобразования. Эти операции могут
проводиться с помощью родовых инструментов трансформации, полезных для
всех пользователей SDMX-ML. Помимо того, эти инструменты не относятся
только к отдельным ключевым понятиям наборов данных, а являются
общеупотребительными (даже если форматы, с которыми они имеют дело,
являются таковыми).
Модули XML-схемы
В рассматриваемой архитектуре XML-схемы существует так называемая
"схема упаковки" (packaging scheme). В основе этой схемы лежит идея, что
пространства имен XML могут быть использованы как модули для того, чтобы
любой пользователь или приложение могли иметь доступ ко всей библиотеке,
даже зная только часть ее.
Каждый модуль - это отдельный экземпляр элемента схемы W3C XML (W3C
XML Schema Language), связанный со своим собственным пространством имен
XML. В тех случаях, когда эти модули взаимозависимы, они используют
механизм импортирования XML-схемы для использования конструкций,
описанных в других модулях. Ниже приведено краткое описание этих
модулей:
- модуль, содержащий конструкции общего сообщения, в том числе
общую информацию заголовка, используется со всеми другими модулями
SDMX (Файл схемы - "SDMXMessage.xsd");
- модуль, содержащий описание структурных метаданных, таких как
ключевые понятия, концепции и перечни кодов (Файл схемы -
"SDMXStructure.xsd");
- модуль, содержащий конструкции, общие для всех типов
SDMX-сообщений (Файл схемы - "SDMXCommon.xsd"). Он необходим для
всех остальных SDMX-ML-модулей. Для удобства добавлено пространство
имен XML ["xml.xsd"], предоставляемое W3C для включения атрибута
xml:lang в схемы;
- модуль, описывающий родовой формат (т.е. формат, не относящийся
только к какому-то одному ключевому понятию) для форматирования
данных (Файл схемы "SDMXGenericData.xsd");
- модуль для описания структуры сообщения родового запроса (Файл
схемы "SDMXQuery.xsd"). Этот модуль необходим, в частности,
создателям и пользователям web-сервисов;
- модуль, устанавливающий общие рамки для использования во всех
схемах, относящихся только к одному ключевому понятию, для обмена,
обновления и исправления баз данных (Файл схемы
"SDMXCompactData.xsd"). Этот модуль может использоваться при
двустороннем взаимодействии;
- набор модулей, создаваемых и поддерживаемых теми, кто создает
"компактные" схемы, относящиеся к конкретным к ключевым понятиям.
Этот набор не поддерживается организацией SDMX;
- модуль, устанавливающий общие рамки для использования во всех
схемах, относящихся только к одному ключевому понятию, для
web-мастеров и разработчиков, использующих стандартные инструменты
XML (Файл схемы "SDMXUtilityData.xsd"). Этот модуль необходим для
обработки и публикации;
- набор модулей, создаваемых и поддерживаемых теми, кто создает
"прикладные" ("Utility") схемы, относящиеся только к одному
ключевому понятию. Этот набор не поддерживается организацией SDMX;
- модуль, устанавливающий общие рамки для использования во всех
схемах, относящихся только к одному ключевому понятию, для
перекрестных данных (Файл схемы "SDMXCrossSectionalData.xsd"). Этот
модуль используется для двусторонней и перекрестной обработки
данных;
- набор модулей, создаваемых и поддерживаемых теми, кто создает
"перекрестные" (Файл схемы "Cross-sectional") схемы, относящиеся
только к одному ключевому понятию. Этот набор не поддерживается
организацией SDMX.
Пример электронного документа в формате SDMX-ML
В заключение кратко рассмотрим основных конструкций языка 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
Инициатива обмена статистическим данными и метаданными.