Tabtree: различия между версиями

Материал из hpluswiki
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 15 промежуточных версий этого же участника)
Строка 1: Строка 1:
Формат для унифицированной записи данных и мета-информации об этих данных. Также может использоваться для записи онтологий (как расширение описания мета-данных, ведь фактически онтология задает типы данных).
[[Файл:Tabtree scan 1.png|мини|справа|Tabtree [[СССЧ|Системной схемы старения человека]] c подсветкой синтаксиса в редакторе кода [[Atom IDE|Atom]]]]
 
Формат для унифицированной записи данных, мета-данных и онтологий. Предназначен для удобства чтения больших объемов гетерогенных данных как компьютером, так и человеком. Основан на модели представления знаний в виде графа.
== Принципы ==
== Принципы ==
* Основной элемент формата - это объект с параметрами. В терминологии Tabtree объекты называются ''айтем (item)''  
* Основной элемент формата - это объект с параметрами. В терминологии Tabtree объекты называются ''айтем (item)''  
* Один айтем - одна строка (см. также про Multiline Tabtree ниже).
* Один айтем - одна строка (см. также про Multiline Tabtree ниже).
* Части айтема записываются через символ пробела
* Части айтема записываются через символ пробела
<syntaxhighlight lang="Scheme">
  item_id parameter1:value1 parameter2:value2
  item_id parameter1:value1 parameter2:value2
</syntaxhighlight>
* Айтем уникально определяется первым словом (идентификатор). Идентификатор элемента может содержать любые символы, за исключением пробельных.
* Айтем уникально определяется первым словом (идентификатор). Идентификатор элемента может содержать любые символы, за исключением пробельных.
* Параметры айтема указываются парами ключ:значение. Каждая пара является отдельным словом и отделяется от соседних пар и идентификатора одиночным пробелом.
* Параметры айтема указываются парами ключ:значение. Каждая пара является отдельным словом и отделяется от соседних пар и идентификатора одиночным пробелом. Ключ и значение разделяются знаком двоеточия : (тоже без пробелов).
* Айтемы состоят в мерархических отношениях с друг другом. Иерархия задается знаками табуляции в начале строки перед идентификатором и парами ключ-значение. Уровень иерархии равен числу табуляций (ниже табуляция показывается знаком `→`)
* Айтемы состоят в иерархических отношениях к друг другу. Иерархия задается знаками табуляции в начале строки перед идентификатором айтема. Уровень иерархии равен числу табуляций (в примере показывается знаком `→`), чем табуляций больше, тем глубже (ниже) уровень.
Россия type:страна capital:Москва
<syntaxhighlight lang="Scheme">
→Ростов-на-Дону type:city
Россия type:страна capital:Москва
→→Говнярка type:vernacular_region status:сгорела
→Ростов-на-Дону type:city
→Владикавказ type:city ir:Дзæуджыхъæу  
→→Говнярка type:vernacular_region status:сгорела
→→Шалдон type:vernacular_region
→Владикавказ type:city ir:Дзæуджыхъæу  
Norge ru:Норвегия
→→Шалдон type:vernacular_region
→Oslo type:city
Norge ru:Норвегия
→→Grønland type:neighbourhood
→Oslo type:city
→→Grønland type:neighbourhood
</syntaxhighlight>
* Если идентификатор состоит из нескольких слов, то знак пробела между ними заменяется на знак подчеркикания `_`. Если имя ключа состоит из нескольких слов, то обычно пробел между ними заменяется на дефис `-`
* Если идентификатор состоит из нескольких слов, то знак пробела между ними заменяется на знак подчеркикания `_`. Если имя ключа состоит из нескольких слов, то обычно пробел между ними заменяется на дефис `-`
* Если значение ключа - просто текст, то он дается как есть, с символами пробела и обрамляется двойными кавычками "".
* Если значение ключа - просто текст, то он дается как есть, с символами пробела и обрамляется двойными кавычками "".
* Если значение ключа - код, то он дается со всеми пробелами, но обрамляется обратными одинарными кавычками ``
* Если значение ключа - код, то он дается со всеми пробелами, но обрамляется обратными одинарными кавычками ``
* Все, что идет за знаком точка с запятой ; - считается комментарием (как в Racket)
* Все, что идет за знаком точка с запятой ; - считается комментарием (как в [[Racket]])


