В 2007 году знаменитый автор слова из трёх букв 'W' опубликовал в своем блоге рассуждения о востребованности слова нового, на сей раз - из трёх букв 'G'. "Гигантский Глобальный Граф" - так предполагалось это произносить в полном, необрезанном виде. О чём шла речь? О том, что слово "граф" больше подходит для обозначения технологии представления взамосвязанных данных, нежели "паутина", пусть даже и "семантическая". Термин не прижился. Отчасти, возможно, из-за некоторой тавтологичности, отчасти же - из-за того, что привычная "паутина" оказалась милее сердцу обывателя, чем какой-то "граф".

Ну, да ладно, "ГГГ" не всплыло взлетело - не беда, ведь в конце концов - это лишь один из возможных псевдонимов планетарной семантической сети. Но что представлялось сиру Тиму в качестве цели для достижения (с помощью новых-то технологий связывания данных)?.. "Важны не документы, а то, что в них содержится. Очевидная истина." - писал он, - "...когда я бронирую билет на авиарейс, меня интересует именно этот рейс. Не страница рейса на сайте путешествий или страница рейса на сайте авиакомпании, но URI самого авиарейса. Вот что я поставлю в закладки. И каким бы устройством я ни воспользовался для открытия закладки, оно будет иметь доступ к ситуационно зависимому обзору всего, что я знаю об этом рейсе из разных источников. Задача заказа и совершения рейса потребует множества взаимодействий. И на их протяжении, эти задача и рейс будут на первом месте в моём осознании, веб-сайты – на втором, а сети и устройства – на третьем."

Со времени написания процитированного выше текста прошло уже без малого 14 лет. Но контент-менеджеры авиакомпаний по-прежнему, в массе своей, упорно не спешат присваивать URI авиарейсам, саботируя, таким образом, построение грандиозного ГГГ. Это возмутительно!.. В чем причина такого вопиющего игнора? Однако... тут надо бы поразобраться.

URI и с чем его едят

Как известно, URI - это либо "где" (URL), либо "кто/что" (URN), либо и то и другое в одном флаконе. Допустим, некто Алёна работает менеджером в авиакомпании (скажем, в Аэрофлоте), в которой Тим собирается забронировать билет на рейс "Лондон-Москва". От своего начальства Алёна получила задание присвоить уникальные идентификаторы рейсам компании и разместить их на корпоративном сайте - чтобы программные агенты заинтересованных в данной сфере бизнеса игроков (или даже конечных потребителей информации) могли использовать эти идентификаторы и связанные с ними данные для привязки к ним собственного контента - и отправки оного заинтересованным же потребителям типа Тима. Что делать нашей менеджерице? Она знает коды аэрофлотовских рейсов по схеме IATA (интересующий Тима рейс имеет здесь обозначение SU2583), и первая мысль у неё, естественно - использовать для создания идентификаторов, уникальных в интернет-пространстве, эти коды. Казалось бы, сделать это должно быть элементарно просто: IATA - серьёзная организация, у неё должно быть своё пространство имён (NID) в системе URN, и тогда интересующий Тима рейс получил бы следующий ID: urn:iata:su2583. Алёна открывает страницу с зарегистрированными для URN пространствами имён - и упс, "iata" там нет. Любопытства ради наша вуменджер заглядывает в спецификацию, определяющую порядок регистрации новых пространств имён URN (хотя у неё и мысли не было подавать за ИАТА, или кого бы то ни было ещё, заявку на регистрацию NID) - и понимает, что тут всё не просто, ловить здесь нечего.

Тогда, может быть, тот же ИАТАшный код вставить в URL? Что-то вроде: aeroflot.ru/flights/su2583. А? Выглядит неплохо. Уникальность - в наличии. И по каждой такой ссылке можно разместить информацию о соответствующем рейсе. Алёна так и сделала. Доложила начальству о выполненном задании и забыла о нём...

Обратим же взор на другого нашего персонажа. Борис имеет собственный информационный сервис, собирающий отзывы пассажиров о совершенных ими (посредством разных видов транспорта) рейсах. В разделе, посвященном авиаперелётам, он использует те же IATA-коды для обозначения рейсов. Для эффективного индексирования поисковиками используется микроразметка по схеме schema.org/Flight. На сайте есть возможность подписки на новые отзывы о выбранных рейсах. Реализована мультиязычная поддержка с переводом отзывов "на лету" на требуемый язык. Но, увы, Тим об этом ресурсе не знает, хотя ему он, вполне вероятно, мог бы быть интересен. Не знает он и о том, что в Аэрофлоте придумали URI для интересующего его рейса SU2583. Как сделать так, чтобы Тим смог оперативно и с минимальными затратами времени получать релевантную информацию об интересующем его рейсе?

