6. Погружение в XBRL


В предыдущих главах мы потрогали пальцем воду, выясняя, что представляет из себя XBRL, и что с его помощью можно сделать. С этим багажом знаний мы готовы к полному погружению в настоящий XBRL в нашей заключительной главе. Мы рассмотрим основные шаги по созданию таксономии и отчета и покажем, как XBRL выглядит в реальной жизни.


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


Примечание: Мы не будем создавать базы ссылок определений (definition linkbase) и базы ссылок на реcурсы (reference linkbase). В реальной жизни вы могли бы создать по крайней мере одну из них, чтобы более подробно описать свои концепты, но для целей данной главы они не нужны. После того, как вы освоите базы ссылок ярлыков (label linkbase) и презентаций (presentation linkbase), с пониманием баз ссылок определений и ресурсов не должно возникнуть никаких проблем.


6.1. Приступаем


Начнем с простой таксономии для нашего примера.


6.1.1. Схема таксономии


Прежде всего нам нужен документ, содержащий схему таксономии.


Хорошей практикой является использование в имени документа даты создания таксономии, чтобы легко различать созданные в разное время версии таксономии.


Давайте считать, что мы начинаем наш маленький проект в первый день года, сразу после боя курантов, тогда назовем документ с таксономией следующим образом – ‘sample-2017-01-01.xsd’. Будем обсуждать наш документ небольшими частями, создавая таксономию шаг за шагом.


6.1.1.1. Корень схемы

Как и в любой XML-схеме, мы начинаем с корневого элемента schema:


<schema
  targetNamespace="http://www.sample.com/2017-01-01"
  xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:xbrli="http://www.xbrl.org/2003/instance"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:sample="http://www.sample.com/2017-01-01">
 ...
</schema>

Обратите внимание на атрибуты внутри корневого элемента:


  • targetNameSpace
    Определяет пространство имен (namespace) элементов схемы. Поддерживающее схему программное обеспечение, которое будет используется для обработки таксономии или связанного с ней отчета, должно использовать это пространство имен для обращения к схеме или ее частям.

Остальные атрибуты определяют префиксы элементов схемы. Префикс указывает, каким пространством имен определяется элемент:


  • xmlns
    Пространство имен XML Schema – является значением по умолчанию для всех элементов без префикса;
  • xmlns:xbrli
    Пространство имен отчета XBRL (instance);
  • xmlns:link
    Пространство имен XBRL Link;
  • xmlns:xlink
    Пространство имен XML Schema XLink;
  • xmlns:sample
    Наконец, любые определенные нами элементы, которые находятся в целевом пространстве имен, будут иметь префикс sample.

Все приведенные ниже документы имеют одинаковые атрибуты определения пространств имен в корневом элементе. Мы не будем описывать их отдельно для каждого нового типа элемента.


Спецификация XBRL включает в себя ряд схем:
  • XBRL Instance
    Содержит определения (типы, атрибуты, элементы), необходимые для объявления фактов и концептов;
  • XBRL Linkbase
    Содержит определения, необходимые для объявления ссылок от одной части таксономии (или базы ссылок) к другой;
  • XBRL XLink
    Используется для объявления самих баз ссылок, это пространство имен понадобится вам при создании собственного расширения спецификации XBRL;
  • W3C XLink
    Пространство имен для XML Link; обратите внимание, что схема для этой части спецификации находится на сайте xbrl.org, поскольку W3C не предоставляет эту схему, а для спецификации XBRL она необходима.


6.1.1.2. Импорт схемы отчета

Наш следующий шаг – импортировать схему отчета XBRL, чтобы мы могли использовать конструкции из нее в своих определениях элементов.


<import
  namespace="http://www.xbrl.org/2003/instance"
  schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd" />

Элемент import должен точно определить схему, идентифицированную пространством имен. Документ схемы, на который указывает URI в атрибуте schemaLocation, должен реально существовать.

Схема отчета XBRL импортирует схему XBRL Linkbase, а она, в свою очередь, импортирует схемы XBRL XLink и W3C XLink. Это означает, что нам не нужно самостоятельно импортировать эти схемы.

Пространство имен W3C XML Schema стандартизировано и автоматически распознается поддерживающим нашу схему программным обеспечением.

6.1.1.3. Концепты

