Истнет / Istnet

Страница посвящена разработке стандарта представления
исторических и литературных источников в Интернете

Навигация: [ О формате | Адресация | Разрывы | Эксперименты | Результаты | Текущие параметры стандарта | Аналоги ]

СУТЬ СТАНДАРТА В ВИДЕ НАУЧНОЙ СТАТЬИ:

Стандарт ISTNET представлен на ежегодной Конференции электронных библиотек RCDL-2013 (Ярославль, 14-17 октября 2013):

• Опыт разработки стандартного формата на основе html для оцифровки источников советского периода (pdf, 7 страниц)

• PPT-презентация к докладу и её упрощённая версия в PDF


РЕЧЬ ИДЁТ о стандарте не как директивном документе, а как о наборе приёмов структурирования информации в удобном для использования и научного цитирования виде, которые создатель любого интернет-ресурса волен применять полностью или частично.

Вероятно, правильным будет выработать несколько стандартов (например, стандарт для параллельного воспроизведения текста на двух языках или для текста с многочисленными иноязычными вкраплениями будет отличаться от стандарта для моноязычных текстов; стандарт для текста, предусматривающего последующее редактирование - от стандарта для текстов, раз и навсегда "отлитых в граните"; необходим также стандарт для текстов, претерпевавших изменения в прошлом, или дошедших до нас в разных вариантах).


ЦЕЛИ:

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

• максимально простой и интуитивный формат адресации к документам;

• возможность поиска текста в общеизвестной поисковой системе по любой цитате из него, решение проблемы искабельности цитаты, которая в оригинале "разорвана" служебной информацией (номером страницы, примечанием, колонтитулом, изображением), подходящее для всех распространённых браузеров, включая "устаревшие"

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


РЕШЕНИЕ предлагается (ищется) на примере оцифровки наиболее цитируемых текстов советского и перестроечного времени (собрания сочинений вождей, материалы съездов, Ведомости Верховных Советов и т.п.).

Результаты тестируются на поисковых системах Яндекс и Google, на браузерах IE 6, 7, 8 и 9, Firefox 3, 19 и 21, Opera 10, 11 и 12, Chrome 25 и 27, Safari for IPad.


1. ОБЩИЕ СООБРАЖЕНИЯ О ФОРМАТЕ. Старейшие интернет-библиотеки (напр., lib.ru) избегают сложных форматов, предпочитая Plain Text. Этот подход, однако, приводит к потере в источниках XX века информации, передаваемой несколькими нехитрыми полиграфическими приёмами: курсив, жирный шрифт, абзацные отступы, иерархия заголовков и т.п.

С нашей точки зрения, формат HTML с минимальным добавлением CSS, с одной стороны, позволяет отразить в любом браузере особенности шрифтового оформления документальных источников, с другой - легко копируется в Word для дальнейшей работы с текстом без потери этого оформления (чего не скажешь о PDF и DJVU). И наконец, он идеально приспособлен для построения из текстов XX века системы взаимных ссылок.


2. ПРОБЛЕМА АДРЕСА. Общий замысел простого, интуитивного и лаконичного формата гиперссылки такой:

some-library.ru/pushkin/4/#32  А.С.Пушкин, Соч., т.4, с.32
brezhnev.su/1/#02     Л.И.Брежнев. 47-я годовщина Великой Октябрьской
Социалистической революции. - в сб. Ленинским курсом, т.1
[текст №2 первого тома Сочинений]
vedomosti.sssr.su/1991/52/#1531     Ведомости Верховного Совета СССР, 1991, № 52, ст.1531
25съезд.кпсс.рф/1/#13     XXV съезд КПСС, Стен. отчёт, т.1, с.13