== Наследование параметров ==
== Наследование параметров ==
Если в объекте имя параметра предваряет символ +, то этот параметр со своим значением наследуется всеми объектами, лежащими по иерархии ниже данного объекта. Значение параметра в одном из нижележащих объектов может переписаться, если такое же имя параметра с новым значением будет добавлено непосредственно в строку этого объекта.
Если в айтеме имя параметра предваряет символ +, то этот параметр со своим значением наследуется всеми айтемами, лежащими по иерархии ниже данного айтема. Значение параметра в одном из нижележащих айтемов может переписаться, если такое же имя параметра с новым значением будет добавлено непосредственно в строку этого айтема.
<syntaxhighlight lang="Scheme">
<syntaxhighlight lang="Scheme">
item1 +parameter:10 ; parameter = 10
item1 +parameter:10 ; parameter = 10
Строка 29: Строка 33:
→item3 ; parameter = 10
→item3 ; parameter = 10
item4 ; parameter не определен
item4 ; parameter не определен
</syntaxhighlight
</syntaxhighlight>


== Multiline Tabtree ==
== Multiline Tabtree ==
Когда у объектов много параметров (больше примерно 10), записывать их в одну строку становится неудобно. Для этого случая существует модификация формата TabTree - Multiline Tabtree. В ней объекты разделяются знаками . и <.> (просто точка - если голый идентификатор объкта, без параметров)
Когда у объектов много параметров (больше примерно 10), записывать их в одну строку становится неудобно. Для этого случая существует модификация формата TabTree - Multiline Tabtree. В ней объекты разделяются знаками . и <.> (просто точка - если голый идентификатор объекта, без параметров)
Россия.
<syntaxhighlight lang="Scheme">
→Ростов-на-Дону  
Россия.
   type:city
→Ростов-на-Дону  
  type:city
<.>
→→Говнярка
   type:vernacular_region
  status:сгорела
   <.>
   <.>
→→Говнярка
</syntaxhighlight>
    type:vernacular_region
 
    status:сгорела
Другой способ решения проблемы с большим числом параметров - разнесение параметров по разным айтемам, аналогично нормализации в базах данных, либо просто группированием более логически связанных параметров по айтемам.
  <.>


== Файловое расширение ==
== Файловое расширение ==
Строка 46: Строка 54:
* Для Multiline Tabtree - <code>.mtree</code>
* Для Multiline Tabtree - <code>.mtree</code>