Концепты в нашей таксономии определяются как элементы схемы. Из нашего примера мы ранее получили следующие концепты:


Имя Тип
nr_employees_total non-negative integer item
nr_employees_male non-negative integer item
nr_employees_female non-negative integer item
nr_employees_age_up_to_20 non-negative integer item
nr_employees_age_21_to_40 non-negative integer item
nr_employees_age_41_and_up non-negative integer item

Концепт, отражающий общее количество сотрудников, определяется следующим образом:


<element
  id="sample_nr_employees_total"
  name="nr_employees_total"
  xbrli:periodType="instant"
  type="xbrli:nonNegativeIntegerItemType"
  substitutionGroup="xbrli:item"
  nillable="true" />

Разберем атрибуты концепта:


  • id
    Этот идентификатор используется для обозначения концепта в других документах, таких как базы ссылок. Он должен быть уникальным в пределах схемы. Для id концепта мы использовали префикс ‘sample_’, чтобы сделать его глобально уникальным.
  • name
    Указанное в этом атрибуте наименование идентифицирует концепт внутри таксономии и отчета. Оно должно быть уникальным в пределах таксономии.
  • xbrli:periodType
    Каждый концепт должен иметь связанный с ним тип периода. В нашем примере количество сотрудников указывается на начало и на конец периода, то есть на дату. Для таких концептов используется значение instant.
  • type
    Количество сотрудников является целым числом; сотрудник, работающий неполный день, также считается как единица, а не дробь. Поскольку отрицательного количества сотрудников быть не может, мы используем тип nonNegativeIntegerItemType, определенный в схеме отчета XBRL.
  • substitutionGroup
    Это простой концепт, не являющийся кортежем, поэтому здесь указываем значение item, определенное в схеме отчета XBRL.
  • nillable
    Рекомендуется всегда указывать концепты как nillable, это позволяет передавать по ним пустые факты.

Остальные концепты определяются аналогично, но каждый со своими значениями атрибутов id и name.


Нам также понадобится абстрактный концепт, который будет служить корнем иерархии представления нашего отчета. Ему (произвольно) присвоим тип xbrli:stringItemType. Для передачи фактов абстрактные концепты не используются, поэтому можно указать любой тип для удовлетворения требований спецификации XBRL по его наличию.


<element
  id="sample_presentation_root"
  name="presentation_root"
  xbrli:periodType="instant"
  type="xbrli:stringItemType"
  substitutionGroup="xbrli:item"
  abstract="true"
  nillable="true" />

Абстрактный концепт должен иметь атрибут abstract со значением true.


6.1.1.4. Связи с базами ссылок

Если мы хотим представить полноценную таксономию или отчет, нам надо предоставить дополнительную информацию о концептах в виде баз ссылок. Начнем с двух из них – базы ярлыков и базы презентаций.


Связь с базами ссылок указывается в элементе appinfo, который размещается внутри элемента annotation:


<annotation>
  <appinfo>
    <link:linkbaseRef
      xlink:type="simple"
      xlink:href="sample-2017-01-01-label.xml"
      xlink:role="http://www.xbrl.org/2003/role/labelLinkbaseRef"
      xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" />
    <link:linkbaseRef
      xlink:type="simple"
      xlink:href="sample-2017-01-01-presentation.xml"
      xlink:role="http://www.xbrl.org/2003/role/presentationLinkbaseRef"
      xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" />
  </appinfo>
</annotation>

У связи с базой ссылок есть следующие атрибуты:


  • xlink:type
    Здесь всегда указывается simple.
  • xlink:href
    В этом атрибуте указывается сама ссылка на базу. В нашем примере мы ссылаемся на базы ярлыков и презентаций, о которых поговорим позже.
  • xlink:role
    Атрибут ‘роль’ определяет тип базы ссылок. Мы используем значения labelLinkbaseRef и presentationLinkbaseRef, определенные схемой XBRL Linking.
  • xlink:arcrole
    Ролью дуги к базе ссылок всегда указывается определенное в XLink значение linkbase.

6.1.2. База ссылок ярлыков


База ярлыков содержит три типа элементов:


  • локаторы для определения концептов таксономии, которым присваивается ярлык;
  • ресурсы, которые содержат сами ярлыки;
  • дуги ярлыков, связывающие концепт (через его локатор) с ярлыком.