Для этого каждая книга (том, выпуск) издания сохраняется в виде файла с именем index.html в отдельной директории, название которой состоит из одного числа - номера тома. В этом случае в гипертекстовом адресе указывать название файла не требуется (т.к. адрес типа http://site/dir/ всегда идентичен адресу http://site/dir/index.html ), а сразу после номера тома и знаков "слэш" и "решётка" указывается номер страницы. Номера страниц должны быть внедрены в текст в виде якорей типа A NAME или ID. Использование только цифр (а не букв) в линке позволяет избежать лишнего переключения клавиатуры с кириллицы на латиницу.


Что сделает обычный вебмастер-исполнитель, получив задание оцифровать тот же 9-томник Брежнева? Особенно если ему не пользоваться ресурсом, а лишь выполнить работу по его созданию. В лучшем случае, назовёт файлы с томами как-нибудь вроде lkurs4.html. Создаст для них отдельную директорию. Может быть, даже проставит "якоря" типа <A NAME="str9"> и ссылка "Л.И.Брежнев. Ленинским курсом, т.1, стр.9" будет выглядеть в лучшем случае вдвое длиннее, чем у нас: brezhnev.su/works/lkurs1.html#str9 .

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


3. ПРОБЛЕМА РАЗОРВАННОЙ ЦИТАТЫ, т.е. искабельности поисковыми системами последовательности слов, которая разорвана служебной информацией (номер страницы, колонтитул, рисунок, перенос слова) тоже имеет решение, хотя и не столь изящное. Традиционные способы - указание номера страницы в квадратных скобках внутри текста, указание его отдельной строкой - приводят к тому, что разорванная номером страницы цитата не ищется как единое целое ни Яндексом, ни Гуглом.

Введённый Яндексом тэг <NOINDEX> ... </NOINDEX>, созданный для исключения части текста на странице из поиска, не позволяет воспринимать то, что до него и то, что после, как единый контекст. В ответ на обращение в службу помощи Яндекса последовало предложение сделать Яваскрипт, генерирующий номер страницы, с чем автор этого сайта не справился. Уточнение от 5.06.2013: Возможно, причина "несклеивания" контекстов до и после NOINDEX крылась не в них самих, а в открытии и закрытии тега A NAME в начале второй половинки контекста. Это предстоит проверить. Но, так или иначе, пока этот тег поддерживает только Яндекс (а Гугл - нет).

Решение ищется. Варианты опробуются в данный момент на странице http://brezhnev.su/1/ и непосредственно здесь.


4. ЭКСПЕРИМЕНТЫ С РАЗМЕТКАМИ


Испробуются:


а) 4 способа выделения первого и последнего на странице слова (частей разорванного слова): FONT COLOR; FONT STYLE; SPAN STYLE; U (подчёркивание части слова).


б) 4 способа внедрения всплывающей подсказки с номером страницы: A TITLE; SPAN TITLE; FONT TITLE; DIV TITLE (последний сразу отпадает, т.к. создаёт разрыв строки).


в) 10 способов проставления метки (якоря) номера страницы, в том числе:


- 3 варианта с тегом A NAME ... /A (тег открывается и закрывается в начале слова; открывается и закрывается в середине слова; открывается в середине слова, а закрывается в конце страницы);


- аналогичные 3 варианта с A ID ... /A;


- то же со SPAN ID ... /SPAN


- вставка атрибута ID в тег FONT, относящийся ко второй половинке разорванного слова.


Большая часть первого тома Брежнева была изначально сформатирована следующим образом: номер страницы представлен как всплывающая подсказка - в пределах одного материала, а нумерация явным образом - только для последней страницы материала (т.е. между самостоятельными текстами, а не внутри них). Подсказка появляется при наведении курсора на любой знак в пределах страницы. При этом первое и последнее слово страницы выделяются цветом, а метка начала страницы A NAME ставится в середине разорванного слова или в его начале.


1. Коды на границе двух страниц выглядят при этом так:


у нас <FONT COLOR="RED">обна</FONT></A><A NAME="47"></A><A TITLE="47"><FONT COLOR="BLUE">руживались</FONT> те или иные


у нас обнаруживались те или иные


Эксперимент показал, что Гугл находит "склеенную" таким образом цитату, а Яндекс - не всегда. Для Яндекса на этой странице нет слова "обнаруживались", а есть слова "обна" и "руживались". В поисковой выдаче контекст выглядит так: "у нас обна. руживались те или иные". При этом два других разорванных слова в ныне проиндексированной версии - "различных" и "воодушевленные" тот же Яндекс воспринимает правильно. Загадка!

Компания Яндекс не раскрывает алгоритмы своего поискового робота, пришлось обратиться в саппорт. Там установили, что именно в нашем коде разрывает для него цитату и добавляет мнимую точку - метка страницы (A NAME). Тег (A TITLE), по словам главного ответственного на вопросы в Яндексе Платона Щукина, разрыва не создаёт.

Попытка перенести каждое (A NAME) в начало разорванного слова тоже дала не идеальный результат: теперь Яндекс находит несуществующую точку перед этим словом: "у нас. обнаруживались" и по-прежнему не ищет цитату как единое целое, хотя и указывает на неё, если ввести её в поисковую строку без кавычек (как приблизительный контекст).

26.03.2013: Яндекс продолжает удивлять. В проиндексированной 12.03.2013 версии страницы istnet.org пропали все мнимые точки на месте тега A NAME в начале слова, и разделённые этим тегом контексты стали искаться как единое целое. В то же время, идентичные, казалось бы, контексты на brezhnev.su/1/ продолжают давать мнимые точки, хотя дата индексации стоит более поздняя - 18 марта.