== Пример ==
== Пример из нашей базы знаний ==
<syntaxhighlight lang="scheme" line>
<syntaxhighlight lang="scheme" line>
; некоторые факты о трех компаниях ТГ направления
; некоторые факты о трех компаниях ТГ направления
Строка 57: Строка 65:
== Использование Tabtree для бэкенда данных ==
== Использование Tabtree для бэкенда данных ==
Формат используется и в самой '''H+ wiki''' для хранения данных, из которых потом генерируются списки и инфобоксы. Есть планы сопряжения Tabtree с расширением Semantic Wiki. Это позволит еще больше [https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F разделить данные и их представление], а значит увеличит эффективность сбора данных и их переносимость.
Формат используется и в самой '''H+ wiki''' для хранения данных, из которых потом генерируются списки и инфобоксы. Есть планы сопряжения Tabtree с расширением Semantic Wiki. Это позволит еще больше [https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F разделить данные и их представление], а значит увеличит эффективность сбора данных и их переносимость.
* [https://github.com/prozion/th_world База знаний H+ wiki на github]


== Идеологически близкие форматы ==
== Идеологически близкие форматы ==

Текущая версия от 15:30, 12 марта 2021

Tabtree Системной схемы старения человека c подсветкой синтаксиса в редакторе кода Atom

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

Принципы[править]

  • Основной элемент формата - это объект с параметрами. В терминологии Tabtree объекты называются айтем (item)
  • Один айтем - одна строка (см. также про Multiline Tabtree ниже).
  • Части айтема записываются через символ пробела
 item_id parameter1:value1 parameter2:value2
  • Айтем уникально определяется первым словом (идентификатор). Идентификатор элемента может содержать любые символы, за исключением пробельных.
  • Параметры айтема указываются парами ключ:значение. Каждая пара является отдельным словом и отделяется от соседних пар и идентификатора одиночным пробелом. Ключ и значение разделяются знаком двоеточия : (тоже без пробелов).
  • Айтемы состоят в иерархических отношениях к друг другу. Иерархия задается знаками табуляции в начале строки перед идентификатором айтема. Уровень иерархии равен числу табуляций (в примере показывается знаком `→`), чем табуляций больше, тем глубже (ниже) уровень.
Россия type:страна capital:Москва
Ростов-на-Дону type:city
→→Говнярка type:vernacular_region status:сгорела
Владикавказ type:city ir:Дзæуджыхъæу 
→→Шалдон type:vernacular_region
Norge ru:Норвегия
Oslo type:city
→→Grønland type:neighbourhood
  • Если идентификатор состоит из нескольких слов, то знак пробела между ними заменяется на знак подчеркикания `_`. Если имя ключа состоит из нескольких слов, то обычно пробел между ними заменяется на дефис `-`
  • Если значение ключа - просто текст, то он дается как есть, с символами пробела и обрамляется двойными кавычками "".
  • Если значение ключа - код, то он дается со всеми пробелами, но обрамляется обратными одинарными кавычками ``
  • Все, что идет за знаком точка с запятой ; - считается комментарием (как в Racket)

Наследование параметров[править]

Если в айтеме имя параметра предваряет символ +, то этот параметр со своим значением наследуется всеми айтемами, лежащими по иерархии ниже данного айтема. Значение параметра в одном из нижележащих айтемов может переписаться, если такое же имя параметра с новым значением будет добавлено непосредственно в строку этого айтема.

item1 +parameter:10 ; parameter = 10
item2 parameter:100 ; parameter = 100
item3 ; parameter = 10
item4 ; parameter не определен

Multiline Tabtree[править]

Когда у объектов много параметров (больше примерно 10), записывать их в одну строку становится неудобно. Для этого случая существует модификация формата TabTree - Multiline Tabtree. В ней объекты разделяются знаками . и <.> (просто точка - если голый идентификатор объекта, без параметров)

Россия.
Ростов-на-Дону 
  type:city
 <.>
→→Говнярка 
   type:vernacular_region 
   status:сгорела
  <.>

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

Файловое расширение[править]

  • Для Tabtree - .tree
  • Для Multiline Tabtree - .mtree

Пример из нашей базы знаний[править]

; некоторые факты о трех компаниях ТГ направления
компании +type:ТГ
  Криорус start:2005 hq:Москва d:"Единственная в России компания, которая занимается крионикой"
  Alcor start:1972 hq:Scottsdale
  Celularity start:2016 ceo:Robert_Hariri purchased-tech-from:Celgene_Corporation,Sorrento_Therapeutics,United_Theraupeutics,Human_Longevity

Использование Tabtree для бэкенда данных[править]

Формат используется и в самой H+ wiki для хранения данных, из которых потом генерируются списки и инфобоксы. Есть планы сопряжения Tabtree с расширением Semantic Wiki. Это позволит еще больше разделить данные и их представление, а значит увеличит эффективность сбора данных и их переносимость.

Идеологически близкие форматы[править]