Эти элементы размещаются внутри элемента labelLink:


<?xml version="1.0" encoding="UTF-8"?>
<linkbase
  xmlns="http://www.xbrl.org/2003/linkbase"
  xmlns:xbrli="http://www.xbrl.org/2003/instance"
  xsi:schemaLocation="http://www.xbrl.org/2003/instance
                      http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:sample="http://www.sample.com/2017-01-01">
  <labelLink xlink:type="extended" xlink:role="http://www.xbrl.org/2003/role/link">
  ...
  </labelLink>
</linkbase>

У элемента labelLink есть следующие атрибуты:


  • xlink:type
    Здесь всегда указывается extended.
  • xlink:role
    Для ссылок по умолчанию используется роль link.

6.1.2.1. Локтаторы (locator)

Локаторы размещаются в элементы loc. Они указывают на концепты связанной с ними таксономии.


<loc
  xlink:type="locator"
  xlink:href="sample-2017-01-01.xsd#sample_nr_employees_total"
  xlink:label="concept_nr_employees_total" />

  • xlink:type
    Типом элемента loc всегда указывается locator, означающий, что он используется как локатор (концептов).
  • xlink:href
    Указывает на фактическое местоположение концепта. Обратите внимание, что тут мы используем его id.
  • xlink:label
    Локатору присваивается ярлык для обращения к нему внутри базы ссылок. В качестве значения ярлыка мы будем использовать id концепта с префиксом ‘concept_’.

6.1.2.2. Ярлыки

Для определения ярлыков используется элемент label.


<label 
  xlink:type="resource" 
  xlink:label="label_nr_employees_total"
  xlink:role="http://www.xbrl.org/2003/role/label"
  xml:lang="en">Total number employees</label>
<label 
  xlink:type="resource" 
  xlink:label="label_nr_employees_total"
  xlink:role="http://www.xbrl.org/2003/role/terseLabel"
  xml:lang="en">Total</label>
<label 
  xlink:type="resource" 
  xlink:label="label_nr_employees_total"
  xlink:role="http://www.xbrl.org/2003/role/verboseLabel"
  xml:lang="en">Total number of employees</label>

  • xlink:type
    Типом всегда является значение ‘resource’, указывающее, что ярлык является локальным ресурсом базы ссылок.
  • xlink:label
    Как и в случае с локаторами, значение атрибута label обеспечивает возможность обращаться к ярлыку внутри базы ссылок. Обратите внимание, что каждая из приведенных меток связана с одним и тем же концептом, и во всех из них используется одно и то же значение атрибута. Это позволяет использовать связь один-ко-многим от концепта к его ярлыкам. В нашем примере это три разных вида ярлыков для концепта ‘nr_employees_total’.
  • xlink:role
    Роль определяет вид используемого ярлыка. Спецификация XBRL предоставляет большое количество предопределенных ролей. В примере мы используем три вида – нормальный, краткий и развернутый ярлыки. Приложение для работы с таксономией или отчетом XBRL позволяет выбрать наиболее подходящий вид ярлыков. Базы ссылок презентаций также могут указывать предпочтительный вид ярлыка.
  • xml:lang
    В этом атрибуте указывается язык метки. В примере мы используем только английский язык, но в базу ссылок можно включать ярлыки на любых языках.

6.1.2.3. Дуги ярлыков

Наконец, после определения локаторов к концептам и ресурсов ярлыков, мы можем связать их с помощью дуг ярлыков.


<labelArc 
  xlink:type="arc" 
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" 
  xlink:from="concept_nr_employees_total" 
  xlink:to="label_nr_employees_total" />

  • xlink:type
    Типом всегда указываем ‘arc’, дуга (кто бы мог подумать).
  • xlink:arcrole
    Роль дуги определяет вид связи. Для ярлыков указывается ‘concept-label’, дуга между концептом и ярлыком.
  • xlink:from
    Указывает на одну из сторон дуги, в нашем случае на концепт. Мы используем label локатора в качестве значения этого атрибута.
  • xlink:to
    Указывает на вторую сторону дуги, на ресурсы ярлыка, также с использованием label ресурса.

Поскольку мы использовали один и тот же label для трех разных ярлыков, наша дуга образует связь один-ко-многим между концептом и его ярлыками.


6.1.3. База ссылок презентаций


