DocBook был разработан компаниями HaL Computer Systems и O'Reilly & Associates, как DTD для написания технической документации [1]. С 1998 года его поддержкой занимается DocBook Technical Committee. Поэтому, и в отличие от LinuxDoc и HTML, DocBook очень сильно ориентирован на разметку, описывающую что это, а не на описание того, как это должно выглядеть.
Формально или неформально: Некоторые элементы могут существовать в двух формах, formal и неформальной. Обычно формальная версия элемента будет состоять из заголовка, за которым следует информация о версии элемента. Неформальная форма заголовка не содержит.
DocBook DTD находится в коллекции портов как порт textproc/docbook. Он автоматически устанавливается как часть порта textproc/docproj.
Проект Документирования FreeBSD расширил DocBook DTD, добавив некоторые новые элементы. Эти элементы служат для уточнения некоторых элементов разметки.
Когда в списке ниже встречается элемент, специфичный для FreeBSD, это будет явно указано.
В оставшемся тексте этого документа термин ''DocBook'' используется в смысле DocBook DTD, расширенного во FreeBSD.
Замечание: В этих расширениях нет ничего, специфичного для FreeBSD, просто было чувство, что эти расширения оказались полезными для этого конкретного проекта. Если кто-то из других команд *nix (NetBSD, OpenBSD, Linux, ...) заинтересуется в совместной работе над стандартным набором расширений DocBook, пожалуйста, свяжитесь с Группа Менеджеров Дерева Документации FreeBSD
<doceng@FreeBSD.org>
.
Расширений FreeBSD (на данный момент) нет в коллекции портов. Они хранятся в дереве CVS FreeBSD как doc/share/sgml/freebsd.dtd.
В соответствии с рекомендациями DocBook по написанию FPI для собственный настроек DocBook, FPI расширенного DocBook DTD для FreeBSD такова;
PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN"
DocBook позволяет вам структурировать документ несколькими способами. В Проекте Документирования FreeBSD мы используем два основных типа документа DocBook: книга (book) и статья (article).
Книга организуется в виде глав (<chapter>). Это обязательное условие. Между книгой и главой могут быть части (<part>) для того, чтобы дать дополнительный уровень организации. Руководство организовано именно так.
Глава может содержать (или может не содержать) один или большее количество разделов. Это выделяется элементом <sect1>. Если раздел содержит другой подраздел, то используются элемент <sect2> и так далее, до <sect5>.
В главах и разделах содержится оставшийся текст.
Статья устроена проще, чем книга, в ней не используются главы. Вместо них содержимое статьи организуется в один или большее количество разделов, с использованием те же самые элементы <sect1> (<sect2> и так далее), что используются в книгах.
Очевидно, что вы должны следовать характеру документа, который вы создаете, для решения того, лучше размечать его как книгу или как статью. Статьи хорошо подходят для информации, которую не нужно разбивать дальше на несколько глав, и которая имеет относительно небольшой объем, до 20-25 страниц текста. Книги лучше подходят для информации, которая может разбиваться на несколько глав, возможно, с примечаниями и тому подобным содержимым.
Все учебники FreeBSD размечены как статьи, FAQ по FreeBSD и Руководство по FreeBSD размечены как книги.
Текст книги размещается внутри элемента <book>. Этот элемент, наряду с тем, что содержит структурированную разметку, может содержать элементы, которые включают дополнительную информацию о книге. Это либо мета-информация, используемая для справочных целей, либо дополнительный текст, используемый для генерации заглавной страницы.
Эта дополнительная информация должна располагаться в <bookinfo>.
Пример 4-21. Заготовка для <book> с <bookinfo>
<book> <bookinfo> <title>Здесь ваш заголовок</title> <author> <firstname>Ваше имя</firstname> <surname>Ваша фамилия</surname> <affiliation> <address><email>Ваш адрес электронной почты</email></address> </affiliation> </author> <copyright> <year>1998</year> <holder role="mailto:Ваш e-mail">Ваше имя</holder> </copyright> <releaseinfo>$FreeBSD$</releaseinfo> <abstract> <para>Сюда включите обзор содержимого книги.</para> </abstract> </bookinfo> ... </book>
Содержимое статьи размещается внутри элемента <article>. Этот элемент, наряду с тем, что содержит структурированную разметку, может содержать элементы, которые включают дополнительную информацию о статье. Это либо мета-информация, используемая для справочных целей, либо дополнительный текст, используемый для генерации заглавной страницы.
Эта дополнительная информация должна размещаться внутри <articleinfo>.
Пример 4-22. Заготовка <article> с <articleinfo>
<article> <articleinfo> <title>Здесь ваш заголовок</title> <author> <firstname>Ваше имя</firstname> <surname>Ваша фамилия</surname> <affiliation> <address><email>Ваш e-mail</email></address> </affiliation> </author> <copyright> <year>1998</year> <holder role="mailto:Ваш e-mail">Ваше имя</holder> </copyright> <releaseinfo>$FreeBSD$</releaseinfo> <abstract> <para>Сюда включите обзор содержимого статьи.</para> </abstract> </articleinfo> ... </article>
Используйте <chapter> для разметки ваших глав. Каждая глава имеет обязательный элемент <title>. Статьи не содержат глав, они используются только в книгах.
Глава не может быть пустой; она должна содержать элементы, кроме <title>. Если вы хотите включить пустую главу, то воспользуйтесь пустым параграфом.
В книгах главы могут (но но обязаны) разбиваться на разделы, подразделы и так далее. В статьях разделы являются главными структурными элементами, и каждая статья должна содержать по крайней мере один раздел. Используйте элемент <sectn>. n задает номер раздела, определяющий его уровень вложенности.
Первый раздел <sectn> это <sect1>. В главе вы можете иметь один или большее количество таких разделов. Они могут содержать один или большее количество элементов <sect2> и так далее, вплоть до <sect5>.
Пример 4-25. Разделы в главах
<chapter> <title>Примерная глава</title> <para>Некоторый текст в главе.</para> <sect1> <title>Первый раздел (1.1)</title> ... </sect1> <sect1> <title>Второй раздел (1.2)</title> <sect2> <title>Первый подраздел (1.2.1)</title> <sect3> <title>Второй подподраздел (1.2.1.1)</title> ... </sect3> </sect2> <sect2> <title>Второй подраздел (1.2.2)</title> ... </sect2> </sect1> </chapter>
Замечание: В этом примере номера разделов включены в их заголовки. В вашей документации делать этого не нужно. Добавление номеров разделов осуществляется таблицами стилей (о которых чуть ниже), и вам не нужно об этом заботиться.
Вы можете создать еще один уровень организации между <book> и <chapter> при помощи одного или большего количества элементов <part>. Этого нельзя сделать в <article>.
<part> <title>Введение</title> <chapter> <title>Обзор</title> ... </chapter> <chapter> <title>Что такое FreeBSD?</title> ... </chapter> <chapter> <title>История</title> ... </chapter> </part>
DocBook поддерживает три типа параграфов: <formalpara>, <para> и <simpara>.
В большинстве случаев вам потребуется использовать только <para>. <formalpara> включает элемент <title>, а <simpara> запрещает использование некоторых элементов из <para>. Остановите свой выбор на <para>.
Блочное цитирование является расширенным цитированием из другого документа, который не может быть включен в текущий параграф. Вам это будет требоваться нечасто.
Блочные цитаты могут опционально содержать заголовок и атрибуты (или могут остаться без заголовка и без атрибутов).
Пример 4-27. <blockquote>
Использование:
<para>Короткий отрывок из Конституции США;</para> <blockquote> <title>Preamble to the Constitution of the United States</title> <attribution>Copied from a web site somewhere</attribution> <para>We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defence, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America.</para> </blockquote>
Выводимый результат:
Preamble to the Constitution of the United States We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defence, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America. |
||
--Copied from a web site somewhere |
Вам может потребоваться включить дополнительную информацию отдельно от основного текста. Обычно это ''мета''-информация, которую должен принять во внимание пользователь.
В зависимости от природы информации, должен использоваться элемент <tip>, <note>, <warning>, <caution> или <important>. Либо, если информация связана с основным текстом, но не является чем-либо из перечисленного, используйте элемент <sidebar>.
Условия, при которых должен выбираться конкретный тип элемента, размыты и четко не формулируются. Документация по DocBook предлагает следующее;
Note (замечание) для информации, на которую должны обратить внимание все читатели.
Элемент Important (важное) является разновидностью элемента Note.
Caution (предостережение) для информации относительно возможных потерь данных или порчи программного обеспечения.
Warning (предупреждение) для информации, касающейся возможной порчи оборудования или нанесения вреда жизни или органам.
Пример 4-28. <warning>
Использование:
<warning> <para>Установка FreeBSD может привести к желанию удалить Windows с вашего винчестера.</para> </warning>
Внимание: Установка FreeBSD может привести к желанию удалить Windows с вашего винчестера.
Часто вам будет нужно перечислить некоторую информацию пользователю или дать ее в виде некоторого количества шагов, которые должны быть выполнены для достижения какой-то цели.
Для этого используйте элементы <itemizedlist>, <orderedlist> или <procedure> [2]
<itemizedlist> и <orderedlist> похожи на соответствующие элементы из HTML, <ul> и <ol>. Каждый из них состоит из одного или большего количества элементов <listitem>, и каждый <listitem> содержит один или большее количество блочных элементов. Элементы <listitem> аналогичны меткам <li> из HTML. Однако, в отличие от HTML, они обязательны.
<procedure> несколько от них отличается. Он состоит из элементов <step> (шаг), которые, в свою очередь, состоят из дополнительных элементов <step> или <substep>. Каждый элемент <step> содержит блочные элементы.
Пример 4-29. <itemizedlist>, <orderedlist> и <procedure>
Использование:
<itemizedlist> <listitem> <para>Это первый списочный элемент.</para> </listitem> <listitem> <para>Это второй списочный элемент.</para> </listitem> </itemizedlist> <orderedlist> <listitem> <para>Это первый упорядоченный элемент.</para> </listitem> <listitem> <para>Это второй упорядоченный элемент.</para> </listitem> </orderedlist> <procedure> <step> <para>Сделайте это.</para> </step> <step> <para>Затем сделайте то.</para> </step> <step> <para>А теперь сделайте вот так.</para> </step> </procedure>
Получаемый результат:
Это первый списочный элемент.
Это второй списочный элемент.
Это первый упорядоченный элемент.
Это второй упорядоченный элемент.
Сделайте это.
Затем сделайте то.
А теперь сделайте вот так.
Если вы хотите показать пользователю фрагмент файла (или, возможно, файл полностью), поместите его в элемент <programlisting>.
Пробелы и переводы строк внутри <programlisting> имеют значение. В частности, это значит, что открывающая метка должна быть на той же строке, что и первая строка вывода, а закрывающая метка должна помещаться на той же строке, что и последняя строка вывода, в противном случае будут вставлены пустые строки.
Пример 4-30. <programlisting>
Использование:
<para>Когда вы закончите, ваша программа должна иметь примерно такой вид:</para> <programlisting>#include <stdio.h> int main(void) { printf("hello, world\n"); }</programlisting>
Отметьте, что угловые скобки в строке #include нужно описывать по их соответствующим сущностям, а не напрямую.
Результат выдачи:
Когда вы закончите, ваша программа должна иметь примерно такой вид;
#include <stdio.h> int main(void) { printf("hello, world\n"); }
Отсылка является механизмом для ссылки на часть текста, которая встретилась ранее, или в определенной позицию внутри ранее идущего примера, без ссылки на него внутри текста.
Чтобы это сделать, пометьте интересующие области в вашем примере (<programlisting>, <literallayout> или что там у вас еще) элементом <co>. Каждый элемент должен иметь уникальный присвоенный ему идентификатор id. После примера поместите <calloutlist>, который ссылается на пример и дает дополнительный комментарий.
Пример 4-31. <co> и <calloutlist>
<para>Когда вы закончите, ваша программа должна иметь примерно такой вид;</para> <programlisting>#include <stdio.h> <co id="co-ex-include"> int <co id="co-ex-return"> main(void) { printf("hello, world\n"); <co id="co-ex-printf"> }</programlisting> <calloutlist> <callout arearefs="co-ex-include"> <para>Включение стандартного файла объявлений IO.</para> </callout> <callout arearefs="co-ex-return"> <para>Указывает на то, что <function>main()</function> возвращает int.</para> </callout> <callout arearefs="co-ex-printf"> <para>Вызов <function>printf()</function>, который выдает <literal>hello, world</literal> на стандартный вывод.</para> </callout> </calloutlist>
Результат обработки:
Когда вы закончите, ваша программа должна иметь примерно такой вид;
#include <stdio.h>int
main(void) { printf("hello, world\n");
}
В отличие от HTML, вам не нужно использовать таблицы для целей размещения, так как эту работу выполняют таблицы стилей. Используйте таблицы для разметки табличных данных.
Вообще (обратитесь к документации по DocBook для получения дополнительной информации) таблица (которая может быть формальная или неформальная) состоит из элемента <table>. Он содержит по крайней мере один элемент <tgroup>, задающий (как атрибут) количество столбцов в этой табличной группе. Внутри табличной группы вы можете иметь один элемент <thead>, который содержит элементы для заголовков таблицы (заголовки столбцов) и один элемент <tbody>, содержащий тело таблицы.
Как <tgroup>, так и <thead> содержат элементы <row>, в свою очередь, содержащие элементы <entry>. Каждый элемент <entry> задает одну ячейку в таблице.
Пример 4-32. <informaltable>
Использование:
<informaltable frame="none" pgwide="1"> <tgroup cols="2"> <thead> <row> <entry>Это заголовок столбца 1</entry> <entry>Это заголовок столбца 2</entry> </row> </thead> <tbody> <row> <entry>Строка 1, столбец 1</entry> <entry>Строка 1, столбец 2</entry> </row> <row> <entry>Строка 2, столбец 1</entry> <entry>Строка 2, столбец 2</entry> </row> </tbody> </tgroup> </informaltable>
Выдаваемый результат:
Вместе с элементом <informaltable> всегда используйте атрибут pgwide со значением 1. Если атрибут будет опущен, то из-за ошибки в в браузере Internet Explorer таблица будет отображаться некорректно.
Если вам не нужна граница вокруг таблицы, то к элементу <informaltable> может быть добавлен атрибут frame со значением none (то есть <informaltable frame="none">).
Во многих случаях вам нужно показать пользователю примеры, по которым нужно что-то делать. Обычно они состоят из диалогов с компьютером; пользователь набирает команду, пользователь получает ответ, затем набирает другую команду и так далее.
При этом задействуется некоторое количество различных элементов и сущностей.
Все, что пользователь видит в этом примере на экране компьютера, поэтому элемент и называется <screen>.
Внутри <screen>, пробелы имеют значение.
Часть из того, что пользователь увидит на экране, является приглашением компьютера (от ОС, командного процессора или прикладной программы. Это должно быть размечено при помощи <prompt>.
Как особый случай, для двух приглашений для обычного пользователя и для администратора даны сущности. Каждый раз, когда вы хотите указать, что пользователь работает с приглашением оболочки, используйте по необходимости &prompt.root; или &prompt.user;. Их не нужно заключать внутрь <prompt>.
Замечание: &prompt.root; и &prompt.user; являются расширениями FreeBSD для DocBook, и не являются частью исходного DTD.
При выводе текста, который должен набрать пользователь, заключите его в метки <userinput>. Он, скорее всего, будет выведен другим образом.
Пример 4-34. <screen>, <prompt> и <userinput>
Использование:
<screen>&prompt.user; <userinput>ls -1</userinput> foo1 foo2 foo3 &prompt.user; <userinput>ls -1 | grep foo2</userinput> foo2 &prompt.user; <userinput>su</userinput> <prompt>Password: </prompt> &prompt.root; <userinput>cat foo2</userinput> This is the file called 'foo2'</screen>
Выводимый результат:
% ls -1 foo1 foo2 foo3 % ls -1 | grep foo2 foo2 % su Password: # cat foo2 This is the file called 'foo2'
Замечание: Хотя мы выводим содержимое файла foo2, оно не размечается как <programlisting>. <programlisting> предназначен для вывода фрагментов файлов вне связи с действиями пользователя.
Когда вы хотите выделить некоторое слово или фразу, используйте <emphasis>. Они могут быть выведены наклонным шрифтом, или жирным шрифтом, или могут проговариваться другим тоном системой преобразования текста в речь.
Внутри документа нет способа изменить способ выделения, нет эквивалентам <b> и <i> из HTML. Если информация, которую вы выделяете, важна, то используйте <important> вместо <emphasis>.
Для того, чтоб процитировать текст из другого документа или источника, или для того чтобы выделить фигуральное выражение, используйте <quote>. В пределах тэга <quote> Вы можете использовать большинство тэгов разметки доступных для нормального текста.
Пример 4-36. Цитирование
Использование:
<para>Несмотря на это убедитесь, что поиск не выходит за <quote>пределы между локальным и публичным администрированием</quote>, как RFC 1535 описывает это.</para>
Выводимый результат:
Несмотря на это убедитесь, что поиск не выходит за ''пределы между локальным и публичным администрированием'', как RFC 1535 описывает это.
Чтобы описать некоторую клавишу на клавиатуре, используйте <keycap>. Чтобы описать кнопку мыши, воспользуйтесь <mousebutton>. А чтобы описать комбинацию нажатий клавиш или щелчков мыши, заключите их в <keycombo>.
<keycombo> имеет атрибут под названием action, который может принимать одно из значений click, double-click, other, press, seq или simul. Последние два значения определяют, должны ли клавиши или кнопки нажиматься последовательно или одновременно.
Таблицы стилей автоматически добавят все необходимые связующие символы, такие, как +, между наименованиями клавиш при объединении в <keycombo>.
Пример 4-37. Клавиши, кнопки мыши и комбинации
Использование:
<para>Чтобы переключиться во второй виртуальный терминал, нажмите <keycombo action="simul"><keycap>Alt</keycap> <keycap>F1</keycap></keycombo>.</para> <para>Чтобы выйти из редактора <command>vi</command> без сохранения вашей работы, наберите <keycombo action="seq"><keycap>Esc</keycap><keycap>:</keycap> <keycap>q</keycap><keycap>!</keycap></keycombo>.</para> <para>Мой оконный менеджер настроен так, что <keycombo action="simul"><keycap>Alt</keycap> <mousebutton>right</mousebutton> </keycombo> кнопка мыши используется для передвижения окон.</para>
Выводимый результат:
Чтобы переключиться во второй виртуальный терминал, нажмите Alt+F1.
Чтобы выйти из редактора vi без сохранения вашей работы, наберите Esc : q !.
Мой оконный менеджер настроен так, что Alt+right кнопка мыши используется для передвижения окон.
Вам часто будет требоваться описать как прикладные программы, так и команды при написании для Руководства. Разница между ними проста: приложение является названием набора (или, возможно, всего лишь 1) программ, которые выполняют конкретную задачу. Команда является названием программы, которую может запустить пользователь.
Кроме того, время от времени вам будет нужно указать один или большее количество параметров, которые может воспринимать команда.
Наконец, вам часто будет нужно указывать команду с номером раздела ее справочной страницы, в формате ''команда(номер)'', обычном для справочной системы Unix.
Выделяйте имена приложений при помощи <application>.
Когда вы хотите указать команду вместе с разделом ее справочной страницы (что бывает в большинстве случаев), то элемент DocBook называется <citerefentry>. Он будет содержать два элемента, <refentrytitle> и <manvolnum>. Содержимым <refentrytitle> является имя команды, а в <manvolnum> помещается номер раздела справочной страницы.
Это может оказаться громоздким при написании, поэтому для облегчения этой задачи был создан набор сущностей общего назначения. Каждая сущность имеет форму &man.manual-page.manual-section;.
Файлом, в котором содержатся эти сущности, является doc/share/sgml/man-refs.ent, и к нему можно обратиться посредством следующего FPI:
PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"
Таким образом, начало вашей документации, скорее всего, будет выглядеть примерно так:
<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [ <!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man; ... ]>
Используйте <command>, когда вы хотите включить название команды ''в строку'', но она должна выглядеть так, как будто её должен набрать пользователь.
Для разметки параметров, которые передаются описываемой команде, используйте <option>.
Когда Вы ссылаетесь к одной команде несколько раз в течение короткого периода времени, то предпочтительно использовать нотацию вида &man.command.sec tion; для разметки первой ссылки и <command> для последующих ссылок. Это делает результат, особенно HTML, гораздо симпатичнее на вид.
Это может запутать, и иногда выбор не всегда очевиден. Надеемся, этот пример сделает это более понятным.
Пример 4-38. Приложения, команды и параметры.
Использование:
<para><application>Sendmail</application> является наиболее часто используемым почтовым приложением Unix.</para> <para><application>Sendmail</application> включает программы <citerefentry> <refentrytitle>sendmail</refentrytitle> <manvolnum>8</manvolnum> </citerefentry>, &man.mailq.8; и &man.newaliases.8;.</para> <para>Один из параметров командной строки для <citerefentry> <refentrytitle>sendmail</refentrytitle> <manvolnum>8</manvolnum> </citerefentry>, <option>-bp</option>, будет выводить текущее состояние сообщений в почтовой очереди. Проверьте это, запустив из командной строки <command>sendmail -bp</command>.</para>
Выводимый результат:
Sendmail является наиболее часто используемым почтовым приложением Unix.
Sendmail включает программы sendmail(8), mailq(8) и newaliases(8).
Один из параметров командной строки для sendmail(8), -bp
, будет выводить текущее состояние сообщений в почтовой очереди.
Проверьте это, запустив из командной строки sendmail -bp.
Замечание: Заметьте, насколько легче использовать нотацию &man.command.section;.
Хотите ли вы указать имя файла, каталог или расширение файла, используйте <filename>.
Пример 4-39. <filename>
Использование:
<para>Исходный код SGML для Руководства на английском языке можно найти в каталоге <filename>/usr/doc/en/handbook/</filename>. В этом каталоге первый файл называется <filename>handbook.sgml</filename>. Вы также должны посмотреть на <filename>Makefile</filename> и некоторое количество файлов с расширением <filename>.ent</filename>.</para>
Выводимый результат:
Исходный код SGML для Руководства на английском языке можно найти в каталоге /usr/doc/en/handbook/. В этом каталоге первый файл называется handbook.sgml. Вы также должны посмотреть на Makefile и некоторое количество файлов с расширением .ent.
Расширение FreeBSD: Эти элементы являются частями расширения FreeBSD к DocBook, и их нет в исходном DocBook DTD.
Вам может потребоваться включить в документацию имя программы из Коллекции Портов FreeBSD. Используйте для этого метку <filename> с атрибутом role. Так как порты могут быть установлены в любое место, включайте только категорию и название порта; не включайте сюда /usr/ports.
Пример 4-40. <filename> с атрибутом role
Использование:
<para>Установите <filename role="package">net/ethereal</filename> для просмотра сетевого трафика.</para>
Выводимый результат:
Установите net/ethereal для просмотра сетевого трафика.
Расширение FreeBSD: Эти элементы являются частью расширения FreeBSD к DocBook, и их их нет в исходном DocBook DTD.
При указания устройства у вас есть два варианта. Вы можете либо указать устройство в том виде, как оно находится в /dev, или вы можете использовать имя устройства так, как оно появляется в ядре. В последнем случае используйте <devicename>.
Иногда у вас нет выбора. Некоторые устройства, такие, как сетевые адаптеры, не имеют соответствий в /dev, или они значительно отличаются от вышеупомянутых.
Пример 4-41. <devicename>
Использование:
<para><devicename>sio</devicename> используется для коммуникаций по последовательным каналам по FreeBSD. <devicename>sio</devicename> доступно через несколько файлов устройств из <filename>/dev</filename>, включая <filename>/dev/ttyd0</filename> и <filename>/dev/cuaa0</filename>.</para> <para>В отличие от него, сетевые устройства, такие, как <devicename>ed0</devicename>, не присутствуют в <filename>/dev</filename>.</para> <para>В MS-DOS первый дисковод обозначается как <devicename>a:</devicename>. Во FreeBSD это <filename>/dev/fd0</filename>.</para>
Выводимый результат:
sio используется для коммуникаций по последовательным каналам по FreeBSD. sio доступно через несколько файлов устройств из /dev, включая /dev/ttyd0 и /dev/cuaa0.
В отличие от него, сетевые устройства, такие, как ed0, не присутствуют в /dev.
В MS-DOS первый дисковод обозначается как a:. Во FreeBSD это /dev/fd0.
Расширение FreeBSD: Эти элементы являются частями расширения FreeBSD к DocBook, и их нет в исходном DocBook DTD.
Вы можете разметить идентификационную информацию для компьютеров, работающих в сети (хостов) несколькими способами, в зависимости от природы информации. Во всех случаях используется элемент </hostid> с атрибутом role, задающим тип размечаемой информации.
Без ролевого атрибута (то есть <hostid>...<hostid> размечаемая информация представляет собой просто имя хоста, такое, как freefall или wcarchive. Вы можете явно задать его при помощи role="hostname".
Текст является именем домена, таким, как FreeBSD.org или ngo.org.uk. Компонент с именем хоста здесь отсутствует.
Текст является Полным Доменным Именем, с доменной и хостовой частями.
Текст является адресом IP, чаще всего записанном в виде четверки чисел через точку.
Текст является адресом IPv6.
Текст является сетевой маской, которая может быть записана как четверка чисел через точку, в виде шестнадцатеричной строки или как /, за которым следует число.
Текст является MAC-адресом Ethernet, записанном в виде последовательности 2-символьных шестнадцатеричных чисел, разделенных двоеточиями.
Пример 4-42. <hostid> и роли
Использование:
<para>Собственно машину всегда можно обозначить по имени <hostid>localhost</hostid> с IP-адресом <hostid role="ipaddr">127.0.0.1</hostid>.</para> <para>Домен <hostid role="domainname">FreeBSD.org</hostid> содержит несколько различных хостов, включая <hostid role="fqdn">freefall.FreeBSD.org</hostid> и <hostid role="fqdn">bento.FreeBSD.org</hostid>.</para> <para>При добавлении алиаса IP к интерфейсу (при помощи <command>ifconfig</command>) <emphasis>всегда</emphasis> используйте сетевую маску <hostid role="netmask">255.255.255.255</hostid> (что может быть записано также как <hostid role="netmask">0xffffffff</hostid>.</para> <para>MAC-адрес однозначно идентифицирует любую существующий сетевой адаптер. Типичный MAC-адрес выглядит как <hostid role="mac">08:00:20:87:ef:d0</hostid>.</para>
Выводимый результат:
Собственно машину всегда можно обозначить по имени localhost с IP-адресом 127.0.0.1.
Домен FreeBSD.org содержит несколько различных хостов, включая freefall.FreeBSD.org и bento.FreeBSD.org.
При добавлении алиаса IP к интерфейсу (при помощи ifconfig) всегда используйте сетевую маску 255.255.255.255 (что может быть записано также как 0xffffffff.
MAC-адрес однозначно идентифицирует любую существующий сетевой адаптер. Типичный MAC-адрес выглядит как 08:00:20:87:ef:d0.
Расширение FreeBSD: Эти элементы являются частями расширения FreeBSD к DocBook, и их нет в исходном DocBook DTD.
Когда вам нужно указать некоторое имя пользователя, такое, как root или bin, используйте <username>.
Расширение FreeBSD: Эти элементы являются частями расширения FreeBSD к DocBook, и их нет в исходном DocBook DTD.
Для описания частей файлов Makefile имеются два элемента, <maketarget> и <makevar>.
<maketarget> идентифицирует цель для построения, экспортируемую из Makefile, которая может быть задана в качестве параметра для make. <makevar> идентифицирует переменную, которая может быть задана (в окружении, в командной строке make или внутри Makefile) для изменения процесса построения.
Пример 4-44. <maketarget> и <makevar>
Использование:
<para>Двумя распространенными целями в <filename>Makefile</filename> являются <maketarget>all</maketarget> и <maketarget>clean</maketarget>.</para> <para>Обычно вызов <maketarget>all</maketarget> приводит к перестроению приложения, а вызов <maketarget>clean</maketarget> удаляет временные файлы (к примеру, <filename>.o</filename>), созданные в процессе построения.</para> <para><maketarget>clean</maketarget> может контролироваться несколькими переменными, среди которых <makevar>CLOBBER</makevar> и <makevar>RECURSE</makevar>.</para>
Выводимый результат:
Двумя распространенными целями в Makefile являются all и clean.
Обычно вызов all приводит к перестроению приложения, а вызов clean удаляет временные файлы (к примеру, .o), созданные в процессе построения.
clean может контролироваться несколькими переменными, среди которых CLOBBER и RECURSE.
Часто вам будет нужно включить в Руководство ''дословный'' текст. Это текст, который взят из другого файла, или который должен быть скопирован из Руководства в другой файл без изменений.
Иногда для разметки такого текста будет достаточно <programlisting>. <programlisting> не всегда подходит, в частности, когда вы хотите включить часть файла ''внутрь'' параграфа.
В таких случаях используйте <literal>.
Пример 4-45. <literal>
Использование:
<para>Строка <literal>maxusers 10</literal> в файле конфигурации ядра определяет размер многих системных таблиц, и примерно задает количество одновременных входов, которые может поддерживать система.</para>
Выводимый результат:
Строка maxusers 10 в файле конфигурации ядра определяет размер многих системных таблиц, и примерно задает количество одновременных входов, которые может поддерживать система.
Часто бывает, что вам нужно показать пользователю, что нужно сделать, или сослаться на файл, или на команду, или на что-то подобное, когда пользователь не может просто скопировать даваемые примеры, а должен вместо этого включить какую-то информацию от себя.
На этот случай был разработан элемент <replaceable>. Используйте его внутри других элементов для выделения частей содержимого этих элементов, которые должен заменить пользователь.
Пример 4-46. <replaceable>
Использование:
<informalexample> <screen>&prompt.user; <userinput>man <replaceable>команда</replaceable></userinput></screen> </informalexample>
Выводимый результат:
<replaceable> может быть использован во многих различных элементах, включая <literal>. Этот пример также показывает, что <replaceable> должен окружать только то содержимое, которое пользователь должен заменить. Все остальное изменять не нужно.
Использование:
<para>Строка <literal>maxusers <replaceable>n</replaceable></literal> в файле конфигурации ядра определяет размер многих системных таблиц, и примерно задает количество одновременных входов, которое поддерживает система.</para> <para>Для настольной рабочей станции в качестве <replaceable>n</replaceable> подойдет значение <literal>32</literal>.</para>
Выводимый результат:
Строка maxusers n в файле конфигурации ядра определяет размер многих системных таблиц, и примерно задает количество одновременных входов, которое поддерживает система.
Для настольной рабочей станции в качестве n подойдет значение 32.
Вам может понадобиться показать ошибки, генерируемые FreeBSD. Выделяйте их при помощи <errorname>. Этот элемент отмечает в точности сообщение об ошибке.
Важно: Поддержка иллюстраций в документации на данный момент носит весьма экспериментальный характер. Я думаю. что механизм, описываемый здесь, вряд ли изменится, но это не гарантируется.
Вам также потребуется установить порт graphics/ImageMagick, который используется для преобразований между различными графическими форматами. Это большой порт, и основной его объем не нужен. Однако, пока мы работаем над файлами Makefile и другой инфраструктурой, проще всего использовать его. Этот порт не входит в мета-порт textproc/docproj, вы должны установить его вручную.
Лучшим примером того, чему нужно следовать на практике, является документ doc/en_US.ISO8859-1/articles/vm-design/. Если вам будут не совсем понятны последующие объяснения, взгляните на файлы в этом каталоге, чтобы посмотреть, как все это работает вместе. Поэкспериментируйте с созданием версий документа с разным форматированием, чтобы посмотреть, как выводятся размеченные изображения.
На данный момент мы поддерживаем два формата изображений. Формат, который вы должны использовать, зависит от природы вашего изображения.
Для изображений, которые в основном являются векторными, таких, как сетевые диаграммы, графики и тому подобное, используйте Encapsulated Postscript и проследите за тем, чтобы файлы с вашими иллюстрациями имели расширение .eps.
Для точечных изображений, таких, как снимки экранов, используйте формат Portable Network Graphic, и проследите за тем, чтобы файлы с вашими иллюстрациями имели расширение .png.
Это единственные форматы, в которых могут быть изображения, помещаемые в хранилище CVS.
Используйте подходящий формат для подходящих иллюстраций. Предполагается, что в вашей документации будет смесь изображений в форматах EPS и PNG. Файлы Makefile будут обеспечивать выбор корректного формата изображений в зависимости от выбранного вами формата выдачи документации. Не коммитьте в хранилище одно и то же изображение в двух разных форматах.
Важно: Предполагается, что Проект Документирования перейдет на использование формата SVG (Scalable Vector Graphic - масштабируемая векторная графика) для векторных изображений. Однако текущее состояние инструментов, которые могут редактировать SVG, делает этот переход непрактичным.
Разметка для изображения сравнительно проста. Сначала разметьте <mediaobject>. <mediaobject> может содержать другие, более специфичные объекты. Мы имеем дело с двумя, <imageobject> и <textobject>.
Вы должны включить один <imageobject> и два элемента <textobject>. <imageobject> будет указывать на имя используемого файла с изображением (без расширения). Элементы <textobject> содержат информацию, которая будет выдаваться пользователю вместе или вместо изображения.
Есть два условия, где это может быть.
Когда читатель смотрит документацию в HTML. В этом случае каждому изображению нужно будет поставить в соответствие альтернативный текст для показа пользователю, обычно во время загрузки изображения, или при наведении курсора мыши на изображение.
Когда читатель смотрит документацию в формате обычного текста. В этом случае каждая иллюстрация должна иметь эквивалент в псевдографике ASCII для выдачи пользователю.
Наверное, пример поможет облегчить понимание этого. Предположим, что у вас есть файл изображения с именем fig1, которое вы хотите включить в документ. Эта иллюстрация представляет собой прямоугольник с буквой A внутри. Разметка для этого случая будет такова.
<mediaobject> <imageobject> <imagedata fileref="fig1"></imageobject> <textobject> <literallayout class="monospaced">+---------------+
| A | +---------------+</literallayout> </textobject> <textobject> <phrase>Рисунок</phrase>
</textobject> </mediaobject>
Отметьте, что первая и последняя строки содержимого элемента <literallayout> располагаются впритык к меткам элемента. Это избавляет от включения дополнительных пробелов.
Ваши иллюстрации должны быть перечислены в Makefile в переменной IMAGES. Эта переменная должна содержать имя всех ваших исходных изображений. К примеру, если вы создали три рисунка, fig1.eps, fig2.png и fig3.png, то в вашем Makefile должны быть строки, подобные следующим.
... IMAGES= fig1.eps fig2.png fig3.png ...
или же
... IMAGES= fig1.eps IMAGES+= fig2.png IMAGES+= fig3.png ...
И снова Makefile сам составит полный список иллюстраций, которые нужны для построения вашего документа, вам нужно только перечислить файлы с изображениями, которые дали вы.
Вы должны быть аккуратны при разбиении вашей документации на файлы меньшего размера (посмотрите Разд. 3.7.1), которые находятся в различных каталогах.
Предположим, что у вас есть книга с тремя главами, причем главы хранятся в своих собственных каталогах, с именами chapter1/chapter.sgml, chapter2/chapter.sgml и chapter3/chapter.sgml. Если в каждой главе есть изображения, связанные с ней, я рекомендую разместить эти иллюстрации в подкаталоге соответствующей главы (chapter1/, chapter2/ и chapter3/).
Однако если вы сделаете так, то должны указать имена каталогов в переменной IMAGES из Makefile и должны указать имя каталога в элементе <imagedata> вашего документа.
Например, если у вас есть chapter1/fig1.png, то chapter1/chapter.sgml должен содержать
<mediaobject> <imageobject> <imagedata fileref="chapter1/fig1"></imageobject> ... </mediaobject>
Makefile должен содержать
... IMAGES= chapter1/fig1.png ...
Теперь все должно работать.
Замечание: Ссылки также являются строчными элементами.
Ссылки внутри того же самого документа требуют указания того, откуда вы ссылаетесь (то есть текст, на котором пользователь будет щелкать или каким-то другим способом выделять, в качестве начала связи) и того, куда вы ссылаетесь (конец связи).
Каждый элемент в DocBook имеет атрибут под названием id. Вы можете разместить текст в этом атрибуте для уникального именования элемента, которому он принадлежит.
Это значение используется, когда вы задаете источник ссылки.
Как правило, вы будете ссылаться на главы или разделы, так что добавляйте атрибут id к этим элементам.
Пример 4-48. id в главах и разделах
<chapter id="chapter1"> <title>Введение</title> <para>Это введение. Оно содержит подраздел, который идентифицируется.</para> <sect1 id="chapter1-sect1"> <title>Подраздел 1</title> <para>Это подраздел.</para> </sect1> </chapter>
Очевидно, что вы должны использовать значения, говорящие сами за себя. В пределах документа (то есть не только одного файла, но и всех составляющих его файлов) значения должны быть уникальными. Заметьте, что id для подраздела строится путем добавления текста к id главы. Это помогает обеспечить их уникальность.
Если вы хотите позволить пользователю переходить на конкретный участок документа (возможно, в середине параграфа или примера), то используйте <anchor>. В этом элементе нет содержимого, но может быть атрибут id.
Пример 4-49. <anchor>
<para>В этом параграфе имеется встроенная <anchor id="para1">ссылка на него. Она не будет показываться в документе.</para>
Когда вы хотите предоставить пользователю ссылку, которую можно активировать (чаще всего щелчком) для перехода к разделу документа, имеющему атрибут id, вы можете использовать <xref> либо <link>.
Оба этих элемента имеют атрибут linkend. Значением этого атрибута должно быть значение, которое вы использовали в атрибуте id (не имеет значения, появлялось ли это значение раньше; это работает как для ранее объявленных, так и объявляемых позже ссылок).
Если вы используете <xref>, то вы не управляете текстом ссылки. Он будет для вас сгенерирован.
Пример 4-50. Использование <xref>
Положим, что этот фрагмент появился где-то в документе, который включает пример с id;
<para>Дополнительная информация может быть найдена в <xref linkend="chapter1">.</para> <para>Более конкретная информация находится в <xref linkend="chapter1-sect1">.</para>
Текст ссылки будет сгенерирован автоматически, и будет выглядеть как (выделенный текст, который будет ссылкой);
Дополнительная информация может быть найдена в Глава Один.
Более конкретная информация находится в разделе с названием Подраздел 1.
Заметьте, что текст ссылки берется из названия раздела или номера главы.
Замечание: Это значит, что вы не можете использовать <xref> для отсылки на атрибут id элемента <anchor>. Элемент <anchor> не имеет содержимого, так что <xref> не сможет сгенерировать текст для ссылки.
Если вы хотите управлять текстом ссылки, то используйте <link>. В этот элемент помещается содержимое, которое будет использоваться для ссылки.
Пример 4-51. Использование <link>
Предположим, что этот фрагмент появляется где-то в документе, который включает в себя пример с id.
<para>Дополнительная информация может быть найдена в <link linkend="chapter1">первой главе</link>.</para> <para>Более конкретная информация находится в <link linkend="chapter1-sect1">этом</link> разделе.</para>
Это приведет к генерации следующего (выделенного текста, который отмечает текст, являющийся ссылкой);
Дополнительная информация может быть найдена в первой главе.
Более конкретная информация находится в этом разделе.
Замечание: Последний пример плох. Никогда не используйте слова типа ''этот'' или ''здесь'' в качестве источника ссылки. Читателю потребуется изучать окружающий текст, чтобы выяснить, куда собственно привела ссылка.
Замечание: Вы можете использовать <link> для включения ссылки на id в элементе <anchor>, так как содержимое <link> задает текст, используемый для ссылки.
Отсылки на внешние документы гораздо проще, если вы знаете URL документа, на который хотите сослаться. Используйте <ulink>. Атрибут url представляет собой URL страницы, на которую указывает ссылка, а содержимым элемента является текст, выдаваемый пользователю для активации ссылки.
Пример 4-52. <ulink>
Использование:
<para>Конечно, вы можете прекратить чтение этого документа и перейти на <ulink url="&url.base;/ru/index.html">домашнюю страницу FreeBSD</ulink>.</para>
Выводимый результат:
Конечно, вы можете прекратить чтение этого документа и перейти на домашнюю страницу FreeBSD.
[1] |
Краткая история находится по адресу http://www.oasis-open.org/committees/docbook/intro.shtml. |
[2] |
В DocBook есть и другие типы элементов списка, но пока мы их не рассматриваем. |
Пред. | Начало | След. |
Разметка SGML | Уровень выше | * Таблицы стилей |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.