Ну, во-первых, чтобы пользователь смог "поставить в закладки" ID интересущего его предмета (явления, сущности), этот ID ему надо представить особо - дескать, вот этот самый идентификатор, по которому вы можете отслеживать всё, что связано с соответствующим предметом. То есть, везде, или почти везде, где предмет (в нашем случае - конкретный авиарейс) встречается на сайте, вслед за его наименованием полезно было бы в скобках указывать этот самый "URI", который Тим мог бы поставить в закладки (но что за "URI" это должен быть и URI ли вообще?)

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

Предположим, что к моменту написания данной заметки в списке зарегистрированных пространств имён для URN уже значилось бы NID "iata", и Алёна обозначила бы авиарейсы соответствующими идентификаторами типа urn:iata:su<number>. Кому и что это бы дало? Идентификатор подобного типа предполагает наличие некоего описания предмета, ему соответствующего. К примеру, для раскрытия информации о книге по книжному номеру ISBN нам нужно обращаться к какому-либо стороннему сервису с соответствующей базой данных, делать запрос, который не обязательно будет адекватно обработан. Это неудобно. С другой стороны, читаем в Wiki: "Для нахождения ресурсов по URN-имени нужна «система разрешения URN-имён» (англ. URN resolution)". Кто и когда будет делать эту систему, как она будет работать, каким образом надо будет регистрировать в ней вновь создаваемые идентификаторы? Топкое болото вопросов.

Вариант же с URL, который применила Алёна, вполне рабочий. Идентификатор не отделён от описания предмета. Это удобно. Но, вот, Борис вряд ли захочет использовать в своей системе такие ID аэрофлотовских рейсов в качестве основных. Почему? 1) Потому, что он не уверен в том, что завтра эти идентификаторы не изменят на другие, он не имеет над ними контроля. 2) Потому, что описание рейса по ссылке идентификатора также в любой момент может быть подвергнуто изменению - как организационного, так и (не исключено) злонамеренного характера. Нет гарантии, что текст описания имеет достоверное авторство. 3) Потому, что само доменное имя авиакомпании тоже, хоть и более устойчиво к изменениям, изменчиво. 4) Потому, что Борис никому не обязан делать неявной рекламы, публикуя у себя ссылки на сторонние сайты. 5) Потому, что подобные ссылки, будучи идентификаторами рейсов, по сути ничем не отличаются от обычных гиперссылок - и не понятно, как представить их для пользователей ресурса, чтобы они видели, что это нечто особое. 6) Потому, что всяк будет горазд придумывать свою форму для подобных ссылок-идентификаторов - и за всем сим зоопарком не уследишь. 7) Потому, в конце концов, что техническая доступность описаний рейсов по данным ссылкам - также величина переменная. Вполне достаточно причин для антипатии, не так ли?

А что, если нам разом решить все эти проблемы? Как говорится, одним махом - семерых побивахом!

CID, твой выход

Мы пойдём другим путём. Мы будем идентифицировать не предмет (чтобы потом невесть где искать его описание), не изменчивое и неопределенное описание предмета (чтобы впасть в печали многия, см. выше), но лаконичное, неизменяемое описание, которое, по сути, само является расширенным идентификатором предмета - и называется понятием (concept). Понятие текстовое содержит лишь атрибуты - то есть неотъемлемые и не изменяемые свойства предмета, которые определяют его суть и позволяют однозначно его идентифицировать. Если один из атрибутов меняется - то меняется и сам предмет. Другая сущность → другой идентификатор. Например, для авиарейса атрибутами будут: авиакомпания, главные точки маршрута, ИАТА-номер. Возможно, расписание вылета. В общем случае, понятием может быть любой лаконичный "слепок" с предмета, любой образ: фото, аудио-запись, рисунок или схема - в общем, не только набор текстовых и числовых атрибутов. Как говорил кот Матроскин: "Усы, лапы и хвост - вот мои документы!" - и он был прав.

Нам важно, чтобы понятие было неизменным - чтобы на него можно было безбоязненно опереться. Как на фундамент укладываются по кирпичику стены, так и на четко определенные, неизменяемые понятия можно накладывать семантические связи, не опасаясь, что вся конструкция впоследствии рассыпется. Как сделать так? 1. Понятие должно быть представлено отдельным файлом. 2. Для этого файла должен быть подсчитан хеш. 3. Идентификатор (имя) файла будет содержать оный хеш. Более того, чтобы достоверно знать, кто ввёл в обиход данное понятие предмета, оно может быть скреплено электронной подписью автора.