Презентации содержат два типа элементов:


  • Локаторы концептов таксономии, используемых в иерархии представления;
  • Дуги представлений, связывающие концепты между собой через их локаторы.

Все они располагаются внутри элемента presentationLink:


<?xml version="1.0" encoding="utf-8"?>
<linkbase
  xmlns="http://www.xbrl.org/2003/linkbase"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:xbrli="http://www.xbrl.org/2003/instance"
  xsi:schemaLocation="http://www.xbrl.org/2003/instance
                      http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <presentationLink
    xlink:type="extended"
    xlink:role="http://www.xbrl.org/2003/role/link" >
    ...
  </presentationLink>
</linkbase>

6.1.3.1. Локаторы


Здесь все аналогично базе ссылок ярлыков, не будем повторяться.


6.1.3.2. Дуги презентаций


Дуги презентаций связывают концепты в parent-child иерархию (дерево):


<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_presentation_root"
  xlink:to="concept_nr_employees_total"
  order="1" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/label" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_presentation_root"
  xlink:to="concept_nr_employees_male"
  order="2" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_presentation_root"
  xlink:to="concept_nr_employees_female"
  order="3" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
...

  • xlink:type
    Как и ранее, ‘arc’.
  • xlink:arcrole
    Роль дуги презентации – ‘parent-child’, она указывает на то, что база ссылок презентаций представляет собой иерархическую структуру.
  • xlink:from
    Указывает на родительский концепт иерархии через его локатор. В нашем примере не было подходящего концепта, поэтому для корня иерархии мы используем абстрактный концепт ‘presentation_root’.
  • xlink:to
    Указывает на дочерний концепт иерархии через его локатор. В нашем примере все концепты располагаются под корневым концептом ‘presentation_root’.
  • order
    Этот атрибут задает порядок следования дочерних элементов, расположенных под общим родительским элементом.
  • priority
    Используется для переопределения баз ссылок. В нашем примере мы этого не делаем (пока что).
  • use
    Указывая значение optional, мы обозначаем, что концепт может быть частью сети презентаций. Общепринятой практикой является указание этого значения, хотя оно же используется по умолчанию в случае отсутствия атрибута.
  • preferredLabel
    Ранее мы создали несколько видов ярлыков в нашей базе ссылок ярлыков. Здесь мы видим, как в базе ссылок презентаций указывается предпочтительный вид ярлыка для дочернего (to) концепта дуги.

Примечание: Поскольку атрибут preferredLabel может указываться только для дочерних концептов, корневой элемент иерархии презентации предпочтительного вида ярлыка иметь не может.


6.1.4. Отчет XBRL


Создав таксономию, мы можем использовать ее для создания отчета.


Документ с отчетом XBRL содержит следующие виды элементов:


  • Ссылки на схему таксономии;
  • Контексты для фактов;
  • Единицы измерения для числовых фактов;
  • Сами значения фактов.

Все эти элементы размещаются внутри элемента xbrl:


<?xml version="1.0" encoding="utf-8"?>
<xbrl
  xmlns="http://www.xbrl.org/2003/instance"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
  xmlns:s="http://www.sample.com/2017-01-01">
  ...
</xbrl>

6.1.4.1. Ссылка на схему таксономии

Ссылка на схему указывается в элементе schemaRef:


<link:schemaRef
  xlink:type="simple"
  xlink:href="http://www.sample.com/2017-01-01/sample-2017-01-01.xsd" />

  • xlink:type
    Указываем тип связи ‘simple’.
  • xlink:href
    Ссылка задается как href-атрибут. Он указывает расположение схемы таксономии на сайте ее создателя.

6.1.4.2. Контекст

У нас в примере есть два контекста – начало отчетного периода и конец отчетного периода:


<context id="c_start">
  <entity>
    <identifier scheme="http://www.statistics.org">12-34567</identifier>
  </entity>
  <period>
    <instant>2016-01-01</instant>
  </period>
</context>
<context id="c_end">
  <entity>
    <identifier scheme="http://www.statistics.org">12-34567</identifier>
  </entity>
  <period>
    <instant>2016-12-31</instant>
  </period>
