XBRL: просто о сложном ? Глава 6. Погружение в XBRL ? Часть 4. Как облегчить жизнь +8


6.4. Как облегчить жизнь


До сих пор мы использовали только простые item-концепты. Каждый из nr_employees-концептов мог быть интерпретирован независимо от остальных.


У такого подхода есть недостаток: если количество полов обычно ограничивается двумя, то для возраста мы могли бы иметь большее количество групп, чем три в нашем примере. Что, если бы нам понадобилось разделить возраста на 10-летние интервалы? Пришлось бы добавить новые концепты для групп 11–20, 21–30, 31–40, 41–50, 51–60 и 61–70. А при делении на 5-летние, 2-летние или даже годовые интервалы это очень быстро станет утомлять. Базы ссылок стали бы очень большими, поскольку надо было бы определять ссылки для каждого из этого множества концептов. Хотелось бы иметь более эффективный подход для подобных ситуаций.


И сегодня мы расскажем, как нам в этом могут помочь кортежи.


Примечание: Это не очень хороший пример. Категоризация концептов, как например по полу или возрастным группам, должна быть определена в так называемых таксономиях измерений (dimensional taxonomy), о которых мы поговорим в следующих главах.

6.4.1. Структурные изменения


Обозначенная выше проблема возникает потому, что мы включили категорию (пол, возрастная группа) в концепт Количество сотрудников. Что, если мы разделим их на два разных концепта?


Это приведет к следующим определениям концептов:


<element
  id="sample_nr_employees_total"
  name="nr_employees_total"
  xbrli:periodType="instant"
  type="xbrli:nonNegativeIntegerItemType"
  substitutionGroup="xbrli:item"
  nillable="true" />
<element
  id="sample_nr_employees"
  name="nr_employees"
  xbrli:periodType="instant"
  type="xbrli:nonNegativeIntegerItemType"
  substitutionGroup="xbrli:item"
  nillable="true" />
<element
  id="sample_gender"
  name="gender"
  xbrli:periodType="instant"
  type="xbrli:stringItemType"
  substitutionGroup="xbrli:item"
  nillable="true" />
<element
  id="sample_age_group"
  name="age_group"
  xbrli:periodType="instant"
  type="xbrli:stringItemType"
  substitutionGroup="xbrli:item"
  nillable="true" />

Теперь большинство наших концептов не может интерпретироваться независимо – например, что означает gender или nr_employees?


Тут в игру вступают кортежи: комбинация gender с nr_employees и комбинация age_group с nr_employees уже несут определенный смысл.


<element
  id="sample_gender_data"
  name="gender_data"
  substitutionGroup="xbrli:tuple"
  nillable="true">
  <complexType>
    <sequence>
      <element ref="sample:gender"/>
      <element ref="sample:nr_employees"/>
    </sequence>
  </complexType>
</element>
<element
  id="sample_age_group_data"
  name="age_group_data"
  substitutionGroup="xbrli:tuple"
  nillable="true">
  <complexType>
    <sequence>
      <element ref="sample:age_group"/>
      <element ref="sample:nr_employees"/>
    </sequence>
  </complexType>
</element>

Кортеж представляет собой элемент со значением tuple атрибута substitutionGroup. Он содержит составной тип (complexType), в котором задана последовательность (sequence) концептов.


Для использования новых концептов-кортежей нам нужно обновить связи с базами ссылок ярлыков и презентаций.


Связи с базой презентаций должны выглядеть примерно так:


<presentationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/genderDemographics" >

  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_nr_employees_total"
    xlink:label="concept_nr_employees_total" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_gender_data"
    xlink:label="concept_gender_data" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_gender"
    xlink:label="concept_gender" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_nr_employees"
    xlink:label="concept_nr_employees" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_gender_data"
    order="1" 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_gender_data"
    xlink:to="concept_gender"
    order="1" 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_gender_data"
    xlink:to="concept_nr_employees"
    order="2" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
</presentationLink>

<presentationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/ageDemographics" >

  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_nr_employees_total"
    xlink:label="concept_nr_employees_total" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_age_group_data"
    xlink:label="concept_age_group_data" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_age_group"
    xlink:label="concept_age_group" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-04.xsd#sample_nr_employees"
    xlink:label="concept_nr_employees" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_age_group_data"
    order="1" 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_age_group_data"
    xlink:to="concept_age_group"
    order="1" 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_age_group_data"
    xlink:to="concept_nr_employees"
    order="2" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
</presentationLink>

Кортежи размещаются под итоговым концептом (concept_nr_employees_total) и в качестве дочерних элементов содержит входящие в него концепты.


6.4.2. И как это выглядит?


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


image


Обратите внимание, что хоть наше приложение и неплохо справляется с отображением простых кортежей, в общем случае это может быть достаточно сложной задачей. Элементы в кортежах необязательно должны ссылаться на один и тот же контекст. И кортежи могут иметь бесконечную вложенность, хотя на практике вы вряд ли такое встретите.


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








К сожалению, не доступен сервер mySQL