Чтобы не зависеть от какого-то одного алгоритма хеширования, будем использовать мультихеш. Чтобы представить хеш-значение в удобной человекочитаемой форме и не зависеть при этом от какого-либо единственного алгоритма кодирования, будем использовать мультибейс. А чтобы наша основанная на хеш-значении ссылка-идентификатор указывала и на формат самого содержимого файла, заложим в неё ещё одно поле: мультикодек. В результате мы получаем самоопределяемый идентификатор контента CID (Content Identifier), используемый в таких проектах, как IPFS и IPLD - и полностью подходящий для того, чтобы быть используемым в качестве идентификатора понятия (Concept Identifier).

Теперь посмотрим, как всё это будет работать. а) Алёна составляет краткие описания рейсов (в общем случае - в произвольном текстовом формате, читаемом браузерами), помещая в них только те данные, которые не планируется менять в будущем. б) Затем она добавляет к каждому такому описанию цифровую подпись, служащую подтверждением того, что автором этих данных о рейсах является Аэрофлот. в) Далее Алёна с помощью нехитрой программы генерирует каждому файлу-понятию уникальный CID и проименовывает файлы полученными идентификаторами, делая, таким образом, понятия неизменяемыми. г) Ей остаётся разместить файлы в выбранной директории сайта, например, в той же aeroflot.ru/flights - и раскидать гиперссылки на них по страницам сайта компании, примерно в таком виде: "Рейс SU2583 (CID)", где URI гиперссылки будет состоять из собственно CID ("что") и адресной части ("где"). При этом, пока браузер не может открывать подобные файлы, он будет только предлагать их к скачиванию. Впоследствии же он сможет и открывать страницу с соответствующими данными (будь то простой текст, html-страница, данные в xml- или json-разметке, изображение, etc.), верифицировать ЭЦП и т.д.

Что же скажет на это Борис? "О, беллиссимо, это же совсем другое дело!" - пожалуй, что-то в этом роде. И действительно: 1) Теперь идентификаторы рейсов (связанных с рейсами понятий) неизменяемы. 2) Текст минималистичного описания (понятия) неизменяем и имеет подтверждённое электронной подписью авторство. 3), 4) Адресная часть ссылки теперь Бориса волновать не будет, поскольку он может сформировать её (при желании) сам - скачав файлы понятий и разместив их на своём сайте в подходящей директории. 5) Пользователь сайта, увидев за наименованием рейса ссылку на понятие (Concept ID), будет явно уведомлен о наличии неизменяемого идентификатора рейса, по которому можно искать дополнительную информацию. 6) Форма самого CID (без адресной части) единообразна и уже достаточно "устоялась" (недостатки предыдущей, начальной версии CIDv0 были исправлены в новой, зрелой версии CIDv1). 7) Техническая доступность понятий с распространением соответствующих файлов по сети будет лишь возрастать. Более того, сайты, их использующие, могут объединяться (с появлением LibP2P это стало не слишком сложно) в одноранговые сети, обмениваясь информацией по интересующим темам (CIDs) посредством протокола PubSub.

А что наш Тим? Теперь он будет точно знать, какой URI поставить в закладки. И гениальный ГГГ, как бы он ни назывался впоследствии (ААА, БББ, ВВВ - на что фантазии хватит), из категории сказок и сновидений вполне может стать былью. О том же, как применение IPFS поможет выстраивать семантические связи между понятиями на основе CID, поговорим в другой раз.

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


  1. Tiendil
    09.08.2021 18:38

    помещая в них только те данные, которые не планируется менять в будущем

    Так себе гарантия. Сегодня не планируется, завтра планируется.

    Что случится при изменении неизменяемого?


    1. starver Автор
      10.08.2021 22:00

      Получится другое понятие, с другим ID, естественно.


      1. Tiendil
        10.08.2021 22:25

        А как тому же Борису отследить появление нового понятия и перейти на него?

        Допустим компания изменила неизменяемые данные рейса SU2583 и дальше работает с новой сущностью (обновляет дополнительную информацию и т.п.) . На сайте Бориса пользователи продолжат видеть данные старой сущности, будут искать по ним (и находить старую инфу), принимать на основе их неверные решения. Получается та же проблема со сменой url, только сбоку и реже.


        1. starver Автор
          10.08.2021 23:04

          Отслеживание изменений в понятийной модели предполагается посредством PubSub-взаимодействия между сайтами родственной/смежной тематики. Заставить в этом участвовать, никого, конечно, нельзя. Это должно стать каким-то образом выгодно участникам подобных "клубов по интересам".

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


          1. Tiendil
            11.08.2021 09:18

            Это должно стать каким-то образом выгодно участникам подобных "клубов по интересам".

            Так же, как выгодно делать PubSub для отслеживания изменения URI?

            Мне нравится описанное в статье, но не вижу качественных отличий от существующих технологий. А усложнения вижу.


            1. starver Автор
              11.08.2021 11:25

              Принципиальное отличие в том, что используя CID, вы точно знаете, на что ссылаетесь. С точностью до бита.


  1. NeoCode
    09.08.2021 23:40

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