20.05.2013: Новости от Платона Щукина: разрыв создаётся не тегом A NAME, а закрывающим тегом /A, и то не всегда. Если внутри пары тегов A.../A начинается абзац - P, то закрывающее /A создаёт мнимый конец абзаца - /P и мнимую точку (в этом основная разница между схожими контекстами на двух экспериментальных сайтах). Коли так (а это ещё надо проверить) - выход в том, чтобы завершающую метку всплывающей подсказки A TITLE с номером страницы (/A) ставить в конце последнего целого (т.е. обычно - предпоследнего) абзаца.

Точнее, есть варианты, из которых надо выбрать лучший, руководствуясь удобством либо читателя, либо верстальщика:

а) Выделять тегом A TITLE.../A только первый абзац (полуабзац) страницы;

б) Закрывать тег A TITLE в конце предпоследнего абзаца и этим ограничиваться;

в) Закрывать A TITLE в конце предпоследнего абзаца, а в последнем ещё раз его открывать и закрывать;

г) Проставлять A TITLE.../A внутри КАЖДОГО абзаца.

В данный момент на странице brezhnev.su/1/ опробуется вариант "б".

Нет уверенности, что причина именно в этом: ведь тогда разрывался бы и контекст в примере 12 (см. ниже), однако же он индексируется правильно.

5.06.2013: Существенный прорыв в диалоге с Яндексом: разработчики включились в обсуждение в переписке всех возможных вариантов разметки. Тов. Щукин подсказал ранее не применявшуюся комбинацию FONT TITLE. Она была нами в свое время отвергнута с порога по двум причинам: а) отсутствия в описаниях тега FONT в онлайн-учебниках опции с атрибутом TITLE (прочитав учебники внимательнее, мы нашли, наоборот, тег в описании атрибута); б) исключения тега FONT из последней спецификации (HTML-5). Однако же без тега FONT мы всё равно не обходимся, и приклеивание TITLE с номером страницы к нему позволяет: а) полностью избавиться от создающего разрывы тега A; б) не заботиться о вложенности абзацев: открывать и закрывать тег в начале и конце страницы, на какой бы участок абзаца эти начало и конец ни приходились.

Таким образом, сейчас оптимум видится в том, чтобы первое слово (полуслово) выделять через FONT CLASS ID TITLE, а всю остальную страницу обрамлять "пустым" (с точки зрения собственно фонта) тегом FONT с одним атрибутом - TITLE.

Ход эксперимента показывает, что уже как минимум половина тестируемых браузеров позволяет выводить этим образом всплывающую подсказку на протяжении всей страницы, включая таблицы. Кроме того, если на странице есть другая всплывающая подсказка (например, на знаке сноски), то по её окончании TITLE, заданный в начале страницы возобновляется автоматически. Теперь предстоит переделать код типовой страницы ниже с учётом новых знаний.


2. Следующий испробуемый способ - выделение разрыва страниц угловой рамкой с заменой изменённого цвета шрифта (FONT COLOR) на (SPAN STYLE) и заменой (A TITLE) на (SPAN TITLE):


у нас </A><A NAME="002"></A><SPAN STYLE="border: 1px; border-style: none none solid none; border-color: orange">выяв</SPAN></A><SPAN TITLE="002"><SPAN STYLE="border: 1px; border-style: solid none none solid; border-color: orange">лялись</SPAN> те или иные


у нас выявлялись те или иные


Недостаток SPAN TITLE: в браузерах Firefox 3 и 19, Opera 11 и Chrome 25 номер страницы в подсказке при использовании (SPAN TITLE) всплывает только в пределах первого абзаца.

Кроме того, как сообщают оптимизаторы, которые провели соответствующий эксперимент с поисковиками ещё в 2010 году, Гугл будет индексировать любое слово, разорванное SPAN'ом как два слова. Что и видим в поиске Гугла, контекста "выявлялись" для него на странице нет, а есть "выяв лялись".


3. Можно попробовать добиться аналогичного эффекта с помощью не рамки, а подчёркивания и надчёркивания, хотя выглядит это не слишком солидно:


у нас </SPAN><A NAME="003"></A><U>вскры</U><A TITLE="003"><FONT STYLE="text-decoration:overline; bordercolor:red">вались</FONT> те или иные


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


4. Ещё вариант:


у нас </A><A NAME="004"></A>возни<A TITLE="003"><FONT STYLE="background-color:#c3c3c3;">кали</FONT> те или иные


у нас возникали те или иные


5. Попытка примирить Яндекс с Гуглом будет выглядеть так (SPAN заменяется на FONT):


у нас </A><A NAME="005"></A><A TITLE="004"><FONT STYLE="border: 1px; border-style: none none solid none; border-color: orange">всплы</FONT></A><A TITLE="005"><FONT STYLE="border: 1px; border-style: solid none none solid; border-color: orange">вали</FONT> те или иные


у нас всплывали те или иные


6. Попробуем также заменить A NAME на SPAN ID, поставив его в начале слова:


на нас </A><SPAN ID="006"></SPAN><FONT STYLE="border: 1px; border-style: none none solid none; border-color: orange">надви</FONT></A><A TITLE="006"><FONT STYLE="border: 1px; border-style: solid none none solid; border-color: orange">гались</FONT> те или иные


на нас надвигались те или иные


Результат крайне неожиданный: для Яндекса слово разорвано: "надви. гались", причём не SPAN'ом, а закрывающим тэгом </a>! При том, что в предыдущем примере ("всплывали") разрыв и мнимая точка возникают до слова, а не в середине его. Различие же в этих кодах одно: между "всплы" и "вали" - заглавное /A, а между "надви" и "гались" - строчное. Возможно, мы что-то перепутали, и в проиндексированной версии посреди слова "надвигались" стояла метка страницы, но на всякий случай повторим эксперимент ниже.


7. Теперь поставим SPAN ID в середине слова (для Гугла неприемлемо, а для Яндекса?):


на нас <FONT STYLE="border: 1px; border-style: none none solid none; border-color: orange">напол</FONT></A><SPAN ID="007"></SPAN><A TITLE="007"><FONT STYLE="border: 1px; border-style: solid none none solid; border-color: orange">зали</FONT> те или иные


на нас наползали те или иные


8. И последний в этой порции вариант: A ID:


на нас <FONT STYLE="border: 1px; border-style: none none solid none; border-color: orange">нака</FONT></A><A ID="008"></A><A TITLE="008"><FONT STYLE="border: 1px; border-style: solid none none solid; border-color: orange">тывались</FONT> те или иные


на нас накатывались те или иные


Кстати, предстоит ещё выяснить, для всех ли браузеров ID является адекватной заменой NAME. Вот тут: http://verba83.narod.ru/ssilki/ пишут, что ID согласно стандарту HTML4 может начинаться только с буквы, а не с цифры как у нас... Однако, эксперимент показывает, что переход по метке ID, начинающейся с цифры, во всех протестированных браузерах срабатывает нормально.


Продолжаем эксперименты.


9. Для начала выясним, разорвёт ли цитату метка ID, приставленая к тэгу FONT:


мы тепло <font style="border: 1px; border-style: none none solid none; border-color: orange">попро</font></a><a title="009"><font id="009" style="border: 1px; border-style: solid none none solid; border-color: orange">щались</font> с ним


мы тепло попрощались с ним


10. Для чистоты эксперимента, давшего непонятный результат в примерах 5 и 6, повторим то же, но с заглавным /A:


мы снова <font style="border: 1px; border-style: none none solid none; border-color: orange">повстре</font></A><a title="0010"><font id="0010" style="border: 1px; border-style: solid none none solid; border-color: orange">чались</font> с ней


мы снова повстречались с ней


11. Далее исследуем, разорвёт ли слово A NAME, закрытый не сразу же после открытия, а лишь в конце страницы - вместе с TITLE:


овёс нын</A><a name="0011" title="0011">че дорог


овёс нынче дорог


12. То же с A ID:


лошади куша</A><a id="0012" title="0012">ют сено


лошади кушают сено


13. И SPAN ID (что заведомо неприемлемо для Гугла):


Волга впадает в Кас</A><span id="0013" title="0013">пийское море


Волга впадает в Каспийское море


14. Напоследок проверим, разрывает ли контекст для Яндекса метка A ID в начале слова, закрытая тэгом /a сразу:


вскрылись </span><a id="0014"></a>грубей<a title="0014">шие нарушения законодательства


вскрылись грубейшие нарушения законодательства


15. Или закрытая в середине слова:


выявились </a><a id="0015">могу</a><a title="0015">чие источники


выявились могучие источники


16. И убедимся в неприемлемости для браузеров DIV TITLE как разрывающего строку:


вчера была</a> дожд<div title="0016">ливая погода


вчера была дожд

ливая погода


17. Вариант, подсказанный Яндексом: FONT TITLE:


<FONT TITLE="0017">...в Абхазии преле</FONT><FONT TITLE="0018" style="border: 1px; border-style: solid none none solid; border-color: orange">стный</FONT><FONT TITLE="0018"> климат


...в Абхазии прелестный климат


Очевидно, все эти способы не решают проблемы постраничных сносок - хотя бы потому, что они должны быть проиндексированы как часть текста. Выход на данный момент видится в том, чтобы постраничные сноски в такого рода книгах превратить в постатейные, т.е. поставить в ближайшее место, в котором они не создают разрыв текста. При этом нумерация сносок, для удобства цитирования, не меняется, они обозначаются как "сноска 1 к стр.38; сноска 1 к стр.40; сноска 2 к стр.40" и т.д.

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

Что касается колонтитулов, то ими в предложенном варианте формата придётся пожертвовать.


* * *

Подведём промежуточные итоги, представив результаты в виде таблицы:


5. СВОДНЫЕ РЕЗУЛЬТАТЫ ЭКСПЕРИМЕНТА


  Яндекс Google IE 6, 7, 9 Firefox 3, 16,19 Opera 10, 11, 12 Chrome 25 Safari for IPad Выводы
1. Выделение границы страниц
а) FONT COLOR + + + + + + + OK
б) SPAN STYLE + разрыв + + + + + -
в) U / FONT + + + + + + + OK
г) FONT STYLE + + + + левая граница
рамки не видна,
если она
в начале строки
+ + OK
2. Метка страницы
а) <A NAME></A> в середине слова +/- + + + + + + ?
б) <A NAME TITLE>...</A> в конце страницы +/- + + + + + + ?
в) <A NAME></A> в начале слова + / точка + + + + + + паллиатив
г) <A ID></A> в середине слова +/- + + + + + + ?
д) <A ID>...</A> в конце страницы +/- + + + + + + ?
е) <A ID></A> в начале слова + / точка + + + + + + паллиатив
ж) <SPAN ID></SPAN> в середине слова +/- разрыв + + + + + -
з) <SPAN ID TITLE>...</SPAN> в конце страницы +/- разрыв + + + + + -
и) <SPAN ID></SPAN> в начале слова + / точка + + + + + + паллиатив
к) FONT ID, в т.ч. в середине слова + + + + + + + OK
3. Всплывающий номер страницы
а) A TITLE +/- + + + 10 только в 1-м абз.
11+ 12+
+ не виден -
б) DIV TITLE разрыв разрыв - - - - не виден -
в) SPAN TITLE + разрыв + только в 1-м абз. 10+
11, 12 только в 1-м абз.
только в 1-м абз. не виден -
г) FONT TITLE + + + + + + не виден OK


6. ПРЕДЛАГАЕМАЯ НА СЕГОДНЯ ВЕРСИЯ СТАНДАРТА


На основании имеющегося неполного опыта выбираем в качестве предпочтительного вариант, опробованный в эксперименте под №17. Есть смысл его немного модифицировать:


1. Оставим выделение уголком только для первого слова (полуслова) страницы, последнее слово (полуслово) предыдущей страницы выделять не будем.


2. Чтобы не воспроизводить в начале каждой страницы 70-значное определение стиля, вынесем его в шапку файла, создав в ней мини-таблицу стилей. Для этого между тэгами </TITLE> и </HEAD> поместим следующий код:

<style type="text/css">
.ps {
border: 1px; border-style: solid none none solid; border-color: orange
}
</style>

Таким образом, мы определили стиль ps (сокращение от PageStart), который и будем указывать для первого слова (полуслова) каждой страницы:


...и в тот же день уехал в Урюпинск.
</p><p>
Мы тепло попро</font><font id="0019" title="0019" class="ps">щались</font> с ним


...и в тот же день уехал в Урюпинск.

Мы тепло попрощались с ним


3. Теперь нам следует придумать, как лучше обозначать начало страницы, начинающейся с рисунка или таблицы. Вероятно, в этом случае лучше создать отдельную пустую (состоящую из нескольких жёстких пробелов) строку в левом верхнем углу новой страницы. Практика показывает, что её лучше видно, если эта строка имеет абзацный отступ и отделена от текста предыдущей страницы пустой строкой сверху. Выглядеть это будет так:


... Эти цифры можно проиллюстрировать следующей таблицей:


          
Таблица


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


Раздел пятый


Если заголовок состоит из одной-двух цифр - обрамляем его пробелами


   IV   


4. Если полуслово, с которого начинается страница очень короткое (2-3 буквы), можно распространить выделение полурамкой и на следующее слово. Но в этом случае лучше заменить пробел между ними жёстким пробелом: &nbsp; - чтобы выделенный рамкой контекст вдруг не разделился между двумя строками.

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


я вам, товарищи, вот что скажу:


5. В итоге HTML-код страницы выглядит так:

<html><head>
метки начала файла и начала "шапки" со служебной информацией
<title>Л.И.Брежнев: Ленинским курсом. Том 1. 1964-1967</title>
заголовок, отображаемый в синей строке рамки, в закладках и в выдаче поисковых систем
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
указание отображать текст в русской кодировке
<style type="text/css">
заголовок таблицы стилей
p {
text-align:justify; text-indent:1.5em; margin:0
}
параметры стандартного абзаца: выравнивание по обоим краям; 
отступ первой строки 1,5 высоты стандартной заглавной буквы 
(далее - всб); отсутствие интервала между абзацами
.ps {
border: 1px; border-style: solid none none solid; border-color: orange
}
параметры стиля PageStart: рамка шириной в 1 точку; рамка
сверху-есть, справа-нет, снизу-нет, слева-есть;
цвет рамки - оранжевый
h1 {
font-size: 1.3em; text-align:center; margin:0.5em; page-break-before: always;
}
параметры заголовка 1-го уровня: шрифт - 1,3 всб; выравнивание - по центру; 
отбивка сверху, снизу и с боков 0,5 всб; 
при распечатке и предпросмотре заголовок начинает новую страницу
h2 {
font-size: 1.1em; text-align:center; margin:0.5em;
}
параметры заголовка 2-го уровня: шрифт - 1,2; 
по центру; отбивка 0,5 со всех сторон
h3 {
font-size: 1em; text-align:center; margin:1em 0 0.5em 0;
}
параметры заголовка 3-го уровня: шрифт стандартного размера; 
по центру; отбивка сверху 1, справа 0, снизу 0,5, слева 0
.f {
text-align:justify; font-size:0.8em; margin:0
}
параметры сноски (footnote): выравнивание по обоим краям; шрифт 0,8; отбивки нет
.o {
text-align:justify; text-indent:-1.5em; margin:3 3em 3 2em
}
параметры оглавления: выравнивание по обоим краям; выступ первой строки влево на 1,5 всб;
отступы основных строк абзаца - сверху и снизу 3 точки, справа 2 всб, слева 3 всб
.z {
overflow:hidden; margin-left:2em; margin-right:0.5em; height:1.5em;
}
параметры блока строки оглавления с заполнителем (точками): не показывать знаки, перекрывающиеся с текстом; 
границы строки: слева 2 всб, справа 0,5 всб; высота блока - 1,5 всб.
Мы не знаем, сколько точек надо вставить между концом заголовка (в данном случае мы используем дату - она 
достаточно короткая) и номером страницы, пригнанным к правому краю. Поэтому ставим точки с большим запасом 
и указываем, что показывать надо только одну их строку (по высоте) и только на участке, не занятом датой 
слева и номером страницы справа
</style>
конец таблицы стилей
</head>
конец шапки
<body bgcolor="white">
начало видимого текста; фон страницы - белый.
Титульный лист и его оборот с выходными данными воспроизводить можно по-разному: 
это дело вкуса. Начнём со страницы 3
<a id="00"><hr></a>
метка начала "нулевого" текста (предисловия); горизонтальная черта;
конец метки. К меткам номера текста, в отличие от меток номеров страниц, добавляем ноль в начале
<font id="3" title="3">
Метка начала страницы, совмещённая с всплывающей подсказкой с номером страницы.
Поскольку начинается новый текст, видимое графическое выделение начала текста излишне.
<h1>ОТ ИЗДАТЕЛЬСТВА</h1>
Заголовок первого уровня
<p>
Начало абзаца
Речи и статьи Генерального секретаря ЦК КПСС Л.&nbsp;И.&nbsp;Брежнева, 
включенные в предлагаемый читателю двухтомник «Ленинским курсом», 
относятся к 1964—1970 гг.
Собственно текст. Инициалы отделены пробелами фиксированной ширины 
(обычные пробелы - плавающей ширины, которая при выравнивании подстраивается под ширину окна).
Разрывов строки внутри абзаца браузер не замечает, но лучше, чтобы их не было (абзац - бесконечная строка)
</p><p>
конец абзаца; начало абзаца. Такую строчку следует вставить
между всеми абзацами основного текста при первоначальном форматировании
Первый том охватывает период 1964—1967 гг., второй том — 1967—1970 гг. Эти годы характеризуются новыми 
серьезными успехами советского народа в строительстве коммунизма, в развитии экономики, науки, 
культуры, одержанными под руководством Коммунистической партии и ее 
ленинского Центрального Комитета.
</p><p>
Кончается последний абзац страницы, далее с новой страницы начинается следующий
</font><font id="4" title="4" class="ps">Издание</font><font title="4"> речей и статей 
Генерального секретаря ЦК КПСС Л. И. Брежнева поможет партийным и советским 
работникам, идеологическим кадрам.
Вначале закрывается тег всплывающей подсказки с номером страницы "3". Почему именно здесь? 
А чтобы вставлять его одной операцией в пакете с заданием шрифта первого слова страницы
(FONT CLASS), к которому подцеплены метка начала 4-й страницы (ID="4") 
и всплывающая подсказка с номером страницы (TITLE="4").
Сразу же после первого слова тег FONT с атрибутом графического выделения CLASS закрывается,
и открывается тег FONT с единственным признаком - TITLE (всплывающий номер страницы)
</p><p>
Конец абзаца; начало абзаца
Некоторые выступления и статьи печатаются с сокращениями.
</p>
Конец последнего абзаца последней страницы данной статьи
<div align="center"><br><i>4</i></div></font>
Блок (DIV) размещённый по центру; пустая строка (BR); переход на курсив (I);
номер страницы; конец курсива; конец блока; закрывающий тэг всплывающей подсказки
<a id="01"><hr></a>
метка начала первого текста в сборнике; горизонтальная черта; конец метки. 
<font id="5" title="5">
Метка начала страницы, подсказка с номером страницы
<h1>РЕЧЬ НА МИТИНГЕ <br>
ПРЕДСТАВИТЕЛЕЙ ТРУДЯЩИХСЯ, <br>
ПОСВЯЩЕННОМ ВСТРЕЧЕ КОСМОНАВТОВ</h1>
Заголовок делим на три строки, как в печатном оригинале.
Перед разрывом строки (BR) можно добавить пробел, виден он всё равно не будет,
но так легче избежать "склеивания" строк при попадании текста в искалки 
или текстовые процессоры
<h2><i>19 октября 1964 года</i></h2>
По правде говоря, это никакой не заголовок второго уровня, а подзаголовок к заголовку первого уровня.
Но это ничуть не важно. Главное, что однородные и одинаково сформатированные блоки
мы отмечаем везде как H2, для которого в таблице стилей заданы почти все параметры.
А вот курсив мы задаем не в таблице стилей, а непосредственно в подзаголовке - потому что 
кое-где в книге подзаголовки могут не целиком состоять из курсива
<p>
Дорогие товарищи и друзья!
</p><p>
Трудящиеся Советского Союза совершили новый выдающийся научный, инженерный и человеческий подвиг. 
Новая мощная советская ракета впервые в мире вывела в космос многоместный корабль,
на борту которого трудился дружный коллектив людей — советских людей, товарищи! <i>(Аплодисменты.)</i> 
В космос вместе поднялись специалисты разных областей знания.
Тегами I.../I задан курсив.
</p><p>
Наша партия хочет, чтобы </font><font id="6" title="6" class="ps">советские</font><font title="6"> люди из года в год жили лучше. 
На месте разрыва страницы посреди абзаца закрываем и открываем тег FONT. Дальше - всё как в начале страницы 4.
</p><p>
На принципиальной основе марксизма-ленинизма, 
пролетар</font><font id="7" title="7" class="ps">ского</font><font id="7" title="7"> интернационализма КПСС будет...
И такой же код вставляем, когда разрыв страницы приходится на середину слова
(важно, чтобы до и после внутрисловных тегов было пробелов)
</p><p>
В свое время В.&nbsp;И.&nbsp;Ленин указывал: «У нас ужасно много охотников перестраивать 
на всяческий лад, и от этих перестроек получается такое бедствие, что я большего бедствия 
в своей жизни и не знал»&nbsp;<a title="В.&nbsp;И.&nbsp;Ленин. 
Полн. собр. соч., т. 44, стр. 326." href="#1-7">[1]</a>. <i>(Аплодисменты.)</i>
Здесь мы вставляем знак сноски [1], "приклеивая" его к закрывающей кавычке цитаты
с помощью неразрывного пробела (чтоб не съехал на следующую строку).
Вокруг знака сноски - гиперссылка (A HREF) на местонахождение текста сноски (в конце статьи), 
совмещённая со всплывающей подсказкой (A TITLE), в которой дублируется текст сноски в более примитивном виде 
(он не может быть курсивным, не может содержать гиперссылок и т.п.).
Если мы совмещаем ссылку (A HREF) с подсказкой (TITLE), она прекращает действие предшествующей 
всплывающей подсказки (FONT TITLE), а по окончании ссылки (/A) действие подсказки 
с номером страницы возобновляется автоматически.
</p><p>
В прошлое воскресенье<noindex>&nbsp;<a title="20 июля 1969 года." href="#2-7">[2]</a></noindex> человек впервые высадился на Луну.
</p><p>
Если сам по себе знак сноски разрывает контекст, мы можем попробовать "спрятать" его с помощью тега NOINDEX
(правда, его понимает только Яндекс, а Гугл - нет)
</p>
<h3>ЗНАМЯ ОКТЯБРЯ — ЗНАМЯ БОРЬБЫ <br>
ЗА МИР И СОЦИАЛИЗМ</h3>
<p>
Так выглядят заголовок второго (формально - третьего) уровня и коды вокруг него
Товарищи!
</p><p>
Да здравствует мир во всем мире! <i>(В зале вспыхивает бурная овация. Все встают. Слышатся 
здравицы в честь Коммунистической партии Советского Союза, Великого Октября,
советского народа, в честь могучего содружества социалистических стран.)</i>
</p>
<div align="center"><br><i>7</i></div></a>
Мы закончили последнюю страницу данной статьи, пронумеровали её, а после этого уже вставляем сноски.
<div class="f"><p style="text-indent:0; margin:0">_________</p><p>
Начинаем блок, сформатированный стилем Footnote (параметры заданы в таблице стилей).
Первый абзац состоит из десяти знаков подчёркивания и прижат к левому краю (отступ - "0"). Начинаем следующий абзац.
<a id="1-7"><sup>1</sup></a><i>В.&nbsp;И.&nbsp;Ленин.</i> Полн. собр. соч., т. 44, 
стр. 326. <a href="#7">[к&nbsp;стр.&nbsp;7]</a>
Метка сноски 1 к странице 7. Надстрочная (верхний индекс) единичка. Конец метки. Текст сноски. 
Обратная гиперссылка на страницу, к которой сноска.
</p><p>
Следующая сноска отделена знаками конца и начала абзаца.
<a id="2-7"><sup>2</sup></a>20 июля 1969 года. <a href="#7">[к&nbsp;стр.&nbsp;7]</a>
</p></div>
Закрываем абзац, закрываем блок сносок.
Начинается следующая статья. Последней статьёй (с меткой "000") делаем оглавление.
<a id="000"><hr></a>
Метка номера статьи
<a id="543" title="543">
Метка номера страницы и всплывающая подсказка с этим номером.
Предстоит ещё подобрать оптимальный тег для этой метки - это может быть FONT, A или DIV.
<h1 style="letter-spacing:4px; font-size:1em">СОДЕРЖАНИЕ</h1>
Заголовок "Содержание" обозначаем стилем H1 - чтобы при распечатке содержание начиналось с новой страницы,
но уменьшаем размер шрифта до стандартного и добавляем разрядку (промежутки между буквами - 4 точки)
</a>
Если наш тег подсказки с номером страницы - A, то вынужденно закрываем его. Все равно тег гиперссылки его отменит.
<div class="z" style="margin-left:0.5em;"><span style="float:left"><a href="#00">
От издательства
</a></span>
Первая строка оглавления - нетипичная, в ней нет даты, но она сама достаточно короткая, чтоб быть
уверенным, что после неё поместится длинный ряд точек. Устанавливаем для неё стиль "z" ("с заполнителем")
и устанавливаем левый край аналогично строкам стиля "o" ("оглавление"). Прижимаем к левому краю (float:left)
заголовок "От издательства"
<span style="float:right">3</span>
К правому краю прижимаем номер страницы
. . . . . . . . . . . . . . . . . . . . . . . .
оставшееся пространство заполняем точками, которые разделены пробелами.
Чтобы строка была заполнена даже на широких мониторах - точек должно быть много, штук 160,
а не столько, сколько здесь нарисовано
</div>
Всё. Конец блока.
<p class="o"><a href="#01">Речь на митинге представителей трудящихся, посвященном встрече космонавтов</a>.</p>
Теперь стандартный для нашего оглавления абзац (стиль "o") с гиперссылкой на соответствующий текст.
Мы не нашли способа вставить заполнение точками в произвольную (вторую, третью) строку абзаца оглавления,
только в изолированную строку, куда и выносим дату, которой в нашем случае заканчивается каждый пункт оглавления.
<div class="z"><i style="float:left;">19 октября 1964 года.</i><span style="float:right">5</span>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
</div>
Блок стандартного пункта оглавления завершён.
После конечных выходных данных следует поставить метки конца основного текста и конца файла:
</body></html>

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

