aboutsummaryrefslogtreecommitdiff
path: root/zh_TW.UTF-8/books/fdp-primer/book.xml
diff options
context:
space:
mode:
authorKevin Lo <kevlo@FreeBSD.org>2016-06-21 01:19:43 +0000
committerKevin Lo <kevlo@FreeBSD.org>2016-06-21 01:19:43 +0000
commite920a09b0e01b29663e506f99e9f743b2bde2610 (patch)
tree70cabc3a3de14ac91d5c144b8d06a92ae14b3d02 /zh_TW.UTF-8/books/fdp-primer/book.xml
parente14d1d2172ccd8f466d1ca944fbf37deca817298 (diff)
downloaddoc-e920a09b0e01b29663e506f99e9f743b2bde2610.tar.gz
doc-e920a09b0e01b29663e506f99e9f743b2bde2610.zip
- Move all usable previous translation to the po translation of
zh_TW fdp-primer. - New translation of Chapter 12 PO translation Submitted by: RayCherng Yu <raycherng at gmail dot com> Reviewed by: wblock Differential Revision: https://reviews.freebsd.org/D6869
Notes
Notes: svn path=/head/; revision=48972
Diffstat (limited to 'zh_TW.UTF-8/books/fdp-primer/book.xml')
-rw-r--r--zh_TW.UTF-8/books/fdp-primer/book.xml8638
1 files changed, 8563 insertions, 75 deletions
diff --git a/zh_TW.UTF-8/books/fdp-primer/book.xml b/zh_TW.UTF-8/books/fdp-primer/book.xml
index 0863eb87ba..cb0dbad186 100644
--- a/zh_TW.UTF-8/books/fdp-primer/book.xml
+++ b/zh_TW.UTF-8/books/fdp-primer/book.xml
@@ -1,8 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
-<!ENTITY % chapters SYSTEM "chapters.ent"> %chapters;
-]>
+<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN" "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
+<!ENTITY % chapters SYSTEM "chapters.ent">
+<!--
+ Creates entities for each chapter in the Documentation Project Primer.
+ Each entity is named chap.foo, where foo is the value of the id
+ attribute on that chapter, and corresponds to the name of the
+ directory in which that chapter's .xml file is stored.
+
+ Chapters should be listed in the order in which they are referenced.
+
+ $FreeBSD$
+--><!ENTITY chap.overview SYSTEM "overview/chapter.xml">
+<!ENTITY chap.tools SYSTEM "tools/chapter.xml">
+<!ENTITY chap.working-copy SYSTEM "working-copy/chapter.xml">
+<!ENTITY chap.structure SYSTEM "structure/chapter.xml">
+<!ENTITY chap.doc-build SYSTEM "doc-build/chapter.xml">
+<!ENTITY chap.the-website SYSTEM "the-website/chapter.xml">
+<!ENTITY chap.xml-primer SYSTEM "xml-primer/chapter.xml">
+<!ENTITY chap.xhtml-markup SYSTEM "xhtml-markup/chapter.xml">
+<!ENTITY chap.docbook-markup SYSTEM "docbook-markup/chapter.xml">
+<!ENTITY chap.stylesheets SYSTEM "stylesheets/chapter.xml">
+<!ENTITY chap.translations SYSTEM "translations/chapter.xml">
+<!ENTITY chap.po-translations SYSTEM "po-translations/chapter.xml">
+<!ENTITY chap.writing-style SYSTEM "writing-style/chapter.xml">
+<!ENTITY chap.editor-config SYSTEM "editor-config/chapter.xml">
+<!ENTITY chap.see-also SYSTEM "see-also/chapter.xml">
+<!ENTITY app.examples SYSTEM "examples/appendix.xml">
+<!-- ENTITY index SYSTEM "index.xml" -->]>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
@@ -33,71 +57,96 @@
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
- Original revision: 1.27
-->
-<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
+<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_TW">
<info><title>FreeBSD 文件計畫入門書</title>
<author><orgname>FreeBSD 文件計劃</orgname></author>
- <copyright>
- <year>1998</year>
- <year>1999</year>
- <year>2000</year>
- <year>2001</year>
- <year>2002</year>
- <year>2003</year>
- <year>2004</year>
- <year>2005</year>
- <year>2006</year>
- <year>2007</year>
- <holder role="mailto:doceng@FreeBSD.org">DocEng</holder>
- </copyright>
+ <copyright><year>1998</year> <year>1999</year> <year>2000</year> <year>2001</year> <year>2002</year> <year>2003</year> <year>2004</year> <year>2005</year> <year>2006</year> <year>2007</year> <year>2008</year> <year>2009</year> <year>2010</year> <year>2011</year> <year>2012</year> <year>2013</year> <year>2014</year> <holder role="mailto:doceng@FreeBSD.org">DocEng</holder></copyright>
<pubdate role="rcs">$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
- &legalnotice;
+
+<legalnotice xml:id="legalnotice">
+ <title>版權</title>
+
+ <para xml:lang="en">Redistribution and use in source (XML DocBook) and 'compiled'
+ forms (XML, HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <orderedlist>
+ <listitem>
+ <para xml:lang="en">Redistributions of source code (XML DocBook) must retain the
+ above copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must
+ reproduce the above copyright notice, this list of conditions and
+ the following disclaimer in the documentation and/or other
+ materials provided with the distribution.</para>
+ </listitem>
+ </orderedlist>
+
+ <important>
+ <para xml:lang="en">THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION
+ PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+ </important>
+</legalnotice>
+
<abstract>
- <para>感謝您參與 FreeBSD 文件計劃(簡稱:FDP, FreeBSD Documentation Project),您的點滴貢獻,都相當寶貴。</para>
+ <para>感謝您參與 FreeBSD 文件計劃,您的點滴貢獻,都相當寶貴。</para>
- <para>本入手書內容包括:如何開始著手翻譯的各項細節,以及會用到的一些好用工具(包括:必備工具、輔助工具)
- ,以及文件計畫的宗旨。</para>
+ <para>本入手書內容包括:如何開始著手貢獻FreeBSD 文件計劃 (簡稱: <acronym>FDP</acronym> )的各項細節,以及會用到的一些工具、軟體 ,以及文件計畫的宗旨。</para>
- <para>本文件還在草稿,尚未完稿。未完成的章節,我們會在章節名稱旁邊加註『<literal>*</literal> 』以作識別。</para>
+ <para>本入門書仍在持續撰寫中。任何修正或新增內容的建議都非常歡迎。</para>
</abstract>
</info>
<preface xml:id="preface">
- <title>序言</title>
+ <title>序</title>
<sect1 xml:id="preface-prompts">
<title>Shell 提示符號(Prompts)</title>
- <para>下表顯示出一般帳號與 root 的提示符號,在所有的文件例子中會用提示符號(prompt)
- ,來提醒您該用哪種帳號才對。</para>
+ <para>下表顯示出一般使用者帳號與 root 的提示符號,在所有的文件例子中會用提示符號(prompt) ,來提醒您該用哪種帳號才對。</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>帳號</entry>
- <entry>提示符號(Prompt)</entry>
+ <entry>提示符號</entry>
</row>
</thead>
<tbody>
<row>
- <entry>普通帳號</entry>
- <entry>&prompt.user;</entry>
+ <entry>一般使用者</entry>
+ <entry><prompt>%</prompt></entry>
</row>
<row>
<entry><systemitem class="username">root</systemitem></entry>
- <entry>&prompt.root;</entry>
+ <entry><prompt>#</prompt></entry>
</row>
</tbody>
</tgroup>
@@ -107,7 +156,7 @@
<sect1 xml:id="preface-conventions">
<title>書中所用的編排風格</title>
- <para>下表為本書中所使用編排風格方式:</para>
+ <para>下表為本書中所使用編排風格方式</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
@@ -121,12 +170,12 @@
<tbody>
<row>
<entry>指令</entry>
- <entry>使用 <command>ls -a</command> 來列出所有的檔案。</entry>
+ <entry>使用 <command>ls -l</command> 來列出所有的檔案。</entry>
</row>
<row>
<entry>檔名</entry>
- <entry>修改 <filename>.login</filename> 檔。</entry>
+ <entry>編輯 <filename>.login</filename> 。</entry>
</row>
<row>
@@ -137,40 +186,33 @@
<row>
<entry>輸入指令後,螢幕上會出現的對應內容。</entry>
- <entry><screen>&prompt.user; <userinput>su</userinput>
-Password:</screen></entry>
+ <entry><screen><prompt>%</prompt> <userinput>date +"The time is %H:%M"</userinput>
+The time is 09:18</screen></entry>
</row>
<row>
- <entry>要參考的線上手冊(manual)</entry>
-
- <entry>以 <citerefentry>
- <refentrytitle>su</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry> 來切換帳號。</entry>
+ <entry>要參考的線上手冊</entry>
+ <entry>使用 <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry> 來切換帳號。</entry>
</row>
<row>
- <entry>在講到帳號(user)、群組(group)的名稱的時候...</entry>
-
- <entry>只有 <systemitem class="username">root</systemitem> 才可以做這件事。</entry>
+ <entry>使用者名稱和群組名稱</entry>
+ <entry>只有 <systemitem class="username">root</systemitem> 才可以做這件事。</entry>
</row>
<row>
- <entry>語氣的強調</entry>
-
- <entry>你『必須』這麼做才行。</entry>
+ <entry>語氣的強調。</entry>
+ <entry>使用者<emphasis>必須</emphasis>這樣做</entry>
</row>
<row>
<entry>打指令時,可替換的部份</entry>
- <entry>要刪除檔案的話,請打 <command>rm 要刪除的檔名</command></entry>
+ <entry>要搜尋線上手冊的關鍵字,請輸入 <command>man -k <replaceable>關鍵字</replaceable></command></entry>
</row>
<row>
- <entry>環境變數設定</entry>
-
+ <entry>環境變數。</entry>
<entry><envar>$HOME</envar> 是指帳號的家目錄所在處。</entry>
</row>
</tbody>
@@ -179,29 +221,28 @@ Password:</screen></entry>
</sect1>
<sect1 xml:id="preface-notes">
- <title>『Note、Tip、Important、Warning、Example』的運用</title>
+ <title>注意、技巧、重要訊息、警告、與範例的運用。</title>
- <para>以下文字是『注意』、『技巧』、『重要訊息』、『警告』、『範例』的運用。</para>
+ <para>出現在本文中的注意、警告、與範例。</para>
<note>
- <para>表示需要注意的事項,其中包括您需要注意的事情,因為這些事情可能會影響到操作結果。</para>
+ <para>注意:表示需要注意的事項,其中包括您需要注意的事情,因為這些事情可能會影響到操作結果。</para>
</note>
<tip>
- <para>提供可能對您有用或簡化操作方式的技巧說明。</para>
+ <para>提示:提供可能對您有用的資訊,例如簡化操作方式的技巧說明。</para>
</tip>
<important>
- <para>表示要特別注意的事情。一般來說,它們會包括操作指令時需要加的額外參數。</para>
+ <para>重要:表示要特別注意的事情。一般來說,它們會包括操作指令時需要加的額外參數。</para>
</important>
<warning>
- <para>表示警告事項,比如如果您不注意則可能導致的損失。這些損失可能是對您或硬體造成實際傷害,
- 也可能是無法估計的損害,例如一時疏忽而刪除重要檔案...。</para>
+ <para>警告:表示警告事項,比如如果您不則可能導致的損失。這些損失可能是對您或硬體造成實際傷害, 也可能是無法估計的損害,例如一時疏忽而刪除重要檔案...。</para>
</warning>
<example>
- <title>這是舉例說明</title>
+ <title>一個範例</title>
<para>這是舉例說明而已,通常包含應遵循的指令範例,或顯示某些特定動作所可能發生的結果。</para>
</example>
@@ -210,25 +251,8472 @@ Password:</screen></entry>
<sect1 xml:id="preface-acknowledgements">
<title>感謝</title>
- <para>在此要感謝 Sue Blake, Patrick Durusau, Jon Hamilton, Peter
- Flynn, Christopher Maden 這些人的協助與閱讀初期草稿,並提供許多寶貴的潤稿意見與評論。</para>
+ <para>在此要感謝 Sue Blake, Patrick Durusau, Jon Hamilton, Peter Flynn, Christopher Maden 這些人的協助與閱讀初期草稿,並提供許多寶貴的潤稿意見與評論。</para>
</sect1>
</preface>
- &chap.overview;
- &chap.tools;
- &chap.xml-primer;
- &chap.xml-markup;
- &chap.stylesheets;
- &chap.structure;
- &chap.doc-build;
- &chap.the-website;
- &chap.translations;
- &chap.writing-style;
- &chap.psgml-mode;
- &chap.see-also;
-
- &app.examples;
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="overview">
+ <title>概論</title>
+
+ <para>歡迎參與 FreeBSD 文件計劃( 簡稱 <acronym>FDP</acronym> ) 。維持優秀質量的文件對 FreeBSD 的成功來說十分重要,您的點滴貢獻都是十分寶貴的。</para>
+
+ <para>本文件描述:『 <acronym>FDP</acronym> 的架構有哪些』、『如何撰寫並提交文件』、 『如何有效運用工具來協助撰稿』。</para>
+
+ <para>歡迎大家對 <acronym>FDP</acronym> 做出貢獻。唯一的成員要求就有貢獻的意願。</para>
+
+ <para>本入門書指出如何:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>瞭解有哪些文件是由 <acronym>FDP</acronym> 所維護的。</para>
+ </listitem>
+
+ <listitem>
+ <para>安裝所需的文件工具和檔案</para>
+ </listitem>
+
+ <listitem>
+ <para>修改文件</para>
+ </listitem>
+
+ <listitem>
+ <para>提交修改以供審核並納入 FreeBSD 文件</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect1 xml:id="overview-doc">
+ <title>FreeBSD 文件組</title>
+
+ <para><acronym>FDP</acronym> 負責四類 FreeBSD 文件</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis>使用手冊</emphasis>: 使用手冊主要是給 FreeBSD 使用者提供詳盡的線上參考資料。</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>FAQ</emphasis> 主要是收集在各郵件論壇或論壇會常問到或有可能會問到的 FreeBSD 相關問題與答案 。 (簡單講,就是『問答集』格式) 通常會擺在這裡面的問答格式,不會放太長的詳細內容。</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>線上手冊 ( manual pages )</emphasis>:英文版的系統 manual 並不是由 <acronym>FDP</acronym> 所撰寫的,因為它們是屬於 base system 的部份。 然而,<acronym>FDP</acronym> 可以修改這些文件,來讓這些文件寫得更清楚,甚至是勘正錯誤的地方。</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>網站</emphasis>: 這是 FreeBSD 在網路上的主要部份,位於 <link xlink:href="http://www.freebsd.org/index.html">http://www.FreeBSD.org/</link> 以及許多其他 mirror 站。這網站是許多人第一次接觸 FreeBSD 的地方</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>翻譯團隊負責翻譯使用手冊和網站到不同的語言。線上手冊目前並未翻譯</para>
+
+ <para>FreeBSD 網站、使用手冊、和 <acronym>FAQ</acronym> 的文件原始碼可以在 <literal>https://svn.FreeBSD.org/doc/</literal> 的文件庫取得。</para>
+
+ <para>線上手冊的原始碼則是在 <literal>https://svn.FreeBSD.org/base/</literal> 的原始碼庫可以取得。</para>
+
+ <para>文件提交訊息可以用 <command>svn log</command> 察看。 提交訊息也會保存在<uri xlink:href="http://lists.FreeBSD.org/mailman/listinfo/svn-doc-all">http://lists.FreeBSD.org/mailman/listinfo/svn-doc-all</uri>。</para>
+
+ <para>這些儲存庫的網頁版位於<link xlink:href="https://svnweb.FreeBSD.org/doc/"/> 和 <link xlink:href="https://svnweb.FreeBSD.org/base/"/>。</para>
+
+ <para>許多人會寫 FreeBSD 的教學文件或是 how-to 文章。有些保存在 <acronym>FDP</acronym> 的檔案中。其他一些文件則是作者希望放在他處。<acronym>FDP</acronym> 會盡力提供這些文件的連結。</para>
+ </sect1>
+
+ <sect1 xml:id="overview-quick-start">
+ <title>快速上手</title>
+
+ <para>在編輯 FreeBSD 文件之前,有一些準備工作要做。 首先,請訂閱 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD 文件計劃郵件論壇</link>。 有些團隊成員也會出現在<link xlink:href="http://www.efnet.org/">EFnet</link>的<literal>#bsddocs</literal> <acronym>IRC</acronym> 頻道。這些人可以幫忙解決文件相關的問題。</para>
+
+ <procedure>
+ <step>
+ <para>安裝 <package>textproc/docproj</package> 套件或 port。這個meta-port 會安裝所有編輯和建構 FreeBSD 文件需要的軟體。</para>
+ </step>
+
+ <step>
+ <para>在<filename>~/doc</filename>安裝 FreeBSD 文件庫的本地端工作副本 ( 請見 <xref linkend="working-copy"/> )。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn checkout https://svn.FreeBSD.org/doc/head <replaceable>~/doc</replaceable></userinput></screen>
+ </step>
+
+ <step>
+ <para>設定文字編輯器:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Word wrap 設為70個字元。</para>
+ </listitem>
+
+ <listitem>
+ <para>Tab stops 設成 。</para>
+ </listitem>
+
+ <listitem>
+ <para>將句首每八個空白以一個 tab 替換。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>特定編輯器的設定方式列於 <xref linkend="editor-config"/>。</para>
+ </step>
+
+ <step>
+ <para>更新本地端工作副本</para>
+
+ <screen><prompt>%</prompt> <userinput>svn up <replaceable>~/doc</replaceable></userinput></screen>
+ </step>
+
+ <step>
+ <para>編輯需要修改的文件檔案。如果檔案需要大幅度的編修,請先諮詢郵件論壇。</para>
+
+ <para>標籤 ( tag ) 和 entity 的使用方式可以參考 <xref linkend="xhtml-markup"/> 和 <xref linkend="docbook-markup"/>. 。</para>
+ </step>
+
+ <step>
+ <para>編輯完後,執行以下指令來檢查是否有問題:</para>
+
+ <screen><prompt>%</prompt> <userinput>igor -R filename.xml | less -RS</userinput></screen>
+
+ <para>檢查輸出並重新編輯檔案來修正顯示的錯誤,然後重新執行指令來找出剩下的問題。重複執行直到所有錯誤都解決完。</para>
+ </step>
+
+ <step>
+ <para>修正送出前請先建構測試 (build-test ) 。在編輯的文件目錄最頂層執行 <userinput>make</userinput>,將會產生 split HTML 格式的文件。例如要建構 <acronym>HTML</acronym> 格式的英文版使用手冊,請在 <filename>en_US.ISO8859-1/books/handbook/</filename> 目錄執行 <command>make</command> 。</para>
+ </step>
+
+ <step>
+ <para>修改並測試完後,產生<quote>diff 檔</quote>:</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc</userinput>
+<prompt>%</prompt> <userinput>svn diff &gt; <replaceable>bsdinstall</replaceable>.diff.txt</userinput></screen>
+
+ <para>設一個可辨識的檔名。如上例中,是使用手冊的<filename>bsdinstall</filename> 部份的修改。</para>
+ </step>
+
+ <step>
+ <para>使用網頁版 <link xlink:href="@@URL_RELPREFIX@@/support.html#gnats">Problem Report</link> 系統提交 diff 檔。 如果使用網頁版,請輸入<emphasis>[修正檔] <replaceable>問題簡短描述</replaceable></emphasis>的概要 。選擇 <literal>docs</literal> 分類和 <literal>doc-bug</literal>類別。在訊息的主體中,輸入修正的簡短描述和其他相關的重要的細節。使用<guibutton>[ Browse... ]</guibutton> 按鈕來附加 diff 檔。</para>
+ </step>
+ </procedure>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="tools">
+ <title>工具</title>
+
+ <para>有些工具軟體用來管理 FreeBSD 文件,並將他轉換成不同的輸出格式。 有些則是在使用接下來章節的範例之前一定要安裝。有些工具是選擇性安裝的,但是裝了之後會更容易進行文件製作工作。</para>
+
+ <sect1 xml:id="tools-required">
+ <title>必備工具</title>
+
+ <para>從 Ports Collection 安裝 <package>textproc/docproj</package>。這個 <emphasis>組合型 port (meta-port)</emphasis> 會安裝處理 FreeBSD 文件需要的所有應用程式。以下列出特定元件的進一步說明。</para>
+
+ <sect2>
+ <title><acronym>DTD</acronym>s 與 <acronym>Entities</acronym></title>
+
+ <para>FreeBSD 文件使用幾種文件類型定義 (<acronym>DTD</acronym>s) 與 <acronym>XML</acronym> entities 組。這些都會經由 <package>textproc/docproj</package> port 來安裝。</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><acronym>XHTML</acronym> <acronym>DTD</acronym> (<package>textproc/xhtml</package>)</term>
+
+ <listitem>
+ <para><acronym>XHTML</acronym> 是全球資訊網的一種標記語言,也是整個 FreeBSD 網站所使用的格式。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DocBook <acronym>DTD</acronym> (<package>textproc/docbook-xml-450</package>)</term>
+
+ <listitem>
+ <para>DocBook 設計來製作技術文件的標記語言版本。FreeBSD 文件是以 DocBook 來撰寫。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ISO 8879 entities (<package>textproc/iso8879</package>)</term>
+
+ <listitem>
+ <para>在 ISO 8879:1986 之中的 entity 被許多 <acronym>DTD</acronym> 所大量使用, 包括了數學符號、拉丁字母符號(尖重音等音節符號也是)以及希臘符號。</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="tools-optional">
+ <title>輔助工具</title>
+
+ <para>不一定得裝下列的應用程式才行,但是,出的格式也更具彈性。</para>
+
+ <sect2>
+ <title>軟體</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term><application>Vim</application> (<package>editors/vim</package>)</term>
+
+ <listitem>
+ <para>一個很受歡迎的編輯器,可以處理 <acronym>XML</acronym> 和他的衍生相關文件,例如 DocBook <acronym>XML</acronym>。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><application>Emacs</application> 或 <application>XEmacs</application> (<package>editors/emacs</package> 或 <package>editors/xemacs</package>)</term>
+
+ <listitem>
+ <para>這兩個編輯器都包含特別模式來編輯用 <acronym>XML</acronym> <acronym>DTD</acronym> 標記的文件。這個模式包含指令來減少打字量,並可以幫忙減少錯誤的發生。</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 2013 Warren Block
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="working-copy">
+ <title>工作副本</title>
+
+ <para xml:lang="en">The <emphasis>working copy</emphasis> is a copy of the FreeBSD
+ repository documentation tree downloaded onto the local computer.
+ Changes are made to the local working copy, tested, and then
+ submitted as patches to be committed to the main
+ repository.</para>
+
+ <para xml:lang="en">A full copy of the documentation tree can occupy 700 megabytes
+ of disk space. Allow for a full gigabyte of space to have room
+ for temporary files and test versions of various output
+ formats.</para>
+
+ <para xml:lang="en"><link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/svn.html"><application>Subversion</application></link>
+ is used to manage the FreeBSD documentation files. It is installed
+ by <package>textproc/docproj</package> as one of
+ the required applications.</para>
+
+ <sect1 xml:id="working-copy-doc-and-src">
+ <title xml:lang="en">Documentation and Manual Pages</title>
+
+ <para xml:lang="en">FreeBSD documentation is not just books and articles. Manual
+ pages for all the commands and configuration files are also part
+ of the documentation, and part of the <acronym>FDP</acronym>'s
+ territory. Two repositories are involved:
+ <literal>doc</literal> for the books and articles, and
+ <literal>base</literal> for the operating system and manual
+ pages. To edit manual pages, the <literal>base</literal>
+ repository must be checked out separately.</para>
+
+ <para xml:lang="en">Repositories may contain multiple versions of documentation
+ and source code. New modifications are almost always made only
+ to the latest version, called <literal>head</literal>.</para>
+ </sect1>
+
+ <sect1 xml:id="working-copy-choosing-directory">
+ <title xml:lang="en">Choosing a Directory</title>
+
+ <para xml:lang="en">FreeBSD documentation is traditionally stored in
+ <filename>/usr/doc/</filename>, and system
+ source code with manual pages in
+ <filename>/usr/src/</filename>. These
+ directory trees are relocatable, and users may want to put the
+ working copies in other locations to avoid interfering with
+ existing information in the main directories. The examples
+ that follow use <filename>~/doc</filename>
+ and <filename>~/src</filename>, both
+ subdirectories of the user's home directory.</para>
+ </sect1>
+
+ <sect1 xml:id="working-copy-checking-out">
+ <title xml:lang="en">Checking Out a Copy</title>
+
+ <para xml:lang="en">A download of a working copy from the repository is called
+ a <emphasis>checkout</emphasis>, and done with
+ <command>svn checkout</command>. This example checks out a
+ copy of the latest version (<literal>head</literal>) of
+ the main documentation tree:</para>
+
+ <screen><prompt>%</prompt> <userinput>svn checkout https://svn.FreeBSD.org/doc/head <replaceable>~/doc</replaceable></userinput></screen>
+
+ <para xml:lang="en">A checkout of the source code to work on manual pages is
+ very similar:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>svn checkout https://svn.FreeBSD.org/base/head <replaceable>~/src</replaceable></userinput></screen>
+ </sect1>
+
+ <sect1 xml:id="working-copy-updating">
+ <title xml:lang="en">Updating a Working Copy</title>
+
+ <para xml:lang="en">The documents and files in the FreeBSD repository change daily.
+ People modify files and commit changes frequently. Even a short
+ time after an initial checkout, there will already be
+ differences between the local working copy and the main FreeBSD
+ repository. To update the local version with the changes that
+ have been made to the main repository, use
+ <command>svn update</command> on the directory containing the
+ local working copy:</para>
+
+ <screen><prompt>%</prompt> <userinput>svn update <replaceable>~/doc</replaceable></userinput></screen>
+
+ <para xml:lang="en">Get in the protective habit of using
+ <command>svn update</command> before editing document files.
+ Someone else may have edited that file very recently, and the
+ local working copy will not include the latest changes until it
+ has been updated. Editing the newest version of a file is much
+ easier than trying to combine an older, edited local file with
+ the newer version from the repository.</para>
+ </sect1>
+
+ <sect1 xml:id="working-copy-revert">
+ <title xml:lang="en">Reverting Changes</title>
+
+ <para xml:lang="en">Sometimes it turns out that changes were
+ not necessary after all, or the writer just wants to start over.
+ Files can be <quote>reset</quote> to their unchanged form with
+ <command>svn revert</command>. For example, to erase the edits
+ made to <filename>chapter.xml</filename> and reset it to
+ unmodified form:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>svn revert chapter.xml</userinput></screen>
+ </sect1>
+
+ <sect1 xml:id="working-copy-making-diff">
+ <title xml:lang="en">Making a Diff</title>
+
+ <para xml:lang="en">After edits to a file or group of files are completed, the
+ differences between the local working copy and the version on
+ the FreeBSD repository must be collected into a single file for
+ submission. These <emphasis>diff</emphasis> files are produced
+ by redirecting the output of <command>svn diff</command> into a
+ file:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd <replaceable>~/doc</replaceable></userinput>
+<prompt>%</prompt> <userinput>svn diff &gt; <replaceable>doc-fix-spelling.diff</replaceable></userinput></screen>
+
+ <para xml:lang="en">Give the file a meaningful name that identifies the
+ contents. The example above is for spelling fixes to the whole
+ documentation tree.</para>
+
+ <para xml:lang="en">If the diff file is to be submitted with the web
+ <quote><link xlink:href="https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi">Submit a FreeBSD
+ problem report</link></quote> interface, add a
+ <filename>.txt</filename> extension to give the earnest and
+ simple-minded web form a clue that the contents are plain
+ text.</para>
+
+ <para xml:lang="en">Be careful: <command>svn diff</command> includes all changes
+ made in the current directory and any subdirectories. If there
+ are files in the working copy with edits that are not ready to
+ be submitted yet, provide a list of only the files that are to
+ be included:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd <replaceable>~/doc</replaceable></userinput>
+<prompt>%</prompt> <userinput>svn diff <replaceable>disks/chapter.xml printers/chapter.xml</replaceable> &gt; <replaceable>disks-printers.diff</replaceable></userinput></screen>
+ </sect1>
+
+ <sect1 xml:id="working-copy-subversion-references">
+ <title xml:lang="en"><application>Subversion</application> References</title>
+
+ <para xml:lang="en">These examples show very basic usage of
+ <application>Subversion</application>. More detail is available
+ in the <link xlink:href="http://svnbook.red-bean.com/">Subversion Book</link>
+ and the <link xlink:href="http://subversion.apache.org/docs/">Subversion
+ documentation</link>.</para>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="structure">
+ <title xml:lang="en">Documentation Directory Structure</title>
+
+ <para xml:lang="en">Files and directories in the
+ <filename>doc/</filename> tree follow a
+ structure meant to:</para>
+
+ <orderedlist>
+ <listitem>
+ <para xml:lang="en">Make it easy to automate converting the document to other
+ formats.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Promote consistency between the different documentation
+ organizations, to make it easier to switch between working on
+ different documents.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Make it easy to decide where in the tree new documentation
+ should be placed.</para>
+ </listitem>
+ </orderedlist>
+
+ <para xml:lang="en">In addition, the documentation tree must accommodate
+ documents in many different languages and encodings. It is
+ important that the documentation tree structure does not enforce
+ any particular defaults or cultural preferences.</para>
+
+ <sect1 xml:id="structure-top">
+ <title xml:lang="en">The Top Level,
+ <filename>doc/</filename></title>
+
+ <para xml:lang="en">There are two types of directory under
+ <filename>doc/</filename>, each with very
+ specific directory names and meanings.</para>
+
+ <informaltable pgwide="1" frame="none">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry xml:lang="en">Directory</entry>
+ <entry xml:lang="en">Usage</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry valign="top" xml:lang="en">
+ <filename>share</filename></entry>
+
+ <entry xml:lang="en">Contains files that are not specific to the various
+ translations and encodings of the documentation.
+ Contains subdirectories to further categorize the
+ information. For example, the files that comprise the
+ <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry> infrastructure are in
+ <filename>share/mk</filename>, while
+ the additional <acronym>XML</acronym> support files
+ (such as the FreeBSD extended DocBook
+ <acronym>DTD</acronym>) are in <filename>share/xml</filename>.</entry>
+ </row>
+
+ <row>
+ <entry valign="top" xml:lang="en">
+ <filename><replaceable>lang</replaceable>.<replaceable>encoding</replaceable></filename></entry>
+
+ <entry xml:lang="en">One directory exists for each available translation
+ and encoding of the documentation, for example
+ <filename>en_US.ISO8859-1/</filename>
+ and <filename>zh_TW.UTF-8/</filename>.
+ The names are long, but by fully specifying the language
+ and encoding we prevent any future headaches when a
+ translation team wants to provide documentation in the
+ same language but in more than one encoding. This also
+ avoids problems that might be caused by a future switch
+ to Unicode.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect1>
+
+ <sect1 xml:id="structure-locale">
+ <title xml:lang="en">The
+ <filename><replaceable>lang</replaceable>.<replaceable>encoding</replaceable>/</filename>
+ Directories</title>
+
+ <para xml:lang="en">These directories contain the documents themselves. The
+ documentation is split into up to three more categories at
+ this level, indicated by the different directory names.</para>
+
+ <informaltable pgwide="1" frame="none">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry xml:lang="en">Directory</entry>
+ <entry xml:lang="en">Usage</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry valign="top" xml:lang="en">
+ <filename>articles</filename></entry>
+
+ <entry xml:lang="en">Documentation marked up as a DocBook
+ <tag>article</tag> (or equivalent). Reasonably
+ short, and broken up into sections. Normally only
+ available as one <acronym>XHTML</acronym> file.</entry>
+ </row>
+
+ <row>
+ <entry valign="top" xml:lang="en"><filename>books</filename></entry>
+
+ <entry xml:lang="en">Documentation marked up as a DocBook
+ <tag>book</tag> (or equivalent). Book length,
+ and broken up into chapters. Normally available as both
+ one large <acronym>XHTML</acronym> file (for people with
+ fast connections, or who want to print it easily from a
+ browser) and as a collection of linked, smaller
+ files.</entry>
+ </row>
+
+ <row>
+ <entry valign="top" xml:lang="en">
+ <filename>man</filename></entry>
+
+ <entry xml:lang="en">For translations of the system manual pages. This
+ directory will contain one or more <filename role="directory">man<replaceable>n</replaceable></filename>
+ directories, corresponding to the sections that have
+ been translated.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para xml:lang="en">Not every <filename role="directory"><replaceable>lang</replaceable>.<replaceable>encoding</replaceable></filename>
+ directory will have all of these subdirectories. It depends
+ on how much translation has been accomplished by that
+ translation team.</para>
+ </sect1>
+
+ <sect1 xml:id="structure-document">
+ <title xml:lang="en">Document-Specific Information</title>
+
+ <para xml:lang="en">This section contains specific notes about particular
+ documents managed by the FDP.</para>
+
+ <sect2>
+ <title xml:lang="en">The Handbook</title>
+
+ <subtitle xml:lang="en"><filename>books/handbook/</filename></subtitle>
+
+ <para xml:lang="en">The Handbook is written in DocBook <acronym>XML</acronym>
+ using the FreeBSD DocBook extended <acronym>DTD</acronym>.</para>
+
+ <para xml:lang="en">The Handbook is organized as a DocBook
+ <tag>book</tag>. The book is divided into
+ <tag>part</tag>s, each of which contains several
+ <tag>chapter</tag>s. <tag>chapter</tag>s are
+ further subdivided into sections (<tag>sect1</tag>)
+ and subsections (<tag>sect2</tag>,
+ <tag>sect3</tag>) and so on.</para>
+
+ <sect3>
+ <title xml:lang="en">Physical Organization</title>
+
+ <para xml:lang="en">There are a number of files and directories within the
+ <filename>handbook</filename> directory.</para>
+
+ <note>
+ <para xml:lang="en">The Handbook's organization may change over time, and
+ this document may lag in detailing the organizational
+ changes. Post questions about Handbook organization to the
+ <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD documentation project mailing list</link>.</para>
+ </note>
+
+ <sect4>
+ <title xml:lang="en"><filename>Makefile</filename></title>
+
+ <para xml:lang="en">The <filename>Makefile</filename> defines some
+ variables that affect how the <acronym>XML</acronym>
+ source is converted to other formats, and lists the
+ various source files that make up the Handbook. It then
+ includes the standard <filename>doc.project.mk</filename>,
+ to bring in the rest of the code that handles converting
+ documents from one format to another.</para>
+ </sect4>
+
+ <sect4>
+ <title xml:lang="en"><filename>book.xml</filename></title>
+
+ <para xml:lang="en">This is the top level document in the Handbook. It
+ contains the Handbook's <link linkend="xml-primer-doctype-declaration">DOCTYPE
+ declaration</link>, as well as the elements that
+ describe the Handbook's structure.</para>
+
+ <para xml:lang="en"><filename>book.xml</filename> uses <link linkend="xml-primer-parameter-entities">parameter
+ entities</link> to load in the files with the
+ <filename>.ent</filename> extension. These files
+ (described later) then define <link linkend="xml-primer-general-entities">general
+ entities</link> that are used throughout the rest of the
+ Handbook.</para>
+ </sect4>
+
+ <sect4>
+ <title xml:lang="en"><filename role="directory"><replaceable>directory</replaceable>/chapter.xml</filename></title>
+
+ <para xml:lang="en">Each chapter in the Handbook is stored in a file
+ called <filename>chapter.xml</filename> in a separate
+ directory from the other chapters. Each directory is
+ named after the value of the <literal>id</literal>
+ attribute on the <tag>chapter</tag>
+ element.</para>
+
+ <para xml:lang="en">For example, if one of the chapter files
+ contains:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">chapter id="kernelconfig"</tag>
+...
+<tag class="endtag">chapter</tag></programlisting>
+
+ <para xml:lang="en">Then it will be called
+ <filename>chapter.xml</filename> in the
+ <filename>kernelconfig</filename> directory. In general,
+ the entire contents of the chapter are in this one
+ file.</para>
+
+ <para xml:lang="en">When the <acronym>XHTML</acronym> version of the
+ Handbook is produced, this will yield
+ <filename>kernelconfig.html</filename>. This is because
+ of the <literal>id</literal> value, and is not related to
+ the name of the directory.</para>
+
+ <para xml:lang="en">In earlier versions of the Handbook, the files were
+ stored in the same directory as
+ <filename>book.xml</filename>, and named after the value
+ of the <literal>id</literal> attribute on the file's
+ <tag>chapter</tag> element. Now, it is possible
+ to include images in each chapter. Images for each
+ Handbook chapter are stored within <filename>share/images/books/handbook</filename>.
+ The localized version of these images should be
+ placed in the same directory as the <acronym>XML</acronym>
+ sources for each chapter. Namespace collisions are
+ inevitable, and it is easier to work with several
+ directories with a few files in them than it is to work
+ with one directory that has many files in it.</para>
+
+ <para xml:lang="en">A brief look will show that there are many directories
+ with individual <filename>chapter.xml</filename> files,
+ including <filename>basics/chapter.xml</filename>,
+ <filename>introduction/chapter.xml</filename>, and
+ <filename>printing/chapter.xml</filename>.</para>
+
+ <important>
+ <para xml:lang="en">Do not name chapters or directories after
+ their ordering within the Handbook. This ordering can
+ change as the content within the Handbook is
+ reorganized. Reorganization should be possible without
+ renaming files, unless entire chapters are being
+ promoted or demoted within the hierarchy.</para>
+ </important>
+
+ <para xml:lang="en">The <filename>chapter.xml</filename> files are not
+ complete <acronym>XML</acronym> documents that can be
+ built individually. They can only be built
+ as parts of the whole Handbook.</para>
+ </sect4>
+ </sect3>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1999 Neil Blakey-Milner, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="doc-build">
+ <title xml:lang="en">The Documentation Build Process</title>
+
+ <para xml:lang="en">This chapter covers organization of the documentation build
+ process and how <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry> is used to control it.</para>
+
+ <sect1 xml:id="doc-build-rendering">
+ <title xml:lang="en">Rendering DocBook into Output</title>
+
+ <para xml:lang="en">Different types of output can be produced from a single
+ DocBook source file. The type of output desired is set with the
+ <varname>FORMATS</varname> variable. A list of known formats is
+ stored in <varname>KNOWN_FORMATS</varname>:</para>
+
+ <screen xml:id="doc-build-rendering-known-formats" xml:lang="en"><prompt>%</prompt> <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
+<prompt>%</prompt> <userinput>make -V KNOWN_FORMATS</userinput></screen>
+
+ <table xml:id="doc-build-rendering-common-formats" frame="none">
+ <title xml:lang="en">Common Output Formats</title>
+
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry xml:lang="en"><varname>FORMATS</varname> Value</entry>
+ <entry xml:lang="en">File Type</entry>
+ <entry xml:lang="en">Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry xml:lang="en"><literal>html</literal></entry>
+ <entry xml:lang="en"><acronym>HTML</acronym>, one file</entry>
+ <entry xml:lang="en">A single <filename>book.html</filename> or
+ <filename>article.html</filename>.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>html-split</literal></entry>
+ <entry xml:lang="en"><acronym>HTML</acronym>, multiple files</entry>
+ <entry xml:lang="en">Multiple <acronym>HTML</acronym> files, one for
+ each chapter or section, for use on a typical web
+ site.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>pdf</literal></entry>
+ <entry xml:lang="en"><acronym>PDF</acronym></entry>
+ <entry xml:lang="en">Portable Document Format</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para xml:lang="en">The default output format can vary by document, but is
+ usually <literal>html-split</literal>. Other formats are chosen
+ by setting <varname>FORMATS</varname> to a specific value.
+ Multiple output formats can be created at a single time by
+ setting <varname>FORMATS</varname> to a list of formats.</para>
+
+ <example xml:id="doc-build-formats-example-html">
+ <title xml:lang="en">Build a Single HTML Output File</title>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
+<prompt>%</prompt> <userinput>make FORMATS=html</userinput></screen>
+ </example>
+
+ <example xml:id="doc-build-formats-example-html-split-pdf">
+ <title xml:lang="en">Build HTML-Split and <acronym>PDF</acronym> Output
+ Files</title>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
+<prompt>%</prompt> <userinput>make FORMATS="html-split pdf"</userinput></screen>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="doc-build-toolset">
+ <title xml:lang="en">The FreeBSD Documentation Build Toolset</title>
+
+ <para xml:lang="en">These are the tools used to build and install the
+ <acronym>FDP</acronym> documentation.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en">The primary build tool is <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry>, specifically
+ <application>Berkeley Make</application>.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Package building is handled by FreeBSD's
+ <citerefentry><refentrytitle>pkg-create</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><citerefentry><refentrytitle>gzip</refentrytitle><manvolnum>1</manvolnum></citerefentry> is used to create compressed versions of
+ the document. <citerefentry><refentrytitle>bzip2</refentrytitle><manvolnum>1</manvolnum></citerefentry> archives are also supported.
+ <citerefentry><refentrytitle>tar</refentrytitle><manvolnum>1</manvolnum></citerefentry> is used for package building.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><citerefentry><refentrytitle>install</refentrytitle><manvolnum>1</manvolnum></citerefentry> is used to install the
+ documentation.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 xml:id="doc-build-makefiles">
+
+ <title xml:lang="en">Understanding <filename>Makefile</filename>s in the
+ Documentation Tree</title>
+
+ <para xml:lang="en">There are three main types of <filename>Makefile</filename>s
+ in the FreeBSD Documentation Project tree.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en"><link linkend="sub-make">Subdirectory
+ <filename>Makefile</filename>s</link> simply pass
+ commands to those directories below them.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><link linkend="doc-make">Documentation
+ <filename>Makefile</filename>s</link> describe the
+ documents that are produced from this
+ directory.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><link linkend="make-includes"><application>Make</application>
+ includes</link> are the glue that perform the document
+ production, and are usually of the form
+ <filename>doc.<replaceable>xxx</replaceable>.mk</filename>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect2 xml:id="sub-make">
+ <title xml:lang="en">Subdirectory <filename>Makefile</filename>s</title>
+
+ <para xml:lang="en">These <filename>Makefile</filename>s usually take the form
+ of:</para>
+
+ <programlisting xml:lang="en">SUBDIR =articles
+SUBDIR+=books
+
+COMPAT_SYMLINK = en
+
+DOC_PREFIX?= ${.CURDIR}/..
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"</programlisting>
+
+ <para xml:lang="en">The first four non-empty lines define the <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ variables <varname>SUBDIR</varname>,
+ <varname>COMPAT_SYMLINK</varname>, and
+ <varname>DOC_PREFIX</varname>.</para>
+
+ <para xml:lang="en">The <varname>SUBDIR</varname> statement and
+ <varname>COMPAT_SYMLINK</varname> statement show how to
+ assign a value to a variable, overriding any previous
+ value.</para>
+
+ <para xml:lang="en">The second <varname>SUBDIR</varname> statement shows how a
+ value is appended to the current value of a variable. The
+ <varname>SUBDIR</varname> variable is now <literal>articles
+ books</literal>.</para>
+
+ <para xml:lang="en">The <varname>DOC_PREFIX</varname> assignment shows how a
+ value is assigned to the variable, but only if it is not
+ already defined. This is useful if
+ <varname>DOC_PREFIX</varname> is not where this
+ <filename>Makefile</filename> thinks it is - the user can
+ override this and provide the correct value.</para>
+
+ <para xml:lang="en">What does it all mean? <varname>SUBDIR</varname>
+ mentions which subdirectories below this one the build process
+ should pass any work on to.</para>
+
+ <para xml:lang="en"><varname>COMPAT_SYMLINK</varname> is specific to
+ compatibility symlinks (amazingly enough) for languages to
+ their official encoding (<filename>doc/en</filename> would
+ point to <filename>en_US.ISO-8859-1</filename>).</para>
+
+ <para xml:lang="en"><varname>DOC_PREFIX</varname> is the path to the root of
+ the FreeBSD Document Project tree. This is not always that easy
+ to find, and is also easily overridden, to allow for
+ flexibility. <varname>.CURDIR</varname> is a <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ builtin variable with the path to the current
+ directory.</para>
+
+ <para xml:lang="en">The final line includes the FreeBSD Documentation Project's
+ project-wide <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry> system file
+ <filename>doc.project.mk</filename> which is the glue which
+ converts these variables into build instructions.</para>
+ </sect2>
+
+ <sect2 xml:id="doc-make">
+ <title xml:lang="en">Documentation <filename>Makefile</filename>s</title>
+
+ <para xml:lang="en">These <filename>Makefile</filename>s set <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ variables that describe how to build the documentation
+ contained in that directory.</para>
+
+ <para xml:lang="en">Here is an example:</para>
+
+ <programlisting xml:lang="en">MAINTAINER=nik@FreeBSD.org
+
+DOC?= book
+
+FORMATS?= html-split html
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+# SGML content
+SRCS= book.xml
+
+DOC_PREFIX?= ${.CURDIR}/../../..
+
+.include "$(DOC_PREFIX)/share/mk/docproj.docbook.mk"</programlisting>
+
+ <para xml:lang="en">The <varname>MAINTAINER</varname> variable allows
+ committers to claim ownership of a document in the FreeBSD
+ Documentation Project, and take responsibility for maintaining
+ it.</para>
+
+ <para xml:lang="en"><varname>DOC</varname> is the name (sans the
+ <filename>.xml</filename> extension) of the main document
+ created by this directory. <varname>SRCS</varname> lists all
+ the individual files that make up the document. This should
+ also include important files in which a change should result
+ in a rebuild.</para>
+
+ <para xml:lang="en"><varname>FORMATS</varname> indicates the default formats
+ that should be built for this document.
+ <varname>INSTALL_COMPRESSED</varname> is the default list of
+ compression techniques that should be used in the document
+ build. <varname>INSTALL_ONLY_COMPRESS</varname>, empty by
+ default, should be non-empty if only compressed documents are
+ desired in the build.</para>
+
+ <para xml:lang="en">The <varname>DOC_PREFIX</varname> and include statements
+ should be familiar already.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="make-includes">
+ <title xml:lang="en">FreeBSD Documentation Project
+ <application>Make</application> Includes</title>
+
+ <para xml:lang="en"><citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry> includes are best explained by inspection of
+ the code. Here are the system include files:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en"><filename>doc.project.mk</filename> is the main project
+ include file, which includes all the following include
+ files, as necessary.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><filename>doc.subdir.mk</filename> handles traversing of
+ the document tree during the build and install
+ processes.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><filename>doc.install.mk</filename> provides variables
+ that affect ownership and installation of documents.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><filename>doc.docbook.mk</filename> is included if
+ <varname>DOCFORMAT</varname> is <literal>docbook</literal>
+ and <varname>DOC</varname> is set.</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect2>
+ <title xml:lang="en"><filename>doc.project.mk</filename></title>
+
+ <para xml:lang="en">By inspection:</para>
+
+ <programlisting xml:lang="en">DOCFORMAT?= docbook
+MAINTAINER?= doc@FreeBSD.org
+
+PREFIX?= /usr/local
+PRI_LANG?= en_US.ISO8859-1
+
+.if defined(DOC)
+.if ${DOCFORMAT} == "docbook"
+.include "doc.docbook.mk"
+.endif
+.endif
+
+.include "doc.subdir.mk"
+.include "doc.install.mk"</programlisting>
+
+ <sect3>
+
+ <title xml:lang="en">Variables</title>
+
+ <para xml:lang="en"><varname>DOCFORMAT</varname> and
+ <varname>MAINTAINER</varname> are assigned default values,
+ if these are not set by the document make file.</para>
+
+ <para xml:lang="en"><varname>PREFIX</varname> is the prefix under which the
+ <link linkend="tools">documentation building tools</link>
+ are installed. For normal package and port installation,
+ this is <filename>/usr/local</filename>.</para>
+
+ <para xml:lang="en"><varname>PRI_LANG</varname> should be set to whatever
+ language and encoding is natural amongst users these
+ documents are being built for. US English is the
+ default.</para>
+
+ <note>
+ <para xml:lang="en"><varname>PRI_LANG</varname> does not affect which
+ documents can, or even will, be built. Its main use is
+ creating links to commonly referenced documents into the
+ FreeBSD documentation install root.</para>
+ </note>
+ </sect3>
+
+ <sect3>
+ <title xml:lang="en">Conditionals</title>
+
+ <para xml:lang="en">The <literal>.if defined(DOC)</literal> line is an
+ example of a <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry> conditional which, like in other
+ programs, defines behavior if some condition is true or if
+ it is false. <literal>defined</literal> is a function which
+ returns whether the variable given is defined or not.</para>
+
+ <para xml:lang="en"><literal>.if ${DOCFORMAT} == "docbook"</literal>, next,
+ tests whether the <varname>DOCFORMAT</varname> variable is
+ <literal>"docbook"</literal>, and in this case, includes
+ <filename>doc.docbook.mk</filename>.</para>
+
+ <para xml:lang="en">The two <literal>.endif</literal>s close the two above
+ conditionals, marking the end of their application.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title xml:lang="en"><filename>doc.subdir.mk</filename></title>
+
+ <para xml:lang="en">This file is too long to explain in detail. These notes
+ describe the most important features.</para>
+
+ <sect3>
+ <title xml:lang="en">Variables</title>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en"><varname>SUBDIR</varname> is a list of
+ subdirectories that the build process should go further
+ down into.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><varname>ROOT_SYMLINKS</varname> is the name of
+ directories that should be linked to the document
+ install root from their actual locations, if the current
+ language is the primary language (specified by
+ <varname>PRI_LANG</varname>).</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><varname>COMPAT_SYMLINK</varname> is described in
+ the
+ <link linkend="sub-make">Subdirectory Makefile</link>
+ section.</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title xml:lang="en">Targets and Macros</title>
+
+ <para xml:lang="en">Dependencies are described by
+ <literal><replaceable>target</replaceable>:
+ <replaceable>dependency1 dependency2
+ ...</replaceable></literal> tuples, where to build
+ <literal>target</literal>, the given
+ dependencies must be built first.</para>
+
+ <para xml:lang="en">After that descriptive tuple, instructions on how to
+ build the target may be given, if the conversion process
+ between the target and its dependencies are not previously
+ defined, or if this particular conversion is not the same as
+ the default conversion method.</para>
+
+ <para xml:lang="en">A special dependency <literal>.USE</literal> defines
+ the equivalent of a macro.</para>
+
+ <programlisting xml:lang="en">_SUBDIRUSE: .USE
+.for entry in ${SUBDIR}
+ @${ECHO} "===&gt; ${DIRPRFX}${entry}"
+ @(cd ${.CURDIR}/${entry} &amp;&amp; \
+ ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
+.endfor</programlisting>
+
+ <para xml:lang="en">In the above, <buildtarget xml:lang="en">_SUBDIRUSE</buildtarget> is now
+ a macro which will execute the given commands when it is
+ listed as a dependency.</para>
+
+ <para xml:lang="en">What sets this macro apart from other targets?
+ Basically, it is executed <emphasis>after</emphasis> the
+ instructions given in the build procedure it is listed as a
+ dependency to, and it does not adjust
+ <varname>.TARGET</varname>, which is the variable which
+ contains the name of the target currently being
+ built.</para>
+
+ <programlisting xml:lang="en">clean: _SUBDIRUSE
+ rm -f ${CLEANFILES}</programlisting>
+
+ <para xml:lang="en">In the above, <buildtarget xml:lang="en">clean</buildtarget> will use
+ the <buildtarget xml:lang="en">_SUBDIRUSE</buildtarget> macro after it has
+ executed the instruction
+ <command>rm -f ${CLEANFILES}</command>. In effect, this
+ causes <buildtarget xml:lang="en">clean</buildtarget> to go further and
+ further down the directory tree, deleting built files as it
+ goes <emphasis>down</emphasis>, not on the way back
+ up.</para>
+
+ <sect4>
+ <title xml:lang="en">Provided Targets</title>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en"><buildtarget xml:lang="en">install</buildtarget> and
+ <buildtarget xml:lang="en">package</buildtarget> both go down the
+ directory tree calling the real versions of themselves
+ in the subdirectories
+ (<buildtarget xml:lang="en">realinstall</buildtarget> and
+ <buildtarget xml:lang="en">realpackage</buildtarget>
+ respectively).</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><buildtarget xml:lang="en">clean</buildtarget> removes files
+ created by the build process (and goes down the
+ directory tree too).
+ <buildtarget xml:lang="en">cleandir</buildtarget> does the same, and
+ also removes the object directory, if any.</para>
+ </listitem>
+ </itemizedlist>
+ </sect4>
+ </sect3>
+
+ <sect3>
+ <title xml:lang="en">More on Conditionals</title>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en"><literal>exists</literal> is another condition
+ function which returns true if the given file
+ exists.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><literal>empty</literal> returns true if the given
+ variable is empty.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><literal>target</literal> returns true if the given
+ target does not already exist.</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title xml:lang="en">Looping Constructs in <command>make
+ (.for)</command></title>
+
+ <para xml:lang="en"><literal>.for</literal> provides a way to repeat a set
+ of instructions for each space-separated element in a
+ variable. It does this by assigning a variable to contain
+ the current element in the list being examined.</para>
+
+ <programlisting xml:lang="en">_SUBDIRUSE: .USE
+.for entry in ${SUBDIR}
+ @${ECHO} "===&gt; ${DIRPRFX}${entry}"
+ @(cd ${.CURDIR}/${entry} &amp;&amp; \
+ ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
+.endfor</programlisting>
+
+ <para xml:lang="en">In the above, if <varname>SUBDIR</varname> is empty, no
+ action is taken; if it has one or more elements, the
+ instructions between <literal>.for</literal> and
+ <literal>.endfor</literal> would repeat for every element,
+ with <varname>entry</varname> being replaced with the value
+ of the current element.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="the-website">
+ <title>網站</title>
+
+ <para>FreeBSD 網站是 FreeBSD 文件的一部份。網站的檔案儲存在文件樹目錄,此例中是 <filename>~/doc</filename>,的 <filename>en_US.ISO8859-1/htdocs</filename> 子目錄。</para>
+
+ <sect1 xml:id="the-website-env">
+ <title>環境變數</title>
+
+ <para>有些環境變數控制網站的建構或安裝,和裝到哪個目錄</para>
+
+ <tip>
+ <para xml:lang="en">The web build system uses <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry>, and considers
+ variables to be set when they have been defined, even if they
+ are empty. The examples here show the recommended ways of
+ defining and using these variables. Setting or defining these
+ variables with other values or methods might lead to
+ unexpected surprises.</para>
+ </tip>
+
+ <variablelist>
+ <varlistentry xml:id="the-website-env-destdir">
+ <term xml:lang="en"><varname>DESTDIR</varname></term>
+
+ <listitem>
+ <para xml:lang="en">DESTDIR specifies the path where the web site files
+ are to be installed.</para>
+
+ <para xml:lang="en">This variable is best set with <citerefentry><refentrytitle>env</refentrytitle><manvolnum>1</manvolnum></citerefentry> or the user
+ shell's method of setting environment variables,
+ <command>setenv</command> for <citerefentry><refentrytitle>csh</refentrytitle><manvolnum>1</manvolnum></citerefentry> or
+ <command>export</command> for <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <variablelist>
+ <varlistentry xml:id="the-website-env-englishonly">
+ <term xml:lang="en"><varname>ENGLISH_ONLY</varname></term>
+
+ <listitem>
+ <para xml:lang="en">Default: undefined. Build and include all
+ translations.</para>
+
+ <para xml:lang="en"><userinput>ENGLISH_ONLY=yes</userinput>: use only
+ the English documents and ignore all translations.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry xml:id="the-website-env-webonly">
+ <term xml:lang="en"><varname>WEB_ONLY</varname></term>
+
+ <listitem>
+ <para xml:lang="en">Default: undefined. Build both the web site
+ and all the books and articles.</para>
+
+ <para xml:lang="en"><userinput>WEB_ONLY=yes</userinput>: build or install
+ only <acronym>HTML</acronym> pages from the
+ <filename>en_US.ISO8859-1/htdocs</filename> directory.
+ Other directories and documents, including books and
+ articles, will be ignored.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry xml:id="the-website-env-weblang">
+ <term xml:lang="en"><varname>WEB_LANG</varname></term>
+
+ <listitem>
+ <para xml:lang="en">Default: undefined. Build and include all the
+ available languages on the web site.</para>
+
+ <para xml:lang="en">Set to a space-separated list of languages to be
+ included in the build
+ or install. The formats are the same as the directory
+ names in the document root directory. For example, to
+ include the German and French documents:</para>
+
+ <screen xml:lang="en"><userinput>WEB_LANG="de_DE.ISO8859-1 fr_FR.ISO8859-1"</userinput></screen>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para xml:lang="en"><varname>WEB_ONLY</varname>, <varname>WEB_LANG</varname>,
+ and <varname>ENGLISH_ONLY</varname> are <citerefentry><refentrytitle>make</refentrytitle><manvolnum>1</manvolnum></citerefentry> variables
+ and can be set in <filename>/etc/make.conf</filename>,
+ <filename>Makefile.inc</filename>, as environment variables on
+ the command line, or in dot files.</para>
+ </sect1>
+
+ <sect1 xml:id="the-website-build">
+ <title xml:lang="en">Building and Installing the Web Pages</title>
+
+ <para xml:lang="en">Having obtained the documentation and web site source files,
+ the web site can be built.</para>
+
+ <para xml:lang="en">An actual installation of the web site is run as the <systemitem class="username">root</systemitem>
+ user because the permissions on the web server directory will
+ not allow files to be installed by an unprivileged user.
+ For testing, it can be useful to install the files as a normal
+ user to a temporary directory.</para>
+
+ <para xml:lang="en">In these examples, the web site files are built by user
+ <systemitem class="username">jru</systemitem> in their home
+ directory, <filename>~/doc</filename>, with a full path of
+ <filename>/usr/home/jru/doc</filename>.</para>
+
+ <tip>
+ <para xml:lang="en">The web site build uses the <filename>INDEX</filename>
+ from the Ports Collection and might fail if that file or
+ <filename>/usr/ports</filename> is not
+ present. The simplest approach is to install the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/ports.html#ports-tree">Ports
+ Collection</link>.</para>
+ </tip>
+
+ <example xml:id="the-website-examples-build">
+ <title xml:lang="en">Build the Full Web Site and All Documents</title>
+
+ <para xml:lang="en">Build the web site and all documents. The resulting files
+ are left in the document tree:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd ~/doc/en_US.ISO8859-1/htdocs/</userinput>
+<prompt>%</prompt> <userinput>make all</userinput></screen>
+ </example>
+
+ <example xml:id="the-website-examples-buildinstall-englishonly">
+ <title xml:lang="en">Build Only the Web Site in English</title>
+
+ <para xml:lang="en">Build the web site only, in English, as user
+ <systemitem class="username">jru</systemitem>, and install
+ the resulting files into <filename>/tmp/www</filename> for
+ testing:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd ~/doc/en_US.ISO8859-1/htdocs/</userinput>
+<prompt>%</prompt> <userinput>env DESTDIR=/tmp/www make ENGLISH_ONLY=yes WEB_ONLY=yes all install</userinput></screen>
+
+ <para xml:lang="en">Changes to static files can usually be tested by viewing
+ the modified files directly with a web browser. If the site
+ has been built as shown above, a modified main page can be
+ viewed with:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>firefox /tmp/www/data/index.html</userinput></screen>
+
+ <para xml:lang="en">Modifications to dynamic files can be tested with a web
+ server running on the local system. After building the site
+ as shown above, this
+ <filename>/usr/local/etc/apache24/httpd.conf</filename> can be
+ used with <package>www/apache24</package>:</para>
+
+ <programlisting xml:lang="en"># httpd.conf for testing the FreeBSD website
+Define TestRoot "/tmp/www/data"
+
+# directory for configuration files
+ServerRoot "/usr/local"
+
+Listen 80
+
+# minimum required modules
+LoadModule authz_core_module libexec/apache24/mod_authz_core.so
+LoadModule mime_module libexec/apache24/mod_mime.so
+LoadModule unixd_module libexec/apache24/mod_unixd.so
+LoadModule cgi_module libexec/apache24/mod_cgi.so
+LoadModule dir_module libexec/apache24/mod_dir.so
+
+# run the webserver as user and group
+User www
+Group www
+
+ServerAdmin you@example.com
+ServerName fbsdtest
+
+# deny access to all files
+&lt;Directory /&gt;
+ AllowOverride none
+ Require all denied
+&lt;/Directory&gt;
+
+# allow access to the website directory
+DocumentRoot "${TestRoot}"
+&lt;Directory "${TestRoot}"&gt;
+ Options Indexes FollowSymLinks
+ AllowOverride None
+ Require all granted
+&lt;/Directory&gt;
+
+# prevent access to .htaccess and .htpasswd files
+&lt;Files ".ht*"&gt;
+ Require all denied
+&lt;/Files&gt;
+
+ErrorLog "/var/log/httpd-error.log"
+LogLevel warn
+
+# set up the CGI script directory
+&lt;Directory "${TestRoot}/cgi"&gt;
+ AllowOverride None
+ Options None
+ Require all granted
+ Options +ExecCGI
+ AddHandler cgi-script .cgi
+&lt;/Directory&gt;
+
+Include etc/apache24/Includes/*.conf</programlisting>
+
+ <para xml:lang="en">Start the web server with</para>
+
+ <screen xml:lang="en"><prompt>#</prompt> <userinput>service apache24 onestart</userinput></screen>
+
+ <para xml:lang="en">The web site can be viewed at
+ <link xlink:href="http://localhost"/>. Be aware that many
+ links refer to the real FreeBSD site by name, and those links
+ will still go to the external site instead of the local test
+ version. Fully testing the local site will require
+ temporarily setting <acronym>DNS</acronym> so
+ <literal>www.FreeBSD.org</literal> resolves to
+ <literal>localhost</literal> or the local
+ <acronym>IP</acronym> address.</para>
+ </example>
+
+ <example xml:id="the-website-examples-buildinstall">
+ <title xml:lang="en">Build and Install the Web Site</title>
+
+ <para xml:lang="en">Build the web site and all documents as user
+ <systemitem class="username">jru</systemitem>. Install the
+ resulting files as
+ <systemitem class="username">root</systemitem> into the
+ default directory,
+ <filename>/root/public_html</filename>:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cd ~/doc/en_US.ISO8859-1/htdocs</userinput>
+<prompt>%</prompt> <userinput>make all</userinput>
+<prompt>%</prompt> <userinput>su -</userinput>
+Password:
+<prompt>#</prompt> <userinput>cd /usr/home/jru/doc/en_US.ISO8859-1/htdocs</userinput>
+<prompt>#</prompt> <userinput>make install</userinput></screen>
+ </example>
+
+ <para xml:lang="en">The install process does not delete any old or outdated
+ files that existed previously in the same directory. If a new
+ copy of the site is built and installed every day, this command
+ will find and delete all files that have not been updated in
+ three days:</para>
+
+ <screen xml:lang="en"><prompt>#</prompt> <userinput>find <replaceable>/usr/local/www</replaceable> -ctime 3 -delete</userinput></screen>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="xml-primer">
+ <title xml:lang="en">XML Primer</title>
+
+ <para xml:lang="en">Most <acronym>FDP</acronym> documentation is written with
+ markup languages based on <acronym>XML</acronym>. This chapter
+ explains what that means, how to read and understand the
+ documentation source, and the <acronym>XML</acronym> techniques
+ used.</para>
+
+ <para xml:lang="en">Portions of this section were inspired by Mark Galassi's
+ <link xlink:href="http://www.galassi.org/mark/mydocs/docbook-intro/docbook-intro.html">Get
+ Going With DocBook</link>.</para>
+
+ <sect1 xml:id="xml-primer-overview">
+ <title>概論</title>
+
+ <para xml:lang="en">In the original days of computers, electronic text was
+ simple. There were a few character sets like
+ <acronym>ASCII</acronym> or <acronym>EBCDIC</acronym>, but that
+ was about it. Text was text, and what you saw really was what
+ you got. No frills, no formatting, no intelligence.</para>
+
+ <para xml:lang="en">Inevitably, this was not enough. When text is in a
+ machine-usable format, machines are expected to be able to use
+ and manipulate it intelligently. Authors want to indicate that
+ certain phrases should be emphasized, or added to a glossary, or
+ made into hyperlinks. Filenames could be shown in a
+ <quote>typewriter</quote> style font for viewing on screen, but
+ as <quote>italics</quote> when printed, or any of a myriad of
+ other options for presentation.</para>
+
+ <para xml:lang="en">It was once hoped that Artificial Intelligence (AI) would
+ make this easy. The computer would read the document and
+ automatically identify key phrases, filenames, text that the
+ reader should type in, examples, and more. Unfortunately, real
+ life has not happened quite like that, and computers still
+ require assistance before they can meaningfully process
+ text.</para>
+
+ <para xml:lang="en">More precisely, they need help identifying what is what.
+ Consider this text:</para>
+
+ <blockquote>
+ <para xml:lang="en">To remove <filename>/tmp/foo</filename>, use
+ <citerefentry><refentrytitle>rm</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>rm /tmp/foo</userinput></screen>
+ </blockquote>
+
+ <para xml:lang="en">It is easy to see which parts are filenames, which are
+ commands to be typed in, which parts are references to manual
+ pages, and so on. But the computer processing the document
+ cannot. For this we need markup.</para>
+
+ <para xml:lang="en"><quote>Markup</quote> is commonly used to describe
+ <quote>adding value</quote> or <quote>increasing cost</quote>.
+ The term takes on both these meanings when applied to text.
+ Markup is additional text included in the document,
+ distinguished from the document's content in some way, so that
+ programs that process the document can read the markup and use
+ it when making decisions about the document. Editors can hide
+ the markup from the user, so the user is not distracted by
+ it.</para>
+
+ <para xml:lang="en">The extra information stored in the markup
+ <emphasis>adds value</emphasis> to the document. Adding the
+ markup to the document must typically be done by a
+ person—after all, if computers could recognize the text
+ sufficiently well to add the markup then there would be no need
+ to add it in the first place. This
+ <emphasis>increases the cost</emphasis> (the effort required) to
+ create the document.</para>
+
+ <para xml:lang="en">The previous example is actually represented in this
+ document like this:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>To remove <tag class="starttag">filename</tag>/tmp/foo<tag class="endtag">filename</tag>, use &amp;man.rm.1;.<tag class="endtag">para</tag>
+
+<tag class="starttag">screen</tag>&amp;prompt.user; <tag class="starttag">userinput</tag>rm /tmp/foo<tag class="endtag">userinput</tag><tag class="endtag">screen</tag></programlisting>
+
+ <para xml:lang="en">The markup is clearly separate from the content.</para>
+
+ <para xml:lang="en">Markup languages define what the markup means and how it
+ should be interpreted.</para>
+
+ <para xml:lang="en">Of course, one markup language might not be enough. A
+ markup language for technical documentation has very different
+ requirements than a markup language that is intended for cookery
+ recipes. This, in turn, would be very different from a markup
+ language used to describe poetry. What is really needed is a
+ first language used to write these other markup languages. A
+ <emphasis>meta markup language</emphasis>.</para>
+
+ <para xml:lang="en">This is exactly what the eXtensible Markup
+ Language (<acronym>XML</acronym>) is. Many markup languages
+ have been written in <acronym>XML</acronym>, including the two
+ most used by the <acronym>FDP</acronym>,
+ <acronym>XHTML</acronym> and DocBook.</para>
+
+ <para xml:lang="en">Each language definition is more properly called a grammar,
+ vocabulary, schema or Document Type Definition
+ (<acronym>DTD</acronym>). There are various languages to
+ specify an <acronym>XML</acronym> grammar, or
+ <emphasis>schema</emphasis>.</para>
+
+ <para xml:id="xml-primer-validating" xml:lang="en">A schema is a
+ <emphasis>complete</emphasis> specification of all the elements
+ that are allowed to appear, the order in which they should
+ appear, which elements are mandatory, which are optional, and so
+ forth. This makes it possible to write an
+ <acronym>XML</acronym> <emphasis>parser</emphasis> which reads
+ in both the schema and a document which claims to conform to the
+ schema. The parser can then confirm whether or not all the
+ elements required by the vocabulary are in the document in the
+ right order, and whether there are any errors in the markup.
+ This is normally referred to as
+ <quote>validating the document</quote>.</para>
+
+ <note>
+ <para xml:lang="en">Validation confirms that the choice of
+ elements, their ordering, and so on, conforms to that listed
+ in the grammar. It does <emphasis>not</emphasis> check
+ whether <emphasis>appropriate</emphasis> markup has been used
+ for the content. If all the filenames in a document were
+ marked up as function names, the parser would not flag this as
+ an error (assuming, of course, that the schema defines
+ elements for filenames and functions, and that they are
+ allowed to appear in the same place).</para>
+ </note>
+
+ <para xml:lang="en">Most contributions to the Documentation
+ Project will be content marked up in either
+ <acronym>XHTML</acronym> or DocBook, rather than alterations to
+ the schemas. For this reason, this book will not touch on how
+ to write a vocabulary.</para>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-elements">
+ <title xml:lang="en">Elements, Tags, and Attributes</title>
+
+ <para xml:lang="en">All the vocabularies written in <acronym>XML</acronym> share
+ certain characteristics. This is hardly surprising, as the
+ philosophy behind <acronym>XML</acronym> will inevitably show
+ through. One of the most obvious manifestations of this
+ philosophy is that of <emphasis>content</emphasis> and
+ <emphasis>elements</emphasis>.</para>
+
+ <para xml:lang="en">Documentation, whether it is a single web page, or a lengthy
+ book, is considered to consist of content. This content is then
+ divided and further subdivided into elements. The purpose of
+ adding markup is to name and identify the boundaries of these
+ elements for further processing.</para>
+
+ <para xml:lang="en">For example, consider a typical book. At the very top
+ level, the book is itself an element. This <quote>book</quote>
+ element obviously contains chapters, which can be considered to
+ be elements in their own right. Each chapter will contain more
+ elements, such as paragraphs, quotations, and footnotes. Each
+ paragraph might contain further elements, identifying content
+ that was direct speech, or the name of a character in the
+ story.</para>
+
+ <para xml:lang="en">It may be helpful to think of this as
+ <quote>chunking</quote> content. At the very top level is one
+ chunk, the book. Look a little deeper, and there are more
+ chunks, the individual chapters. These are chunked further into
+ paragraphs, footnotes, character names, and so on.</para>
+
+ <para xml:lang="en">Notice how this differentiation between different elements
+ of the content can be made without resorting to any
+ <acronym>XML</acronym> terms. It really is surprisingly
+ straightforward. This could be done with a highlighter pen and
+ a printout of the book, using different colors to indicate
+ different chunks of content.</para>
+
+ <para xml:lang="en">Of course, we do not have an electronic highlighter pen, so
+ we need some other way of indicating which element each piece of
+ content belongs to. In languages written in
+ <acronym>XML</acronym> (<acronym>XHTML</acronym>, DocBook, et
+ al) this is done by means of <emphasis>tags</emphasis>.</para>
+
+ <para xml:lang="en">A tag is used to identify where a particular element starts,
+ and where the element ends. <emphasis>The tag is not part of
+ the element itself</emphasis>. Because each grammar was
+ normally written to mark up specific types of information, each
+ one will recognize different elements, and will therefore have
+ different names for the tags.</para>
+
+ <para xml:lang="en">For an element called
+ <replaceable>element-name</replaceable> the start tag will
+ normally look like <tag class="starttag"><replaceable>element-name</replaceable></tag>.
+ The corresponding closing tag for this element is <tag class="endtag"><replaceable>element-name</replaceable></tag>.</para>
+
+ <example>
+ <title xml:lang="en">Using an Element (Start and End Tags)</title>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> has an element for indicating
+ that the content enclosed by the element is a paragraph,
+ called <tag>p</tag>.</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>This is a paragraph. It starts with the start tag for
+ the 'p' element, and it will end with the end tag for the 'p'
+ element.<tag class="endtag">p</tag>
+
+<tag class="starttag">p</tag>This is another paragraph. But this one is much shorter.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">Some elements have no content. For example, in
+ <acronym>XHTML</acronym>, a horizontal line can be included in
+ the document. For these <quote>empty</quote> elements,
+ <acronym>XML</acronym> introduced a shorthand form that is
+ completely equivalent to the two-tag version:</para>
+
+ <example>
+ <title xml:lang="en">Using an Element Without Content</title>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> has an element for indicating a
+ horizontal rule, called <tag>hr</tag>. This element
+ does not wrap content, so it looks like this:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>One paragraph.<tag class="endtag">p</tag>
+<tag class="starttag">hr</tag><tag class="endtag">hr</tag>
+
+<tag class="starttag">p</tag>This is another paragraph. A horizontal rule separates this
+ from the previous paragraph.<tag class="endtag">p</tag></programlisting>
+
+ <para xml:lang="en">The shorthand version consists of a single tag:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>One paragraph.<tag class="endtag">p</tag>
+<tag class="emptytag">hr</tag>
+
+<tag class="starttag">p</tag>This is another paragraph. A horizontal rule separates this
+ from the previous paragraph.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">As shown above, elements can contain other elements. In the
+ book example earlier, the book element contained all the chapter
+ elements, which in turn contained all the paragraph elements,
+ and so on.</para>
+
+ <example>
+ <title xml:lang="en">Elements Within Elements; <tag>em</tag></title>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>This is a simple <tag class="starttag">em</tag>paragraph<tag class="endtag">em</tag> where some
+ of the <tag class="starttag">em</tag>words<tag class="endtag">em</tag> have been <tag class="starttag">em</tag>emphasized<tag class="endtag">em</tag>.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">The grammar consists of rules that describe which elements
+ can contain other elements, and exactly what they can
+ contain.</para>
+
+ <important>
+ <para xml:lang="en">People often confuse the terms tags and elements, and use
+ the terms as if they were interchangeable. They are
+ not.</para>
+
+ <para xml:lang="en">An element is a conceptual part of your document. An
+ element has a defined start and end. The tags mark where the
+ element starts and ends.</para>
+
+ <para xml:lang="en">When this document (or anyone else knowledgeable about
+ <acronym>XML</acronym>) refers to
+ <quote>the <tag class="starttag">p</tag> tag</quote>
+ they mean the literal text consisting of the three characters
+ <literal>&lt;</literal>, <literal>p</literal>, and
+ <literal>&gt;</literal>. But the phrase
+ <quote>the <tag>p</tag> element</quote> refers to the
+ whole element.</para>
+
+ <para xml:lang="en">This distinction <emphasis>is</emphasis> very subtle. But
+ keep it in mind.</para>
+ </important>
+
+ <para xml:lang="en">Elements can have attributes. An attribute has a name and a
+ value, and is used for adding extra information to the element.
+ This might be information that indicates how the content should
+ be rendered, or might be something that uniquely identifies that
+ occurrence of the element, or it might be something else.</para>
+
+ <para xml:lang="en">An element's attributes are written
+ <emphasis>inside</emphasis> the start tag for that element, and
+ take the form
+ <literal><replaceable>attribute-name</replaceable>="<replaceable>attribute-value</replaceable>"</literal>.</para>
+
+ <para xml:lang="en">In <acronym>XHTML</acronym>, the <tag>p</tag>
+ element has an attribute called
+ <tag class="attribute">align</tag>, which suggests an
+ alignment (justification) for the paragraph to the program
+ displaying the <acronym>XHTML</acronym>.</para>
+
+ <para xml:lang="en">The <tag class="attribute">align</tag> attribute can
+ take one of four defined values, <literal>left</literal>,
+ <literal>center</literal>, <literal>right</literal> and
+ <literal>justify</literal>. If the attribute is not specified
+ then the default is <literal>left</literal>.</para>
+
+ <example>
+ <title xml:lang="en">Using an Element with an Attribute</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">p align="left"</tag>The inclusion of the align attribute
+ on this paragraph was superfluous, since the default is left.<tag class="endtag">p</tag>
+
+<tag class="starttag">p align="center"</tag>This may appear in the center.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">Some attributes only take specific values, such as
+ <literal>left</literal> or <literal>justify</literal>. Others
+ allow any value.</para>
+
+ <example>
+ <title xml:lang="en">Single Quotes Around Attributes</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">p align='right'</tag>I am on the right!<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">Attribute values in <acronym>XML</acronym> must be enclosed
+ in either single or double quotes. Double quotes are
+ traditional. Single quotes are useful when the attribute value
+ contains double quotes.</para>
+
+ <para xml:lang="en">Information about attributes, elements, and tags is stored
+ in catalog files. The Documentation Project uses standard
+ DocBook catalogs and includes additional catalogs for
+ FreeBSD-specific features. Paths to the catalog files are defined
+ in an environment variable so they can be found by the document
+ build tools.</para>
+
+ <sect2>
+ <title xml:lang="en">To Do…</title>
+
+ <para xml:lang="en">Before running the examples in this document, install
+ <package>textproc/docproj</package> from
+ the FreeBSD Ports Collection. This is a
+ <emphasis>meta-port</emphasis> that downloads and installs
+ the standard programs and supporting files needed by the
+ Documentation Project. <citerefentry><refentrytitle>csh</refentrytitle><manvolnum>1</manvolnum></citerefentry> users must use
+ <command>rehash</command> for the shell to recognize new
+ programs after they have been installed, or log out
+ and then log back in again.</para>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Create <filename>example.xml</filename>, and enter
+ this text:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</tag>
+
+<tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ <tag class="starttag">head</tag>
+ <tag class="starttag">title</tag>An Example XHTML File<tag class="endtag">title</tag>
+ <tag class="endtag">head</tag>
+
+ <tag class="starttag">body</tag>
+ <tag class="starttag">p</tag>This is a paragraph containing some text.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p</tag>This paragraph contains some more text.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p align="right"</tag>This paragraph might be right-justified.<tag class="endtag">p</tag>
+ <tag class="endtag">body</tag>
+<tag class="endtag">html</tag></programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Try to validate this file using an
+ <acronym>XML</acronym> parser.</para>
+
+ <para xml:lang="en"><package>textproc/docproj</package>
+ includes the <command>xmllint</command>
+ <link linkend="xml-primer-validating">validating
+ parser</link>.</para>
+
+ <para xml:lang="en">Use <command>xmllint</command> to validate the
+ document:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>xmllint --valid --noout example.xml</userinput></screen>
+
+ <para xml:lang="en"><command>xmllint</command> returns without displaying
+ any output, showing that the document validated
+ successfully.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">See what happens when required elements are omitted.
+ Delete the line with the
+ <tag class="starttag">title</tag> and
+ <tag class="endtag">title</tag> tags, and re-run
+ the validation.</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>xmllint --valid --noout example.xml</userinput>
+example.xml:5: element head: validity error : Element head content does not follow the DTD, expecting ((script | style | meta | link | object | isindex)* , ((title , (script | style | meta | link | object | isindex)* , (base , (script | style | meta | link | object | isindex)*)?) | (base , (script | style | meta | link | object | isindex)* , title , (script | style | meta | link | object | isindex)*))), got ()</screen>
+
+ <para xml:lang="en">This shows that the validation error comes from the
+ <replaceable>fifth</replaceable> line of the
+ <replaceable>example.xml</replaceable> file and that the
+ content of the <tag class="starttag">head</tag> is
+ the part which does not follow the rules of the
+ <acronym>XHTML</acronym> grammar.</para>
+
+ <para xml:lang="en">Then <command>xmllint</command> shows the line where
+ the error was found and marks the exact character position
+ with a <literal>^</literal> sign.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">Replace the <tag>title</tag> element.</para>
+ </step>
+ </procedure>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-doctype-declaration">
+ <title xml:lang="en">The DOCTYPE Declaration</title>
+
+ <para xml:lang="en">The beginning of each document can specify the name of the
+ <acronym>DTD</acronym> to which the document conforms. This
+ DOCTYPE declaration is used by <acronym>XML</acronym> parsers to
+ identify the <acronym>DTD</acronym> and ensure that the document
+ does conform to it.</para>
+
+ <para xml:lang="en">A typical declaration for a document written to conform with
+ version 1.0 of the <acronym>XHTML</acronym>
+ <acronym>DTD</acronym> looks like this:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</tag></programlisting>
+
+ <para xml:lang="en">That line contains a number of different components.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en"><literal>&lt;!</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The <emphasis>indicator</emphasis> shows
+ this is an <acronym>XML</acronym> declaration.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>DOCTYPE</literal></term>
+
+ <listitem>
+ <para xml:lang="en">Shows that this is an <acronym>XML</acronym>
+ declaration of the document type.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>html</literal></term>
+
+ <listitem>
+ <para xml:lang="en">Names the first
+ <link linkend="xml-primer-elements">element</link> that
+ will appear in the document.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">Lists the Formal Public Identifier
+ (<acronym>FPI</acronym>)
+ <indexterm xml:lang="en">
+ <primary>Formal Public Identifier</primary>
+ </indexterm>
+ for the <acronym>DTD</acronym> to which this document
+ conforms. The <acronym>XML</acronym> parser uses this to
+ find the correct <acronym>DTD</acronym> when processing
+ this document.</para>
+
+ <para xml:lang="en"><literal>PUBLIC</literal> is not a part of the
+ <acronym>FPI</acronym>, but indicates to the
+ <acronym>XML</acronym> processor how to find the
+ <acronym>DTD</acronym> referenced in the
+ <acronym>FPI</acronym>. Other ways of telling the
+ <acronym>XML</acronym> parser how to find the
+ <acronym>DTD</acronym> are shown <link linkend="xml-primer-fpi-alternatives">later</link>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">A local filename or a <acronym>URL</acronym> to find
+ the <acronym>DTD</acronym>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>&gt;</literal></term>
+
+ <listitem>
+ <para xml:lang="en">Ends the declaration and returns to the
+ document.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <sect2>
+ <title xml:lang="en">Formal Public Identifiers
+ (<acronym>FPI</acronym>s)</title>
+
+ <indexterm significance="preferred" xml:lang="en">
+ <primary>Formal Public Identifier</primary>
+ </indexterm>
+
+ <note>
+ <para xml:lang="en">It is not necessary to know this, but it is useful
+ background, and might help debug problems when the
+ <acronym>XML</acronym> processor can not locate the
+ <acronym>DTD</acronym>.</para>
+ </note>
+
+ <para xml:lang="en"><acronym>FPI</acronym>s must follow a specific
+ syntax:</para>
+
+ <programlisting xml:lang="en">"<replaceable>Owner</replaceable>//<replaceable>Keyword</replaceable> <replaceable>Description</replaceable>//<replaceable>Language</replaceable>"</programlisting>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en"><replaceable>Owner</replaceable></term>
+
+ <listitem>
+ <para xml:lang="en">The owner of the <acronym>FPI</acronym>.</para>
+
+ <para xml:lang="en">The beginning of the string identifies the owner of
+ the <acronym>FPI</acronym>. For example, the
+ <acronym>FPI</acronym>
+ <literal>"ISO 8879:1986//ENTITIES Greek
+ Symbols//EN"</literal> lists
+ <literal>ISO 8879:1986</literal> as being the owner for
+ the set of entities for Greek symbols.
+ <acronym>ISO</acronym> 8879:1986 is the International
+ Organization for Standardization
+ (<acronym>ISO</acronym>) number for the
+ <acronym>SGML</acronym> standard, the predecessor (and a
+ superset) of <acronym>XML</acronym>.</para>
+
+ <para xml:lang="en">Otherwise, this string will either look like
+ <literal>-//<replaceable>Owner</replaceable></literal>
+ or
+ <literal>+//<replaceable>Owner</replaceable></literal>
+ (notice the only difference is the leading
+ <literal>+</literal> or <literal>-</literal>).</para>
+
+ <para xml:lang="en">If the string starts with <literal>-</literal> then
+ the owner information is unregistered, with a
+ <literal>+</literal> identifying it as
+ registered.</para>
+
+ <para xml:lang="en"><acronym>ISO</acronym> 9070:1991 defines how
+ registered names are generated. It might be derived
+ from the number of an <acronym>ISO</acronym>
+ publication, an <acronym>ISBN</acronym> code, or an
+ organization code assigned according to
+ <acronym>ISO</acronym> 6523. Additionally, a
+ registration authority could be created in order to
+ assign registered names. The <acronym>ISO</acronym>
+ council delegated this to the American National
+ Standards Institute (<acronym>ANSI</acronym>).</para>
+
+ <para xml:lang="en">Because the FreeBSD Project has not been registered,
+ the owner string is <literal>-//FreeBSD</literal>. As seen
+ in the example, the <acronym>W3C</acronym> are not a
+ registered owner either.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><replaceable>Keyword</replaceable></term>
+
+ <listitem>
+ <para xml:lang="en">There are several keywords that indicate the type of
+ information in the file. Some of the most common
+ keywords are <literal>DTD</literal>,
+ <literal>ELEMENT</literal>, <literal>ENTITIES</literal>,
+ and <literal>TEXT</literal>. <literal>DTD</literal> is
+ used only for <acronym>DTD</acronym> files,
+ <literal>ELEMENT</literal> is usually used for
+ <acronym>DTD</acronym> fragments that contain only
+ entity or element declarations. <literal>TEXT</literal>
+ is used for <acronym>XML</acronym> content (text and
+ tags).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><replaceable>Description</replaceable></term>
+
+ <listitem>
+ <para xml:lang="en">Any description can be given for the contents
+ of this file. This may include version numbers or any
+ short text that is meaningful and unique for the
+ <acronym>XML</acronym> system.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><replaceable>Language</replaceable></term>
+
+ <listitem>
+ <para xml:lang="en">An <acronym>ISO</acronym> two-character code that
+ identifies the native language for the file.
+ <literal>EN</literal> is used for English.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <sect3>
+ <title xml:lang="en"><filename>catalog</filename> Files</title>
+
+ <para xml:lang="en">With the syntax above, an <acronym>XML</acronym>
+ processor needs to have some way of turning the
+ <acronym>FPI</acronym> into the name of the file containing
+ the <acronym>DTD</acronym>. A catalog file (typically
+ called <filename>catalog</filename>) contains lines that map
+ <acronym>FPI</acronym>s to filenames. For example, if the
+ catalog file contained the line:</para>
+
+<!-- XXX: mention XML catalog or maybe replace this totally and only cover XML catalog -->
+
+ <programlisting xml:lang="en">PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "1.0/transitional.dtd"</programlisting>
+
+ <para xml:lang="en">The <acronym>XML</acronym> processor knows that the
+ <acronym>DTD</acronym> is called
+ <filename>transitional.dtd</filename> in the
+ <filename>1.0</filename> subdirectory of the directory that
+ held <filename>catalog</filename>.</para>
+
+ <para xml:lang="en">Examine the contents of
+ <filename>/usr/local/share/xml/dtd/xhtml/catalog.xml</filename>.
+ This is the catalog file for the <acronym>XHTML</acronym>
+ <acronym>DTD</acronym>s that were installed as part of the
+ <package>textproc/docproj</package> port.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 xml:id="xml-primer-fpi-alternatives">
+ <title xml:lang="en">Alternatives to <acronym>FPI</acronym>s</title>
+
+ <para xml:lang="en">Instead of using an <acronym>FPI</acronym> to indicate the
+ <acronym>DTD</acronym> to which the document conforms (and
+ therefore, which file on the system contains the
+ <acronym>DTD</acronym>), the filename can be explicitly
+ specified.</para>
+
+ <para xml:lang="en">The syntax is slightly different:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">!DOCTYPE html SYSTEM "/path/to/file.dtd"</tag></programlisting>
+
+ <para xml:lang="en">The <literal>SYSTEM</literal> keyword indicates that the
+ <acronym>XML</acronym> processor should locate the
+ <acronym>DTD</acronym> in a system specific fashion. This
+ typically (but not always) means the <acronym>DTD</acronym>
+ will be provided as a filename.</para>
+
+ <para xml:lang="en">Using <acronym>FPI</acronym>s is preferred for reasons of
+ portability. If the <literal>SYSTEM</literal> identifier is
+ used, then the <acronym>DTD</acronym> must be provided and
+ kept in the same location for everyone.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-xml-escape">
+ <title xml:lang="en">Escaping Back to <acronym>XML</acronym></title>
+
+ <para xml:lang="en">Some of the underlying <acronym>XML</acronym> syntax can be
+ useful within documents. For example, comments can be included
+ in the document, and will be ignored by the parser. Comments
+ are entered using <acronym>XML</acronym> syntax. Other uses for
+ <acronym>XML</acronym> syntax will be shown later.</para>
+
+ <para xml:lang="en"><acronym>XML</acronym> sections begin with a
+ <literal>&lt;!</literal> tag and end with a
+ <literal>&gt;</literal>. These sections contain instructions
+ for the parser rather than elements of the document. Everything
+ between these tags is <acronym>XML</acronym> syntax. The
+ <link linkend="xml-primer-doctype-declaration">DOCTYPE
+ declaration</link> shown earlier is an example of
+ <acronym>XML</acronym> syntax included in the document.</para>
+
+ </sect1>
+
+ <sect1 xml:id="xml-primer-comments">
+ <title xml:lang="en">Comments</title>
+
+ <para xml:lang="en">Comments are an <acronym>XML</acronym> construct, and are
+ normally only valid inside a <acronym>DTD</acronym>. However,
+ as <xref linkend="xml-primer-xml-escape"/> shows, it is possible
+ to use <acronym>XML</acronym> syntax within the document.</para>
+
+ <para xml:lang="en">The delimiter for XML comments is the string
+ <quote><literal>--</literal></quote>. The first occurrence of
+ this string opens a comment, and the second closes it.</para>
+
+ <example>
+ <title xml:lang="en"><acronym>XML</acronym> Generic Comment</title>
+
+ <programlisting xml:lang="en">&lt;!-- This is inside the comment --&gt;
+
+&lt;!-- This is another comment --&gt;
+
+&lt;!-- This is one way
+ of doing multiline comments --&gt;
+
+&lt;!-- This is another way of --
+ -- doing multiline comments --&gt;</programlisting>
+ </example>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> users may be familiar with different
+ rules for comments. In particular, it is often believed that
+ the string <literal>&lt;!--</literal> opens a comment, and it is
+ only closed by <literal>--&gt;</literal>.</para>
+
+ <para xml:lang="en">This is <emphasis>not</emphasis> correct. Many web browsers
+ have broken <acronym>XHTML</acronym> parsers, and will accept
+ incorrect input as valid. However, the <acronym>XML</acronym>
+ parsers used by the Documentation Project are more strict, and
+ will reject documents with that error.</para>
+
+ <example>
+ <title xml:lang="en">Erroneous <acronym>XML</acronym> Comments</title>
+
+ <programlisting xml:lang="en">&lt;!-- This is in the comment --
+
+ THIS IS OUTSIDE THE COMMENT!
+
+ -- back inside the comment --&gt;</programlisting>
+
+ <para xml:lang="en">The <acronym>XML</acronym> parser will treat this as
+ though it were actually:</para>
+
+ <programlisting xml:lang="en">&lt;!THIS IS OUTSIDE THE COMMENT&gt;</programlisting>
+
+ <para xml:lang="en">That is not valid <acronym>XML</acronym>, and may give
+ confusing error messages.</para>
+ </example>
+
+ <sect2>
+ <title xml:lang="en">To Do…</title>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Add some comments to
+ <filename>example.xml</filename>, and check that the file
+ still validates using <command>xmllint</command>.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">Add some invalid comments to
+ <filename>example.xml</filename>, and see the error
+ messages that <command>xmllint</command> gives when it
+ encounters an invalid comment.</para>
+ </step>
+ </procedure>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-entities">
+ <title xml:lang="en">Entities</title>
+
+ <para xml:lang="en">Entities are a mechanism for assigning names to chunks of
+ content. As an <acronym>XML</acronym> parser processes a
+ document, any entities it finds are replaced by the content of
+ the entity.</para>
+
+ <para xml:lang="en">This is a good way to have re-usable, easily changeable
+ chunks of content in <acronym>XML</acronym> documents. It is
+ also the only way to include one marked up file inside another
+ using <acronym>XML</acronym>.</para>
+
+ <para xml:lang="en">There are two types of entities for two different
+ situations: <emphasis>general entities</emphasis> and
+ <emphasis>parameter entities</emphasis>.</para>
+
+ <sect2 xml:id="xml-primer-general-entities">
+ <title xml:lang="en">General Entities</title>
+
+ <para xml:lang="en">General entities are used to assign names to reusable
+ chunks of text. These entities can only be used in the
+ document. They cannot be used in an
+ <acronym>XML</acronym> context.</para>
+
+ <para xml:lang="en">To include the text of a general entity in the document,
+ include
+ <literal>&amp;<replaceable>entity-name</replaceable>;</literal>
+ in the text. For example, consider a general entity called
+ <literal>current.version</literal> which expands to the
+ current version number of a product. To use it in the
+ document, write:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>The current version of our product is
+ &amp;current.version;.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">When the version number changes, edit the definition of
+ the general entity, replacing the value. Then reprocess the
+ document.</para>
+
+ <para xml:lang="en">General entities can also be used to enter characters that
+ could not otherwise be included in an <acronym>XML</acronym>
+ document. For example, <literal>&lt;</literal> and
+ <literal>&amp;</literal> cannot normally appear in an
+ <acronym>XML</acronym> document. The <acronym>XML</acronym>
+ parser sees the <literal>&lt;</literal> symbol as the start of
+ a tag. Likewise, when the <literal>&amp;</literal> symbol is
+ seen, the next text is expected to be an entity name.</para>
+
+ <para xml:lang="en">These symbols can be included by using two predefined
+ general entities: <literal>&amp;lt;</literal> and
+ <literal>&amp;amp;</literal>.</para>
+
+ <para xml:lang="en">General entities can only be defined within an
+ <acronym>XML</acronym> context. Such definitions are usually
+ done immediately after the DOCTYPE declaration.</para>
+
+ <example>
+ <title xml:lang="en">Defining General Entities</title>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!ENTITY current.version "3.0-RELEASE"&gt;
+&lt;!ENTITY last.version "2.2.7-RELEASE"&gt;
+]&gt;</programlisting>
+
+ <para xml:lang="en">The DOCTYPE declaration has been extended by adding a
+ square bracket at the end of the first line. The two
+ entities are then defined over the next two lines, the
+ square bracket is closed, and then the DOCTYPE declaration
+ is closed.</para>
+
+ <para xml:lang="en">The square brackets are necessary to indicate that the
+ DTD indicated by the DOCTYPE declaration is being
+ extended.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xml-primer-parameter-entities">
+ <title xml:lang="en">Parameter Entities</title>
+
+ <para xml:lang="en">Parameter entities, like
+ <link linkend="xml-primer-general-entities">general
+ entities</link>, are used to assign names to reusable chunks
+ of text. But parameter entities can only be used within an
+ <link linkend="xml-primer-xml-escape">XML
+ context</link>.</para>
+
+ <para xml:lang="en">Parameter entity definitions are similar to those for
+ general entities. However, parameter entries are included
+ with
+ <literal>%<replaceable>entity-name</replaceable>;</literal>.
+ The definition also includes the <literal>%</literal> between
+ the <literal>ENTITY</literal> keyword and the name of the
+ entity.</para>
+
+ <para xml:lang="en">For a mnemonic, think
+ <quote><emphasis>P</emphasis>arameter entities use the
+ <emphasis>P</emphasis>ercent symbol</quote>.</para>
+
+ <example>
+ <title xml:lang="en">Defining Parameter Entities</title>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!ENTITY % param.some "some"&gt;
+&lt;!ENTITY % param.text "text"&gt;
+&lt;!ENTITY % param.new "%param.some more %param.text"&gt;
+
+&lt;!-- %param.new now contains "some more text" --&gt;
+]&gt;</programlisting>
+ </example>
+ </sect2>
+
+ <sect2>
+ <title xml:lang="en">To Do…</title>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Add a general entity to
+ <filename>example.xml</filename>.</para>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!ENTITY version "1.1"&gt;
+]&gt;
+
+<tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ <tag class="starttag">head</tag>
+ <tag class="starttag">title</tag>An Example XHTML File<tag class="endtag">title</tag>
+ <tag class="endtag">head</tag>
+
+ &lt;!-- There may be some comments in here as well --&gt;
+
+ <tag class="starttag">body</tag>
+ <tag class="starttag">p</tag>This is a paragraph containing some text.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p</tag>This paragraph contains some more text.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p align="right"</tag>This paragraph might be right-justified.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p</tag>The current version of this document is: &amp;version;<tag class="endtag">p</tag>
+ <tag class="endtag">body</tag>
+<tag class="endtag">html</tag></programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Validate the document using
+ <command>xmllint</command>.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">Load <filename>example.xml</filename> into a web
+ browser. It may have to be copied to
+ <filename>example.html</filename> before the browser
+ recognizes it as an <acronym>XHTML</acronym>
+ document.</para>
+
+ <para xml:lang="en">Older browsers with simple parsers may not render this
+ file as expected. The entity reference
+ <literal>&amp;version;</literal> may not be replaced by
+ the version number, or the <acronym>XML</acronym> context
+ closing <literal>]&gt;</literal> may not be recognized and
+ instead shown in the output.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">The solution is to <emphasis>normalize</emphasis> the
+ document with an <acronym>XML</acronym> normalizer. The
+ normalizer reads valid <acronym>XML</acronym> and writes
+ equally valid <acronym>XML</acronym> which has been
+ transformed in some way. One way the normalizer
+ transforms the input is by expanding all the entity
+ references in the document, replacing the entities with
+ the text that they represent.</para>
+
+ <para xml:lang="en"><command>xmllint</command> can be used for this. It
+ also has an option to drop the initial
+ <acronym>DTD</acronym> section so that the closing
+ <literal>]&gt;</literal> does not confuse browsers:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>xmllint --noent --dropdtd example.xml &gt; example.html</userinput></screen>
+
+ <para xml:lang="en">A normalized copy of the document with entities
+ expanded is produced in <filename>example.html</filename>,
+ ready to load into a web browser.</para>
+ </step>
+ </procedure>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-include">
+ <title xml:lang="en">Using Entities to Include Files</title>
+
+ <para xml:lang="en">Both
+ <link linkend="xml-primer-general-entities">general</link> and
+ <link linkend="xml-primer-parameter-entities">parameter</link>
+ entities are particularly useful for including one file inside
+ another.</para>
+
+ <sect2 xml:id="xml-primer-include-using-gen-entities">
+ <title xml:lang="en">Using General Entities to Include Files</title>
+
+ <para xml:lang="en">Consider some content for an <acronym>XML</acronym> book
+ organized into files, one file per chapter, called
+ <filename>chapter1.xml</filename>,
+ <filename>chapter2.xml</filename>, and so forth, with a
+ <filename>book.xml</filename> that will contain these
+ chapters.</para>
+
+ <para xml:lang="en">In order to use the contents of these files as the values
+ for entities, they are declared with the
+ <literal>SYSTEM</literal> keyword. This directs the
+ <acronym>XML</acronym> parser to include the contents of the
+ named file as the value of the entity.</para>
+
+ <example>
+ <title xml:lang="en">Using General Entities to Include Files</title>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!ENTITY chapter.1 SYSTEM "chapter1.xml"&gt;
+&lt;!ENTITY chapter.2 SYSTEM "chapter2.xml"&gt;
+&lt;!ENTITY chapter.3 SYSTEM "chapter3.xml"&gt;
+&lt;!-- And so forth --&gt;
+]&gt;
+
+<tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ &lt;!-- Use the entities to load in the chapters --&gt;
+
+ &amp;chapter.1;
+ &amp;chapter.2;
+ &amp;chapter.3;
+<tag class="endtag">html</tag></programlisting>
+ </example>
+
+ <warning>
+ <para xml:lang="en">When using general entities to include other files
+ within a document, the files being included
+ (<filename>chapter1.xml</filename>,
+ <filename>chapter2.xml</filename>, and so on)
+ <emphasis>must not</emphasis> start with a DOCTYPE
+ declaration. This is a syntax error because entities are
+ low-level constructs and they are resolved before any
+ parsing happens.</para>
+ </warning>
+ </sect2>
+
+ <sect2>
+ <title xml:lang="en">Using Parameter Entities to Include Files</title>
+
+ <para xml:lang="en">Parameter entities can only be used inside an
+ <acronym>XML</acronym> context. Including a file in an
+ <acronym>XML</acronym> context can be used
+ to ensure that general entities are reusable.</para>
+
+ <para xml:lang="en">Suppose that there are many chapters in the document, and
+ these chapters were reused in two different books, each book
+ organizing the chapters in a different fashion.</para>
+
+ <para xml:lang="en">The entities could be listed at the top of each book, but
+ that quickly becomes cumbersome to manage.</para>
+
+ <para xml:lang="en">Instead, place the general entity definitions inside one
+ file, and use a parameter entity to include that file within
+ the document.</para>
+
+ <example>
+ <title xml:lang="en">Using Parameter Entities to Include Files</title>
+
+ <para xml:lang="en">Place the entity definitions in a separate file
+ called <filename>chapters.ent</filename> and
+ containing this text:</para>
+
+ <programlisting xml:lang="en">&lt;!ENTITY chapter.1 SYSTEM "chapter1.xml"&gt;
+&lt;!ENTITY chapter.2 SYSTEM "chapter2.xml"&gt;
+&lt;!ENTITY chapter.3 SYSTEM "chapter3.xml"&gt;</programlisting>
+
+ <para xml:lang="en">Create a parameter entity to refer to the contents
+ of the file. Then use the parameter entity to load the file
+ into the document, which will then make all the general
+ entities available for use. Then use the general entities
+ as before:</para>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!-- Define a parameter entity to load in the chapter general entities --&gt;
+&lt;!ENTITY % chapters SYSTEM "chapters.ent"&gt;
+
+&lt;!-- Now use the parameter entity to load in this file --&gt;
+%chapters;
+]&gt;
+
+<tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ &amp;chapter.1;
+ &amp;chapter.2;
+ &amp;chapter.3;
+<tag class="endtag">html</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2>
+ <title xml:lang="en">To Do…</title>
+
+ <sect3>
+ <title xml:lang="en">Use General Entities to Include Files</title>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Create three files, <filename>para1.xml</filename>,
+ <filename>para2.xml</filename>, and
+ <filename>para3.xml</filename>.</para>
+
+ <para xml:lang="en">Put content like this in each file:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>This is the first paragraph.<tag class="endtag">p</tag></programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Edit <filename>example.xml</filename> so that it
+ looks like this:</para>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!ENTITY version "1.1"&gt;
+&lt;!ENTITY para1 SYSTEM "para1.xml"&gt;
+&lt;!ENTITY para2 SYSTEM "para2.xml"&gt;
+&lt;!ENTITY para3 SYSTEM "para3.xml"&gt;
+]&gt;
+
+<tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ <tag class="starttag">head</tag>
+ <tag class="starttag">title</tag>An Example XHTML File<tag class="endtag">title</tag>
+ <tag class="endtag">head</tag>
+
+ <tag class="starttag">body</tag>
+ <tag class="starttag">p</tag>The current version of this document is: &amp;version;<tag class="endtag">p</tag>
+
+ &amp;para1;
+ &amp;para2;
+ &amp;para3;
+ <tag class="endtag">body</tag>
+<tag class="endtag">html</tag></programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Produce <filename>example.html</filename> by
+ normalizing <filename>example.xml</filename>.</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>xmllint --dropdtd --noent example.xml &gt; example.html</userinput></screen>
+ </step>
+
+ <step>
+ <para xml:lang="en">Load <filename>example.html</filename> into the web
+ browser and confirm that the
+ <filename>para<replaceable>n</replaceable>.xml</filename>
+ files have been included in
+ <filename>example.html</filename>.</para>
+ </step>
+ </procedure>
+ </sect3>
+
+ <sect3>
+ <title xml:lang="en">Use Parameter Entities to Include Files</title>
+
+ <note>
+ <para xml:lang="en">The previous steps must have completed before this
+ step.</para>
+ </note>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Edit <filename>example.xml</filename> so that it
+ looks like this:</para>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+&lt;!ENTITY % entities SYSTEM "entities.ent"&gt; %entities;
+]&gt;
+
+<tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ <tag class="starttag">head</tag>
+ <tag class="starttag">title</tag>An Example XHTML File<tag class="endtag">title</tag>
+ <tag class="endtag">head</tag>
+
+ <tag class="starttag">body</tag>
+ <tag class="starttag">p</tag>The current version of this document is: &amp;version;<tag class="endtag">p</tag>
+
+ &amp;para1;
+ &amp;para2;
+ &amp;para3;
+ <tag class="endtag">body</tag>
+<tag class="endtag">html</tag></programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Create a new file called
+ <filename>entities.ent</filename> with this
+ content:</para>
+
+ <programlisting xml:lang="en">&lt;!ENTITY version "1.1"&gt;
+&lt;!ENTITY para1 SYSTEM "para1.xml"&gt;
+&lt;!ENTITY para2 SYSTEM "para2.xml"&gt;
+&lt;!ENTITY para3 SYSTEM "para3.xml"&gt;</programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Produce <filename>example.html</filename> by
+ normalizing <filename>example.xml</filename>.</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>xmllint --dropdtd --noent example.xml &gt; example.html</userinput></screen>
+ </step>
+
+ <step>
+ <para xml:lang="en">Load <filename>example.html</filename> into the web
+ browser and confirm that the
+ <filename>para<replaceable>n</replaceable>.xml</filename>
+ files have been included in
+ <filename>example.html</filename>.</para>
+ </step>
+ </procedure>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-marked-sections">
+ <title xml:lang="en">Marked Sections</title>
+
+ <para xml:lang="en"><acronym>XML</acronym> provides a mechanism to indicate that
+ particular pieces of the document should be processed in a
+ special way. These are called
+ <quote>marked sections</quote>.</para>
+
+ <example>
+ <title xml:lang="en">Structure of a Marked Section</title>
+
+ <programlisting xml:lang="en">&lt;![<replaceable>KEYWORD</replaceable>[
+ Contents of marked section
+]]&gt;</programlisting>
+ </example>
+
+ <para xml:lang="en">As expected of an <acronym>XML</acronym> construct, a marked
+ section starts with <literal>&lt;!</literal>.</para>
+
+ <para xml:lang="en">The first square bracket begins the marked section.</para>
+
+ <para xml:lang="en"><replaceable>KEYWORD</replaceable> describes how this marked
+ section is to be processed by the parser.</para>
+
+ <para xml:lang="en">The second square bracket indicates the start of the
+ marked section's content.</para>
+
+ <para xml:lang="en">The marked section is finished by closing the two square
+ brackets, and then returning to the document context from the
+ <acronym>XML</acronym> context with
+ <literal>&gt;</literal>.</para>
+
+ <sect2 xml:id="xml-primer-marked-section-keywords">
+ <title xml:lang="en">Marked Section Keywords</title>
+
+ <sect3 xml:id="xml-primer-cdata">
+ <title xml:lang="en"><literal>CDATA</literal></title>
+
+ <para xml:lang="en">These keywords denote the marked sections
+ <emphasis>content model</emphasis>, and allow you to change
+ it from the default.</para>
+
+ <para xml:lang="en">When an <acronym>XML</acronym> parser is processing a
+ document, it keeps track of the
+ <quote>content model</quote>.</para>
+
+ <para xml:lang="en">The content model describes the
+ content the parser is expecting to see and what it will do
+ with that content.</para>
+
+ <para xml:lang="en">The <literal>CDATA</literal> content model is one of the
+ most useful.</para>
+
+ <para xml:lang="en"><literal>CDATA</literal> is for
+ <quote>Character Data</quote>. When the parser is in this
+ content model, it expects to see only characters. In this
+ model the <literal>&lt;</literal> and
+ <literal>&amp;</literal> symbols lose their special status,
+ and will be treated as ordinary characters.</para>
+
+ <note>
+ <para xml:lang="en">When using <literal>CDATA</literal> in examples of
+ text marked up in <acronym>XML</acronym>, remember that
+ the content of <literal>CDATA</literal> is not validated.
+ The included text must be check with other means. For
+ example, the content could be written in another document,
+ validated, and then pasted into the
+ <literal>CDATA</literal> section.</para>
+ </note>
+
+ <example>
+ <title xml:lang="en">Using a <literal>CDATA</literal> Marked
+ Section</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Here is an example of how to include some text that contains
+ many <tag class="starttag">literal</tag>&amp;lt;<tag class="endtag">literal</tag> and <tag class="starttag">literal</tag>&amp;amp;<tag class="endtag">literal</tag>
+ symbols. The sample text is a fragment of
+ <tag class="starttag">acronym</tag>XHTML<tag class="endtag">acronym</tag>. The surrounding text (<tag class="starttag">para</tag> and
+ <tag class="starttag">programlisting</tag>) are from DocBook.<tag class="endtag">para</tag>
+
+<tag class="starttag">programlisting</tag>&lt;![CDATA[<tag class="starttag">p</tag>This is a sample that shows some of the
+ elements within <tag class="starttag">acronym</tag>XHTML<tag class="endtag">acronym</tag>. Since the angle
+ brackets are used so many times, it is simpler to say the whole
+ example is a CDATA marked section than to use the entity names for
+ the left and right angle brackets throughout.<tag class="endtag">p</tag>
+
+ <tag class="starttag">ul</tag>
+ <tag class="starttag">li</tag>This is a listitem<tag class="endtag">li</tag>
+ <tag class="starttag">li</tag>This is a second listitem<tag class="endtag">li</tag>
+ <tag class="starttag">li</tag>This is a third listitem<tag class="endtag">li</tag>
+ <tag class="endtag">ul</tag>
+
+ <tag class="starttag">p</tag>This is the end of the example.<tag class="endtag">p</tag>]]&gt;<tag class="endtag">programlisting</tag></programlisting>
+ </example>
+ </sect3>
+
+ <sect3 xml:id="xml-primer-include-ignore">
+ <title xml:lang="en"><literal>INCLUDE</literal> and
+ <literal>IGNORE</literal></title>
+
+ <para xml:lang="en">When the keyword is <literal>INCLUDE</literal>, then the
+ contents of the marked section will be processed. When the
+ keyword is <literal>IGNORE</literal>, the marked section
+ is ignored and will not be processed. It will not appear in
+ the output.</para>
+
+ <example>
+ <title xml:lang="en">Using <literal>INCLUDE</literal> and
+ <literal>IGNORE</literal> in Marked Sections</title>
+
+ <programlisting xml:lang="en">&lt;![INCLUDE[
+ This text will be processed and included.
+]]&gt;
+
+&lt;![IGNORE[
+ This text will not be processed or included.
+]]&gt;</programlisting>
+ </example>
+
+ <para xml:lang="en">By itself, this is not too useful. Text to be
+ removed from the document could be cut out, or wrapped
+ in comments.</para>
+
+ <para xml:lang="en">It becomes more useful when controlled by
+ <link linkend="xml-primer-parameter-entities">parameter
+ entities</link>, yet this usage is limited
+ to entity files.</para>
+
+ <para xml:lang="en">For example, suppose that documentation was produced in
+ a hard-copy version and an electronic version. Some extra
+ text is desired in the electronic version content that was
+ not to appear in the hard-copy.</para>
+
+ <para xml:lang="en">Create an entity file that defines general entities to
+ include each chapter and guard these definitions with a
+ parameter entity that can be set to either
+ <literal>INCLUDE</literal> or <literal>IGNORE</literal> to
+ control whether the entity is defined. After these
+ conditional general entity definitions, place one more
+ definition for each general entity to set them to an empty
+ value. This technique makes use of the fact that entity
+ definitions cannot be overridden but the first definition
+ always takes effect. So the inclusion of the chapter is
+ controlled with the corresponding parameter entity. Set to
+ <literal>INCLUDE</literal>, the first general entity
+ definition will be read and the second one will be ignored.
+ Set to <literal>IGNORE</literal>, the first definition will
+ be ignored and the second one will take effect.</para>
+
+ <example>
+ <title xml:lang="en">Using a Parameter Entity to Control a Marked
+ Section</title>
+
+ <programlisting xml:lang="en">&lt;!ENTITY % electronic.copy "INCLUDE"&gt;
+
+&lt;![%electronic.copy;[
+&lt;!ENTITY chap.preface SYSTEM "preface.xml"&gt;
+]]&gt;
+
+&lt;!ENTITY chap.preface ""&gt;</programlisting>
+
+ <para xml:lang="en">When producing the hard-copy version, change the
+ parameter entity's definition to:</para>
+
+ <programlisting xml:lang="en">&lt;!ENTITY % electronic.copy "IGNORE"&gt;</programlisting>
+ </example>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title xml:lang="en">To Do…</title>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Modify <filename>entities.ent</filename> to
+ contain the following:</para>
+
+ <programlisting xml:lang="en">&lt;!ENTITY version "1.1"&gt;
+&lt;!ENTITY % conditional.text "IGNORE"&gt;
+
+&lt;![%conditional.text;[
+&lt;!ENTITY para1 SYSTEM "para1.xml"&gt;
+]]&gt;
+
+&lt;!ENTITY para1 ""&gt;
+
+&lt;!ENTITY para2 SYSTEM "para2.xml"&gt;
+&lt;!ENTITY para3 SYSTEM "para3.xml"&gt;</programlisting>
+ </step>
+
+ <step>
+ <para xml:lang="en">Normalize <filename>example.xml</filename>
+ and notice that the conditional text is not present in the
+ output document. Set the parameter entity
+ guard to <literal>INCLUDE</literal> and regenerate the
+ normalized document and the text will appear again.
+ This method makes sense if there are more
+ conditional chunks depending on the same condition. For
+ example, to control generating printed or online
+ text.</para>
+ </step>
+ </procedure>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xml-primer-conclusion">
+ <title xml:lang="en">Conclusion</title>
+
+ <para xml:lang="en">That is the conclusion of this <acronym>XML</acronym>
+ primer. For reasons of space and complexity, several things
+ have not been covered in depth (or at all). However, the
+ previous sections cover enough <acronym>XML</acronym> to
+ introduce the organization of the <acronym>FDP</acronym>
+ documentation.</para>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="xhtml-markup">
+ <title xml:lang="en"><acronym>XHTML</acronym> Markup</title>
+
+ <sect1 xml:id="xhtml-markup-introduction">
+ <title xml:lang="en">Introduction</title>
+
+ <para xml:lang="en">This chapter describes usage of the <acronym>XHTML</acronym>
+ markup language used for the FreeBSD web site.</para>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> is the <acronym>XML</acronym>
+ version of the HyperText Markup Language, the markup language of
+ choice on the World Wide Web. More information can be found at
+ <uri xlink:href="http://www.w3.org/">http://www.w3.org/</uri>.</para>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> is used to mark up pages on the
+ FreeBSD web site. It is usually not used to mark up other
+ documentation, since DocBook offers a far richer set of elements
+ from which to choose. Consequently, <acronym>XHTML</acronym>
+ pages will normally only be encountered when writing for the web
+ site.</para>
+
+ <para xml:lang="en"><acronym>HTML</acronym> has gone through a number of
+ versions. The <acronym>XML</acronym>-compliant version
+ described here is called <acronym>XHTML</acronym>. The latest
+ widespread version is <acronym>XHTML</acronym> 1.0, available in
+ both <emphasis>strict</emphasis> and
+ <emphasis>transitional</emphasis> variants.</para>
+
+ <para xml:lang="en">The <acronym>XHTML</acronym> <acronym>DTDs</acronym> are
+ available from the Ports Collection in
+ <package>textproc/xhtml</package>. They are
+ automatically installed by the <package>textproc/docproj</package> port.</para>
+
+ <note>
+ <para xml:lang="en">This is <emphasis>not</emphasis> an exhaustive list of
+ elements, since that would just repeat the documentation for
+ <acronym>XHTML</acronym>. The aim is to list those elements
+ most commonly used. Please post questions about elements or
+ uses not covered here to the <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD documentation project mailing list</link>.</para>
+ </note>
+
+ <note>
+ <title xml:lang="en">Inline Versus Block</title>
+
+ <para xml:lang="en">In the remainder of this document, when describing
+ elements, <emphasis>inline</emphasis> means that the element
+ can occur within a block element, and does not cause a line
+ break. A <emphasis>block</emphasis> element, by comparison,
+ will cause a line break (and other processing) when it is
+ encountered.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="xhtml-markup-fpi">
+ <title xml:lang="en">Formal Public Identifier (<acronym>FPI</acronym>)</title>
+
+ <para xml:lang="en">There are a number of <acronym>XHTML</acronym>
+ <acronym>FPI</acronym>s, depending upon the version, or
+ <emphasis>level</emphasis> of <acronym>XHTML</acronym> to which
+ a document conforms. Most <acronym>XHTML</acronym> documents on
+ the FreeBSD web site comply with the transitional version of
+ <acronym>XHTML</acronym> 1.0.</para>
+
+ <programlisting xml:lang="en">PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</programlisting>
+ </sect1>
+
+ <sect1 xml:id="xhtml-markup-sectional-elements">
+ <title xml:lang="en">Sectional Elements</title>
+
+ <para xml:lang="en">An <acronym>XHTML</acronym> document is normally split into
+ two sections. The first section, called the
+ <emphasis>head</emphasis>, contains meta-information about the
+ document, such as its title, the name of the author, the parent
+ document, and so on. The second section, the
+ <emphasis>body</emphasis>, contains content that will be
+ displayed to the user.</para>
+
+ <para xml:lang="en">These sections are indicated with <tag>head</tag>
+ and <tag>body</tag> elements respectively. These
+ elements are contained within the top-level
+ <tag>html</tag> element.</para>
+
+ <example>
+ <title xml:lang="en">Normal <acronym>XHTML</acronym> Document
+ Structure</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">html xmlns="http://www.w3.org/1999/xhtml"</tag>
+ <tag class="starttag">head</tag>
+ <tag class="starttag">title</tag><replaceable>The Document's Title</replaceable><tag class="endtag">title</tag>
+ <tag class="endtag">head</tag>
+
+ <tag class="starttag">body</tag>
+
+ …
+
+ <tag class="endtag">body</tag>
+<tag class="endtag">html</tag></programlisting>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="xhtml-markup-block-elements">
+ <title xml:lang="en">Block Elements</title>
+
+ <sect2 xml:id="xhtml-markup-block-elements-headings">
+ <title xml:lang="en">Headings</title>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> has tags to denote headings in
+ the document at up to six different levels.</para>
+
+ <para xml:lang="en">The largest and most prominent heading is
+ <tag>h1</tag>, then <tag>h2</tag>,
+ continuing down to <tag>h6</tag>.</para>
+
+ <para xml:lang="en">The element's content is the text of the heading.</para>
+
+ <example>
+ <title xml:lang="en"><tag>h1</tag>, <tag>h2</tag>,
+ and Other Header Tags</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">h1</tag>First section<tag class="endtag">h1</tag>
+
+&lt;!-- Document introduction goes here --&gt;
+
+<tag class="starttag">h2</tag>This is the heading for the first section<tag class="endtag">h2</tag>
+
+&lt;!-- Content for the first section goes here --&gt;
+
+<tag class="starttag">h3</tag>This is the heading for the first sub-section<tag class="endtag">h3</tag>
+
+&lt;!-- Content for the first sub-section goes here --&gt;
+
+<tag class="starttag">h2</tag>This is the heading for the second section<tag class="endtag">h2</tag>
+
+&lt;!-- Content for the second section goes here --&gt;</programlisting>
+ </example>
+
+ <para xml:lang="en">Generally, an <acronym>XHTML</acronym> page should have
+ one first level heading (<tag>h1</tag>). This can
+ contain many second level headings (<tag>h2</tag>),
+ which can in turn contain many third level headings. Do not
+ leave gaps in the numbering.</para>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-block-elements-paragraphs">
+ <title xml:lang="en">Paragraphs</title>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> supports a single paragraph
+ element, <tag>p</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>p</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>This is a paragraph. It can contain just about any
+ other element.<tag class="endtag">p</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-block-elements-block-quotations">
+ <title xml:lang="en">Block Quotations</title>
+
+ <para xml:lang="en">A block quotation is an extended quotation from another
+ document that will appear in a separate paragraph.</para>
+
+ <example>
+ <title xml:lang="en"><tag>blockquote</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>A small excerpt from the US Constitution:<tag class="endtag">p</tag>
+
+<tag class="starttag">blockquote</tag>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.<tag class="endtag">blockquote</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-block-elements-lists">
+ <title xml:lang="en">Lists</title>
+
+ <para xml:lang="en"><acronym>XHTML</acronym> can present the user with three
+ types of lists: ordered, unordered, and definition.</para>
+
+ <para xml:lang="en">Entries in an ordered list will be numbered, while entries
+ in an unordered list will be preceded by bullet points.
+ Definition lists have two sections for each entry. The first
+ section is the term being defined, and the second section is
+ the definition.</para>
+
+ <para xml:lang="en">Ordered lists are indicated by the <tag>ol</tag>
+ element, unordered lists by the <tag>ul</tag>
+ element, and definition lists by the <tag>dl</tag>
+ element.</para>
+
+ <para xml:lang="en">Ordered and unordered lists contain listitems, indicated
+ by the <tag>li</tag> element. A listitem can
+ contain textual content, or it may be further wrapped in one
+ or more <tag>p</tag> elements.</para>
+
+ <para xml:lang="en">Definition lists contain definition terms
+ (<tag>dt</tag>) and definition descriptions
+ (<tag>dd</tag>). A definition term can only contain
+ inline elements. A definition description can contain other
+ block elements.</para>
+
+ <example>
+ <title xml:lang="en"><tag>ul</tag> and
+ <tag>ol</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>An unordered list. Listitems will probably be
+ preceded by bullets.<tag class="endtag">p</tag>
+
+<tag class="starttag">ul</tag>
+ <tag class="starttag">li</tag>First item<tag class="endtag">li</tag>
+
+ <tag class="starttag">li</tag>Second item<tag class="endtag">li</tag>
+
+ <tag class="starttag">li</tag>Third item<tag class="endtag">li</tag>
+<tag class="endtag">ul</tag>
+
+<tag class="starttag">p</tag>An ordered list, with list items consisting of multiple
+ paragraphs. Each item (note: not each paragraph) will be
+ numbered.<tag class="endtag">p</tag>
+
+<tag class="starttag">ol</tag>
+ <tag class="starttag">li</tag><tag class="starttag">p</tag>This is the first item. It only has one paragraph.<tag class="endtag">p</tag><tag class="endtag">li</tag>
+
+ <tag class="starttag">li</tag><tag class="starttag">p</tag>This is the first paragraph of the second item.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p</tag>This is the second paragraph of the second item.<tag class="endtag">p</tag><tag class="endtag">li</tag>
+
+ <tag class="starttag">li</tag><tag class="starttag">p</tag>This is the first and only paragraph of the third
+ item.<tag class="endtag">p</tag><tag class="endtag">li</tag>
+<tag class="endtag">ol</tag></programlisting>
+ </example>
+
+ <example>
+ <title xml:lang="en">Definition Lists with <tag>dl</tag></title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">dl</tag>
+ <tag class="starttag">dt</tag>Term 1<tag class="endtag">dt</tag>
+
+ <tag class="starttag">dd</tag><tag class="starttag">p</tag>Paragraph 1 of definition 1.<tag class="endtag">p</tag>
+
+ <tag class="starttag">p</tag>Paragraph 2 of definition 1.<tag class="endtag">p</tag><tag class="endtag">dd</tag>
+
+ <tag class="starttag">dt</tag>Term 2<tag class="endtag">dt</tag>
+
+ <tag class="starttag">dd</tag><tag class="starttag">p</tag>Paragraph 1 of definition 2.<tag class="endtag">p</tag><tag class="endtag">dd</tag>
+
+ <tag class="starttag">dt</tag>Term 3<tag class="endtag">dt</tag>
+
+ <tag class="starttag">dd</tag><tag class="starttag">p</tag>Paragraph 1 of definition 3.<tag class="endtag">p</tag><tag class="endtag">dd</tag>
+<tag class="endtag">dl</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-block-elements-preformatted-text">
+ <title xml:lang="en">Pre-formatted Text</title>
+
+ <para xml:lang="en">Pre-formatted text is shown to the user exactly as it is
+ in the file. Text is shown in a fixed font. Multiple spaces
+ and line breaks are shown exactly as they are in the
+ file.</para>
+
+ <para xml:lang="en">Wrap pre-formatted text in the <tag>pre</tag>
+ element.</para>
+
+ <example>
+ <title xml:lang="en"><tag>pre</tag> Example</title>
+
+ <para xml:lang="en">For example, the <tag>pre</tag> tags could be
+ used to mark up an email message:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">pre</tag> From: nik@FreeBSD.org
+ To: freebsd-doc@FreeBSD.org
+ Subject: New documentation available
+
+ There is a new copy of my primer for contributors to the FreeBSD
+ Documentation Project available at
+
+ &amp;lt;URL:http://people.FreeBSD.org/~nik/primer/index.html&amp;gt;
+
+ Comments appreciated.
+
+ N<tag class="endtag">pre</tag></programlisting>
+
+ <para xml:lang="en">Keep in mind that <literal>&lt;</literal> and
+ <literal>&amp;</literal> still are recognized as special
+ characters in pre-formatted text. This is why the example
+ shown had to use <literal>&amp;lt;</literal> instead of
+ <literal>&lt;</literal>. For consistency,
+ <literal>&amp;gt;</literal> was used in place of
+ <literal>&gt;</literal>, too. Watch out for the special
+ characters that may appear in text copied from a plain-text
+ source, like an email message or program code.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-block-elements-tables">
+ <title xml:lang="en">Tables</title>
+
+ <para xml:lang="en">Mark up tabular information using the
+ <tag>table</tag> element. A table consists of one or
+ more table rows (<tag>tr</tag>), each containing one
+ or more cells of table data (<tag>td</tag>). Each
+ cell can contain other block elements, such as paragraphs or
+ lists. It can also contain another table (this nesting can
+ repeat indefinitely). If the cell only contains one paragraph
+ then the <tag>p</tag>element is not needed.</para>
+
+ <example>
+ <title xml:lang="en">Simple Use of <tag>table</tag></title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>This is a simple 2x2 table.<tag class="endtag">p</tag>
+
+<tag class="starttag">table</tag>
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td</tag>Top left cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Top right cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td</tag>Bottom left cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Bottom right cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+<tag class="endtag">table</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">A cell can span multiple rows and columns by adding the
+ <tag class="attribute">rowspan</tag> or
+ <tag class="attribute">colspan</tag> attributes with
+ values for the number of rows or columns to be spanned.</para>
+
+ <example>
+ <title xml:lang="en">Using
+ <tag class="attribute">rowspan</tag></title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>One tall thin cell on the left, two short cells next to
+ it on the right.<tag class="endtag">p</tag>
+
+<tag class="starttag">table</tag>
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td rowspan="2"</tag>Long and thin<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td</tag>Top cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Bottom cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+<tag class="endtag">table</tag></programlisting>
+ </example>
+
+ <example>
+ <title xml:lang="en">Using
+ <tag class="attribute">colspan</tag></title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>One long cell on top, two short cells below it.<tag class="endtag">p</tag>
+
+<tag class="starttag">table</tag>
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td colspan="2"</tag>Top cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td</tag>Bottom left cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Bottom right cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+<tag class="endtag">table</tag></programlisting>
+ </example>
+
+ <example>
+ <title xml:lang="en">Using <tag class="attribute">rowspan</tag> and
+ <tag class="attribute">colspan</tag>
+ Together</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>On a 3x3 grid, the top left block is a 2x2 set of
+ cells merged into one. The other cells are normal.<tag class="endtag">p</tag>
+
+<tag class="starttag">table</tag>
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td colspan="2" rowspan="2"</tag>Top left large cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Top right cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+
+ <tag class="starttag">tr</tag>
+ &lt;!-- Because the large cell on the left merges into
+ this row, the first &lt;td&gt; will occur on its
+ right --&gt;
+
+ <tag class="starttag">td</tag>Middle right cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+
+ <tag class="starttag">tr</tag>
+ <tag class="starttag">td</tag>Bottom left cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Bottom middle cell<tag class="endtag">td</tag>
+
+ <tag class="starttag">td</tag>Bottom right cell<tag class="endtag">td</tag>
+ <tag class="endtag">tr</tag>
+<tag class="endtag">table</tag></programlisting>
+ </example>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="xhtml-markup-inline-elements">
+ <title xml:lang="en">In-line Elements</title>
+
+ <sect2 xml:id="xhtml-markup-inline-elements-emphasizing-information">
+ <title xml:lang="en">Emphasizing Information</title>
+
+ <para xml:lang="en">Two levels of emphasis are available in
+ <acronym>XHTML</acronym>, <tag>em</tag> and
+ <tag>strong</tag>. <tag>em</tag> is for a
+ normal level of emphasis and <tag>strong</tag>
+ indicates stronger emphasis.</para>
+
+ <para xml:lang="en"><tag>em</tag> is typically rendered in italic
+ and <tag>strong</tag> is rendered in bold. This is
+ not always the case, and should not be relied upon. According
+ to best practices, web pages only hold structural and
+ semantical information, and stylesheets are later applied to
+ them. Think of semantics, not formatting, when using these
+ tags.</para>
+
+ <example>
+ <title xml:lang="en"><tag>em</tag> and
+ <tag>strong</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag><tag class="starttag">em</tag>This<tag class="endtag">em</tag> has been emphasized, while
+ <tag class="starttag">strong</tag>this<tag class="endtag">strong</tag> has been strongly emphasized.<tag class="endtag">p</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-inline-elements-fixed-pitch-text">
+ <title xml:lang="en">Indicating Fixed-Pitch Text</title>
+
+ <para xml:lang="en">Content that should be rendered in a fixed pitch
+ (typewriter) typeface is tagged with <tag>tt</tag>
+ (for <quote>teletype</quote>).</para>
+
+ <example>
+ <title xml:lang="en"><tag>tt</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>Many system settings are stored in
+ <tag class="starttag">tt</tag>/etc<tag class="endtag">tt</tag>.<tag class="endtag">p</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="xhtml-markup-inline-elements-links">
+ <title xml:lang="en">Links</title>
+
+ <note>
+ <para xml:lang="en">Links are also inline elements.</para>
+ </note>
+
+ <sect3 xml:id="xhtml-markup-inline-elements-linking">
+ <title xml:lang="en">Linking to Other Documents on the Web</title>
+
+ <para xml:lang="en">A link points to the <acronym>URL</acronym> of a
+ document on the web. The link is indicated with
+ <tag>a</tag>, and the
+ <tag class="attribute">href</tag> attribute contains
+ the <acronym>URL</acronym> of the target document. The
+ content of the element becomes the link, indicated to the
+ user by showing it in a different color or with an
+ underline.</para>
+
+ <example>
+ <title xml:lang="en">Using
+ <tag class="starttag">a href="..."</tag></title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>More information is available at the
+ <tag class="starttag">a href="http://www.&amp;os;.org/"</tag>&amp;os; web site<tag class="endtag">a</tag>.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">This link always takes the user to the top of the linked
+ document.</para>
+ </sect3>
+
+ <sect3 xml:id="xhtml-markup-inline-elements-specific-parts">
+ <title xml:lang="en">Linking to Specific Parts of Documents</title>
+
+ <para xml:lang="en">To link to a specific point within a document, that
+ document must include an <emphasis>anchor</emphasis> at the
+ desired point. Anchors are included by setting the
+ <tag class="attribute">id</tag> attribute of an
+ element to a name. This example creates an anchor by
+ setting the <tag class="attribute">id</tag>
+ attribute of a <tag class="element">p</tag>
+ element.</para>
+
+ <example>
+ <title xml:lang="en">Creating an Anchor</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p id="samplepara"</tag>This paragraph can be referenced
+ in other links with the name <tag class="starttag">tt</tag>samplepara<tag class="endtag">tt</tag>.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">Links to anchors are similar to plain links, but include
+ a <literal>#</literal> symbol and the anchor's
+ <acronym>ID</acronym> at the end of the
+ <acronym>URL</acronym>.</para>
+
+ <example>
+ <title xml:lang="en">Linking to a Named Part of a Different
+ Document</title>
+
+ <para xml:lang="en">The <literal>samplepara</literal> example is part of a
+ document called <filename>foo.html</filename>. A link to
+ that specific paragraph in the document is constructed in
+ this example.</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>More information can be found in the
+ <tag class="starttag">a href="foo.html#samplepara"</tag>sample paragraph<tag class="endtag">a</tag> of
+ <tag class="starttag">tt</tag>foo.html<tag class="endtag">tt</tag>.<tag class="endtag">p</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">To link to a named anchor within the same document, omit
+ the document's <acronym>URL</acronym>, and just use the
+ <literal>#</literal> symbol followed by the name of the
+ anchor.</para>
+
+ <example>
+ <title xml:lang="en">Linking to a Named Part of the Same Document</title>
+
+ <para xml:lang="en">The <literal>samplepara</literal> example
+ resides in this document. To link to it:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">p</tag>More information can be found in the
+ <tag class="starttag">a href="#samplepara"</tag>sample paragraph<tag class="endtag">a</tag> of this
+ document.<tag class="endtag">p</tag></programlisting>
+ </example>
+ </sect3>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+
+<chapter version="5.0" xml:id="docbook-markup">
+
+ <title xml:lang="en">DocBook Markup</title>
+
+ <sect1 xml:id="docbook-markup-introduction">
+ <title xml:lang="en">Introduction</title>
+
+ <para xml:lang="en">This chapter is an introduction to DocBook as it is used for
+ FreeBSD documentation. DocBook is a large and complex markup
+ system, but the subset described here covers the parts that are
+ most widely used for FreeBSD documentation. While a moderate
+ subset is covered, it is impossible to anticipate every
+ situation. Please post questions that this document does
+ not answer to the <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD documentation project mailing list</link>.</para>
+
+ <para xml:lang="en">DocBook was originally developed by HaL Computer Systems and
+ O'Reilly &amp; Associates to be a Document Type Definition
+ (<acronym>DTD</acronym>) for writing technical documentation
+ <footnote><para xml:lang="en">A short history can be found under <link xlink:href="http://www.oasis-open.org/docbook/intro.shtml#d0e41">http://www.oasis-open.org/docbook/intro.shtml#d0e41</link>.</para></footnote>.
+ Since 1998 it is maintained by the <link xlink:href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=docbook">
+ DocBook Technical Committee</link>. As such, and unlike
+ LinuxDoc and <acronym>XHTML</acronym>, DocBook is very heavily
+ oriented towards markup that describes <emphasis>what</emphasis>
+ something is, rather than describing <emphasis>how</emphasis> it
+ should be presented.</para>
+
+ <para xml:lang="en">The DocBook <acronym>DTD</acronym> is available from the
+ Ports Collection in the
+ <package>textproc/docbook-xml</package>
+ port. It is automatically installed as part of the
+ <package>textproc/docproj</package>
+ port.</para>
+
+ <note>
+ <title xml:lang="en">Formal Versus Informal</title>
+
+ <para xml:lang="en">Some elements may exist in two forms,
+ <emphasis>formal</emphasis> and <emphasis>informal</emphasis>.
+ Typically, the formal version of the element will consist of a
+ title followed by the informal version of the element. The
+ informal version will not have a title.</para>
+ </note>
+
+ <note>
+ <title xml:lang="en">Inline Versus Block</title>
+
+ <para xml:lang="en">In the remainder of this document, when describing
+ elements, <emphasis>inline</emphasis> means that the element
+ can occur within a block element, and does not cause a line
+ break. A <emphasis>block</emphasis> element, by comparison,
+ will cause a line break (and other processing) when it is
+ encountered.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-freebsd-extensions">
+ <title xml:lang="en">FreeBSD Extensions</title>
+
+ <para xml:lang="en">The FreeBSD Documentation Project has extended the DocBook
+ <acronym>DTD</acronym> with additional elements and entities.
+ These additions serve to make some of the markup easier or more
+ precise.</para>
+
+ <para xml:lang="en">Throughout the rest of this document, the term
+ <quote>DocBook</quote> is used to mean the FreeBSD-extended
+ DocBook <acronym>DTD</acronym>.</para>
+
+ <note>
+ <para xml:lang="en">Most of these extensions are not unique to FreeBSD, it was
+ just felt that they were useful enhancements for this
+ particular project. Should anyone from any of the other *nix
+ camps (NetBSD, OpenBSD, Linux, …) be interested in
+ collaborating on a standard DocBook extension set, please
+ contact Documentation Engineering Team <email>doceng@FreeBSD.org</email>.</para>
+ </note>
+
+ <sect2 xml:id="docbook-markup-freebsd-extensions-elements">
+ <title xml:lang="en">FreeBSD Elements</title>
+
+ <para xml:lang="en">The additional FreeBSD elements are not (currently) in the
+ Ports Collection. They are stored in the FreeBSD Subversion
+ tree, as <link xlink:href="http://svnweb.FreeBSD.org/doc/head/share/xml/freebsd.dtd">head/share/xml/freebsd.dtd</link>.</para>
+
+ <para xml:lang="en">FreeBSD-specific elements used in the examples below are
+ clearly marked.</para>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-freebsd-extensions-entities">
+ <title xml:lang="en">FreeBSD Entities</title>
+
+ <para xml:lang="en">This table shows some of the most useful entities
+ available in the <acronym>FDP</acronym>. For a complete list,
+ see the <filename>*.ent</filename> files in
+ <filename>doc/share/xml</filename>.</para>
+
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="3">
+ <colspec colname="entity"/>
+ <colspec colname="expandsto"/>
+ <colspec colname="notes"/>
+ <thead>
+ <row>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry namest="entity" nameend="notes" xml:lang="en"><emphasis>FreeBSD
+ Name Entities</emphasis></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;os;</literal></entry>
+ <entry xml:lang="en"><literal>FreeBSD</literal></entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;os.stable;</literal></entry>
+ <entry xml:lang="en"><literal>FreeBSD-STABLE</literal></entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;os.current;</literal></entry>
+ <entry xml:lang="en"><literal>FreeBSD-CURRENT</literal></entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+
+ <row>
+ <entry namest="entity" nameend="notes" xml:lang="en">Manual Page
+ Entities</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;man.ls.1;</literal></entry>
+ <entry xml:lang="en"><citerefentry><refentrytitle>ls</refentrytitle><manvolnum>1</manvolnum></citerefentry></entry>
+ <entry xml:lang="en">Usage: <literal>&amp;man.ls.1; is the manual page
+ for
+ &lt;command&gt;ls&lt;/command&gt;.</literal></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;man.cp.1;</literal></entry>
+ <entry xml:lang="en"><citerefentry><refentrytitle>cp</refentrytitle><manvolnum>1</manvolnum></citerefentry></entry>
+ <entry xml:lang="en">Usage: <literal>The manual page for
+ &lt;command&gt;cp&lt;/command&gt; is
+ &amp;man.cp.1;.</literal></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;man.<replaceable>command</replaceable>.<replaceable>sectionnumber</replaceable>;</literal></entry>
+ <entry xml:lang="en"><emphasis>link to
+ <replaceable>command</replaceable> manual page in
+ section
+ <replaceable>sectionnumber</replaceable></emphasis></entry>
+ <entry xml:lang="en">Entities are defined for all the
+ <link xlink:href="@@URL_RELPREFIX@@/cgi/man.cgi">FreeBSD manual
+ pages</link>.</entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+
+ <row>
+ <entry namest="entity" nameend="notes" xml:lang="en">FreeBSD Mailing List
+ Entities</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;a.doc;</literal></entry>
+ <entry xml:lang="en"><literal><link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD documentation project mailing list</link></literal></entry>
+ <entry xml:lang="en">Usage: <literal>A link to the
+ &amp;a.doc;.</literal></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;a.questions;</literal></entry>
+ <entry xml:lang="en"><literal><link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions">FreeBSD general questions mailing list</link></literal></entry>
+ <entry xml:lang="en">Usage: <literal>A link to the
+ &amp;a.questions;.</literal></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;a.<replaceable>listname</replaceable>;</literal></entry>
+ <entry xml:lang="en"><emphasis>link to
+ <replaceable>listname</replaceable></emphasis></entry>
+ <entry xml:lang="en">Entities are defined for all the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/eresources.html#eresources-mail">FreeBSD
+ mailing lists</link>.</entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+
+ <row>
+ <entry namest="entity" nameend="notes" xml:lang="en">FreeBSD Document
+ Link Entities</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;url.books.handbook;</literal></entry>
+ <entry xml:lang="en"><literal>@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook</literal></entry>
+ <entry xml:lang="en">Usage: <literal>A link to the &lt;link
+ xlink:href="&amp;url.books.handbook;/advanced-networking.html"&gt;Advanced
+ Networking&lt;/link&gt; chapter of the
+ Handbook.</literal></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;url.books.<replaceable>bookname</replaceable>;</literal></entry>
+ <entry xml:lang="en"><emphasis>relative path to
+ <replaceable>bookname</replaceable></emphasis></entry>
+ <entry xml:lang="en">Entities are defined for all the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/">FreeBSD
+ books</link>.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;url.articles.committers-guide;</literal></entry>
+ <entry xml:lang="en"><literal>@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/articles/committers-guide</literal></entry>
+ <entry xml:lang="en">Usage: <literal>A link to the &lt;link
+ xlink:href="&amp;url.articles.committers-guide;"&gt;Committer's
+ Guide&lt;/link&gt;
+ article.</literal></entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;url.articles.<replaceable>articlename</replaceable>;</literal></entry>
+ <entry xml:lang="en"><emphasis>relative path to
+ <replaceable>articlename</replaceable></emphasis></entry>
+ <entry xml:lang="en">Entities are defined for all the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/articles/">FreeBSD
+ articles</link>.</entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+
+ <row>
+ <entry namest="entity" nameend="notes" xml:lang="en">Other Operating
+ System Name Entities</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;linux;</literal></entry>
+ <entry xml:lang="en"><trademark class="registered">Linux</trademark></entry>
+ <entry xml:lang="en">The <trademark class="registered">Linux</trademark> operating system.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;unix;</literal></entry>
+ <entry xml:lang="en"><trademark class="registered">UNIX</trademark></entry>
+ <entry xml:lang="en">The <trademark class="registered">UNIX</trademark> operating system.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;windows;</literal></entry>
+ <entry xml:lang="en"><trademark class="registered">Windows</trademark></entry>
+ <entry xml:lang="en">The <trademark class="registered">Windows</trademark> operating system.</entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+
+ <row>
+ <entry namest="entity" nameend="notes" xml:lang="en">Miscellaneous
+ Entities</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;prompt.root;</literal></entry>
+ <entry><prompt>#</prompt></entry>
+ <entry xml:lang="en">The <systemitem class="username">root</systemitem> user
+ prompt.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;prompt.user;</literal></entry>
+ <entry><prompt>%</prompt></entry>
+ <entry xml:lang="en">A prompt for an unprivileged user.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;postscript;</literal></entry>
+ <entry xml:lang="en"><trademark class="registered">PostScript</trademark></entry>
+ <entry xml:lang="en">The
+ <trademark class="registered">PostScript</trademark> programming language.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;tex;</literal></entry>
+ <entry xml:lang="en"><application>TeX</application></entry>
+ <entry xml:lang="en">The
+ <application>TeX</application> typesetting language.</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><literal>&amp;xorg;</literal></entry>
+ <entry xml:lang="en">Xorg</entry>
+ <entry xml:lang="en">The Xorg open source X
+ Window System.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-fpi">
+ <title xml:lang="en">Formal Public Identifier (FPI)</title>
+
+ <para xml:lang="en">In compliance with the DocBook guidelines for writing
+ <acronym>FPI</acronym>s for DocBook customizations, the
+ <acronym>FPI</acronym> for the FreeBSD extended DocBook
+ <acronym>DTD</acronym> is:</para>
+
+ <programlisting xml:lang="en">PUBLIC "-//FreeBSD//DTD DocBook V4.2-Based Extension//EN"</programlisting>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-document-structure">
+ <title xml:lang="en">Document Structure</title>
+
+ <para xml:lang="en">DocBook allows structuring documentation in several ways.
+ The FreeBSD Documentation Project uses two primary types of DocBook
+ document: the book and the article.</para>
+
+ <para xml:lang="en">Books are organized into <tag>chapter</tag>s.
+ This is a mandatory requirement. There may be
+ <tag>part</tag>s between the book and the chapter to
+ provide another layer of organization. For example, the
+ Handbook is arranged in this way.</para>
+
+ <para xml:lang="en">A chapter may (or may not) contain one or more sections.
+ These are indicated with the <tag>sect1</tag> element.
+ If a section contains another section then use the
+ <tag>sect2</tag> element, and so on, up to
+ <tag>sect5</tag>.</para>
+
+ <para xml:lang="en">Chapters and sections contain the remainder of the
+ content.</para>
+
+ <para xml:lang="en">An article is simpler than a book, and does not use
+ chapters. Instead, the content of an article is organized into
+ one or more sections, using the same <tag>sect1</tag>
+ (and <tag>sect2</tag> and so on) elements that are used
+ in books.</para>
+
+ <para xml:lang="en">The nature of the document being written should be used to
+ determine whether it is best marked up as a book or an article.
+ Articles are well suited to information that does not need to be
+ broken down into several chapters, and that is, relatively
+ speaking, quite short, at up to 20-25 pages of content. Books
+ are best suited to information that can be broken up into
+ several chapters, possibly with appendices and similar content
+ as well.</para>
+
+ <para xml:lang="en">The <link xlink:href="@@URL_RELPREFIX@@/docs.html">FreeBSD
+ tutorials</link> are all marked up as articles, while this
+ document, the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/faq/index.html">FAQ</link>,
+ and the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/index.html">Handbook</link> are all marked up as books, for
+ example.</para>
+
+ <sect2 xml:id="docbook-markup-starting-a-book">
+ <title xml:lang="en">Starting a Book</title>
+
+ <para xml:lang="en">The content of a book is contained within the
+ <tag>book</tag> element. As well as containing
+ structural markup, this element can contain elements that
+ include additional information about the book. This is either
+ meta-information, used for reference purposes, or additional
+ content used to produce a title page.</para>
+
+ <para xml:lang="en">This additional information is contained within
+ <tag>info</tag>.</para>
+
+ <example>
+ <title xml:lang="en">Boilerplate <tag>book</tag> with
+ <tag>info</tag></title>
+
+ <!-- Cannot put this in a marked section because of the
+ replaceable elements -->
+
+ <programlisting xml:lang="en"><tag class="starttag">book</tag>
+ <tag class="starttag">info</tag>
+ <tag class="starttag">title</tag><replaceable>Your Title Here</replaceable><tag class="endtag">title</tag>
+
+ <tag class="starttag">author</tag>
+ <tag class="starttag">personname</tag>
+ <tag class="starttag">firstname</tag><replaceable>Your first name</replaceable><tag class="endtag">firstname</tag>
+ <tag class="starttag">surname</tag><replaceable>Your surname</replaceable><tag class="endtag">surname</tag>
+ <tag class="endtag">personname</tag>
+
+ <tag class="starttag">affiliation</tag>
+ <tag class="starttag">address</tag>
+ <tag class="starttag">email</tag><replaceable>Your email address</replaceable><tag class="endtag">email</tag>
+ <tag class="endtag">address</tag>
+ <tag class="endtag">affiliation</tag>
+ <tag class="endtag">author</tag>
+
+ <tag class="starttag">copyright</tag>
+ <tag class="starttag">year</tag><replaceable>1998</replaceable><tag class="endtag">year</tag>
+ <tag class="starttag">holder role="mailto:<replaceable>your email address</replaceable>"</tag><replaceable>Your name</replaceable><tag class="endtag">holder</tag>
+ <tag class="endtag">copyright</tag>
+
+ <tag class="starttag">releaseinfo</tag>$FreeBSD$<tag class="endtag">releaseinfo</tag>
+
+ <tag class="starttag">abstract</tag>
+ <tag class="starttag">para</tag><replaceable>Include an abstract of the book's contents here.</replaceable><tag class="endtag">para</tag>
+ <tag class="endtag">abstract</tag>
+ <tag class="endtag">info</tag>
+
+ …
+
+<tag class="endtag">book</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-starting-an-article">
+ <title xml:lang="en">Starting an Article</title>
+
+ <para xml:lang="en">The content of the article is contained within the
+ <tag>article</tag> element. As well as containing
+ structural markup, this element can contain elements that
+ include additional information about the article. This is
+ either meta-information, used for reference purposes, or
+ additional content used to produce a title page.</para>
+
+ <para xml:lang="en">This additional information is contained within
+ <tag>info</tag>.</para>
+
+ <example>
+ <title xml:lang="en">Boilerplate <tag>article</tag> with
+ <tag>info</tag></title>
+
+ <!-- Cannot put this in a marked section because of the
+ replaceable elements -->
+
+ <programlisting xml:lang="en"><tag class="starttag">article</tag>
+ <tag class="starttag">info</tag>
+ <tag class="starttag">title</tag><replaceable>Your title here</replaceable><tag class="endtag">title</tag>
+
+ <tag class="starttag">author</tag>
+ <tag class="starttag">personname</tag>
+ <tag class="starttag">firstname</tag><replaceable>Your first name</replaceable><tag class="endtag">firstname</tag>
+ <tag class="starttag">surname</tag><replaceable>Your surname</replaceable><tag class="endtag">surname</tag>
+ <tag class="endtag">personname</tag>
+
+ <tag class="starttag">affiliation</tag>
+ <tag class="starttag">address</tag>
+ <tag class="starttag">email</tag><replaceable>Your email address</replaceable><tag class="endtag">email</tag><tag class="endtag">address</tag>
+ <tag class="endtag">address</tag>
+ <tag class="endtag">affiliation</tag>
+ <tag class="endtag">author</tag>
+
+ <tag class="starttag">copyright</tag>
+ <tag class="starttag">year</tag><replaceable>1998</replaceable><tag class="endtag">year</tag>
+ <tag class="starttag">holder role="mailto:<replaceable>your email address</replaceable>"</tag><replaceable>Your name</replaceable><tag class="endtag">holder</tag>
+ <tag class="endtag">copyright</tag>
+
+ <tag class="starttag">releaseinfo</tag>$FreeBSD$<tag class="endtag">releaseinfo</tag>
+
+ <tag class="starttag">abstract</tag>
+ <tag class="starttag">para</tag><replaceable>Include an abstract of the article's contents here.</replaceable><tag class="endtag">para</tag>
+ <tag class="endtag">abstract</tag>
+ <tag class="endtag">info</tag>
+
+ …
+
+<tag class="endtag">article</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-indicating-chapters">
+ <title xml:lang="en">Indicating Chapters</title>
+
+ <para xml:lang="en">Use <tag>chapter</tag> to mark up your chapters.
+ Each chapter has a mandatory <tag>title</tag>.
+ Articles do not contain chapters, they are reserved for
+ books.</para>
+
+ <example>
+ <title xml:lang="en">A Simple Chapter</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>The Chapter's Title<tag class="endtag">title</tag>
+
+ ...
+<tag class="endtag">chapter</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">A chapter cannot be empty; it must contain elements in
+ addition to <tag>title</tag>. If you need to
+ include an empty chapter then just use an empty
+ paragraph.</para>
+
+ <example>
+ <title xml:lang="en">Empty Chapters</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>This is An Empty Chapter<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag><tag class="endtag">para</tag>
+<tag class="endtag">chapter</tag></programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-sections-below-chapters">
+ <title xml:lang="en">Sections Below Chapters</title>
+
+ <para xml:lang="en">In books, chapters may (but do not need to) be broken up
+ into sections, subsections, and so on. In articles, sections
+ are the main structural element, and each article must contain
+ at least one section. Use the
+ <tag>sect<replaceable>n</replaceable></tag> element.
+ The <replaceable>n</replaceable> indicates the section number,
+ which identifies the section level.</para>
+
+ <para xml:lang="en">The first
+ <tag>sect<replaceable>n</replaceable></tag> is
+ <tag>sect1</tag>. You can have one or more of these
+ in a chapter. They can contain one or more
+ <tag>sect2</tag> elements, and so on, down to
+ <tag>sect5</tag>.</para>
+
+ <example>
+ <title xml:lang="en">Sections in Chapters</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>A Sample Chapter<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>Some text in the chapter.<tag class="endtag">para</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>First Section<tag class="endtag">title</tag>
+
+ …
+ <tag class="endtag">sect1</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>Second Section<tag class="endtag">title</tag>
+
+ <tag class="starttag">sect2</tag>
+ <tag class="starttag">title</tag>First Sub-Section<tag class="endtag">title</tag>
+
+ <tag class="starttag">sect3</tag>
+ <tag class="starttag">title</tag>First Sub-Sub-Section<tag class="endtag">title</tag>
+
+ …
+ <tag class="endtag">sect3</tag>
+ <tag class="endtag">sect2</tag>
+
+ <tag class="starttag">sect2</tag>
+ <tag class="starttag">title</tag>Second Sub-Section (1.2.2)<tag class="endtag">title</tag>
+
+ …
+ <tag class="endtag">sect2</tag>
+ <tag class="endtag">sect1</tag>
+<tag class="endtag">chapter</tag></programlisting>
+ </example>
+
+ <note>
+ <para xml:lang="en">Section numbers are automatically generated and
+ prepended to titles when the document is rendered to an
+ output format. The generated section numbers and titles
+ from the example above will be:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en">1.1. First Section</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">1.2. Second Section</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">1.2.1. First Sub-Section</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">1.2.1.1. First Sub-Sub-Section</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">1.2.2. Second Sub-Section</para>
+ </listitem>
+ </itemizedlist>
+ </note>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-subdividing-part">
+ <title xml:lang="en">Subdividing Using <tag>part</tag>
+ Elements</title>
+
+ <para xml:lang="en"><tag>part</tag>s introduce another level of
+ organization between <tag>book</tag> and
+ <tag>chapter</tag> with one or more
+ <tag>part</tag>s. This cannot be done in an
+ <tag>article</tag>.</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">part</tag>
+ <tag class="starttag">title</tag>Introduction<tag class="endtag">title</tag>
+
+ <tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>Overview<tag class="endtag">title</tag>
+
+ ...
+ <tag class="endtag">chapter</tag>
+
+ <tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>What is FreeBSD?<tag class="endtag">title</tag>
+
+ ...
+ <tag class="endtag">chapter</tag>
+
+ <tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>History<tag class="endtag">title</tag>
+
+ ...
+ <tag class="endtag">chapter</tag>
+<tag class="endtag">part</tag></programlisting>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-block-elements">
+ <title xml:lang="en">Block Elements</title>
+
+ <sect2 xml:id="docbook-markup-paragraphs">
+ <title xml:lang="en">Paragraphs</title>
+
+ <para xml:lang="en">DocBook supports three types of paragraphs:
+ <tag>formalpara</tag>, <tag>para</tag>, and
+ <tag>simpara</tag>.</para>
+
+ <para xml:lang="en">Almost all paragraphs in FreeBSD documentation use
+ <tag>para</tag>. <tag>formalpara</tag>
+ includes a <tag>title</tag> element, and
+ <tag>simpara</tag> disallows some elements from
+ within <tag>para</tag>. Stick with
+ <tag>para</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>para</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>This is a paragraph. It can contain just about any
+ other element.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">This is a paragraph. It can contain just about any
+ other element.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-block-quotations">
+ <title xml:lang="en">Block Quotations</title>
+
+ <para xml:lang="en">A block quotation is an extended quotation from another
+ document that should not appear within the current paragraph.
+ These are rarely needed.</para>
+
+ <para xml:lang="en">Blockquotes can optionally contain a title and an
+ attribution (or they can be left untitled and
+ unattributed).</para>
+
+ <example>
+ <title xml:lang="en"><tag>blockquote</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>A small excerpt from the US Constitution:<tag class="endtag">para</tag>
+
+<tag class="starttag">blockquote</tag>
+ <tag class="starttag">title</tag>Preamble to the Constitution of the United States<tag class="endtag">title</tag>
+
+ <tag class="starttag">attribution</tag>Copied from a web site somewhere<tag class="endtag">attribution</tag>
+
+ <tag class="starttag">para</tag>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.<tag class="endtag">para</tag>
+<tag class="endtag">blockquote</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">A small excerpt from the US Constitution:</para>
+
+ <blockquote>
+ <title xml:lang="en">Preamble to the Constitution of the United
+ States</title>
+
+ <attribution xml:lang="en">Copied from a web site
+ somewhere</attribution>
+
+ <para xml:lang="en">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>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-tips-notes">
+ <title xml:lang="en">Tips, Notes, Warnings, Cautions, and Important
+ Information</title>
+
+ <para xml:lang="en">Extra information may need to be separated from
+ the main body of the text. Typically this is
+ <quote>meta</quote> information of which the user should be
+ aware.</para>
+
+ <para xml:lang="en">Several types of admonitions are available:
+ <tag>tip</tag>, <tag>note</tag>,
+ <tag>warning</tag>, <tag>caution</tag>, and
+ <tag>important</tag>.</para>
+
+ <para xml:lang="en">Which admonition to choose depends on the situation.
+ The DocBook
+ documentation suggests:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en">Note is for information that should be heeded by
+ all readers.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Important is a variation on Note.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Caution is for information regarding possible data
+ loss or software damage.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">Warning is for information regarding possible
+ hardware damage or injury to life or limb.</para>
+ </listitem>
+ </itemizedlist>
+
+ <example>
+ <title xml:lang="en"><tag>tip</tag> and <tag>important</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">tip</tag>
+ <tag class="starttag">para</tag>&amp;os; may reduce stress.<tag class="endtag">para</tag>
+<tag class="endtag">tip</tag>
+
+<tag class="starttag">important</tag>
+ <tag class="starttag">para</tag>Please use admonitions sparingly. Too many admonitions
+ are visually jarring and can have the opposite of the
+ intended effect.<tag class="endtag">para</tag>
+<tag class="endtag">important</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">Appearance:</para>
+ <!-- Need to do this outside of the example -->
+ <tip>
+ <para xml:lang="en">FreeBSD may reduce stress.</para>
+ </tip>
+
+ <important>
+ <para xml:lang="en">Please use admonitions sparingly. Too many admonitions
+ are visually jarring and can have the opposite of the
+ intended effect.</para>
+ </important>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-example">
+ <title>舉例</title>
+
+ <para xml:lang="en">Examples can be shown with <tag>example</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>example</tag> Source</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">example</tag>
+ <tag class="starttag">para</tag>Empty files can be created easily:<tag class="endtag">para</tag>
+
+ <tag class="starttag">screen</tag>&amp;prompt.user; <tag class="starttag">userinput</tag>touch file1 file2 file3<tag class="endtag">userinput</tag><tag class="endtag">screen</tag>
+<tag class="endtag">example</tag></programlisting>
+ </example>
+
+ <!-- Need to do this outside of the example -->
+ <para xml:lang="en">Appearance:</para>
+
+ <example>
+ <title xml:lang="en">Rendered <tag>example</tag></title>
+
+ <para xml:lang="en">Empty files can be created easily:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>touch file1 file2 file3</userinput></screen>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-lists-and-procedures">
+ <title xml:lang="en">Lists and Procedures</title>
+
+ <para xml:lang="en">Information often needs to be presented as lists, or as a
+ number of steps that must be carried out in order to
+ accomplish a particular goal.</para>
+
+ <para xml:lang="en">To do this, use <tag>itemizedlist</tag>,
+ <tag>orderedlist</tag>, <tag>variablelist</tag>, or
+ <tag>procedure</tag>. There are other types of list
+ elements in DocBook, but we will not cover them here.</para>
+
+ <para xml:lang="en"><tag>itemizedlist</tag> and
+ <tag>orderedlist</tag> are similar to their
+ counterparts in <acronym>HTML</acronym>, <tag>ul</tag>
+ and <tag>ol</tag>. Each one consists of one or more
+ <tag>listitem</tag> elements, and each
+ <tag>listitem</tag> contains one or more block
+ elements. The <tag>listitem</tag> elements are
+ analogous to <acronym>HTML</acronym>'s <tag>li</tag>
+ tags. However, unlike HTML, they are required.</para>
+
+ <example>
+ <title xml:lang="en"><tag>itemizedlist</tag> and
+ <tag>orderedlist</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">itemizedlist</tag>
+ <tag class="starttag">listitem</tag>
+ <tag class="starttag">para</tag>This is the first itemized item.<tag class="endtag">para</tag>
+ <tag class="endtag">listitem</tag>
+
+ <tag class="starttag">listitem</tag>
+ <tag class="starttag">para</tag>This is the second itemized item.<tag class="endtag">para</tag>
+ <tag class="endtag">listitem</tag>
+<tag class="endtag">itemizedlist</tag>
+
+<tag class="starttag">orderedlist</tag>
+ <tag class="starttag">listitem</tag>
+ <tag class="starttag">para</tag>This is the first ordered item.<tag class="endtag">para</tag>
+ <tag class="endtag">listitem</tag>
+
+ <tag class="starttag">listitem</tag>
+ <tag class="starttag">para</tag>This is the second ordered item.<tag class="endtag">para</tag>
+ <tag class="endtag">listitem</tag>
+<tag class="endtag">orderedlist</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en">This is the first itemized item.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">This is the second itemized item.</para>
+ </listitem>
+ </itemizedlist>
+
+ <orderedlist>
+ <listitem>
+ <para xml:lang="en">This is the first ordered item.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">This is the second ordered item.</para>
+ </listitem>
+ </orderedlist>
+ </example>
+
+ <para xml:id="docbook-markup-varlist" xml:lang="en">An alternate and often
+ useful way of presenting information is the
+ <tag>variablelist</tag>. These are lists where each entry has
+ a term and a description. They are well suited for many types
+ of descriptions, and present information in a form that is
+ often easier for the reader than sections and
+ subsections.</para>
+
+ <para xml:lang="en">A <tag>variablelist</tag> has a <tag>title</tag>, and then
+ pairs of <tag>term</tag> and <tag>listitem</tag>
+ entries.</para>
+
+ <example xml:id="docbook-markup-variablelist-example">
+ <title xml:lang="en"><tag>variablelist</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">variablelist</tag>
+ <tag class="starttag">varlistentry</tag>
+ <tag class="starttag">term</tag>Parallel<tag class="endtag">term</tag>
+
+ <tag class="starttag">listitem</tag>
+ <tag class="starttag">para</tag>In parallel communications, groups of bits arrive
+ at the same time over multiple communications
+ channels.<tag class="endtag">para</tag>
+ <tag class="endtag">listitem</tag>
+ <tag class="endtag">varlistentry</tag>
+
+ <tag class="starttag">varlistentry</tag>
+ <tag class="starttag">term</tag>Serial<tag class="endtag">term</tag>
+
+ <tag class="starttag">listitem</tag>
+ <tag class="starttag">para</tag>In serial communications, bits arrive one at a
+ time over a single communications
+ channel.<tag class="endtag">para</tag>
+ <tag class="endtag">listitem</tag>
+ <tag class="endtag">varlistentry</tag>
+<tag class="endtag">variablelist</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en">Parallel</term>
+
+ <listitem>
+ <para xml:lang="en">In parallel communications, groups of bits arrive
+ at the same time over multiple communications
+ channels.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en">Serial</term>
+
+ <listitem>
+ <para xml:lang="en">In serial communications, bits arrive one at a
+ time over a single communications channel.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </example>
+
+ <para xml:lang="en">A <tag>procedure</tag> shows a series of
+ <tag>step</tag>s, which may in turn
+ consist of more <tag>step</tag>s or
+ <tag>substep</tag>s. Each <tag>step</tag>
+ contains block elements and may include an optional title.</para>
+
+ <para xml:lang="en">Sometimes, steps are not sequential, but present a choice:
+ do <emphasis>this</emphasis> or do <emphasis>that</emphasis>,
+ but not both. For these alternative choices, use
+ <tag>stepalternatives</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>procedure</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">procedure</tag>
+ <tag class="starttag">step</tag>
+ <tag class="starttag">para</tag>Do this.<tag class="endtag">para</tag>
+ <tag class="endtag">step</tag>
+
+ <tag class="starttag">step</tag>
+ <tag class="starttag">para</tag>Then do this.<tag class="endtag">para</tag>
+ <tag class="endtag">step</tag>
+
+ <tag class="starttag">step</tag>
+ <tag class="starttag">para</tag>And now do this.<tag class="endtag">para</tag>
+ <tag class="endtag">step</tag>
+
+ <tag class="starttag">step</tag>
+ <tag class="starttag">para</tag>Finally, do one of these.<tag class="endtag">para</tag>
+
+ <tag class="starttag">stepalternatives</tag>
+ <tag class="starttag">step</tag>
+ <tag class="starttag">para</tag>Go left.<tag class="endtag">para</tag>
+ <tag class="endtag">step</tag>
+
+ <tag class="starttag">step</tag>
+ <tag class="starttag">para</tag>Go right.<tag class="endtag">para</tag>
+ <tag class="endtag">step</tag>
+ <tag class="endtag">stepalternatives</tag>
+ <tag class="endtag">step</tag>
+<tag class="endtag">procedure</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <procedure>
+ <step>
+ <para xml:lang="en">Do this.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">Then do this.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">And now do this.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">Finally, do one of these:</para>
+
+ <stepalternatives>
+ <step>
+ <para xml:lang="en">Go left.</para>
+ </step>
+
+ <step>
+ <para xml:lang="en">Go right.</para>
+ </step>
+ </stepalternatives>
+ </step>
+ </procedure>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-showing-file-samples">
+ <title xml:lang="en">Showing File Samples</title>
+
+ <para xml:lang="en">Fragments of a file (or perhaps a complete file) are shown
+ by wrapping them in the <tag>programlisting</tag>
+ element.</para>
+
+ <para xml:lang="en">White space and line breaks within
+ <tag>programlisting</tag> <emphasis>are</emphasis>
+ significant. In particular, this means that the opening tag
+ should appear on the same line as the first line of the
+ output, and the closing tag should appear on the same line
+ as the last line of the output, otherwise spurious blank
+ lines may be included.</para>
+
+ <example>
+ <title xml:lang="en"><tag>programlisting</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>When finished, the program will look like
+ this:<tag class="endtag">para</tag>
+
+<tag class="starttag">programlisting</tag>#include &amp;lt;stdio.h&amp;gt;
+
+int
+main(void)
+{
+ printf("hello, world\n");
+}<tag class="endtag">programlisting</tag></programlisting>
+
+ <para xml:lang="en">Notice how the angle brackets in the
+ <literal>#include</literal> line need to be referenced by
+ their entities instead of being included literally.</para>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">When finished, the program will look like this:</para>
+
+ <programlisting xml:lang="en">#include &lt;stdio.h&gt;
+
+int
+main(void)
+{
+ printf("hello, world\n");
+}</programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-callouts">
+ <title xml:lang="en">Callouts</title>
+
+ <para xml:lang="en">A callout is a visual marker for referring to a
+ piece of text or specific position within an
+ example.</para>
+
+ <para xml:lang="en">Callouts are marked with the <tag>co</tag>
+ element. Each element must have a unique
+ <literal>id</literal> assigned to it. After the example,
+ include a <tag>calloutlist</tag> that describes each
+ callout.</para>
+
+ <example>
+ <title xml:lang="en"><tag>co</tag> and
+ <tag>calloutlist</tag> Example</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>When finished, the program will look like
+ this:<tag class="endtag">para</tag>
+
+<tag class="starttag">programlisting</tag>#include &amp;lt;stdio.h&amp;gt; <tag class="emptytag">co xml:id="co-ex-include"</tag>
+
+int <tag class="emptytag">co xml:id="co-ex-return"</tag>
+main(void)
+{
+ printf("hello, world\n"); <tag class="emptytag">co xml:id="co-ex-printf"</tag>
+}<tag class="endtag">programlisting</tag>
+
+<tag class="starttag">calloutlist</tag>
+ <tag class="starttag">callout arearefs="co-ex-include"</tag>
+ <tag class="starttag">para</tag>Includes the standard IO header file.<tag class="endtag">para</tag>
+ <tag class="endtag">callout</tag>
+
+ <tag class="starttag">callout arearefs="co-ex-return"</tag>
+ <tag class="starttag">para</tag>Specifies that <tag class="starttag">function</tag>main()<tag class="endtag">function</tag> returns an
+ int.<tag class="endtag">para</tag>
+ <tag class="endtag">callout</tag>
+
+ <tag class="starttag">callout arearefs="co-ex-printf"</tag>
+ <tag class="starttag">para</tag>The <tag class="starttag">function</tag>printf()<tag class="endtag">function</tag> call that writes
+ <tag class="starttag">literal</tag>hello, world<tag class="endtag">literal</tag> to standard output.<tag class="endtag">para</tag>
+ <tag class="endtag">callout</tag>
+<tag class="endtag">calloutlist</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">When finished, the program will look like this:</para>
+
+ <programlisting xml:lang="en">#include &lt;stdio.h&gt; <co xml:id="co-ex-include"/>
+
+int <co xml:id="co-ex-return"/>
+main(void)
+{
+ printf("hello, world\n"); <co xml:id="co-ex-printf"/>
+}</programlisting>
+
+ <calloutlist>
+ <callout arearefs="co-ex-include">
+ <para xml:lang="en">Includes the standard IO header file.</para>
+ </callout>
+
+ <callout arearefs="co-ex-return">
+ <para xml:lang="en">Specifies that <function>main()</function> returns
+ an int.</para>
+ </callout>
+
+ <callout arearefs="co-ex-printf">
+ <para xml:lang="en">The <function>printf()</function> call that writes
+ <literal>hello, world</literal> to standard
+ output.</para>
+ </callout>
+ </calloutlist>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-tables">
+ <title xml:lang="en">Tables</title>
+
+ <para xml:lang="en">Unlike <acronym>HTML</acronym>, DocBook does not need
+ tables for layout purposes, as the stylesheet handles those
+ issues. Instead, just use tables for marking up tabular
+ data.</para>
+
+ <para xml:lang="en">In general terms (and see the DocBook documentation for
+ more detail) a table (which can be either formal or informal)
+ consists of a <tag>table</tag> element. This contains
+ at least one <tag>tgroup</tag> element, which
+ specifies (as an attribute) the number of columns in this
+ table group. Within the tablegroup there is one
+ <tag>thead</tag> element, which contains elements for
+ the table headings (column headings), and one
+ <tag>tbody</tag> which contains the body of the
+ table.</para>
+
+ <para xml:lang="en">Both <tag>tgroup</tag> and
+ <tag>thead</tag> contain <tag>row</tag>
+ elements, which in turn contain <tag>entry</tag>
+ elements. Each <tag>entry</tag> element specifies
+ one cell in the table.</para>
+
+ <example>
+ <title xml:lang="en"><tag>informaltable</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">informaltable pgwide="1"</tag>
+ <tag class="starttag">tgroup cols="2"</tag>
+ <tag class="starttag">thead</tag>
+ <tag class="starttag">row</tag>
+ <tag class="starttag">entry</tag>This is Column Head 1<tag class="endtag">entry</tag>
+ <tag class="starttag">entry</tag>This is Column Head 2<tag class="endtag">entry</tag>
+ <tag class="endtag">row</tag>
+ <tag class="endtag">thead</tag>
+
+ <tag class="starttag">tbody</tag>
+ <tag class="starttag">row</tag>
+ <tag class="starttag">entry</tag>Row 1, column 1<tag class="endtag">entry</tag>
+ <tag class="starttag">entry</tag>Row 1, column 2<tag class="endtag">entry</tag>
+ <tag class="endtag">row</tag>
+
+ <tag class="starttag">row</tag>
+ <tag class="starttag">entry</tag>Row 2, column 1<tag class="endtag">entry</tag>
+ <tag class="starttag">entry</tag>Row 2, column 2<tag class="endtag">entry</tag>
+ <tag class="endtag">row</tag>
+ <tag class="endtag">tbody</tag>
+ <tag class="endtag">tgroup</tag>
+<tag class="endtag">informaltable</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <informaltable pgwide="1">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry xml:lang="en">This is Column Head 1</entry>
+ <entry xml:lang="en">This is Column Head 2</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry xml:lang="en">Row 1, column 1</entry>
+ <entry xml:lang="en">Row 1, column 2</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en">Row 2, column 1</entry>
+ <entry xml:lang="en">Row 2, column 2</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </example>
+
+ <para xml:lang="en">Always use the <literal>pgwide</literal> attribute with
+ a value of <literal>1</literal> with the
+ <tag>informaltable</tag> element. A bug in Internet
+ Explorer can cause the table to render incorrectly if this
+ is omitted.</para>
+
+ <para xml:lang="en">Table borders can be suppressed by setting the
+ <literal>frame</literal> attribute to <literal>none</literal>
+ in the <tag>informaltable</tag> element. For example,
+ <literal>informaltable frame="none"</literal>.</para>
+
+ <example>
+ <title xml:lang="en">Table with <literal>frame="none"</literal> Example</title>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry xml:lang="en">This is Column Head 1</entry>
+ <entry xml:lang="en">This is Column Head 2</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry xml:lang="en">Row 1, column 1</entry>
+ <entry xml:lang="en">Row 1, column 2</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en">Row 2, column 1</entry>
+ <entry xml:lang="en">Row 2, column 2</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-examples">
+ <title xml:lang="en">Examples for the User to Follow</title>
+
+ <para xml:lang="en">Examples for the user to follow are often necessary.
+ Typically, these will consist of dialogs with the computer;
+ the user types in a command, the user gets a response back,
+ the user types another command, and so on.</para>
+
+ <para xml:lang="en">A number of distinct elements and entities come into
+ play here.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en"><tag>screen</tag></term>
+
+ <listitem>
+ <para xml:lang="en">Everything the user sees in this example will be
+ on the computer screen, so the next element is
+ <tag>screen</tag>.</para>
+
+ <para xml:lang="en">Within <tag>screen</tag>, white space is
+ significant.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><tag>prompt</tag>,
+ <literal>&amp;prompt.root;</literal> and
+ <literal>&amp;prompt.user;</literal></term>
+
+ <listitem>
+ <para xml:lang="en">Some of the things the user will be seeing on the
+ screen are prompts from the computer (either from the
+ operating system, command shell, or application). These
+ should be marked up using
+ <tag>prompt</tag>.</para>
+
+ <para xml:lang="en">As a special case, the two shell prompts for the
+ normal user and the root user have been provided as
+ entities. To indicate the user is at a shell prompt,
+ use one of <literal>&amp;prompt.root;</literal> and
+ <literal>&amp;prompt.user;</literal> as necessary. They
+ do not need to be inside
+ <tag>prompt</tag>.</para>
+
+ <note>
+ <para xml:lang="en"><literal>&amp;prompt.root;</literal> and
+ <literal>&amp;prompt.user;</literal> are FreeBSD
+ extensions to DocBook, and are not part of the
+ original <acronym>DTD</acronym>.</para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><tag>userinput</tag></term>
+
+ <listitem>
+ <para xml:lang="en">When displaying text that the user should type in,
+ wrap it in <tag>userinput</tag> tags. It will
+ be displayed differently than system output text.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <example>
+ <title xml:lang="en"><tag>screen</tag>, <tag>prompt</tag>,
+ and <tag>userinput</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">screen</tag>&amp;prompt.user; <tag class="starttag">userinput</tag>ls -1<tag class="endtag">userinput</tag>
+foo1
+foo2
+foo3
+&amp;prompt.user; <tag class="starttag">userinput</tag>ls -1 | grep foo2<tag class="endtag">userinput</tag>
+foo2
+&amp;prompt.user; <tag class="starttag">userinput</tag>su<tag class="endtag">userinput</tag>
+<tag class="starttag">prompt</tag>Password: <tag class="endtag">prompt</tag>
+&amp;prompt.root; <tag class="starttag">userinput</tag>cat foo2<tag class="endtag">userinput</tag>
+This is the file called 'foo2'<tag class="endtag">screen</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>ls -1</userinput>
+foo1
+foo2
+foo3
+<prompt>%</prompt> <userinput>ls -1 | grep foo2</userinput>
+foo2
+<prompt>%</prompt> <userinput>su</userinput>
+<prompt>Password: </prompt>
+<prompt>#</prompt> <userinput>cat foo2</userinput>
+This is the file called 'foo2'</screen>
+ </example>
+
+ <note>
+ <para xml:lang="en">Even though we are displaying the contents of the file
+ <filename>foo2</filename>, it is <emphasis>not</emphasis>
+ marked up as <tag>programlisting</tag>. Reserve
+ <tag>programlisting</tag> for showing fragments of
+ files outside the context of user actions.</para>
+ </note>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-inline-elements">
+ <title xml:lang="en">In-line Elements</title>
+
+ <sect2 xml:id="docbook-markup-inline-emphasizing">
+ <title xml:lang="en">Emphasizing Information</title>
+
+ <para xml:lang="en">To emphasize a particular word or phrase, use
+ <tag>emphasis</tag>. This may be presented as
+ italic, or bold, or might be spoken differently with a
+ text-to-speech system.</para>
+
+ <para xml:lang="en">There is no way to change the presentation of the
+ emphasis within the document, no equivalent of
+ <acronym>HTML</acronym>'s <tag>b</tag> and
+ <tag>i</tag>. If the information being presented is
+ important, then consider presenting it in
+ <tag>important</tag> rather than
+ <tag>emphasis</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>emphasis</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>&amp;os; is without doubt <tag class="starttag">emphasis</tag>the<tag class="endtag">emphasis</tag>
+ premiere &amp;unix;-like operating system for the Intel
+ architecture.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">FreeBSD is without doubt <emphasis>the</emphasis>
+ premiere <trademark class="registered">UNIX</trademark>-like operating system for the Intel
+ architecture.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-acronyms">
+ <title xml:lang="en">Acronyms</title>
+
+ <para xml:lang="en">Many computer terms are <emphasis>acronyms</emphasis>,
+ words formed from the first letter of each word in a
+ phrase. Acronyms are marked up into
+ <tag>acronym</tag> elements. It is helpful to the
+ reader when an acronym is defined on the first use, as shown
+ in the example below.</para>
+
+ <example>
+ <title xml:lang="en"><tag>acronym</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Request For Comments (<tag class="starttag">acronym</tag>RFC<tag class="endtag">acronym</tag>) 1149
+ defined the use of avian carriers for transmission of
+ Internet Protocol (<tag class="starttag">acronym</tag>IP<tag class="endtag">acronym</tag>) data. The
+ quantity of <tag class="starttag">acronym</tag>IP<tag class="endtag">acronym</tag> data currently
+ transmitted in that manner is unknown.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Request For Comments (<acronym>RFC</acronym>) 1149
+ defined the use of avian carriers for transmission of
+ Internet Protocol (<acronym>IP</acronym>) data. The
+ quantity of <acronym>IP</acronym> data currently
+ transmitted in that manner is unknown.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-quotations">
+ <title xml:lang="en">Quotations</title>
+
+ <para xml:lang="en">To quote text from another document or source, or to
+ denote a phrase that is used figuratively, use
+ <tag>quote</tag>. Most of the markup tags available
+ for normal text are also available from within a
+ <tag>quote</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>quote</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>However, make sure that the search does not go beyond the
+ <tag class="starttag">quote</tag>boundary between local and public administration<tag class="endtag">quote</tag>,
+ as <tag class="starttag">acronym</tag>RFC<tag class="endtag">acronym</tag> 1535 calls it.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">However, make sure that the search does not go beyond
+ the <quote>boundary between local and public
+ administration</quote>, as <acronym>RFC</acronym> 1535
+ calls it.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-keys">
+ <title xml:lang="en">Keys, Mouse Buttons, and Combinations</title>
+
+ <para xml:lang="en">To refer to a specific key on the keyboard, use
+ <tag>keycap</tag>. To refer to a mouse button, use
+ <tag>mousebutton</tag>. And to refer to
+ combinations of key presses or mouse clicks, wrap them all
+ in <tag>keycombo</tag>.</para>
+
+ <para xml:lang="en"><tag>keycombo</tag> has an attribute called
+ <literal>action</literal>, which may be one of
+ <literal>click</literal>, <literal>double-click</literal>,
+ <literal>other</literal>, <literal>press</literal>,
+ <literal>seq</literal>, or <literal>simul</literal>. The
+ last two values denote whether the keys or buttons should be
+ pressed in sequence, or simultaneously.</para>
+
+ <para xml:lang="en">The stylesheets automatically add any connecting
+ symbols, such as <literal>+</literal>, between the key
+ names, when wrapped in <tag>keycombo</tag>.</para>
+
+ <example>
+ <title xml:lang="en">Keys, Mouse Buttons, and Combinations Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>To switch to the second virtual terminal, press
+ <tag class="starttag">keycombo action="simul"</tag><tag class="starttag">keycap</tag>Alt<tag class="endtag">keycap</tag>
+ <tag class="starttag">keycap</tag>F1<tag class="endtag">keycap</tag><tag class="endtag">keycombo</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>To exit <tag class="starttag">command</tag>vi<tag class="endtag">command</tag> without saving changes, type
+ <tag class="starttag">keycombo action="seq"</tag><tag class="starttag">keycap</tag>Esc<tag class="endtag">keycap</tag><tag class="starttag">keycap</tag>:<tag class="endtag">keycap</tag>
+ <tag class="starttag">keycap</tag>q<tag class="endtag">keycap</tag><tag class="starttag">keycap</tag>!<tag class="endtag">keycap</tag><tag class="endtag">keycombo</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>My window manager is configured so that
+ <tag class="starttag">keycombo action="simul"</tag><tag class="starttag">keycap</tag>Alt<tag class="endtag">keycap</tag>
+ <tag class="starttag">mousebutton</tag>right<tag class="endtag">mousebutton</tag>
+ <tag class="endtag">keycombo</tag> mouse button is used to move windows.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">To switch to the second virtual terminal, press
+ <keycombo action="simul"><keycap>Alt</keycap>
+ <keycap>F1</keycap></keycombo>.</para>
+
+ <para xml:lang="en">To exit <command>vi</command> without saving changes,
+ type <keycombo action="seq">
+ <keycap>Esc</keycap>
+ <keycap>:</keycap>
+ <keycap>q</keycap>
+ <keycap>!</keycap></keycombo>.</para>
+
+ <para xml:lang="en">My window manager is configured so that
+ <keycombo action="simul">
+ <keycap>Alt</keycap>
+ <mousebutton>right</mousebutton></keycombo> mouse button
+ is used to move windows.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-applications">
+ <title xml:lang="en">Applications, Commands, Options, and Cites</title>
+
+ <para xml:lang="en">Both applications and commands are frequently referred to
+ when writing documentation. The distinction between them is
+ that an application is the name of a program or suite of
+ programs that fulfill a particular task. A command is the
+ filename of a program that the user can type and run at a
+ command line.</para>
+
+ <para xml:lang="en">It is often necessary to show some of the options that a
+ command might take.</para>
+
+ <para xml:lang="en">Finally, it is often useful to list a command with its
+ manual section number, in the <quote>command(number)</quote>
+ format so common in Unix manuals.</para>
+
+ <para xml:lang="en">Mark up application names with
+ <tag>application</tag>.</para>
+
+ <para xml:lang="en">To list a command with its manual section
+ number (which should be most of the time) the DocBook
+ element is <tag>citerefentry</tag>. This will
+ contain a further two elements,
+ <tag>refentrytitle</tag> and
+ <tag>manvolnum</tag>. The content of
+ <tag>refentrytitle</tag> is the name of the command,
+ and the content of <tag>manvolnum</tag> is the
+ manual page section.</para>
+
+ <para xml:lang="en">This can be cumbersome to write, and so a series of
+ <link linkend="xml-primer-general-entities">general
+ entities</link> have been created to make this easier.
+ Each entity takes the form
+ <literal>&amp;man.<replaceable>manual-page</replaceable>.<replaceable>manual-section</replaceable>;</literal>.</para>
+
+ <para xml:lang="en">The file that contains these entities is in
+ <filename>doc/share/xml/man-refs.ent</filename>, and can be
+ referred to using this <acronym>FPI</acronym>:</para>
+
+ <programlisting xml:lang="en">PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"</programlisting>
+
+ <para xml:lang="en">Therefore, the introduction to FreeBSD documentation will
+ usually include this:</para>
+
+ <programlisting xml:lang="en">&lt;!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
+
+&lt;!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"&gt;
+%man;
+
+…
+
+]&gt;</programlisting>
+
+ <para xml:lang="en">Use <tag>command</tag> to include a command
+ name <quote>in-line</quote> but present it as something the
+ user should type.</para>
+
+ <para xml:lang="en">Use <tag>option</tag> to mark up the options
+ which will be passed to a command.</para>
+
+ <para xml:lang="en">When referring to the same command multiple times in
+ close proximity, it is preferred to use the
+ <literal>&amp;man.<replaceable>command</replaceable>.<replaceable>section</replaceable>;</literal>
+ notation to markup the first reference and use
+ <tag>command</tag> to markup subsequent references.
+ This makes the generated output, especially
+ <acronym>HTML</acronym>, appear visually better.</para>
+
+ <example>
+ <title xml:lang="en">Applications, Commands, and Options Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag><tag class="starttag">application</tag>Sendmail<tag class="endtag">application</tag> is the most
+ widely used Unix mail application.<tag class="starttag">para</tag>
+
+<tag class="starttag">para</tag><tag class="starttag">application</tag>Sendmail<tag class="endtag">application</tag> includes the
+ <tag class="starttag">citerefentry</tag>
+ <tag class="starttag">refentrytitle</tag>sendmail<tag class="endtag">refentrytitle</tag>
+ <tag class="starttag">manvolnum</tag>8<tag class="endtag">manvolnum</tag>
+ <tag class="endtag">citerefentry</tag>, &amp;man.mailq.1;, and &amp;man.newaliases.1;
+ programs.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>One of the command line parameters to <tag class="starttag">citerefentry</tag>
+ <tag class="starttag">refentrytitle</tag>sendmail<tag class="endtag">refentrytitle</tag>
+ <tag class="starttag">manvolnum</tag>8<tag class="endtag">manvolnum</tag>
+ <tag class="endtag">citerefentry</tag>, <tag class="starttag">option</tag>-bp<tag class="endtag">option</tag>, will display the current
+ status of messages in the mail queue. Check this on the command
+ line by running <tag class="starttag">command</tag>sendmail -bp<tag class="endtag">command</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en"><application>Sendmail</application> is the most widely
+ used Unix mail application.</para>
+
+ <para xml:lang="en"><application>Sendmail</application> includes the
+ <citerefentry>
+ <refentrytitle>sendmail</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>, <citerefentry><refentrytitle>mailq</refentrytitle><manvolnum>1</manvolnum></citerefentry>, and <citerefentry><refentrytitle>newaliases</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ programs.</para>
+
+ <para xml:lang="en">One of the command line parameters to
+ <citerefentry>
+ <refentrytitle>sendmail</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>, <option>-bp</option>, will display the
+ current status of messages in the mail queue. Check this
+ on the command line by running
+ <command>sendmail -bp</command>.</para>
+ </example>
+
+ <note>
+ <para xml:lang="en">Notice how the
+ <literal>&amp;man.<replaceable>command</replaceable>.<replaceable>section</replaceable>;</literal>
+ notation is easier to follow.</para>
+ </note>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-files">
+ <title xml:lang="en">Files, Directories, Extensions, Device Names</title>
+
+ <para xml:lang="en">To refer to the name of a file, a directory, a file
+ extension, or a device name, use <tag>filename</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>filename</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>The source for the Handbook in English is found in
+ <tag class="starttag">filename</tag>/usr/doc/en_US.ISO8859-1/books/handbook/<tag class="endtag">filename</tag>.
+ The main file is called <tag class="starttag">filename</tag>book.xml<tag class="endtag">filename</tag>.
+ There is also a <tag class="starttag">filename</tag>Makefile<tag class="endtag">filename</tag> and a
+ number of files with a <tag class="starttag">filename</tag>.ent<tag class="endtag">filename</tag> extension.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag><tag class="starttag">filename</tag>kbd0<tag class="endtag">filename</tag> is the first keyboard detected
+ by the system, and appears in
+ <tag class="starttag">filename</tag>/dev<tag class="endtag">filename</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">The source for the Handbook in English is found in
+ <filename>/usr/doc/en_US.ISO8859-1/books/handbook/</filename>.
+ The main file is called <filename>book.xml</filename>.
+ There is also a <filename>Makefile</filename> and a number
+ of files with a <filename>.ent</filename> extension.</para>
+
+ <para xml:lang="en"><filename>kbd0</filename> is the first keyboard detected
+ by the system, and appears in
+ <filename>/dev</filename>.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-name-of-ports">
+ <title xml:lang="en">The Name of Ports</title>
+
+ <note>
+ <title xml:lang="en">FreeBSD Extension</title>
+
+ <para xml:lang="en">These elements are part of the FreeBSD extension to
+ DocBook, and do not exist in the original DocBook
+ <acronym>DTD</acronym>.</para>
+ </note>
+
+ <para xml:lang="en">To include the name of a program from the FreeBSD
+ Ports Collection in the document, use the <tag>package</tag>
+ tag. Since the Ports Collection can be installed in any
+ number of locations, only include the category and the port
+ name; do not include <filename>/usr/ports</filename>.</para>
+
+ <para xml:lang="en">By default, <tag>package</tag> refers to a binary package.
+ To refer to a port that will be built from source, set the
+ <literal>role</literal> attribute to
+ <literal>port</literal>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>package</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Install the <tag class="starttag">package</tag>net/wireshark<tag class="endtag">package</tag> binary
+ package to view network traffic.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag><tag class="starttag">package role="port"</tag>net/wireshark<tag class="endtag">package</tag> can also be
+ built and installed from the Ports Collection.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Install the <package>net/wireshark</package> binary
+ package to view network traffic.</para>
+
+ <para xml:lang="en"><package role="port">net/wireshark</package> can also be
+ built and installed from the Ports Collection.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-hosts">
+ <title xml:lang="en">Hosts, Domains, IP Addresses, User Names, Group Names,
+ and Other System Items</title>
+
+ <note>
+ <title xml:lang="en">FreeBSD Extension</title>
+
+ <para xml:lang="en">These elements are part of the FreeBSD extension to
+ DocBook, and do not exist in the original DocBook
+ <acronym>DTD</acronym>.</para>
+ </note>
+
+ <para xml:lang="en">Information for <quote>system items</quote> is marked up
+ with <tag>systemitem</tag>. The <literal>class</literal>
+ attribute is used to identify the particular type of
+ information shown.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en"><literal>class="domainname"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is a domain name, such as
+ <literal>FreeBSD.org</literal> or
+ <literal>ngo.org.uk</literal>. There is no hostname
+ component.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="etheraddress"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is an Ethernet <acronym>MAC</acronym>
+ address, expressed as a series of 2 digit hexadecimal
+ numbers separated by colons.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="fqdomainname"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is a Fully Qualified Domain Name, with
+ both hostname and domain name parts.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="ipaddress"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is an <acronym>IP</acronym> address,
+ probably expressed as a dotted quad.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="netmask"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is a network mask, which might be
+ expressed as a dotted quad, a hexadecimal string, or as
+ a <literal>/</literal> followed by a number
+ (<acronym>CIDR</acronym> notation).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="systemname"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">With <literal>class="systemname"</literal>
+ the marked up information is the simple hostname, such
+ as <literal>freefall</literal> or
+ <literal>wcarchive</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="username"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is a username, like
+ <literal>root</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><literal>class="groupname"</literal></term>
+
+ <listitem>
+ <para xml:lang="en">The text is a groupname, like
+ <literal>wheel</literal>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <example>
+ <title xml:lang="en"><tag>systemitem</tag> and Classes Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>The local machine can always be referred to by the
+ name <tag class="starttag">systemitem class="systemname"</tag>localhost<tag class="endtag">systemitem</tag>, which will have the IP
+ address <tag class="starttag">systemitem class="ipaddress"</tag>127.0.0.1<tag class="endtag">systemitem</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>The <tag class="starttag">systemitem class="domainname"</tag>FreeBSD.org<tag class="endtag">systemitem</tag>
+ domain contains a number of different hosts, including
+ <tag class="starttag">systemitem class="fqdomainname"</tag>freefall.FreeBSD.org<tag class="endtag">systemitem</tag> and
+ <tag class="starttag">systemitem class="fqdomainname"</tag>bento.FreeBSD.org<tag class="endtag">systemitem</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>When adding an <tag class="starttag">acronym</tag>IP<tag class="endtag">acronym</tag> alias to an
+ interface (using <tag class="starttag">command</tag>ifconfig<tag class="endtag">command</tag>)
+ <tag class="starttag">emphasis</tag>always<tag class="endtag">emphasis</tag> use a netmask of
+ <tag class="starttag">systemitem class="netmask"</tag>255.255.255.255<tag class="endtag">systemitem</tag> (which can
+ also be expressed as
+ <tag class="starttag">systemitem class="netmask"</tag>0xffffffff<tag class="endtag">systemitem</tag>).<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>The <tag class="starttag">acronym</tag>MAC<tag class="endtag">acronym</tag> address uniquely identifies
+ every network card in existence. A typical
+ <tag class="starttag">acronym</tag>MAC<tag class="endtag">acronym</tag> address looks like
+ <tag class="starttag">systemitem class="etheraddress"</tag>08:00:20:87:ef:d0<tag class="endtag">systemitem</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>To carry out most system administration functions
+ requires logging in as <tag class="starttag">systemitem class="username"</tag>root<tag class="endtag">systemitem</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">The local machine can always be referred to by the name
+ <systemitem>localhost</systemitem>, which will have the IP
+ address
+ <systemitem class="ipaddress">127.0.0.1</systemitem>.</para>
+
+ <para xml:lang="en">The
+ <systemitem class="fqdomainname">FreeBSD.org</systemitem>
+ domain contains a number of different hosts, including
+ <systemitem class="fqdomainname">freefall.FreeBSD.org</systemitem> and
+ <systemitem class="fqdomainname">bento.FreeBSD.org</systemitem>.</para>
+
+ <para xml:lang="en">When adding an <acronym>IP</acronym> alias to an
+ interface (using <command>ifconfig</command>)
+ <emphasis>always</emphasis> use a netmask of
+ <systemitem class="netmask">255.255.255.255</systemitem>
+ (which can also be expressed as
+ <systemitem class="netmask">0xffffffff</systemitem>).</para>
+
+ <para xml:lang="en">The <acronym>MAC</acronym> address uniquely identifies
+ every network card in existence. A typical
+ <acronym>MAC</acronym> address looks like <systemitem class="etheraddress">08:00:20:87:ef:d0</systemitem>.</para>
+
+ <para xml:lang="en">To carry out most system administration functions
+ requires logging in as
+ <systemitem class="username">root</systemitem>.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-uri">
+ <title xml:lang="en">Uniform Resource Identifiers
+ (<acronym>URI</acronym>s)</title>
+
+ <para xml:lang="en">Occasionally it is useful to show a
+ Uniform Resource Identifier (<acronym>URI</acronym>) without
+ making it an active hyperlink. The <tag>uri</tag> element
+ makes this possible:</para>
+
+ <example>
+ <title xml:lang="en"><tag>uri</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>This <acronym>URL</acronym> shows only as text:
+ <tag class="starttag">uri</tag>https://www.FreeBSD.org<tag class="endtag">uri</tag>. It does not
+ create a link.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">This <acronym>URL</acronym> shows only as text:
+ <uri>https://www.FreeBSD.org</uri>. It does not
+ create a link.</para>
+ </example>
+
+ <para xml:lang="en">To create links, see
+ <xref linkend="docbook-markup-links"/>.</para>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-email-addresses">
+ <title xml:lang="en">Email Addresses</title>
+
+ <para xml:lang="en">Email addresses are marked up as <tag>email</tag>
+ elements. In the <acronym>HTML</acronym> output format, the
+ wrapped text becomes a hyperlink to the email address. Other
+ output formats that support hyperlinks may also make the email
+ address into a link.</para>
+
+ <example>
+ <title xml:lang="en"><tag>email</tag> with a Hyperlink Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>An email address that does not actually exist, like
+ <tag class="starttag">email</tag>notreal@example.com<tag class="endtag">email</tag>, can be used as an
+ example.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">An email address that does not actually exist, like
+ <email>notreal@example.com</email>, can be used as an
+ example.</para>
+ </example>
+
+ <para xml:lang="en">A FreeBSD-specific extension allows setting the
+ <literal>role</literal> attribute to <literal>nolink</literal>
+ to prevent the creation of the hyperlink to the email
+ address.</para>
+
+ <example>
+ <title xml:lang="en"><tag>email</tag> Without a Hyperlink Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Sometimes a link to an email address like
+ <tag class="starttag">email role="nolink"</tag>notreal@example.com<tag class="endtag">email</tag> is not
+ desired.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Sometimes a link to an email address like
+ <email role="nolink">notreal@example.com</email> is not
+ desired.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-describing-makefiles">
+ <title xml:lang="en">Describing <filename>Makefile</filename>s</title>
+
+ <note>
+ <title xml:lang="en">FreeBSD Extension</title>
+
+ <para xml:lang="en">These elements are part of the FreeBSD extension to
+ DocBook, and do not exist in the original DocBook
+ <acronym>DTD</acronym>.</para>
+ </note>
+
+ <para xml:lang="en">Two elements exist to describe parts of
+ <filename>Makefile</filename>s, <tag>buildtarget</tag>
+ and <tag>varname</tag>.</para>
+
+ <para xml:lang="en"><tag>buildtarget</tag> identifies a build target
+ exported by a <filename>Makefile</filename> that can be
+ given as a parameter to <command>make</command>.
+ <tag>varname</tag> identifies a variable that can be
+ set (in the environment, on the command line with
+ <command>make</command>, or within the
+ <filename>Makefile</filename>) to influence the
+ process.</para>
+
+ <example>
+ <title xml:lang="en"><tag>buildtarget</tag> and
+ <tag>varname</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Two common targets in a <tag class="starttag">filename</tag>Makefile<tag class="endtag">filename</tag>
+ are <tag class="starttag">buildtarget</tag>all<tag class="endtag">buildtarget</tag> and
+ <tag class="starttag">buildtarget</tag>clean<tag class="endtag">buildtarget</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>Typically, invoking <tag class="starttag">buildtarget</tag>all<tag class="endtag">buildtarget</tag> will
+ rebuild the application, and invoking
+ <tag class="starttag">buildtarget</tag>clean<tag class="endtag">buildtarget</tag> will remove the temporary
+ files (<tag class="starttag">filename</tag>.o<tag class="endtag">filename</tag> for example) created by the
+ build process.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag><tag class="starttag">buildtarget</tag>clean<tag class="endtag">buildtarget</tag> may be controlled by a
+ number of variables, including <tag class="starttag">varname</tag>CLOBBER<tag class="endtag">varname</tag>
+ and <tag class="starttag">varname</tag>RECURSE<tag class="endtag">varname</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Two common targets in a <filename>Makefile</filename>
+ are <buildtarget xml:lang="en">all</buildtarget> and
+ <buildtarget xml:lang="en">clean</buildtarget>.</para>
+
+ <para xml:lang="en">Typically, invoking <buildtarget xml:lang="en">all</buildtarget> will
+ rebuild the application, and invoking
+ <buildtarget xml:lang="en">clean</buildtarget> will remove the temporary
+ files (<filename>.o</filename> for example) created by the
+ build process.</para>
+
+ <para xml:lang="en"><buildtarget xml:lang="en">clean</buildtarget> may be controlled by a
+ number of variables, including <varname>CLOBBER</varname>
+ and <varname>RECURSE</varname>.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-literal-text">
+ <title xml:lang="en">Literal Text</title>
+
+ <para xml:lang="en">Literal text, or text which should be entered verbatim, is
+ often needed in documentation. This is text that is excerpted
+ from another file, or which should be copied exactly as shown
+ from the documentation into another file.</para>
+
+ <para xml:lang="en">Some of the time, <tag>programlisting</tag> will
+ be sufficient to denote this text. But
+ <tag>programlisting</tag> is not always appropriate,
+ particularly when you want to include a portion of a file
+ <quote>in-line</quote> with the rest of the
+ paragraph.</para>
+
+ <para xml:lang="en">On these occasions, use
+ <tag>literal</tag>.</para>
+
+ <example>
+ <title xml:lang="en"><tag>literal</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>The <tag class="starttag">literal</tag>maxusers 10<tag class="endtag">literal</tag> line in the kernel
+ configuration file determines the size of many system tables, and is
+ a rough guide to how many simultaneous logins the system will
+ support.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">The <literal>maxusers 10</literal> line in the kernel
+ configuration file determines the size of many system
+ tables, and is a rough guide to how many simultaneous
+ logins the system will support.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-replaceable">
+ <title xml:lang="en">Showing Items That the User <emphasis>Must</emphasis>
+ Fill In</title>
+
+ <para xml:lang="en">There will often be times when the user is shown
+ what to do, or referred to a file or command line, but
+ cannot simply copy the example provided. Instead, they
+ must supply some information themselves.</para>
+
+ <para xml:lang="en"><tag>replaceable</tag> is designed for this
+ eventuality. Use it <emphasis>inside</emphasis> other
+ elements to indicate parts of that element's content that
+ the user must replace.</para>
+
+ <example>
+ <title xml:lang="en"><tag>replaceable</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">screen</tag>&amp;prompt.user; <tag class="starttag">userinput</tag>man <tag class="starttag">replaceable</tag>command<tag class="endtag">replaceable</tag><tag class="endtag">userinput</tag><tag class="endtag">screen</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <informalexample>
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>man <replaceable>command</replaceable></userinput></screen>
+ </informalexample>
+
+ <para xml:lang="en"><tag>replaceable</tag> can be used in many
+ different elements, including <tag>literal</tag>.
+ This example also shows that <tag>replaceable</tag>
+ should only be wrapped around the content that the user
+ <emphasis>is</emphasis> meant to provide. The other content
+ should be left alone.</para>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>The <tag class="starttag">literal</tag>maxusers <tag class="starttag">replaceable</tag>n<tag class="endtag">replaceable</tag><tag class="endtag">literal</tag>
+ line in the kernel configuration file determines the size of many system
+ tables, and is a rough guide to how many simultaneous logins the system will
+ support.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>For a desktop workstation, <tag class="starttag">literal</tag>32<tag class="endtag">literal</tag> is a good value
+ for <tag class="starttag">replaceable</tag>n<tag class="endtag">replaceable</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">The
+ <literal>maxusers <replaceable>n</replaceable></literal>
+ line in the kernel configuration file determines the size
+ of many system tables, and is a rough guide to how many
+ simultaneous logins the system will support.</para>
+
+ <para xml:lang="en">For a desktop workstation, <literal>32</literal> is a
+ good value for <replaceable>n</replaceable>.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-gui-buttons">
+ <title xml:lang="en">Showing <acronym>GUI</acronym> Buttons</title>
+
+ <para xml:lang="en">Buttons presented by a graphical user interface are marked
+ with <tag>guibutton</tag>. To make the text look more
+ like a graphical button, brackets and non-breaking spaces are
+ added surrounding the text.</para>
+
+ <example>
+ <title xml:lang="en"><tag>guibutton</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Edit the file, then click
+ <tag class="starttag">guibutton</tag>[&amp;nbsp;Save&amp;nbsp;]<tag class="endtag">guibutton</tag> to save the
+ changes.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Edit the file, then click
+ <guibutton>[ Save ]</guibutton> to save the
+ changes.</para>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-system-errors">
+ <title xml:lang="en">Quoting System Errors</title>
+
+ <para xml:lang="en">System errors generated by FreeBSD are marked with
+ <tag>errorname</tag>. This indicates the exact error
+ that appears.</para>
+
+ <example>
+ <title xml:lang="en"><tag>errorname</tag> Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">screen</tag><tag class="starttag">errorname</tag>Panic: cannot mount root<tag class="endtag">errorname</tag><tag class="endtag">screen</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <informalexample>
+ <screen xml:lang="en"><errorname>Panic: cannot mount root</errorname></screen>
+ </informalexample>
+ </example>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-images">
+ <title xml:lang="en">Images</title>
+
+ <important>
+ <para xml:lang="en">Image support in the documentation is somewhat
+ experimental. The mechanisms described here are unlikely to
+ change, but that is not guaranteed.</para>
+
+ <para xml:lang="en">To provide conversion between different image formats, the
+ <package>graphics/ImageMagick</package>
+ port must be installed. This port is not included in the
+ <package>textproc/docproj</package> meta
+ port, and must be installed separately.</para>
+
+ <para xml:lang="en">A good example of the use of images is the
+ <filename>doc/en_US.ISO8859-1/articles/vm-design/</filename>
+ document. Examine the files in that directory to see how
+ these elements are used together. Build different output
+ formats to see how the format determines what images are shown
+ in the rendered document.</para>
+ </important>
+
+ <sect2 xml:id="docbook-markup-image-formats">
+ <title xml:lang="en">Image Formats</title>
+
+ <para xml:lang="en">The following image formats are currently supported. An
+ image file will automatically be converted to bitmap or vector
+ image depending on the output document format.</para>
+
+ <para xml:lang="en">These are the <emphasis>only</emphasis> formats in which
+ images should be committed to the documentation
+ repository.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en"><acronym>EPS</acronym> (Encapsulated
+ Postscript)</term>
+
+ <listitem>
+ <para xml:lang="en">Images that are primarily vector based, such as
+ network diagrams, time lines, and similar, should be in
+ this format. These images have a
+ <filename>.eps</filename> extension.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><acronym>PNG</acronym> (Portable Network
+ Graphic)</term>
+
+ <listitem>
+ <para xml:lang="en">For bitmaps, such as screen captures, use this
+ format. These images have the <filename>.png</filename>
+ extension.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><acronym>PIC</acronym> (PIC graphics language)</term>
+
+ <listitem>
+ <para xml:lang="en"><acronym>PIC</acronym> is a language for drawing
+ simple vector-based figures used in the <citerefentry><refentrytitle>pic</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ utility. These images have the
+ <filename>.pic</filename> extension.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en"><acronym>SCR</acronym> (SCReen capture)</term>
+
+ <listitem>
+ <para xml:lang="en">This format is specific to screenshots of console
+ output. The following command generates an SCR file
+ <filename>shot.scr</filename> from video buffer of
+ <filename>/dev/ttyv0</filename>:</para>
+
+ <screen xml:lang="en"><prompt>#</prompt> <userinput><command>vidcontrol -p</command> &lt; <filename><replaceable>/dev/ttyv0</replaceable></filename> &gt; <filename><replaceable>shot.scr</replaceable></filename></userinput></screen>
+
+ <para xml:lang="en">This is preferable to <acronym>PNG</acronym> format
+ for screenshots because the <acronym>SCR</acronym> file
+ contains plain text of the command lines so that it can
+ be converted to a <acronym>PNG</acronym> image or a
+ plain text depending on the output document
+ format.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para xml:lang="en">Use the appropriate format for each image. Documentation
+ will often have a mix of <acronym>EPS</acronym> and
+ <acronym>PNG</acronym> images. The
+ <filename>Makefile</filename>s ensure that the correct format
+ image is chosen depending on the output format used.
+ <emphasis>Do not commit the same image to the repository in
+ two different formats</emphasis>.</para>
+
+ <important>
+ <para xml:lang="en">The Documentation Project may eventually switch to using
+ the <acronym>SVG</acronym> (Scalable Vector Graphic) format
+ for vector images. However, the current state of
+ <acronym>SVG</acronym> capable editing tools makes this
+ impractical.</para>
+ </important>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-image-file-locations">
+ <title xml:lang="en">Image File Locations</title>
+
+ <para xml:lang="en">Image files can be stored in one of several locations,
+ depending on the document and image:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para xml:lang="en">In the same directory as the document itself, usually
+ done for articles and small books that keep all their
+ files in a single directory.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">In a subdirectory of the main document. Typically
+ done when a large book uses separate subdirectories to
+ organize individual chapters.</para>
+
+ <para xml:lang="en">When images are stored in a subdirectory of the
+ main document directory, the subdirectory name must be
+ included in their paths in the
+ <filename>Makefile</filename> and the
+ <tag>imagedata</tag> element.</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en">In a subdirectory of
+ <filename>doc/share/images</filename> named after the
+ document. For example, images for the Handbook are stored
+ in <filename>doc/share/images/books/handbook</filename>.
+ Images that work for multiple translations are stored in
+ this upper level of the documentation file tree.
+ Generally, these are images that can be used unchanged in
+ non-English translations of the document.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-image-markup">
+ <title xml:lang="en">Image Markup</title>
+
+ <para xml:lang="en">Images are included as part of a <tag>mediaobject</tag>.
+ The <tag>mediaobject</tag> can contain other, more specific
+ objects. We are concerned with two, the
+ <tag>imageobject</tag> and the <tag>textobject</tag>.</para>
+
+ <para xml:lang="en">Include one <tag>imageobject</tag>, and two
+ <tag>textobject</tag> elements. The <tag>imageobject</tag>
+ will point to the name of the image file without the
+ extension. The <tag>textobject</tag> elements contain
+ information that will be presented to the user as well as, or
+ instead of, the image itself.</para>
+
+ <para xml:lang="en">Text elements are shown to the reader in several
+ situations. When the document is viewed in
+ <acronym>HTML</acronym>, text elements are shown while the
+ image is loading, or if the mouse pointer is hovered over the
+ image, or if a text-only browser is being used. In formats
+ like plain text where graphics are not possible, the text
+ elements are shown instead of the graphical ones.</para>
+
+ <para xml:lang="en">This example shows how to include an image called
+ <filename>fig1.png</filename> in a document. The image is a
+ rectangle with an A inside it:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">mediaobject</tag>
+ <tag class="starttag">imageobject</tag>
+ <tag class="emptytag">imagedata fileref="fig1"</tag> <co xml:id="co-image-ext"/>
+ <tag class="endtag">imageobject</tag>
+
+ <tag class="starttag">textobject</tag>
+ <tag class="starttag">literallayout class="monospaced"</tag>+---------------+ <co xml:id="co-image-literal"/>
+| A |
++---------------+<tag class="endtag">literallayout</tag>
+ <tag class="endtag">textobject</tag>
+
+ <tag class="starttag">textobject</tag>
+ <tag class="starttag">phrase</tag>A picture<tag class="endtag">phrase</tag> <co xml:id="co-image-phrase"/>
+ <tag class="endtag">textobject</tag>
+<tag class="endtag">mediaobject</tag></programlisting>
+
+ <calloutlist>
+ <callout arearefs="co-image-ext">
+ <para xml:lang="en">Include an <tag>imagedata</tag> element
+ inside the <tag>imageobject</tag> element. The
+ <literal>fileref</literal> attribute should contain the
+ filename of the image to include, without the extension.
+ The stylesheets will work out which extension should be
+ added to the filename automatically.</para>
+ </callout>
+
+ <callout arearefs="co-image-literal">
+
+ <para xml:lang="en">The first <tag>textobject</tag> contains a
+ <tag>literallayout</tag> element, where the
+ <literal>class</literal> attribute is set to
+ <literal>monospaced</literal>. This is an opportunity to
+ demonstrate <acronym>ASCII</acronym> art skills. This
+ content will be used if the document is converted to plain
+ text.</para>
+
+ <para xml:lang="en">Notice how the first and last lines of the content
+ of the <tag>literallayout</tag> element butt up
+ next to the element's tags. This ensures no extraneous
+ white space is included.</para>
+ </callout>
+
+ <callout arearefs="co-image-phrase">
+ <para xml:lang="en">The second <tag>textobject</tag> contains a
+ single <tag>phrase</tag> element. The contents of
+ this phrase will become the <literal>alt</literal>
+ attribute for the image when this document is converted to
+ <acronym>HTML</acronym>.</para>
+ </callout>
+ </calloutlist>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-image-makefile-entries">
+ <title xml:lang="en">Image <filename>Makefile</filename> Entries</title>
+
+ <para xml:lang="en">Images must be listed in the <filename>Makefile</filename>
+ in the <varname>IMAGES</varname> variable. This variable must
+ contain the names of all the <emphasis>source</emphasis>
+ images. For example, if there are three figures,
+ <filename>fig1.eps</filename>, <filename>fig2.png</filename>,
+ <filename>fig3.png</filename>, then the
+ <filename>Makefile</filename> should have lines like this in
+ it.</para>
+
+ <programlisting xml:lang="en">…
+IMAGES= fig1.eps fig2.png fig3.png
+…</programlisting>
+
+ <para xml:lang="en">or</para>
+
+ <programlisting xml:lang="en">…
+IMAGES= fig1.eps
+IMAGES+= fig2.png
+IMAGES+= fig3.png
+…</programlisting>
+
+ <para xml:lang="en">Again, the <filename>Makefile</filename> will work out the
+ complete list of images it needs to build the source document,
+ you only need to list the image files <emphasis>you</emphasis>
+ provided.</para>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-images-in-subdirectories">
+ <title xml:lang="en">Images and Chapters in Subdirectories</title>
+
+ <para xml:lang="en">Be careful when separating documentation into smaller
+ files in different directories (see <xref linkend="xml-primer-include-using-gen-entities"/>).</para>
+
+ <para xml:lang="en">Suppose there is a book with three chapters, and the
+ chapters are stored in their own directories, called
+ <filename>chapter1/chapter.xml</filename>,
+ <filename>chapter2/chapter.xml</filename>, and
+ <filename>chapter3/chapter.xml</filename>. If each chapter
+ has images associated with it, place those images in each
+ chapter's subdirectory (<filename>chapter1/</filename>,
+ <filename>chapter2/</filename>, and
+ <filename>chapter3/</filename>).</para>
+
+ <para xml:lang="en">However, doing this requires including the directory
+ names in the <varname>IMAGES</varname> variable in the
+ <filename>Makefile</filename>, <emphasis>and</emphasis>
+ including the directory name in the <tag>imagedata</tag>
+ element in the document.</para>
+
+ <para xml:lang="en">For example, if the book has
+ <filename>chapter1/fig1.png</filename>, then
+ <filename>chapter1/chapter.xml</filename> should
+ contain:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">mediaobject</tag>
+ <tag class="starttag">imageobject</tag>
+ <tag class="emptytag">imagedata fileref="chapter1/fig1"</tag> <co xml:id="co-image-dir"/>
+ <tag class="endtag">imageobject</tag>
+
+ …
+
+<tag class="endtag">mediaobject</tag></programlisting>
+
+ <calloutlist>
+ <callout arearefs="co-image-dir">
+ <para xml:lang="en">The directory name must be included in the
+ <literal>fileref</literal> attribute.</para>
+ </callout>
+ </calloutlist>
+
+ <para xml:lang="en">The <filename>Makefile</filename> must contain:</para>
+
+ <programlisting xml:lang="en">…
+IMAGES= chapter1/fig1.png
+…</programlisting>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="docbook-markup-links">
+ <title xml:lang="en">Links</title>
+
+ <note>
+ <para xml:lang="en">Links are also in-line elements. To show a
+ <acronym>URI</acronym> without creating a link, see
+ <xref linkend="docbook-markup-uri"/>.</para>
+ </note>
+
+ <sect2 xml:id="docbook-markup-links-ids">
+ <title xml:lang="en"><literal>xml:id</literal> Attributes</title>
+
+ <para xml:lang="en">Most DocBook elements accept an <literal>xml:id</literal>
+ attribute to give that part of the document a unique name.
+ The <literal>xml:id</literal> can be used as a target for a
+ crossreference or link.</para>
+
+ <para xml:lang="en">Any portion of the document that will be a link target
+ must have an <literal>xml:id</literal> attribute. Assigning
+ an <literal>xml:id</literal> to all chapters and sections,
+ even if there are no current plans to link to them, is a good
+ idea. These <literal>xml:id</literal>s can be used as unique
+ reference points by anyone referring to the
+ <acronym>HTML</acronym> version of the document.</para>
+
+ <example>
+ <title xml:lang="en"><literal>xml:id</literal> on Chapters and
+ Sections Example</title>
+
+ <programlisting xml:lang="en"><tag class="starttag">chapter xml:id="introduction"</tag>
+ <tag class="starttag">title</tag>Introduction<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>This is the introduction. It contains a subsection,
+ which is identified as well.<tag class="endtag">para</tag>
+
+ <tag class="starttag">sect1 xml:id="introduction-moredetails"</tag>
+ <tag class="starttag">title</tag>More Details<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>This is a subsection.<tag class="endtag">para</tag>
+ <tag class="endtag">sect1</tag>
+<tag class="endtag">chapter</tag></programlisting>
+ </example>
+
+ <para xml:lang="en">Use descriptive values for <literal>xml:id</literal>
+ names. The values must be unique within the entire document,
+ not just in a single file. In the example, the subsection
+ <literal>xml:id</literal> is constructed by appending text to
+ the chapter <literal>xml:id</literal>. This ensures that the
+ <literal>xml:id</literal>s are unique. It also helps both
+ reader and anyone editing the document to see where the link
+ is located within the document, similar to a directory path to
+ a file.</para>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-links-crossreferences">
+ <title xml:lang="en">Crossreferences with <literal>xref</literal></title>
+
+ <para xml:lang="en"><tag>xref</tag> provides the reader with a link to jump to
+ another section of the document. The target
+ <literal>xml:id</literal> is specified in the
+ <literal>linkend</literal> attribute, and <tag>xref</tag>
+ generates the link text automatically.</para>
+
+ <example>
+ <title xml:lang="en"><tag>xref</tag> Example</title>
+
+ <para xml:lang="en">Assume that this fragment appears somewhere in a
+ document that includes the <literal>xml:id</literal>
+ example shown above:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>More information can be found
+ in <tag class="emptytag">xref linkend="introduction"</tag>.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>More specific information can be found
+ in <tag class="emptytag">xref linkend="introduction-moredetails"</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">The link text will be generated automatically, looking
+ like (<emphasis>emphasized</emphasis> text indicates the
+ link text):</para>
+
+ <blockquote>
+ <para xml:lang="en">More information can be found in <emphasis>Chapter
+ 1, Introduction</emphasis>.</para>
+
+ <para xml:lang="en">More specific information can be found in
+ <emphasis>Section 1.1,
+ <quote>More Details</quote></emphasis>.</para>
+ </blockquote>
+ </example>
+
+ <para xml:lang="en">The link text is generated automatically from the chapter
+ and section number and <literal>title</literal>
+ elements.</para>
+ </sect2>
+
+ <sect2 xml:id="docbook-markup-links-to-web-documents">
+ <title xml:lang="en">Linking to Other Documents on the
+ Web</title>
+
+ <para xml:lang="en">The link element described here allows the writer to
+ define the link text. When link text is used, it is very important to be descriptive
+ to give the reader an idea of where the link goes.
+ Remember that DocBook can be rendered to multiple
+ types of media. The reader might be looking at a printed book
+ or other form of media where there are no links. If the link
+ text is not descriptive enough, the reader might not be able to
+ locate the linked section.</para>
+
+ <para xml:lang="en">The <literal>xlink:href</literal> attribute
+ is the <acronym>URL</acronym> of the page,
+ and the content of the element is the text that
+ will be displayed for the user to activate.</para>
+
+ <para xml:lang="en">In many situations, it is preferable to show the actual
+ <acronym>URL</acronym> rather than text. This can be done by
+ leaving out the element text entirely.</para>
+
+ <example>
+ <title xml:lang="en"><tag>link</tag> to a FreeBSD Documentation Web
+ Page Example</title>
+
+ <para xml:lang="en">Link to the book or article <acronym>URL</acronym>
+ entity. To link to a specific chapter in a book, add a
+ slash and the chapter file name, followed by an optional
+ anchor within the chapter. For articles, link to the
+ article <acronym>URL</acronym> entity, followed by an
+ optional anchor within the article.
+ <acronym>URL</acronym> entities can be found in
+ <filename>doc/share/xml/urls.ent</filename>.</para>
+
+ <para xml:lang="en">Usage for FreeBSD book links:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Read the <tag class="starttag">link
+ xlink:href="&amp;url.books.handbook;/svn.html#svn-intro"</tag>SVN
+ introduction<tag class="endtag">link</tag>, then pick the nearest mirror from
+ the list of <tag class="starttag">link
+ xlink:href="&amp;url.books.handbook;/svn.html#svn-mirrors"</tag>Subversion
+ mirror sites<tag class="endtag">link</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Read the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/svn.html#svn-intro">SVN
+ introduction</link>, then pick the nearest mirror from
+ the list of <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/svn.html#svn-mirrors">Subversion
+ mirror sites</link>.</para>
+
+ <para xml:lang="en">Usage for FreeBSD article links:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Read this
+ <tag class="starttag">link xlink:href="&amp;url.articles.bsdl-gpl;"</tag>article
+ about the BSD license<tag class="endtag">link</tag>, or just the
+ <tag class="starttag">link xlink:href="&amp;url.articles.bsdl-gpl;#intro"</tag>introduction<tag class="endtag">link</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Read this
+ <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/articles/bsdl-gpl">article
+ about the BSD license</link>, or just the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/articles/bsdl-gpl#intro">introduction</link>.</para>
+ </example>
+
+ <example>
+ <title xml:lang="en"><tag>link</tag> to a FreeBSD Web Page Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Of course, you could stop reading this document and go to the
+ <tag class="starttag">link xlink:href="&amp;url.base;/index.html"</tag>FreeBSD home page<tag class="endtag">link</tag> instead.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Of course, you could stop reading this document and go
+ to the <link xlink:href="@@URL_RELPREFIX@@/index.html">FreeBSD
+ home page</link> instead.</para>
+ </example>
+
+ <example>
+ <title xml:lang="en"><tag>link</tag> to an External Web
+ Page Example</title>
+
+ <para xml:lang="en">Usage:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Wikipedia has an excellent reference on
+ <tag class="starttag">link
+ xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table"</tag>GUID
+ Partition Tables<tag class="endtag">link</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Appearance:</para>
+
+ <para xml:lang="en">Wikipedia has an excellent reference on <link xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table">GUID
+ Partition Tables</link>.</para>
+
+ <para xml:lang="en">The link text can be omitted to show the actual
+ URL:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Wikipedia has an excellent reference on
+ GUID Partition Tables: <tag class="starttag">link
+ xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table"</tag><tag class="endtag">link</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">The same link can be entered using shorter
+ notation instead of a separate ending tag:</para>
+
+ <programlisting xml:lang="en"><tag class="starttag">para</tag>Wikipedia has an excellent reference on
+ GUID Partition Tables: <tag class="emptytag">link
+ xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table"</tag>.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">The two methods are equivalent. Appearance:</para>
+
+ <para xml:lang="en">Wikipedia has an excellent reference on GUID Partition
+ Tables: <uri xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table">http://en.wikipedia.org/wiki/GUID_Partition_Table</uri>.</para>
+ </example>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="stylesheets">
+ <title xml:lang="en">Style Sheets</title>
+
+ <para xml:lang="en"><acronym>XML</acronym> is concerned with content, and says
+ nothing about how that content should be presented to the reader
+ or rendered on paper. Multiple <emphasis>style sheet</emphasis>
+ languages have been developed to describe visual layout, including
+ Extensible Stylesheet Language Transformation
+ (<acronym>XSLT</acronym>), Document Style Semantics and
+ Specification Language (<acronym>DSSSL</acronym>), and Cascading
+ Style Sheets (<acronym>CSS</acronym>).</para>
+
+ <para xml:lang="en">The <acronym>FDP</acronym> documents use
+ <acronym>XSLT</acronym> stylesheets to transform DocBook into
+ <acronym>XHTML</acronym>, and then <acronym>CSS</acronym>
+ formatting is applied to the <acronym>XHTML</acronym> pages.
+ Printable output is currently rendered with legacy
+ <acronym>DSSSL</acronym> stylesheets, but this will probably
+ change in the future.</para>
+
+ <sect1 xml:id="stylesheets-css">
+ <title xml:lang="en"><acronym>CSS</acronym></title>
+
+ <para xml:lang="en">Cascading Style Sheets (<acronym>CSS</acronym>) are a
+ mechanism for attaching style information (font, weight, size,
+ color, and so forth) to elements in an <acronym>XHTML</acronym>
+ document without abusing <acronym>XHTML</acronym> to do
+ so.</para>
+
+ <sect2>
+ <title xml:lang="en">The DocBook Documents</title>
+
+ <para xml:lang="en">The FreeBSD <acronym>XSLT</acronym> and
+ <acronym>DSSSL</acronym> stylesheets refer to
+ <filename>docbook.css</filename>, which is expected to be
+ present in the same directory as the <acronym>XHTML</acronym>
+ files. The project-wide <acronym>CSS</acronym> file is copied
+ from <filename>doc/share/misc/docbook.css</filename> when
+ documents are converted to <acronym>XHTML</acronym>, and is
+ installed automatically.</para>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="translations">
+ <title>翻譯</title>
+
+ <para>本章是翻譯 FreeBSD 文件(包含:FAQ, Handbook, tutorials, manual pages等)的常見問題(FAQ)。</para>
+
+ <para>本文件 <emphasis>主要</emphasis> 是以 FreeBSD 德文翻譯計劃的翻譯 FAQ 為母本而來的, 原始撰稿者為 Frank Gründer <email>elwood@mc5sys.in-berlin.de</email>,並由 Bernd Warken <email>bwarken@mayn.de</email> 再翻譯回英文版。</para>
+
+ <para>本 FAQ 是由文件工程團隊 <email>doceng@FreeBSD.org</email> 所維護。</para>
+
+ <qandaset>
+ <qandaentry>
+ <question>
+ <para><phrase>i18n</phrase> 跟 <phrase>l10n</phrase> 是什麼呢?</para>
+ </question>
+
+ <answer>
+ <para><phrase>i18n</phrase> 是 <phrase>internationalization</phrase> 而 <phrase>l10n</phrase> 是 <phrase>localization</phrase>。這些都是為了書寫方便而用的簡寫。</para>
+
+ <para><phrase>i18n</phrase> 就是開頭為 <quote>i</quote> 後面有 18 個字母,最後接 <quote>n</quote>。同樣地, <phrase>l10n</phrase> 是開頭為 <quote>l</quote> 後面有 10 個字母,最後接 <quote>n</quote>。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>有專門給譯者參與討論的 mailing list 嗎?</para>
+ </question>
+
+ <answer>
+ <para>有的,不同的語系翻譯者都各自有自屬的 mailing lists。這份 <link xlink:href="http://www.freebsd.org/docproj/translations.html"> 翻譯計劃清單</link> 有列出各翻譯計劃的詳細 mailing lists 及相關網站。此外,有一般翻譯討論的<email>freebsd-translators@freebsd.org</email>郵件論壇。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>需要更多人一起參與翻譯嗎?</para>
+ </question>
+
+ <answer>
+ <para>當然囉,越多人參與翻譯,那麼就能夠越快翻完,而且英文版文件若有增減、更新的話, 各翻譯版也可以儘快同步囉。</para>
+
+ <para>不一定得是專業譯者,才能參與翻譯的。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>有要求哪些語言能力呢</para>
+ </question>
+
+ <answer>
+ <para>理論上,必須要對英文非常熟稔,而且很明顯地,對想翻譯的語言必須要能運用自如。</para>
+
+ <para>英文也並非一定要會的。比如說,可以把西班牙文(Spanish)的 FAQ 翻譯為匈牙利文(Hungarian)。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>該學會哪些程式的使用呢?</para>
+ </question>
+
+ <answer>
+ <para>強烈建議在自己機器上也建立 FreeBSD Subversion repository 的備份(至少文件部分),這可以執行:</para>
+
+ <screen><prompt>%</prompt> <userinput>svn checkout https://svn.FreeBSD.org/doc/head/ head</userinput></screen>
+
+ <para><link xlink:href="https://svn.FreeBSD.org/">svn.FreeBSD.org</link>是公共的 <literal>SVN</literal> 伺服器。可以從<link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/svn.html#svn-mirrors">Subversion 鏡相站</link>清單檢查認證的伺服器。</para>
+
+ <note>
+ <para>這需要安裝<package>devel/subversion</package> 套件。</para>
+ </note>
+
+ <para>你可以很自在地使用<application>svn</application>。他可以讓你察看文件檔案不同版本之間的修改差異。</para>
+
+ <para>例如你要看<filename>en_US.ISO8859-1/books/fdp-primer/book.xml</filename> 版本<literal>r33733</literal> 和 <literal>r33734</literal> 的差異,請執行:</para>
+
+ <screen><prompt>%</prompt> <userinput>svn diff -r<replaceable>33733</replaceable>:<replaceable>33734</replaceable> en_US.ISO8859-1/books/fdp-primer/book.xml</userinput></screen>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>要怎麼找出來還有誰要跟我一起翻譯的呢?</para>
+ </question>
+
+ <answer>
+ <para><link xlink:href="http://www.FreeBSD.org/docproj/translations.html">文件計劃的翻譯 </link> 列了目前已知的各翻譯者成果 ,如果已經有其他人也在做跟你一樣的翻譯工作,那麼請不要重複浪費人力, 請與他們聯繫看看還有哪些地方可以幫上忙的。</para>
+
+ <para>若上面並未列出你母語的翻譯,或是也有人要翻譯但還未公開宣布的話,那麼就寄信到 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD documentation project 郵遞論壇 </link>。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>都沒人翻譯為我所使用的語言,該怎麼辦?</para>
+ </question>
+
+ <answer>
+ <para>恭喜啊,你剛好踏上 <quote>FreeBSD <replaceable>你的母語</replaceable> 文件翻譯計劃</quote>的啟程之路,歡迎上船。</para>
+
+ <para>首先呢,先判斷是否有妥善規劃時間,因為你只有一個人在翻而已, 因此,相關翻譯成果的公布、與其他可能會幫忙的志工們聯繫這些工作都是你的職責所在。</para>
+
+ <para>寫信到 FreeBSD documentation project 郵遞論壇 向大家宣布你正準備要翻譯,然後文件計劃的翻譯部分就會更新相關資料</para>
+
+ <para>若你的國家已經有人提供 FreeBSD 的 mirror(映設) 服務的話,那麼就先跟他們聯繫, 並詢問你是否在上面可以有網頁空間來放相關計劃資料, 以及是否可以有提供 email 帳號或 mailing list 服務。</para>
+
+ <para>然後,就開始翻文件囉,一開始翻譯的時候,先找些篇幅較短的文件會比較容易些 —— 像是 FAQ 啦,或是如何上手之類的說明文章。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>已經翻好一些文件了,該寄到哪呢?</para>
+ </question>
+
+ <answer>
+ <para>這要看情況而定。 若你是在翻譯團隊內做的話(像是日本、德國), 他們會有自己內部流程來決定翻譯文件怎麼送,這些大致流程會在他們網頁上面有寫。</para>
+
+ <para>若你是某語系的唯一翻譯者(或你是負責某翻譯計劃,並想把成果回饋給 FreeBSD 計劃) ,那麼你就應該把自己的翻譯成果寄給 FreeBSD 計劃。(細節請看下個問題)</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>我是該語系的唯一翻譯者,該怎麼把翻譯成果寄出去呢?</para>
+
+ <para xml:lang="en">or</para>
+
+ <para>我們是翻譯團隊,該怎麼把我們成員翻譯成果寄出去呢?</para>
+ </question>
+
+ <answer>
+ <para>首先,請先確定你的翻譯成果組織條理分明,並可正確編譯,也就是說: 把它擺到現有文件架構內是可以正確編譯成功的。</para>
+
+ <para>目前,FreeBSD 文件都是放在最上層的 <filename>head/</filename> 目錄內。 而該目錄下的則依其語系來做分類命名的,依照 ISO639 定義(在比比 1999/01/20 還新的 FreeBSD 版本的/usr/share/misc/iso639 )。</para>
+
+ <para>若你這個語系可能會有不同編碼方式(像是:中文) 那麼就應該會像下面這樣,來依你所使用的編碼方式細分</para>
+
+ <para>最後,你應該建立好各文件的目錄了。</para>
+
+ <para>舉例來說,假設有瑞典文(Swedish)版的翻譯,那麼應該會長像:</para>
+
+ <programlisting>head/
+ sv_SE.ISO8859-1/
+ Makefile
+ htdocs/
+ docproj/
+ books/
+ faq/
+ Makefile
+ book.xml</programlisting>
+
+ <para><literal>sv_SE.ISO8859-1</literal>是依照 <filename><replaceable>語系(lang)</replaceable>.<replaceable>編碼(encoding)</replaceable></filename> 的規則來建立的譯名。 請注意:其中有兩個 Makefiles 檔,它們是用來建構文件的。</para>
+
+ <para>然後請用 <citerefentry><refentrytitle>tar</refentrytitle><manvolnum>1</manvolnum></citerefentry> 與 <citerefentry><refentrytitle>gzip</refentrytitle><manvolnum>1</manvolnum></citerefentry> 來把你的翻譯文件壓縮起來,並寄到本計劃來。</para>
+
+ <screen><prompt>%</prompt> <userinput>cd doc</userinput>
+<prompt>%</prompt> <userinput>tar cf swedish-docs.tar sv_SE.ISO8859-1</userinput>
+<prompt>%</prompt> <userinput>gzip -9 swedish-docs.tar</userinput></screen>
+
+ <para>接著,把 <filename>swedish-docs.tar.gz</filename> 放到網頁空間上,若你沒有自己網頁空間的話(ISP不提供) ,那麼可以該檔寄到 Documentation Engineering Team <email>doceng@FreeBSD.org</email> 來。</para>
+
+ <para>還有,記得用 Bugzilla 提交一個報告以通知大家;你已經寄出翻譯文件了, 還有,若有人可以幫忙檢閱、複審文件的話,對翻譯品質較好, 因為這也有助於提升翻譯品質的流暢度。</para>
+
+ <para>最後,會有人(可能是文件計劃總管,或是 Documentation Engineering Team <email>doceng@FreeBSD.org</email> 成員) 會檢閱你的翻譯文件,並確認是否可正常編譯。此外,他們會特別注意下列幾點:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>你的檔案是否都有用 RCS tag (像是 "ID" 之類的)?</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>sv_SE.ISO8859-1</filename> 是否可以順利<command>make all</command> 編譯呢?</para>
+ </listitem>
+
+ <listitem>
+ <para><command>make install</command> 是否結果有正確</para>
+ </listitem>
+ </orderedlist>
+
+ <para>若有問題的話,那麼檢閱者會叮嚀你,來讓這些翻譯成果可以正確使用。</para>
+
+ <para>若沒問題的話,那麼就會很快把你的翻譯成果 commit 進去了。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>可以加入某語系或某國家才有的東西到翻譯內容內嗎?</para>
+ </question>
+
+ <answer>
+ <para>我們希望不要這麼做。</para>
+
+ <para>舉例來說,假設你正準備把 Handbook 翻譯為韓文版, 並希望把韓國零售商也加到你翻譯的 Handbook 韓文版內。</para>
+
+ <para>我們想不出來有啥原因,為什麼不把這些資訊提供給英文版呢?(或是德文、西班牙文、日文等 …) 因為,有可能英語讀者跑去韓國時,會想買 FreeBSD 相關產品。 此外,這也可以提升 FreeBSD 的可見度,很顯然的,這並不是件壞事啊。</para>
+
+ <para>若你有某國才有的資料,請(用 Bugzilla )提供給英文版 Handbook 以作為修訂 ,然後再把英文版的修訂部分,翻為你要翻譯的 Handbook 吧。</para>
+
+ <para>謝謝。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>要怎麼把該語系特有的字元寫進去翻譯內容呢?</para>
+ </question>
+
+ <answer>
+ <para>文件內所有的非 ASCII(Non-ASCII) 字元,都要使用 SGML entities 才能寫進去。</para>
+
+ <para>簡單來說,長相一開頭會是 and 符號(&amp;),然後是該 entity 名稱,最後接上分號(;)。</para>
+
+ <para>這些 entity 名稱都是 ISO8879 所制訂的,而 port tree 內則 <package>textproc/iso8879</package>。</para>
+
+ <para>以下舉一些例子:</para>
+
+ <segmentedlist>
+ <segtitle>Entity名稱</segtitle>
+
+ <segtitle>實際樣子</segtitle>
+
+ <segtitle xml:lang="en">Description</segtitle>
+
+ <seglistitem>
+ <seg>&amp;eacute;</seg>
+ <seg>é</seg>
+ <seg>小 <quote>e</quote>,並帶尖、重音(acute accent)</seg>
+ </seglistitem>
+
+ <seglistitem>
+ <seg>&amp;Eacute;</seg>
+ <seg>É</seg>
+ <seg>大 <quote>E</quote>,並帶尖、重音(acute accent)</seg>
+ </seglistitem>
+
+ <seglistitem>
+ <seg>&amp;uuml;</seg>
+ <seg>ü</seg>
+ <seg>小 <quote>u</quote>,並帶日耳曼語系中的母音變化(umlaut)</seg>
+ </seglistitem>
+ </segmentedlist>
+
+ <para>在裝了 iso8879 這個 port 之後,就可以在 <filename>/usr/local/share/xml/iso8879</filename> 找到這些的詳細列表。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>如何稱呼讀者呢?</para>
+ </question>
+
+ <answer>
+ <para>在英文文件內,讀者都是以 <quote>you</quote> 來稱呼,而有些語言並沒有正式/非正式的區隔。</para>
+
+ <para>若你所要翻的語言可以區別這些差異,那麼請用該語系在一般技術文件上所使用的稱呼吧。 如果容易造成困惑的話,那麼請改用較中性的稱呼來取代。</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>翻譯成果內要不要附上一些其他訊息呢?</para>
+ </question>
+
+ <answer>
+ <para>要。</para>
+
+ <para>每份英文版原稿的開頭,通常會有像下面的內容:</para>
+
+ <programlisting>&lt;!--
+ The FreeBSD Documentation Project
+
+ $FreeBSD$
+--&gt;</programlisting>
+
+ <para>實際上的內容可能稍有不同,但每份原稿都會附上 $FreeBSD$ 這一行以及<literal>The FreeBSD Documentation Project</literal> 宣告。 請注意:$FreeBSD 開頭的這行是會由 Subversion 隨著每次異動而自動更改的, 所以,新檔案的話請保持原狀(也就是只要寫 $FreeBSD$ 就好了)。</para>
+
+ <para>翻譯文件中,必須都要有 $FreeBSD$ 這行,並且把 <literal>FreeBSD Documentation Project</literal> 這行改為 <literal>The FreeBSD <replaceable>你的語系</replaceable> Documentation Project</literal>。</para>
+
+ <para>此外,還必須加上第三行來指出你所翻譯的,到底是以英文版原稿的哪一版本為母本所做的翻譯。</para>
+
+ <para>因此呢,西班牙文版(Spanish)的檔案開頭應該是長像這樣:</para>
+
+ <programlisting>&lt;!--
+ The FreeBSD Spanish Documentation Project
+
+ $FreeBSD$
+ Original revision: r38674
+--&gt;</programlisting>
+ </answer>
+ </qandaentry>
+ </qandaset>
+</chapter>
+
+
+<!--
+ The FreeBSD Documentation Project
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="po-translations">
+
+ <title><acronym>PO</acronym> 翻譯</title>
+
+ <sect1 xml:id="po-translations-introduction">
+ <title xml:lang="en">Introduction</title>
+
+ <para><link xlink:href="http://www.gnu.org/software/gettext/"><acronym>GNU</acronym> <application>gettext</application></link> 系統提供翻譯者一個簡單的方法來建立和維護文件的翻譯。翻譯的字串從原始文件題取出來到<acronym>PO</acronym> (Portable Object) 檔。字串的翻譯用另外的編輯器輸入。翻譯的字串可以直接使用,或是編譯成原始文件的完整翻譯版本。</para>
+ </sect1>
+
+ <sect1 xml:id="po-translations-quick-start">
+ <title>快速上手</title>
+
+ <para xml:lang="en">The procedure shown in
+ <xref linkend="overview-quick-start"/> is assumed to have
+ already been performed, but the <literal>TRANSLATOR</literal>
+ option must be enabled in the
+ <package role="port">textproc/docproj</package> port. If that
+ option was not enabled, display the options menu and enable
+ it, then reinstall the port:</para>
+
+ <screen><prompt>#</prompt> <userinput>cd /usr/ports/textproc/docproj</userinput>
+<prompt>#</prompt> <userinput>make config</userinput>
+<prompt>#</prompt> <userinput>make clean deinstall install clean</userinput></screen>
+
+ <para xml:lang="en">This example shows the creation of a Spanish translation of
+ the short <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/articles/leap-seconds">Leap
+ Seconds</link> article.</para>
+
+ <procedure xml:id="po-translations-quick-start-install-po-editor">
+ <title xml:lang="en">Install a <acronym>PO</acronym> Editor</title>
+
+ <step>
+ <para>編輯翻譯檔案需要<acronym>PO</acronym>編輯器。這個範例使用<package role="ports">editors/poedit</package>。</para>
+
+ <screen><prompt>#</prompt> <userinput>cd /usr/ports/editors/poedit</userinput>
+<prompt>#</prompt> <userinput>make install clean</userinput></screen>
+ </step>
+ </procedure>
+
+ <procedure xml:id="po-translations-quick-start-initial-setup">
+ <title xml:lang="en">Initial Setup</title>
+
+ <para xml:lang="en">When a new translation is first created, the directory
+ structure and <filename>Makefile</filename> must be created or
+ copied from the English original:</para>
+
+ <step>
+ <para>建立新翻譯的目錄。英文文章原始碼位於 <filename>~/doc/en_US.ISO8859-1/articles/leap-seconds/</filename> 。西班牙文翻譯將會放在 <filename>~/doc/es_ES.ISO8859-1/articles/leap-seconds/</filename> 。除了語系目錄的名稱外,其他路徑相同。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn mkdir --parents ~/doc/es_ES.ISO8859-1/articles/leap-seconds/</userinput></screen>
+ </step>
+
+ <step>
+ <para>從原始文件處將 <filename>Makefile</filename> 複製到翻譯目錄。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn cp ~/doc/en_US.ISO8859-1/articles/leap-seconds/Makefile \
+ ~/doc/es_ES.ISO8859-1/articles/leap-seconds/</userinput></screen>
+ </step>
+ </procedure>
+
+ <procedure xml:id="po-translations-quick-start-translation">
+ <title>翻譯</title>
+
+ <para xml:lang="en">Translating a document consists of two steps: extracting
+ translatable strings from the original document, and entering
+ translations for those strings. These steps are repeated
+ until the translator feels that enough of the document has
+ been translated to produce a usable translated
+ document.</para>
+
+ <step>
+ <para>從英文的原始文件提取字串到 <acronym>PO</acronym> 檔:</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/articles/leap-seconds/</userinput>
+<prompt>%</prompt> <userinput>make po</userinput></screen>
+ </step>
+
+ <step>
+ <para>使用 <acronym>PO</acronym> 編輯器將翻譯輸入 <acronym>PO</acronym> 檔。有幾個不同的編輯器可以使用。這裡用的是 <package role="port">editors/poedit</package> 的 <filename>poedit</filename> 。</para>
+
+ <para><acronym>PO</acronym> 檔名是兩個字元的語系碼後面接底線和兩個字元的區域碼。以西班牙語來說,檔名是 <filename>es_ES.po</filename> 。</para>
+
+ <screen><prompt>%</prompt> <userinput>poedit es_ES.po</userinput></screen>
+ </step>
+ </procedure>
+
+ <procedure xml:id="po-translations-quick-generating-a-translated-document">
+ <title xml:lang="en">Generating a Translated Document</title>
+
+ <step>
+ <para>產生翻譯文件</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/articles/leap-seconds/</userinput>
+<prompt>%</prompt> <userinput>make tran</userinput></screen>
+
+ <para>產生的文件名稱與英文原始文件名稱相符,文章通常是 <filename>article.xml</filename> ,書籍是 <filename>book.xml</filename> 。</para>
+ </step>
+
+ <step>
+ <para>可以轉換成 <acronym>HTML</acronym> 來檢查產生的檔案,並用瀏覽器來察看。</para>
+
+ <screen><prompt>%</prompt> <userinput>make FORMATS=html</userinput>
+<prompt>%</prompt> <userinput>firefox article.html</userinput></screen>
+ </step>
+ </procedure>
+ </sect1>
+
+ <sect1 xml:id="po-translations-creating">
+ <title>建立新翻譯</title>
+
+ <para xml:lang="en">The first step to creating a new translated document is
+ locating or creating a directory to hold it. FreeBSD puts
+ translated documents in a subdirectory named for their
+ language and region in the format
+ <filename><replaceable>lang</replaceable>_<replaceable>REGION</replaceable></filename>.
+ <replaceable>lang</replaceable> is a two-character lowercase
+ code. It is followed by an underscore character and then the
+ two-character uppercase <replaceable>REGION</replaceable>
+ code.</para>
+
+ <table xml:id="po-translations-language-names" frame="none">
+ <title>語系名稱</title>
+
+ <tgroup cols="5">
+ <thead>
+ <row>
+ <entry>語言</entry>
+ <entry>地區</entry>
+ <entry>翻譯目錄名稱</entry>
+ <entry><acronym>PO</acronym> 檔名稱</entry>
+ <entry>字元集</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>英文</entry>
+ <entry>美國</entry>
+ <entry><filename>en_US.ISO8859-1</filename></entry>
+ <entry><filename>en_US.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>孟加拉文</entry>
+ <entry>孟加拉</entry>
+ <entry><filename>bn_BD.UTF-8</filename></entry>
+ <entry><filename>bn_BD.po</filename></entry>
+ <entry><acronym>UTF</acronym>-8</entry>
+ </row>
+
+ <row>
+ <entry>丹麥文</entry>
+ <entry>丹麥</entry>
+ <entry><filename>da_DK.ISO8859-1</filename></entry>
+ <entry><filename>da_DK.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>德文</entry>
+ <entry>德國</entry>
+ <entry><filename>de_DE.ISO8859-1</filename></entry>
+ <entry><filename>de_DE.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>希臘文</entry>
+ <entry>希臘</entry>
+ <entry><filename>el_GR.ISO8859-7</filename></entry>
+ <entry><filename>el_GR.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-7</entry>
+ </row>
+
+ <row>
+ <entry>西班牙文</entry>
+ <entry>西班牙</entry>
+ <entry><filename>es_ES.ISO8859-1</filename></entry>
+ <entry><filename>es_ES.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>法文</entry>
+ <entry>法國</entry>
+ <entry><filename>fr_FR.ISO8859-1</filename></entry>
+ <entry><filename>fr_FR.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>匈牙利文</entry>
+ <entry>匈牙利</entry>
+ <entry><filename>hu_HU.ISO8859-2</filename></entry>
+ <entry><filename>hu_HU.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-2</entry>
+ </row>
+
+ <row>
+ <entry>義大利文</entry>
+ <entry>義大利</entry>
+ <entry><filename>it_IT.ISO8859-15</filename></entry>
+ <entry><filename>it_IT.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-15</entry>
+ </row>
+
+ <row>
+ <entry>日文</entry>
+ <entry>日本</entry>
+ <entry><filename>ja_JP.eucJP</filename></entry>
+ <entry><filename>ja_JP.po</filename></entry>
+ <entry><acronym>EUC</acronym> JP</entry>
+ </row>
+
+ <row>
+ <entry>韓文</entry>
+ <entry>韓國</entry>
+ <entry><filename>ko_KR.UTF-8</filename></entry>
+ <entry><filename>ko_KR.po</filename></entry>
+ <entry><acronym>UTF</acronym>-8</entry>
+ </row>
+
+ <row>
+ <entry>蒙古文</entry>
+ <entry>蒙古</entry>
+ <entry><filename>mn_MN.UTF-8</filename></entry>
+ <entry><filename>mn_MN.po</filename></entry>
+ <entry><acronym>UTF</acronym>-8</entry>
+ </row>
+
+ <row>
+ <entry>荷蘭文</entry>
+ <entry>荷蘭</entry>
+ <entry><filename>nl_NL.ISO8859-1</filename></entry>
+ <entry><filename>nl_NL.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>挪威文</entry>
+ <entry>挪威</entry>
+ <entry><filename>no_NO.ISO8859-1</filename></entry>
+ <entry><filename>no_NO.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>波蘭文</entry>
+ <entry>波蘭</entry>
+ <entry><filename>pl_PL.ISO8859-2</filename></entry>
+ <entry><filename>pl_PL.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-2</entry>
+ </row>
+
+ <row>
+ <entry>葡萄牙文</entry>
+ <entry>巴西</entry>
+ <entry><filename>pt_BR.ISO8859-1</filename></entry>
+ <entry><filename>pt_BR.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-1</entry>
+ </row>
+
+ <row>
+ <entry>俄文</entry>
+ <entry>俄羅斯</entry>
+ <entry><filename>ru_RU.KOI8-R</filename></entry>
+ <entry><filename>ru_RU.po</filename></entry>
+ <entry><acronym>KOI</acronym>8-R</entry>
+ </row>
+
+ <row>
+ <entry>賽爾維亞</entry>
+ <entry>賽爾維亞文</entry>
+ <entry><filename>sr_YU.ISO8859-2</filename></entry>
+ <entry><filename>sr_YU.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-2</entry>
+ </row>
+
+ <row>
+ <entry>土耳其文</entry>
+ <entry>土耳其</entry>
+ <entry><filename>tr_TR.ISO8859-9</filename></entry>
+ <entry><filename>tr_TR.po</filename></entry>
+ <entry><acronym>ISO</acronym> 8859-9</entry>
+ </row>
+
+ <row>
+ <entry>中文</entry>
+ <entry>中國</entry>
+ <entry><filename>zh_CN.UTF-8</filename></entry>
+ <entry><filename>zh_CN.po</filename></entry>
+ <entry><acronym>UTF</acronym>-8</entry>
+ </row>
+
+ <row>
+ <entry>中文</entry>
+ <entry>台灣</entry>
+ <entry><filename>zh_TW.UTF-8</filename></entry>
+ <entry><filename>zh_TW.po</filename></entry>
+ <entry><acronym>UTF</acronym>-8</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>翻譯位於主要文件目錄的子目錄,這裡假設如 <xref linkend="overview-quick-start"/> 所示,是 <filename>~/doc/</filename>。例如德文位於 <filename>~/doc/de_DE.ISO8859-1/</filename>, 法文位於 <filename>~/doc/fr_FR.ISO8859-1/</filename>。</para>
+
+ <para>每個語系目錄包含不同文件類型的子目錄,通常是 <filename>articles/</filename> 和 <filename>books/</filename>。</para>
+
+ <para>將目錄名稱組合起來就是文章或書的完整路徑。例如,NanoBSD 文章的法語翻譯在 <filename>~/doc/fr_FR.ISO8859-1/articles/nanobsd/</filename> 。而使用手冊的蒙古文翻譯在<filename>~/doc/mn_MN.UTF-8/books/handbook/</filename> 。</para>
+
+ <para>當翻譯到一個新語系時必須建立一個新的語系目錄。如果語系目錄已經存在,那只需要有 <filename>articles/</filename> 或 <filename>books/</filename> 的子目錄。</para>
+
+ <para>FreeBSD 文件的編譯是由同一個目錄的 <filename>Makefile</filename> 控制。簡單的文章可以從原始的英語目錄直接複製 <filename>Makefile</filename> 過來。書籍的翻譯流程結合多個獨立的 <filename>book.xml</filename> 和 <filename>chapter.xml</filename> 成為一個檔案, 所以書籍翻譯的 <filename>Makefile</filename> 必須複製並修改。</para>
+
+ <example xml:id="po-translations-creating-example">
+ <title xml:lang="en">Creating a Spanish Translation of the Porter's
+ Handbook</title>
+
+ <para>建立<link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/porters-handbook">Porter 手冊</link>的西班牙文翻譯。原文是位於 <filename>~/doc/en_US.ISO8859-1/books/porters-handbook/</filename> 的書籍。</para>
+
+ <procedure>
+ <step>
+ <para>西班牙文 books 目錄 <filename>~/doc/es_ES.ISO8859-1/books/</filename> 已經存在,所以只要建立 Porter 手冊的子目錄:</para>
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/books/</userinput>
+<prompt>%</prompt> <userinput>svn mkdir porters-handbook</userinput>
+A porters-handbook</screen>
+ </step>
+
+ <step>
+ <para>從原始文件的目錄複製 <filename>Makefile</filename> :</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/books/porters-handbook</userinput>
+<prompt>%</prompt> <userinput>svn cp ~/doc/en_US.ISO8859-1/books/porters-handbook/Makefile .</userinput>
+A Makefile</screen>
+
+ <para>修改 <filename>Makefile</filename> 內容以產生單一的 <filename>book.xml</filename>:</para>
+
+ <programlisting>#
+# $FreeBSD$
+#
+# Build the FreeBSD Porter's Handbook。
+#
+
+MAINTAINER=doc@FreeBSD.org
+
+DOC?= book
+
+FORMATS?= html-split
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+# XML content
+SRCS= book.xml
+
+# Images from the cross-document image library
+IMAGES_LIB+= callouts/1.png
+IMAGES_LIB+= callouts/2.png
+IMAGES_LIB+= callouts/3.png
+IMAGES_LIB+= callouts/4.png
+IMAGES_LIB+= callouts/5.png
+IMAGES_LIB+= callouts/6.png
+IMAGES_LIB+= callouts/7.png
+IMAGES_LIB+= callouts/8.png
+IMAGES_LIB+= callouts/9.png
+IMAGES_LIB+= callouts/10.png
+IMAGES_LIB+= callouts/11.png
+IMAGES_LIB+= callouts/12.png
+IMAGES_LIB+= callouts/13.png
+IMAGES_LIB+= callouts/14.png
+IMAGES_LIB+= callouts/15.png
+IMAGES_LIB+= callouts/16.png
+IMAGES_LIB+= callouts/17.png
+IMAGES_LIB+= callouts/18.png
+IMAGES_LIB+= callouts/19.png
+IMAGES_LIB+= callouts/20.png
+IMAGES_LIB+= callouts/21.png
+
+URL_RELPREFIX?= ../../../..
+DOC_PREFIX?= ${.CURDIR}/../../..
+
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"</programlisting>
+
+ <para xml:lang="en">Now the document structure is ready for the translator
+ to begin translating with
+ <command>make po</command>.</para>
+ </step>
+ </procedure>
+ </example>
+
+ <example xml:id="po-translations-creating-example-french">
+ <title>建立 <acronym>PGP</acronym> 金鑰文章的法語翻譯。</title>
+
+ <para>建立 <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/articles/pgpkeys"><acronym>PGP</acronym> 金鑰文章</link>的法文翻譯。原文是位於 <filename>~/doc/en_US.ISO8859-1/articles/pgpkeys/</filename> 的文章。</para>
+
+ <procedure>
+ <step>
+ <para>法文 article 目錄 <filename>~/doc/fr_FR.ISO8859-1/articles/</filename> 已經存在,所以只要建立 <acronym>PGP</acronym> 金鑰文章的子目錄:</para>
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/fr_FR.ISO8859-1/articles/</userinput>
+<prompt>%</prompt> <userinput>svn mkdir pgpkeys</userinput>
+A pgpkeys</screen>
+ </step>
+
+ <step>
+ <para>從原始文件的目錄複製 <filename>Makefile</filename> :</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/fr_FR.ISO8859-1/articles/pgpkeys</userinput>
+<prompt>%</prompt> <userinput>svn cp ~/doc/en_US.ISO8859-1/articles/pgpkeys/Makefile .</userinput>
+A Makefile</screen>
+
+ <para>檢查 <filename>Makefile</filename> 的內容。因為這是簡單的文章,此例的 <filename>Makefile</filename> 不用修改。第二行的 <literal>$FreeBSD...$</literal> 版本字串將會在檔案提交時被版本控制系統替換掉。</para>
+
+ <programlisting>#
+# $FreeBSD$
+#
+# Article:PGP Keys
+
+DOC?= article
+
+FORMATS?= html
+WITH_ARTICLE_TOC?= YES
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+SRCS= article.xml
+
+# To build with just key fingerprints, set FINGERPRINTS_ONLY。
+
+URL_RELPREFIX?= ../../../..
+DOC_PREFIX?= ${.CURDIR}/../../..
+
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"</programlisting>
+
+ <para>文章結構處理好後, 可以執行建立 <command>make po</command> 建立 <acronym>PO</acronym> 檔。</para>
+ </step>
+ </procedure>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="po-translations-translating">
+ <title xml:lang="en">Translating</title>
+
+ <para><application>gettext</application>系統大幅減少翻譯者要追蹤的事情。 字串從原始文件提取到<acronym>PO</acronym> 檔。再用 <acronym>PO</acronym> 檔編輯器輸入字串的翻譯。</para>
+
+ <para>FreeBSD <acronym>PO</acronym> 翻譯系統不會覆蓋掉 <acronym>PO</acronym> 檔。所以提取步驟可以在任何時候重複執行來更新 <acronym>PO</acronym> 檔。</para>
+
+ <para>用 <acronym>PO</acronym> 檔編輯器來編輯檔案。此例是用 <package role="port">editors/poedit</package>,因為它很簡單而且系統需求低。其他的 <acronym>PO</acronym> 檔編輯器提供一些特點,能使翻譯工作更輕鬆。Ports 裡有數個編輯器,包括 <package role="port">devel/gtranslator</package> 。</para>
+
+ <para>保留 <acronym>PO</acronym> 檔是很重要的。它包含所有的翻譯成果。</para>
+
+ <example xml:id="po-translations-translating-example">
+ <title>翻譯 Porter 手冊到西班牙文</title>
+
+ <para>輸入 Porter 手冊的西班牙文內容</para>
+
+ <procedure>
+ <step>
+ <para>切換到西班牙文 Porter 手冊的目錄並更新 <acronym>PO</acronym> 檔。產生的 <acronym>PO</acronym> 檔如 <xref linkend="po-translations-language-names"/> 所示,名叫 <filename>es_ES.po</filename> 。</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/books/porters-handbook</userinput>
+<prompt>%</prompt> <userinput>make po</userinput></screen>
+ </step>
+
+ <step>
+ <para>使用 <acronym>PO</acronym> 檔編輯器輸入翻譯:</para>
+
+ <screen><prompt>%</prompt> <userinput>poedit es_ES.po</userinput></screen>
+ </step>
+ </procedure>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="po-translations-tips">
+ <title xml:lang="en">Tips for Translators</title>
+
+ <sect2 xml:id="po-translations-tips-xmltags">
+ <title>保留 <acronym>XML</acronym> 標籤</title>
+
+ <para xml:lang="en">Preserve <acronym>XML</acronym> tags that are shown in
+ the English original.</para>
+
+ <example>
+ <title>保留 <acronym>XML</acronym> 標籤</title>
+
+ <para>英文原文:</para>
+
+ <programlisting>If <tag class="starttag">acronym</tag>NTP<tag class="endtag">acronym</tag> is not being used</programlisting>
+
+ <para>西班牙文翻譯:</para>
+
+ <programlisting>Si <tag class="starttag">acronym</tag>NTP<tag class="endtag">acronym</tag> no se utiliza</programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="po-translations-tips-spaces">
+ <title>保留空白</title>
+
+ <para>保留要翻譯字串前後的空白。翻譯的版本也要有這些空白。</para>
+ </sect2>
+
+ <sect2 xml:id="po-translations-tips-verbatim">
+ <title>不要翻譯的標籤</title>
+
+ <para>有些標籤的內容要一字不差地保留,不要翻譯。</para>
+
+ <itemizedlist xml:id="po-translations-tips-verbatim-list">
+ <listitem>
+ <para><tag class="starttag">citerefentry</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">command</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">filename</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">literal</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">manvolnum</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">orgname</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">package</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">programlisting</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">prompt</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">refentrytitle</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">screen</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">userinput</tag></para>
+ </listitem>
+
+ <listitem>
+ <para><tag class="starttag">varname</tag></para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 xml:id="po-translations-literal-dollar">
+ <title><literal>$FreeBSD$</literal> 字串</title>
+
+ <para>檔案裡的 $FreeBSD$ 版本字串需要特別處理。例如 <xref linkend="po-translations-creating-example"/> 裡,這些字串不是要被展開 (expanded)。英文文件使用 <literal>&amp;dollar;</literal> entities 來避免使用實際的金錢符號。</para>
+
+ <programlisting>&amp;dollar;FreeBSD&amp;dollar;</programlisting>
+
+ <para>版本控制符號不會把 <literal>&amp;dollar;</literal> entities 看成金錢符號,所以不會把字串展開成版本字串。</para>
+
+ <para>當 <acronym>PO</acronym> 檔建立後,範例中的 <literal>&amp;dollar;</literal> entities 被實際的金錢符號取代。當檔案提交時,產生的 <literal>$FreeBSD$</literal> 將會被版本控制系統展開。</para>
+
+ <para>英文文件用的相同技術可以被用在翻譯上。翻譯時用 <literal>&amp;dollar;</literal> 來取代金錢符號,輸入到 <acronym>PO</acronym> 檔編輯器:</para>
+
+ <programlisting>&amp;dollar;FreeBSD&amp;dollar;</programlisting>
+ </sect2>
+
+ <!--
+ <sect2 xml:id="po-translations-tips-makefile">
+ <title>Modifying the <filename>Makefile</filename></title>
+
+ <para>What needs to be changed in the
+ <filename>Makefile</filename>?</para>
+ </sect2>
+
+ <sect2 xml:id="po-translations-tips-locale">
+ <title>Setting Locales for Editing</title>
+
+ <para>Locale settings so the <acronym>PO</acronym> editor works
+ correctly?</para>
+ </sect2>
+
+ <sect2 xml:id="po-translations-tips-poeditors">
+ <title>Settings for Specific <acronym>PO</acronym>
+ Editors</title>
+
+ <para>Per bcr: turn off "intelligent quotes" in
+ Mac poedit.</para>
+ </sect2>
+
+ <sect2 xml:id="po-translations-tips-tm">
+ <title>Using Translation Memory</title>
+
+ <para>Using translation memory. Saving, updating, sharing
+ with other members of a translation team.</para>
+ </sect2>
+
+ <sect2 xml:id="po-translations-tips-submitting">
+ <title>Submitting Translations</title>
+
+ <para>Submitting translations as diffs, committing
+ <acronym>PO</acronym> files.</para>
+ </sect2>
+ -->
+ </sect1>
+
+ <sect1 xml:id="po-translations-building">
+ <title>編譯翻譯的文件</title>
+
+ <para>原文的翻譯版本可以在任何時候被建立。未翻譯的部份會以英文呈獻。大部份 <acronym>PO</acronym> 編輯器有指標可以顯示翻譯完成度。這讓翻譯者更容易看翻譯好的字串是否足夠來編譯最終的文件。</para>
+
+ <example xml:id="po-translations-building-example">
+ <title xml:lang="en">Building the Spanish Porter's Handbook</title>
+
+ <para>編譯和預覽之前範例翻譯的西班牙文版 Porter 手冊</para>
+
+ <procedure>
+ <step>
+ <para>編譯翻譯好的文件。因為原文是書籍,所以產生的文件是<filename>book.xml</filename>。</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/books/porters-handbook</userinput>
+<prompt>%</prompt> <userinput>make tran</userinput></screen>
+ </step>
+
+ <step>
+ <para>轉換翻譯好的<filename>book.xml</filename>成<acronym>HTML</acronym>並用<application>Firefox</application>來瀏覽。這和英文版是相同的步驟,其他 <varname>FORMATS</varname> 也可以這樣做。請見<xref linkend="doc-build-rendering-common-formats"/> 。</para>
+
+ <screen><prompt>%</prompt> <userinput>make FORMATS=html</userinput>
+<prompt>%</prompt> <userinput>firefox book.html</userinput></screen>
+ </step>
+ </procedure>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="po-translations-submitting">
+ <title>提交新翻譯</title>
+
+ <para>準備要提交的新翻譯。這包含新增檔案到版本控制系統,對檔案設定額外的屬性,並建立 diff 來提交。</para>
+
+ <para>範例中產生的 diff 檔可以被附加到 <link xlink:href="https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Documentation">documentation bug report</link> 或 <link xlink:href="https://reviews.freebsd.org/">code review</link> 。</para>
+
+ <example xml:id="po-translations-submitting-spanish">
+ <title>NanoBSD 文章的西班牙文翻譯</title>
+
+ <procedure>
+ <step>
+ <para>增加 FreeBSD 版本字串註解到 <acronym>PO</acronym> 檔的第一行:</para>
+
+ <programlisting>#$FreeBSD$</programlisting>
+ </step>
+
+ <step>
+ <para>增加 <filename>Makefile</filename> 、<acronym>PO</acronym> 檔和產生的 <acronym>XML</acronym> 翻譯到版本控制系統:</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/es_ES.ISO8859-1/articles/nanobsd/</userinput>
+<prompt>%</prompt> <userinput>ls</userinput>
+Makefile article.xml es_ES.po
+<prompt>%</prompt> <userinput>svn add Makefile article.xml es_ES.po</userinput>
+A Makefile
+A article.xml
+A es_ES.po</screen>
+ </step>
+
+ <step>
+ <para>設定這些檔案的 <application>Subversion</application> <literal>svn:keywords</literal> 屬性到 <literal>FreeBSD=%H</literal>,讓提交時 <literal>$FreeBSD$</literal> 字串可以被展開成路徑、版本、日期和作者。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn propset svn:keywords FreeBSD=%H Makefile article.xml es_ES.po</userinput>
+property 'svn:keywords' set on 'Makefile'
+property 'svn:keywords' set on 'article.xml'
+property 'svn:keywords' set on 'es_ES.po'</screen>
+ </step>
+
+ <step>
+ <para>設定檔案的<acronym>MIME</acronym> 類型。書籍和文章是 <literal>text/xml</literal> ,<acronym>PO</acronym> 檔是 <literal>text/x-gettext-translation</literal> 。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn propset svn:mime-type text/x-gettext-translation es_ES.po</userinput>
+property 'svn:mime-type' set on 'es_ES.po'
+<prompt>%</prompt> <userinput>svn propset svn:mime-type text/xml article.xml</userinput>
+property 'svn:mime-type' set on 'article.xml'</screen>
+ </step>
+
+ <step>
+ <para>從 <filename>~/doc/</filename> 建立這些新檔案的 diff,讓檔名顯示完整的路徑。這可以幫助提交者辨識目標語系目錄。</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc</userinput>
+<userinput>svn diff es_ES.ISO8859-1/articles/nanobsd/ &gt; /tmp/es_nanobsd.diff</userinput></screen>
+ </step>
+ </procedure>
+ </example>
+
+ <example xml:id="po-translations-submitting-korean-utf8">
+ <title>Explaining-BSD 文章的韓文 <acronym>UTF-8</acronym> 翻譯</title>
+
+ <procedure>
+ <step>
+ <para>增加 FreeBSD 版本字串註解到 <acronym>PO</acronym> 檔的第一行:</para>
+
+ <programlisting>#$FreeBSD$</programlisting>
+ </step>
+
+ <step>
+ <para>增加 <filename>Makefile</filename> 、<acronym>PO</acronym> 檔和產生的 <acronym>XML</acronym> 翻譯到版本控制系統:</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc/ko_KR.UTF-8/articles/explaining-bsd/</userinput>
+<prompt>%</prompt> <userinput>ls</userinput>
+Makefile article.xml ko_KR.po
+<prompt>%</prompt> <userinput>svn add Makefile article.xml ko_KR.po</userinput>
+A Makefile
+A article.xml
+A ko_KR.po</screen>
+ </step>
+
+ <step>
+ <para>設定這些檔案的 <application>Subversion</application> <literal>svn:keywords</literal> 屬性到 <literal>FreeBSD=%H</literal>,讓提交時 <literal>$FreeBSD$</literal> 字串可以被展開成路徑、版本、日期和作者。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn propset svn:keywords FreeBSD=%H Makefile article.xml ko_KR.po</userinput>
+property 'svn:keywords' set on 'Makefile'
+property 'svn:keywords' set on 'article.xml'
+property 'svn:keywords' set on 'ko_KR.po'</screen>
+ </step>
+
+ <step>
+ <para>設定檔案的 <acronym>MIME</acronym> 類型。因為這些檔案使用 <acronym>UTF-8</acronym> 字元集,這也需要指定。為了防止版本控制系統將這些檔案誤認為二進位資料,<literal>fbsd:notbinary</literal> 屬性也需要設定。</para>
+
+ <screen><prompt>%</prompt> <userinput>svn propset svn:mime-type 'text/x-gettext-translation;charset=UTF-8' ko_KR.po</userinput>
+property 'svn:mime-type' set on 'ko_KR.po'
+<prompt>%</prompt> <userinput>svn propset fbsd:notbinary yes ko_KR.po</userinput>
+property 'fbsd:notbinary' set on 'ko_KR.po'
+<prompt>%</prompt> <userinput>svn propset svn:mime-type 'text/xml;charset=UTF-8' article.xml</userinput>
+property 'svn:mime-type' set on 'article.xml'
+<prompt>%</prompt> <userinput>svn propset fbsd:notbinary yes article.xml</userinput>
+property 'fbsd:notbinary' set on 'article.xml'</screen>
+ </step>
+
+ <step>
+ <para>從 <filename>~/doc/</filename> 建立這些新檔案的 diff。</para>
+
+ <screen><prompt>%</prompt> <userinput>cd ~/doc</userinput>
+<userinput>svn diff ko_KR.UTF-8/articles/explaining-bsd &gt; /tmp/ko-explaining.diff</userinput></screen>
+ </step>
+ </procedure>
+ </example>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="writing-style">
+ <title>寫作風格</title>
+
+ <sect1 xml:id="writing-style-tips">
+ <title>叮嚀</title>
+
+ <para xml:lang="en">Technical documentation can be improved by consistent use of
+ several principles. Most of these can be classified into three
+ goals: <emphasis>be clear</emphasis>,
+ <emphasis>be complete</emphasis>, and
+ <emphasis>be concise</emphasis>. These goals can conflict with
+ each other. Good writing consists of a balance between
+ them.</para>
+
+ <sect2 xml:id="writing-style-be-clear">
+ <title xml:lang="en">Be Clear</title>
+
+ <para xml:lang="en">Clarity is extremely important. The reader may be a
+ novice, or reading the document in a second language. Strive
+ for simple, uncomplicated text that clearly explains the
+ concepts.</para>
+
+ <para xml:lang="en">Avoid flowery or embellished speech, jokes, or colloquial
+ expressions. Write as simply and clearly as possible. Simple
+ text is easier to understand and translate.</para>
+
+ <para xml:lang="en">Keep explanations as short, simple, and clear as possible.
+ Avoid empty phrases like <quote>in order to</quote>, which
+ usually just means <quote>to</quote>. Avoid potentially
+ patronizing words like <quote>basically</quote>. Avoid Latin
+ terms like <quote>i.e.</quote> or <quote>cf.</quote>, which
+ may be unknown outside of academic or scientific
+ groups.</para>
+
+ <para xml:lang="en">Write in a formal style. Avoid addressing the reader
+ as <quote>you</quote>. For example, say
+ <quote>copy the file to <filename>/tmp</filename></quote>
+ rather than <quote>you can copy the file to
+ <filename>/tmp</filename></quote>.</para>
+
+ <para xml:lang="en">Give clear, correct, <emphasis>tested</emphasis> examples.
+ A trivial example is better than no example. A good example
+ is better yet. Do not give bad examples, identifiable by
+ apologies or sentences like <quote>but really it should never
+ be done that way</quote>. Bad examples are worse than no
+ examples. Give good examples, because <emphasis>even when
+ warned not to use the example as shown</emphasis>, the
+ reader will usually just use the example as shown.</para>
+
+ <para xml:lang="en">Avoid <emphasis>weasel words</emphasis> like
+ <quote>should</quote>, <quote>might</quote>,
+ <quote>try</quote>, or <quote>could</quote>. These words
+ imply that the speaker is unsure of the facts, and
+ create doubt in the reader.</para>
+
+ <para xml:lang="en">Similarly, give instructions as imperative commands: not
+ <quote>you should do this</quote>, but merely
+ <quote>do this</quote>.</para>
+ </sect2>
+
+ <sect2 xml:id="writing-style-be-complete">
+ <title xml:lang="en">Be Complete</title>
+
+ <para xml:lang="en">Do not make assumptions about the reader's abilities or
+ skill level. Tell them what they need to know. Give links to
+ other documents to provide background information without
+ having to recreate it. Put yourself in the reader's place,
+ anticipate the questions they will ask, and answer
+ them.</para>
+ </sect2>
+
+ <sect2 xml:id="writing-style-be-concise">
+ <title xml:lang="en">Be Concise</title>
+
+ <para xml:lang="en">While features should be documented completely, sometimes
+ there is so much information that the reader cannot easily
+ find the specific detail needed. The balance between being
+ complete and being concise is a challenge. One approach is to
+ have an introduction, then a <quote>quick start</quote>
+ section that describes the most common situation, followed by
+ an in-depth reference section.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="writing-style-guidelines">
+ <title xml:lang="en">Guidelines</title>
+
+ <para xml:lang="en">To promote consistency between the myriad authors of the
+ FreeBSD documentation, some guidelines have been drawn up for
+ authors to follow.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term xml:lang="en">Use American English Spelling</term>
+
+ <listitem>
+ <para xml:lang="en">There are several variants of English, with different
+ spellings for the same word. Where spellings differ, use
+ the American English variant. <quote>color</quote>, not
+ <quote>colour</quote>, <quote>rationalize</quote>, not
+ <quote>rationalise</quote>, and so on.</para>
+
+ <note>
+ <para xml:lang="en">The use of British English may be accepted in the
+ case of a contributed article, however the spelling must
+ be consistent within the whole document. The other
+ documents such as books, web site, manual pages, etc.
+ will have to use American English.</para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en">Do not use contractions</term>
+
+ <listitem>
+ <para xml:lang="en">Do not use contractions. Always spell the phrase out
+ in full. <quote>Don't use contractions</quote> is
+ wrong.</para>
+
+ <para xml:lang="en">Avoiding contractions makes for a more formal tone, is
+ more precise, and is slightly easier for
+ translators.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en">Use the serial comma</term>
+
+ <listitem>
+ <para xml:lang="en">In a list of items within a paragraph, separate each
+ item from the others with a comma. Separate the last item
+ from the others with a comma and the word
+ <quote>and</quote>.</para>
+
+ <para xml:lang="en">For example:</para>
+
+ <blockquote>
+ <para xml:lang="en">This is a list of one, two and three items.</para>
+ </blockquote>
+
+ <para xml:lang="en">Is this a list of three items, <quote>one</quote>,
+ <quote>two</quote>, and <quote>three</quote>, or a list of
+ two items, <quote>one</quote> and <quote>two and
+ three</quote>?</para>
+
+ <para xml:lang="en">It is better to be explicit and include a serial
+ comma:</para>
+
+ <blockquote>
+ <para xml:lang="en">This is a list of one, two, and three items.</para>
+ </blockquote>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en">Avoid redundant phrases</term>
+
+ <listitem>
+ <para xml:lang="en">Do not use redundant phrases. In particular,
+ <quote>the command</quote>, <quote>the file</quote>, and
+ <quote>man command</quote> are often redundant.</para>
+
+ <para xml:lang="en">For example, commands:</para>
+
+ <informalexample>
+ <para xml:lang="en">Wrong: Use the <command>svn</command> command to
+ update sources.</para>
+ </informalexample>
+
+ <informalexample>
+ <para xml:lang="en">Right: Use <command>svn</command> to update
+ sources.</para>
+ </informalexample>
+
+ <para xml:lang="en">Filenames:</para>
+
+ <informalexample>
+ <para xml:lang="en">Wrong: … in the filename
+ <filename>/etc/rc.local</filename>…</para>
+ </informalexample>
+
+ <informalexample>
+ <para xml:lang="en">Right: … in
+ <filename>/etc/rc.local</filename>…</para>
+ </informalexample>
+
+ <para xml:lang="en">Manual page references (the second example uses
+ <tag>citerefentry</tag> with the
+ <literal>&amp;man.csh.1;</literal> entity):.</para>
+
+ <informalexample>
+ <para xml:lang="en">Wrong: See <command>man csh</command> for more
+ information.</para>
+ </informalexample>
+
+ <informalexample>
+ <para xml:lang="en">Right: See <citerefentry><refentrytitle>csh</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+ </informalexample>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term xml:lang="en">Two spaces between sentences</term>
+
+ <listitem>
+ <para xml:lang="en">Always use two spaces between sentences, as it
+ improves readability and eases use of tools such as
+ <application>Emacs</application>.</para>
+
+ <para xml:lang="en">A period and spaces followed by a capital letter
+ does not always mark a new sentence, especially in names.
+ <quote>Jordan K. Hubbard</quote> is a good example. It
+ has a capital <literal>H</literal> following a period and
+ a space, and is certainly not a new sentence.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para xml:lang="en">For more information about writing style, see <link xlink:href="http://www.bartleby.com/141/">Elements of
+ Style</link>, by William Strunk.</para>
+ </sect1>
+
+ <sect1 xml:id="writing-style-guide">
+ <title>風格指南</title>
+
+ <para>由於文件是由眾多作者所維護,為了保持寫作風格的一貫性, 請遵守下列撰寫風格慣例。</para>
+
+ <sect2>
+ <title xml:lang="en">Letter Case</title>
+
+ <para>Tag 的部份都是用小寫字母,譬如是用 <tag>para</tag> ,<emphasis>而非</emphasis><tag>PARA</tag>。</para>
+
+ <para>而 SGML 內文則是用大寫字母表示,像是: <literal>&lt;!ENTITY…&gt;</literal> 及 <literal>&lt;!DOCTYPE…&gt;</literal>, <emphasis>而不是</emphasis> <literal>&lt;!entity…&gt;</literal> 及 <literal>&lt;!doctype…&gt;</literal>。</para>
+ </sect2>
+
+ <sect2 xml:id="writing-style-acronyms">
+ <title xml:lang="en">Acronyms</title>
+
+ <para>縮寫字(acronym)通常在書中第一次提到時,必須同時列出完整拼法, 比如:<quote>Network Time Protocol (<acronym>NTP</acronym>)</quote>。 定義縮寫字之後,應該儘量只使用該縮寫字(而非完整詞彙, 除非使用完整詞彙可以更能表達語意)來表達即可。 通常每本書只會第一次提到時,才會列出完整詞彙, 但若您高興也可以在每章第一次提到時又列出完整詞彙。</para>
+
+ <para>所有縮寫要包在<tag>acronym</tag>標籤內。</para>
+ </sect2>
+
+ <sect2 xml:id="writing-style-indentation">
+ <title>縮排</title>
+
+ <para><emphasis>無論</emphasis>檔案縮排設定為何, 每個檔案的第一行都不縮排。</para>
+
+ <para>未完的標籤會以多兩個空白來增加縮排, 結尾的標籤則少兩個空白來縮減縮排。 若已達 8 個空白,則以 tab 取代之。 此外,在 tab 前面不要再用空白,也不要在每行後面加上空白。 每個 tag 的內文若超過一行的話,則接下來的就多兩個空白以做縮排。</para>
+
+ <para>舉個例子,這節所用的寫法大致是下面這樣:</para>
+
+ <programlisting><tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>...<tag class="endtag">title</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>...<tag class="endtag">title</tag>
+
+ <tag class="starttag">sect2</tag>
+ <tag class="starttag">title</tag>Indentation<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>The first line in each file starts with no indentation,
+ <tag class="starttag">emphasis</tag>regardless<tag class="endtag">emphasis</tag> of the indentation level of
+ the file which might contain the current file。<tag class="endtag">para</tag>
+
+ ...
+ <tag class="endtag">sect2</tag>
+ <tag class="endtag">sect1</tag>
+<tag class="endtag">chapter</tag></programlisting>
+
+ <para xml:lang="en">Tags containing long attributes follow the same
+ rules. Following the indentation rules in this case helps
+ editors and writers see which content is inside the
+ tags:</para>
+
+ <programlisting><tag class="starttag">para</tag>See the <tag class="starttag">link
+ linkend="gmirror-troubleshooting"</tag>Troubleshooting<tag class="endtag">link</tag>
+ section if there are problems booting. Powering down and
+ disconnecting the original <tag class="starttag">filename</tag>ada0<tag class="endtag">filename</tag> disk
+ will allow it to be kept as an offline backup.<tag class="endtag">para</tag>
+
+<tag class="starttag">para</tag>It is also possible to journal the boot disk of a &amp;os;
+ system. Refer to the article <tag class="starttag">link
+ xlink:href="&amp;url.articles.gjournal-desktop;"</tag>Implementing UFS
+ Journaling on a Desktop PC<tag class="endtag">link</tag> for detailed
+ instructions.<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">When an element is too long to fit on the remainder of a
+ line without wrapping, moving the start tag to the next line
+ can make the source easier to read. In this example, the
+ <literal>systemitem</literal> element has been moved to the
+ next line to avoid wrapping and indenting:</para>
+
+ <programlisting><tag class="starttag">para</tag>With file flags, even
+ <tag class="starttag">systemitem class="username"</tag>root<tag class="endtag">systemitem</tag> can be
+ prevented from removing or altering files。<tag class="endtag">para</tag></programlisting>
+
+ <para xml:lang="en">Configurations to help various text editors conform to
+ these guidelines can be found in
+ <xref linkend="editor-config"/>.</para>
+ </sect2>
+
+ <sect2 xml:id="writing-style-tag-style">
+ <title>標籤風格</title>
+
+ <sect3 xml:id="writing-style-tag-style-spacing">
+ <title>標籤空行</title>
+
+ <para>同一縮排等級的標籤要以空一行來做區隔,而不同縮排等級的則不必。 比如:</para>
+
+ <informalexample>
+ <programlisting><tag class="starttag">article lang='en'</tag>
+ <tag class="starttag">articleinfo</tag>
+ <tag class="starttag">title</tag>NIS<tag class="endtag">title</tag>
+
+ <tag class="starttag">pubdate</tag>October 1999<tag class="endtag">pubdate</tag>
+
+ <tag class="starttag">abstract</tag>
+ <tag class="starttag">para</tag>...
+ ...
+ ...<tag class="endtag">para</tag>
+ <tag class="endtag">abstract</tag>
+ <tag class="endtag">articleinfo</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>...<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>...<tag class="endtag">para</tag>
+ <tag class="endtag">sect1</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>...<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>...<tag class="endtag">para</tag>
+ <tag class="endtag">sect1</tag>
+<tag class="endtag">article</tag></programlisting>
+ </informalexample>
+ </sect3>
+
+ <sect3 xml:id="writing-style-tag-style-separating">
+ <title>標籤的分行</title>
+
+ <para>像是 <tag>itemizedlist</tag> 這類的標籤事實上本身不含任何文字資料,必須得由其他標籤來補充內文。 這類的標籤會獨用一整行。</para>
+
+ <para>另外,像是 <tag>para</tag> 及 <tag>term</tag> 這類的標籤並不需搭配其他標籤, 就可附上文字資料,並且在標籤後面的<emphasis>同一行</emphasis>內即可立即寫上這些內文。</para>
+
+ <para>當然,這兩類的標籤結尾時也是跟上面道理相同。</para>
+
+ <para>不過,當上述這兩種標籤混用時,會有很明顯的困擾。</para>
+
+ <para>當第一類標籤的後面接上第二類標籤的話, 那麼要把這兩類標籤各自分行來寫。 後者標籤的段落, 也是需要做適當縮排調整。</para>
+
+ <para>而第二類標籤結尾時,可以與第一類標籤的結尾放在同一行。</para>
+ </sect3>
+ </sect2>
+
+ <sect2 xml:id="writing-style-whitespace-changes">
+ <title>空白的更改</title>
+
+ <para><emphasis>在提交修改時,請別在修改內容的同時, 也一起更改編排格式。</emphasis>。</para>
+
+ <para>如此一來,像是 Handbook 翻譯團隊才能迅速找出你改了哪些內容, 而不用費心思去判斷該行的改變,是由於格式重排或者內容異動。</para>
+
+ <para>舉例說明,若要在某段加上兩個句子,如此一來該段落的某行勢必會超出 80 縱列,這時請先 commmit 修改。 接著,再修飾過長行落的換行,然後再次 commit 之。 而第二次的 commit 紀錄,請明確說明這只是 whitespace-only (修改空白而已) 的更改,如此一來,翻譯團隊就可以忽略第二次 commit 了 。</para>
+ </sect2>
+
+ <sect2 xml:id="writing-style-nonbreaking-space">
+ <title>Nonbreaking space</title>
+
+ <para>請避免一些情況下的斷行:造成版面醜醜的、或是須連貫表達的同一句子。 斷行的情況會隨所閱讀的工具不同而有所不同。 尤其是透過純文字瀏覽器來看 HTML 時會更明顯看到類似下面這樣不好的編排段落:</para>
+
+ <literallayout class="monospaced">Data capacity ranges from 40 MB to 15
+GB。 Hardware compression …</literallayout>
+
+ <para>請使用 <literal>&amp;nbsp;</literal> 以避免同句子之間的斷行, 以下示範如何使用 nonbreaking spaces:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>在數字與單位之間:</para>
+ <programlisting>57600&amp;nbsp;bps</programlisting>
+ </listitem>
+
+ <listitem>
+ <para>在程式名稱與版號之間:</para>
+ <programlisting>&amp;os;&amp;nbsp;9.2</programlisting>
+ </listitem>
+
+ <listitem>
+ <para>multiword 之間 (使用時請小心,像是 <quote>The FreeBSD Brazilian Portuguese Documentation Project</quote> 這類由三到四個字所組成的, 則不用加。):</para>
+ <programlisting>Sun&amp;nbsp;Microsystems</programlisting>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="writing-style-word-list">
+ <title>詞彙表</title>
+
+ <para>以下詞彙表列出使用在 FreeBSD 文件的正確拼法和大小寫。 若找不到要找的詞彙,請詢問 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc">FreeBSD documentation project mailing list</link> 。</para>
+
+ <informaltable frame="none" pgwide="0">
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Word</entry>
+ <entry>XML Code</entry>
+ <entry>Notes</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>CD-ROM</entry>
+
+ <entry><tag class="starttag">acronym</tag><literal>CD-ROM</literal><tag class="endtag">acronym</tag></entry>
+ </row>
+
+ <row>
+ <entry>DoS (Denial of Service)</entry>
+ <entry><tag class="starttag">acronym</tag><literal>DoS</literal><tag class="endtag">acronym</tag></entry>
+ </row>
+
+ <row>
+ <entry>email</entry>
+ </row>
+
+ <row>
+ <entry>file system</entry>
+ </row>
+
+ <row>
+ <entry>IPsec</entry>
+ </row>
+
+ <row>
+ <entry>Internet</entry>
+ </row>
+
+ <row>
+ <entry>manual page</entry>
+ </row>
+
+ <row>
+ <entry>mail server</entry>
+ </row>
+
+ <row>
+ <entry>name server</entry>
+ </row>
+
+ <row>
+ <entry>Ports Collection</entry>
+ </row>
+
+ <row>
+ <entry>read-only</entry>
+ </row>
+
+ <row>
+ <entry>Soft Updates</entry>
+ </row>
+
+ <row>
+ <entry>stdin</entry>
+ <entry><tag class="starttag">varname</tag>stdin<tag class="endtag">varname</tag></entry>
+ </row>
+
+ <row>
+ <entry>stdout</entry>
+ <entry><tag class="starttag">varname</tag>stdout<tag class="endtag">varname</tag></entry>
+ </row>
+
+ <row>
+ <entry>stderr</entry>
+ <entry><tag class="starttag">varname</tag>stderr<tag class="endtag">varname</tag></entry>
+ </row>
+
+ <row>
+ <entry>Subversion</entry>
+
+ <entry><tag class="starttag">application</tag><literal>Subversion</literal><tag class="endtag">application</tag></entry>
+ <entry>不要用大寫<literal>SVN</literal>來表示 Subversion應用程式。以<tag class="starttag">command</tag><literal>svn</literal><tag class="endtag">command</tag>來表示指令。</entry>
+ </row>
+
+ <row>
+ <entry xml:lang="en"><trademark class="registered">UNIX</trademark></entry>
+ <entry xml:lang="en"><literal>&amp;unix;</literal></entry>
+ </row>
+
+ <row>
+ <entry>userland</entry>
+ <entry/>
+ <entry xml:lang="en">things that apply to user space, not the
+ kernel</entry>
+ </row>
+
+ <row>
+ <entry>web server</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 2013 Warren Block
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="editor-config">
+
+ <title xml:lang="en">Editor Configuration</title>
+
+ <para xml:lang="en">Adjusting text editor configuration can make working on
+ document files quicker and easier, and help documents conform to
+ <acronym>FDP</acronym> guidelines.</para>
+
+ <sect1 xml:id="editor-config-vim">
+ <title xml:lang="en"><application>Vim</application></title>
+
+ <para xml:lang="en">Install from <package>editors/vim</package>
+ or <package>editors/vim-lite</package>.</para>
+
+ <sect2 xml:id="editor-config-vim-config">
+ <title xml:lang="en">Configuration</title>
+
+ <para xml:lang="en">Edit <filename>~/.vimrc</filename>, adding these
+ lines:</para>
+
+ <programlisting xml:lang="en">if has("autocmd")
+ au BufNewFile,BufRead *.sgml,*.ent,*.xsl,*.xml call Set_SGML()
+ au BufNewFile,BufRead *.[1-9] call ShowSpecial()
+endif " has(autocmd)
+
+function Set_Highlights()
+ "match ExtraWhitespace /^\s* \s*\|\s\+$/
+ highlight default link OverLength ErrorMsg
+ match OverLength /\%71v.\+/
+ return 0
+endfunction
+
+function ShowSpecial()
+ setlocal list listchars=tab:&gt;&gt;,trail:*,eol:$
+ hi def link nontext ErrorMsg
+ return 0
+endfunction " ShowSpecial()
+
+function Set_SGML()
+ setlocal number
+ syn match sgmlSpecial "&amp;[^;]*;"
+ setlocal syntax=sgml
+ setlocal filetype=xml
+ setlocal shiftwidth=2
+ setlocal textwidth=70
+ setlocal tabstop=8
+ setlocal softtabstop=2
+ setlocal formatprg="fmt -p"
+ setlocal autoindent
+ setlocal smartindent
+ " Rewrap paragraphs
+ noremap P gqj
+ " Replace spaces with tabs
+ noremap T :s/ /\t/&lt;CR&gt;
+ call ShowSpecial()
+ call Set_Highlights()
+ return 0
+endfunction " Set_SGML()</programlisting>
+ </sect2>
+
+ <sect2 xml:id="editor-config-vim-use">
+ <title xml:lang="en">Use</title>
+
+ <para xml:lang="en">Press <keycap>P</keycap> to reformat paragraphs or text that has been selected in Visual mode. Press
+ <keycap>T</keycap> to replace groups of eight spaces with a
+ tab.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="editor-config-emacs">
+ <title xml:lang="en"><application>Emacs</application></title>
+
+ <para xml:lang="en">Install from
+ <package>editors/emacs</package>
+ or <package>editors/xemacs</package>.</para>
+
+ <para xml:lang="en">Edit <filename>~/.emacs</filename>, adding this
+ line:</para>
+
+ <programlisting xml:lang="en">(add-hook 'nxml-mode-hook 'turn-on-auto-fill)</programlisting>
+ </sect1>
+
+ <sect1 xml:id="editor-config-nano">
+ <title xml:lang="en"><application>nano</application></title>
+
+ <para xml:lang="en">Install from
+ <package>editors/nano</package> or
+ <package>editors/nano-devel</package>.</para>
+
+ <sect2 xml:id="editor-config-nano-config">
+ <title xml:lang="en">Configuration</title>
+
+ <para xml:lang="en">Copy the sample <acronym>XML</acronym> syntax highlight
+ file to the user's home directory:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>cp /usr/local/share/nano/xml.nanorc ~/.nanorc</userinput></screen>
+
+ <para xml:lang="en">Add these lines to the new
+ <filename>~/.nanorc</filename>.</para>
+
+ <programlisting xml:lang="en">syntax "xml" "\.([jrs]html?|xml|xslt?)$"
+# trailing whitespace
+color ,blue "[[:space:]]+$"
+# multiples of eight spaces at the start a line
+# (after zero or more tabs) should be a tab
+color ,blue "^([TAB]*[ ]{8})+"
+# tabs after spaces
+color ,yellow "( )+TAB"
+# highlight indents that have an odd number of spaces
+color ,red "^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}"
+# lines longer than 70 characters
+color ,yellow "^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$"</programlisting>
+
+ <para xml:lang="en">Process the file to create embedded tabs:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>perl -i'' -pe 's/TAB/\t/g' ~/.nanorc</userinput></screen>
+ </sect2>
+
+ <sect2 xml:id="editor-config-nano-use">
+ <title xml:lang="en">Use</title>
+
+ <para xml:lang="en">Specify additional helpful options when running the
+ editor:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>nano -AKipwz -r 70 -T8 <replaceable>chapter.xml</replaceable></userinput></screen>
+
+ <para xml:lang="en">Users of <citerefentry><refentrytitle>csh</refentrytitle><manvolnum>1</manvolnum></citerefentry> can define an alias in
+ <filename>~/.cshrc</filename> to automate these
+ options:</para>
+
+ <programlisting xml:lang="en">alias nano "nano -AKipwz -r 70 -T8"</programlisting>
+
+ <para xml:lang="en">After the alias is defined, the options will be added
+ automatically:</para>
+
+ <screen xml:lang="en"><prompt>%</prompt> <userinput>nano <replaceable>chapter.xml</replaceable></userinput></screen>
+ </sect2>
+ </sect1>
+</chapter>
+
+
+<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<chapter version="5.0" xml:id="see-also">
+ <title xml:lang="en">See Also</title>
+
+ <para xml:lang="en">This document is deliberately not an exhaustive discussion of
+ XML, the DTDs listed, and the FreeBSD Documentation Project. For
+ more information about these, you are encouraged to see the
+ following web sites.</para>
+
+ <sect1 xml:id="see-also-fdp">
+ <title>FreeBSD 文件計劃</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><link xlink:href="@@URL_RELPREFIX@@/docproj/index.html">FreeBSD 文件計劃網頁</link></para>
+ </listitem>
+
+ <listitem>
+ <para><link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/index.html">FreeBSD 使用手冊</link></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 xml:id="see-also-xml">
+ <title>XML</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><link xlink:href="http://www.w3.org/XML/">W3C's XML 網頁 SGML/XML 網頁</link></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 xml:id="see-also-html">
+ <title>HTML</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><link xlink:href="http://www.w3.org/">全球資訊網協會</link></para>
+ </listitem>
+
+ <listitem>
+ <para><link xlink:href="http://www.w3.org/TR/REC-html40/">The HTML 4.0 規格表</link></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 xml:id="see-also-docbook">
+ <title>DocBook</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><link xlink:href="http://www.oasis-open.org/docbook/">The DocBook 技術委員會</link>, DocBook DTD的維護者</para>
+ </listitem>
+
+ <listitem>
+ <para><link xlink:href="http://www.docbook.org/">DocBook:The Definitive Guide</link>, DocBook DTD的線上文件。</para>
+ </listitem>
+
+ <listitem>
+ <para xml:lang="en"><link xlink:href="http://docbook.sourceforge.net/">The DocBook
+ Open Repository</link> contains DSSSL stylesheets and
+ other resources for people using DocBook</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+</chapter>
+
+
+
+<!-- Copyright (c) 2000 Nik Clayton, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ $FreeBSD$
+-->
+<appendix version="5.0" xml:id="examples">
+
+ <title>舉例</title>
+
+ <para xml:lang="en">These examples are not exhaustive—they do not contain
+ all the elements that might be desirable to use, particularly in a
+ document's front matter. For more examples of DocBook markup,
+ examine the <acronym>XML</acronym> source for this and other
+ documents available in the <application>Subversion</application>
+ <literal>doc</literal> repository, or available online starting at
+ <uri xlink:href="http://svnweb.FreeBSD.org/doc/">http://svnweb.FreeBSD.org/doc/</uri>.</para>
+
+ <sect1 xml:id="examples-docbook-book">
+ <title>DocBook <tag>book</tag></title>
+
+ <example>
+ <title>DocBook <tag>book</tag></title>
+
+ <programlisting>&lt;!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
+ "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd"&gt;
+
+<tag class="starttag">book xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:lang="en"</tag>
+
+ <tag class="starttag">info</tag>
+ <tag class="starttag">title</tag>An Example Book<tag class="endtag">title</tag>
+
+ <tag class="starttag">author</tag>
+ <tag class="starttag">personname</tag>
+ <tag class="starttag">firstname</tag>Your first name<tag class="endtag">firstname</tag>
+ <tag class="starttag">surname</tag>Your surname<tag class="endtag">surname</tag>
+ <tag class="endtag">personname</tag>
+
+ <tag class="starttag">affiliation</tag>
+ <tag class="starttag">address</tag>
+ <tag class="starttag">email</tag>foo@example.com<tag class="endtag">email</tag>
+ <tag class="endtag">address</tag>
+ <tag class="endtag">affiliation</tag>
+ <tag class="endtag">author</tag>
+
+ <tag class="starttag">copyright</tag>
+ <tag class="starttag">year</tag>2000<tag class="endtag">year</tag>
+ <tag class="starttag">holder</tag>Copyright string here<tag class="endtag">holder</tag>
+ <tag class="endtag">copyright</tag>
+
+ <tag class="starttag">abstract</tag>
+ <tag class="starttag">para</tag>If your book has an abstract then it should go here。<tag class="endtag">para</tag>
+ <tag class="endtag">abstract</tag>
+ <tag class="endtag">info</tag>
+
+ <tag class="starttag">preface</tag>
+ <tag class="starttag">title</tag>Preface<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>Your book may have a preface, in which case it should be placed
+ here。<tag class="endtag">para</tag>
+ <tag class="endtag">preface</tag>
+
+ <tag class="starttag">chapter</tag>
+ <tag class="starttag">title</tag>My First Chapter<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>This is the first chapter in my book。<tag class="endtag">para</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>My First Section<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>This is the first section in my book。<tag class="endtag">para</tag>
+ <tag class="endtag">sect1</tag>
+ <tag class="endtag">chapter</tag>
+<tag class="endtag">book</tag></programlisting>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="examples-docbook-article">
+ <title>DocBook <tag>article</tag></title>
+
+ <example>
+ <title>DocBook <tag>article</tag></title>
+
+ <programlisting>&lt;!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
+ "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd"&gt;
+
+<tag class="starttag">article xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:lang="en"</tag>
+
+ <tag class="starttag">info</tag>
+ <tag class="starttag">title</tag>An Example Article<tag class="endtag">title</tag>
+
+ <tag class="starttag">author</tag>
+ <tag class="starttag">personname</tag>
+ <tag class="starttag">firstname</tag>Your first name<tag class="endtag">firstname</tag>
+ <tag class="starttag">surname</tag>Your surname<tag class="endtag">surname</tag>
+ <tag class="endtag">personname</tag>
+
+ <tag class="starttag">affiliation</tag>
+ <tag class="starttag">address</tag>
+ <tag class="starttag">email</tag>foo@example.com<tag class="endtag">email</tag>
+ <tag class="endtag">address</tag>
+ <tag class="endtag">affiliation</tag>
+ <tag class="endtag">author</tag>
+
+ <tag class="starttag">copyright</tag>
+ <tag class="starttag">year</tag>2000<tag class="endtag">year</tag>
+ <tag class="starttag">holder</tag>Copyright string here<tag class="endtag">holder</tag>
+ <tag class="endtag">copyright</tag>
+
+ <tag class="starttag">abstract</tag>
+ <tag class="starttag">para</tag>If your article has an abstract then it should go here。<tag class="endtag">para</tag>
+ <tag class="endtag">abstract</tag>
+ <tag class="endtag">info</tag>
+
+ <tag class="starttag">sect1</tag>
+ <tag class="starttag">title</tag>My First Section<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>This is the first section in my article。<tag class="endtag">para</tag>
+
+ <tag class="starttag">sect2</tag>
+ <tag class="starttag">title</tag>My First Sub-Section<tag class="endtag">title</tag>
+
+ <tag class="starttag">para</tag>This is the first sub-section in my article。<tag class="endtag">para</tag>
+ <tag class="endtag">sect2</tag>
+ <tag class="endtag">sect1</tag>
+<tag class="endtag">article</tag></programlisting>
+ </example>
+ </sect1>
+</appendix>
+
<index/>
</book>