</context>

  • id
    Используется для связи факта с контекстом. Это значение должно быть уникально в пределах отчета.
  • entity
    Здесь указывается организация, по данным которой составляется отчет.
    • identifier
      Этот элемент использует схему (scheme) для определения того, по какой организации составляется отчет. В нашем примере мы используем несуществующую схему на вымышленном сайте.
  • period
    Здесь указывается период или дата контекста.
    • instant
      В нашем примере у нас два instant-контекста, для дат начала и окончания отчетного периода соответственно.

Ссылка, указанная в элементе identifier, ссылается на несуществующую статистическую организацию, которая публикует идентификаторы подотчетных организаций. Наша воображаемая компания имеет идентификатор ‘12-34567’. В реальном мире мы бы использовали, к примеру, тикер фондовой биржи или идентификатор организации в национальном налоговом органе.

6.1.4.3. Единицы измерения

Для всех числовых фактов должны быть указаны единицы измерения:


<unit id="u_person">
  <measure>Person</measure>
</unit>

  • id
    Используется для связи факта с единицей измерения. Это значение должно быть уникально в пределах отчета.
  • measure
    Идентифицирует единицу измерения. В нашем примере мы определили собственную единицу измерения – ‘Person’.

6.1.4.4. Факты

Теперь мы наконец достигли финальной цели всего нашего упражнения – передачи фактов:


<s:nr_employees_total
  contextRef="c_start"
  unitRef="u_person"
  decimals="0">35</s:nr_employees_total>
<s:nr_employees_total
  contextRef="c_end"
  unitRef="u_person"
  decimals="0">41</s:nr_employees_total>

<!-- Пол -->
<s:nr_employees_male
  contextRef="c_start"
  unitRef="u_person"
  decimals="0">23</s:nr_employees_male>
<s:nr_employees_male
  contextRef="c_end"
  unitRef="u_person"
  decimals="0">27</s:nr_employees_male>
<s:nr_employees_female
  contextRef="c_start"
  unitRef="u_person"
  decimals="0">12</s:nr_employees_female>
<s:nr_employees_female
  contextRef="c_end"
  unitRef="u_person"
  decimals="0">15</s:nr_employees_female>

<!-- Возрастные группы -->
<s:nr_employees_age_up_to_20
  contextRef="c_start"
  unitRef="u_person"
  decimals="0">5</s:nr_employees_age_up_to_20>
<s:nr_employees_age_up_to_20
  contextRef="c_end"
  unitRef="u_person"
  decimals="0">9</s:nr_employees_age_up_to_20>
<s:nr_employees_age_21_to_40
  contextRef="c_start"
  unitRef="u_person"
  decimals="0">23</s:nr_employees_age_21_to_40>
<s:nr_employees_age_21_to_40
  contextRef="c_end"
  unitRef="u_person"
  decimals="0">21</s:nr_employees_age_21_to_40>
<s:nr_employees_age_41_and_up
  contextRef="c_start"
  unitRef="u_person"
  decimals="0">7</s:nr_employees_age_41_and_up>
<s:nr_employees_age_41_and_up
  contextRef="c_end"
  unitRef="u_person"
  decimals="0">11</s:nr_employees_age_41_and_up>

Каждый факт – это отдельный связанный с концептом элемент. Значение элемента является значением факта.


  • contextRef
    Каждый факт ссылается на свой контекст через id контекста. Наш пример содержит факты для каждого концепта в каждом из контекстов.
  • unitRef
    Поскольку для всех числовых фактов должны быть указаны единицы измерения, в нашем примере заполняем здесь ‘u_person’.
  • decimals
    Для числовых фактов должен быть задан один из атрибутов – decimals (десятичные знаки) или precision (точность). В нашем примере все факты целочисленные, поэтому указываем decimals со значением ‘0’.

6.1.5. С гордостью представляем вам – наш отчет XBRL


После всей проделанной работы нам хотелось бы увидеть, как формируется наш отчет в привязке к таксономии и, в частности, к базам ссылок презентаций и ярлыков.


Для этого воспользуемся простым инструментом, который создает веб-страничку для нашего отчета с отображением фактов в табличном виде. Он располагает контексты в столбцах таблицы, а ярлыки концептов из базы ссылок ярлыков – слева от нее. Иерархия концептов, определенная в базе ссылок презентаций, задает порядок следования и отступы для фактов.


Полученный нами результат выглядит примерно следующим образом:


image


В общем, мы неплохо потрудились!





Комментарии (0)