title="333"
в код каждого ряда таблицы:
<tr title="333">
и заново открыть тег FONT TITLE после конца таблицы, если на странице есть ещё какой-то текст. В этом случае перед началом таблицы на первой её странице тег FONT имеет смысл закрыть. Как это работает, можно посмотреть по адресу http://vedomosti.rsfsr-rf.ru/1993/38/#02644.


7. ПРЕДШЕСТВЕННИКИ И КОЛЛЕГИ:


Тема адекватного представления в Интернете источников прошлого обсуждается не первое десятилетие. См., например, стенограмму Круглого стола "Историк, источник и Интернет" (журнал "Новая и новейшая история, 2001, №2" - на сайте "Vivos Voco!"). Ближе всего к задачам настоящего сайта было выступление Тимура Якубовича Валетова с кафедры исторической информатики МГУ, у которой есть собственная интернет-библиотека исторических источников.


Стандарт для параллельного отображения текста на двух языках - Diglossa - разрабатывается Михаилом Быковым (Москва). Он заметно сложнее нашего, начиная с того, что исходные тексты хранятся на сайте не в HTML, а в маркированном TXT. Версия же HTML генерируется в момент запроса с помощью JavaScript'а.



Идея создания таких стандартов получила поддержку на Круглом столе "Источники новейшего времени" в Государственной публичной исторической библиотеке 27.09.2012 г.

Интересующиеся приглашаются к продложению дискуссии, адрес для переписки: diogen(at)peshehod.org (Григорий Белонучкин)
Буду также признателен за присланные адреса форумов, где эту проблему имеет смысл обсуждать.