docbook

最初发明计算机是为了进行数学运算,并且它们确实做得很好。 但是不久之后,用户就可以将其未来派计算器重新用于精美的动态打字机中。 现在,人类可读的文本驱动了计算,因此为您编写的文本选择正确的格式非常重要。

DocBook是XML模式。 XML是一种很像HTML的可扩展标记语言。 它确实无处不在,但是您可能通过RSS或Atom,LibreOffice和Apache OpenOffice的Open Document格式,Inkscape和SVG文件格式知道它,等等。 实际上,可以肯定地说,如果您拥有计算机或移动设备,则其中包含XML。

这是原始形式的样子:

< chapter >
< title > My title goes here </ title >

< para >
Paragraph text goes here.
</ para >

< section >
< title > A section title </ title >

< para >
More paragraph text. Some in < emphasis > italics </ emphasis > .
</ para >
</ section >
</ chapter >


DocBook本身易于学习且易于编写,它也是可用的最灵活的格式之一。 DocBook提供了其他格式,例如Markdown和reStructured Text。 DocBook不提供的内容可以通过通用XML来实现。

但是,为什么在存在更简单的替代方法时又要花时间学习DocBook? 当您可以对原本纯文本加一些结构并最终获得高度可移植,计算机和人类可读的数据时,为什么还要打扰标记语言呢?

安顿下来。一切都会揭晓。

失败更快

使用更简单的格式与使用DocBook之间的明显区别是DocBook会在出现问题时告诉您。 许多其他格式(例如Markdown和HTML)都会静默失败。 通常感觉很好,因为结果是呈现了文档。 您按Enter键,您的文档将由转换所需的任何解析器或处理器处理,然后完成。 真是太好了。

使用更简单的格式与使用DocBook之间的明显区别是DocBook会在出现问题时告诉您。

但是,无声失败的现实是它仍然失败。 您可能已经得到输出,并且大多数看起来都很好,但是未捕获的错误呢? 也许它渲染不正确,但是如果它被埋在200页文档的第42页中,您何时会注意到? 错误可能在文档的Web版本中正确显示,但对于打印版本却错误显示。

像所有XML一样,DocBook非常严格。 例如,如果在关闭<chapter >之后放置<para> ,则文档构建将失败,并且通常会冗长地失败。 因为DocBook是XML,所以您甚至可以通过xmllint运行源代码以尽早发现错误。

经历错误绝非易事。 看着您的工作陷入大量非法标签和语法错误中,而不是构建成精美呈现的EPUB,网页或PDF,这并不是一件有趣的事情。 为了消除这种失望,大多数处理器接受了一个选项来暂时忽略错误,例如--skip-validation ,但是最终失败很重要。 故障可以识别出您来源中的缺陷,并保护您免受产品令人不愉快的意外。

比看起来容易

DocBook有时因难以学习而闻名。 我发现通常不是DocBook,而是人们围绕它构建的独特工具链,它们具有陡峭的学习曲线。

与HTML相比,DocBook的标签是自描述的。 您要写文章还是书? 分别从<article><book>标记开始。 分别使用<chapter><section>来开始一本书中的新章节或文章中的新章节。 以<para>开头一个段落,以<orderedlist>开头一个有序列表,通过<listitem>输入一个列表项,依此类推。

与Markdown和AsciiDoc相比,DocBook看起来很复杂,但是如果您考虑结构化文本中所有不直观的规则,DocBook的规则似乎并不那么糟糕。

从最初的Markdown规范中学习语法通常是一个反复试验的过程,其后是一系列拼命的互联网搜索,这意味着要仔细研究所有不同的Markdown风格和解析器,以找到正确答案的最佳适用候选者。 CommonMark是一个致力于定义更艰巨和严格规范的项目,虽然有所帮助,但用户往往会因为学习基础知识的难度而陷入错误的安全感,却发现获得高级结果会带来令人惊讶的学习曲线。

幸运的是,Markdown接受HTML作为后备标记选项,并且那里有多种工具和Markdown变体来弥补原始规范的不足。 即使这样,如果您要为多个不同的输出目标编写复杂的文档,也可能不像在所有“仅15分钟即可学习Markdown”风格的博客中那样简单。

在DocBook中学习新东西的逻辑流程往往很简单:

  1. 转到DocBook网站。
  2. 在主列表中找到合适的标签。
  3. 请参阅标签的文档,以了解如何正确使用它。

这里的所有都是它的。 它与学习HTML大致相同:在最初的几分钟内学习基础知识,并随时提供参考资料以根据需要学习更多信息。

取决于您对XML的了解程度,可能会有一些意外,但是DocBook网站清楚地为每个标签定义了有效的父子关系,并且每个标签的每个条目都提供了大量示例。

语义学

最后,DocBook很重要,因为它提供有关您的数据的数据。 DocBook标签并不是要指示内容的样式,而是要对要传达的信息进行分类。 像HTML和CSS一样,样式DocBook稍后出现,并且完全具有延展性。 DocBook标签为您的单词提供语义含义。

语义学现在对您似乎并不那么重要,但是以下是两个很好的例子,说明元数据在现实世界中变得非常重要:

  • 在没有移动电话存在之前,互联网上没有人会想到电话号码将需要<tel>标签。 如果有的话,肯定可以使用<em><strong>标记。 然后发生了移动电话,世界各地的人们都在使用用于拨打电话的同一设备上浏览互联网,这给您带来了极大的不便,那就是无法查找公司的电话号码并单击以进行拨打。电话。
  • 新西兰的一家大型电话公司多年来一直被称为电信公司。 当将其更名为Spark时,由于查找/替换错误,在整个整个在线文档中电信一词都显示为火花 。 该故障在其网站上已经存在了好几天,然后才注意到并纠正了明显的错误。 更好的正则表达式会有所帮助,但使用DocBook实体或<trademark>标签根本不会发生。

随着技术的发展,对您编写的信息进行分类现在非常重要。

轻松创建第一个DocBook文档

这是开始使用DocBook的快速简便的方法。 该方法强调学习DocBook标签和语法,而不是构建复杂而灵活的工具链。

  1. 打开一个文本编辑器。 只要可以保存纯文本文件,请使用您最喜欢的任何文本编辑器。 所有的好人都做: Gedit , Geany , Kate , Nano , Jove , Emacs , Atom等等。
  2. 打开Web浏览器以访问DocBook 5.2:权威指南以供参考。
  3. 在您的Web浏览器中打开另一个选项卡,以找到article元素引用,然后滚动到页面底部。 复制示例框中的文本并将其粘贴到文本编辑器中。
  4. 使用示例文本作为模板并编写一些内容。 该示例的某些标头比您可能需要的更为冗长,因此在此我删除了一些多余的标头。
    < article xmlns = 'http://docbook.org/ns/docbook' >
    < info >
    < title > My first docbook document </ title >
    < author >< personname >
    < firstname > Seth </ firstname >
    < surname > Kenlon </ surname >
    </ personname ></ author >
    < publisher >< publishername > opensource.com </ publishername ></ publisher >
    < pubdate > 2017 </ pubdate >
    </ info >

    < section id = "intro" >
    < title > Introduction </ title >
    < para > Introductory text goes here. </ para >
    </ section >

    < section id = "body" >
    < title > Section with a title </ title >
    < para > Main body text goes here. </ para >
    </ section >

    < section id = "conclusion" >
    < title > Conclusion </ title >
    < para > Exciting and inspiring conclusion goes here. </ para >
    </ section >
    </ article >

    
    

    如果您对是否需要标签有疑问,请参阅标签的文档。 内容提要部分告诉您什么是必需的,什么是可选的。 例如, <section>元素指定一个或多个与标题相关的元素是必需的,但所有其他标签都是可选的。

  1. 完成编写后,就该呈现文档了。 有几种XML处理器可用,但是对于初学者来说最简单的是Pandoc 。 它是那些“瑞士军刀”应用程序之一,可以将几乎所有类型的文本转换为几乎任何其他类型的文本。 对DocBook尤其有利的是,默认情况下它具有吸引人的样式表,而大多数其他处理器在假定您打算应用自己的XSL样式表的情况下呈现非常通用的输出。

    潜在目标多种多样,但命令基本相同:

    $ pandoc --from docbook --to epub3 --output myDocbook.epub myDocbook.xml

    $ pandoc --from docbook --to markdown --output myDocbook.md myDocbook.xml

    $ pandoc --from docbook --to html --output myDocbook.html myDocbook.xml

    $ pandoc --from docbook --to latex --output myDocbook.pdf myDocbook.xml

    
    

    这就是全部。 您在DocBook中编写的内容越多,您所学的标签和属性就越多,最终您可能会发现很难回到一种不太明确的格式。

PDF render

具有样式的高级DocBook

Pandoc使DocBook像HTML一样容易,但是XML是灵活的,因此,如果需要,您可以自定义构建DocBook文档的方式。

大多数处理器(除了Pandoc之外)的默认DocBook渲染看起来像这样:

Default PDF render

它很专业,但是很痛苦。 尽管如此,它还是可以应用其他样式的重要基础。

HTML和EPUB输出

如果目标包含HTML,则可以继续使用Pandoc,指示它使用自定义CSS。

$ pandoc --from docbook --to html \
--css =myStyle.css \
--output myDocbook.html myDocbook.xml

$ pandoc --from docbook --to epub3 \
--epub-stylesheet =myStyle.css --epub-cover-image =cover.jpg \
--epub-embed-font =fonts / foo.ttf --epub-embed-font =fonts / bar.ttf \
--output myDocbook.epub myDocbook.xml


最终的结果是动态,轻巧,现代,并且魅力十足。

PDF和打印输出

渲染为PDF以进行数字分发或打印取决于LaTeX或XSL。 我尚未学习LaTeX,因此我选择XSL,但是如果您是LaTeX用户,则可以将Pandoc与自定义模板一起使用 。 否则,这里是XSL和xsltproc命令的简要介绍。

XSL是可扩展样式表语言,并且是XML世界CSS。 如果从Linux发行版或DocBook网站安装DocBook,则将安装所有默认DocBook样式表。 每当您使用xsltprocxmlto之类的工具时,它们都将作为后备样式。

如果您不能(或选择不安装)DocBook,则可以在xsltproc命令中手动指向样式表。

使用xsltproc构建PDF包含两个步骤。 首先,您必须生成.fo文件,该文件是XML和XSL的组合,并转换为XSL-FO(格式设置对象)标记。 然后使用Apache FOP处理.fo文件, Apache FOP是将格式化对象转换为PDF的Java应用程序。

$ xsltproc --output tmp.fo myDocbook.xml

$ fop tmp.fo myDocbook.pdf


在开始使用DocBook样式时,可以轻松进行修改,这是您的字体选择。 字体易于更改,并在最终产品中产生显着差异。

  1. 添加到默认样式的第一步是编辑外部样式表。 为了检测字体,然后创建一个名为fonts.xml的文件并输入以下文本:

    < fop version = "2.0" >
    < renderers >
    < renderer mime = "application/pdf" >
    < fonts >
    < directory recursive = "true" >/ absolute / path / to / your / system / fonts </ directory >
    < auto-detect />
    </ fonts >
    </ renderer >
    </ renderers >
    </ fop >
    
    

    这会将所有TTF字体注册在您的个人或系统字体目录中。 您不必将其指向标准字体目录,但它必须是绝对路径,而不是相对路径。

  2. 修改样式的下一步是设置新样式选项,以使处理器知道它是什么。 有两种方法可以更改XSL参数。 您可以在xsltproc命令中动态设置参数,也可以在其他样式表中进行更改。

    我使用这两种方法,具体取决于更改的严重性。 对于我经常更改的简单样式(例如页面大小(有时需要A4,有时需要US Letter),字体等),我将参数作为命令的一部分传递。 这样,我可以快速,轻松地并且独立于自定义样式表来更改它们。 设置字体:

    $ xsltproc --string-param body.font.family "League Gothic" \
    --output tmp.fo \
    myDocbook.xml
    
    

    可在DocBook XSL样式表用户参考:参数中找到有效参数的列表。

  3. 要输出为PDF,请告诉FOP在fonts.xml文件中注册字体:
    $ fop -c fonts.xml tmp.fo myDocbook.pdf

XSL样式表

对于不太可能根据打印机要求,页面大小或心情而改变的样式,我将规则放在自定义XSL模板中。 XSL模板可能会变得非常复杂,因此进行细微调整和逐步学习是一种很好的方法。

这是一个简单的例子。

印刷书籍中常见的视觉提示是一种警告,例如注释,提示或警告,印刷在背景颜色上,以使读者知道它与当前的叙述是分开的,但对主题仍然很重要。 警示是DocBook中的不同元素,因此样式相对简单。

该过程类似于样式字体。

首先,在您的工作目录中创建一个名为mystyle.xsl的新文件。 编辑它,使其包含以下标题:

< ?xml version = '1.0' ? >
< xsl:stylesheet xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
< xsl:import href = "/usr/share/xml/docbook/xsl-stylesheets-1.78.1/fo/docbook.xsl" />

xsl:import行必须指向系统上的样式表,无论您已安装样式表还是从主目录中的非标准位置使用它。

在同一文件中,输入一些样式规则:

< xsl:template match = "note" >
< xsl:variable name = "id" >
< xsl:call-template name = "object.id" />
</ xsl:variable >
< fo:block xmlns: fo = "http://www.w3.org/1999/XSL/Format"
space-before.minimum= "0.8em"
space-before.optimum= "1em"
space-before.maximum= "1.2em"
start-indent= "0.25in"
end-indent= "0.25in"
padding-top= "6pt"
padding-bottom= "2pt"
padding-left= "4pt"
padding-right= "4pt"
background-color= "#ffffbd" >
< xsl:if test = " $admon .textlabel != 0 or title" >
< fo:block xmlns: fo = "http://www.w3.org/1999/XSL/Format"
keep-with-next= 'always'
xsl:use-attribute-sets= "admonition.title.properties"
font-family= "League Script Thin"
color = "#348fdf"
font-weight= "bold" >
< xsl:apply-templates select = "." mode = "object.title.markup" />
</ fo:block >
</ xsl:if >

< fo:block xmlns: fo = "http://www.w3.org/1999/XSL/Format"
xsl:use-attribute-sets= "admonition.properties"
font-family= "League Gothic" >
< xsl:apply-templates />
</ fo:block >
</ fo:block >
</ xsl:template >
</ xsl:stylesheet >


这将在样式表中为与注释匹配的所有元素创建一个模板。 每当XSL处理器找到<note>标记时,它就会放到XSL-FO块中,以描述如何打印元素(无论纸张是数字的还是物理的)。

使用xsltproc应用样式并将其输出到PDF到FOP:

$ xsltproc --string-param body.font.family "League Gothic" \
mystyle.xsl --output tmp.fo \
myDocbook.xml

$ fop -c fonts.xml tmp.fo myDocbook.pdf


获取输出:

Styled PDF render

语法没有CSS语法那么简洁或简单。 但是,简单样式遵循相同的格式:

  1. 为要影响的标记创建一个<xsl:template>块。
  2. 在DocBook XSL样式表用户参考中查找可用的XSL属性。
  3. <fo:block>中设置要应用的属性

像CSS一样,了解所有选项都需要花费时间和实践,但是一旦掌握了要点,就很简单。 更复杂的XML通过依赖项,变量,条件等为您提供更复杂的规则。 有关详尽的概述,请参见权威的DocBook XSL:完整指南网站。

使用DocBook

DocBook是为技术作家发明的,其许多标签都体现了这一点。 但是,无论是技术写作,小说还是RPG设计 ,我都会使用DocBook,这是一个功能强大,具有行业实力的系统。

这并不意味着Markdown或org-mode或其他文本格式在世界上没有地位。 如果我正在给自己写一个README文件或简短说明,则DocBook会显得过大,因为源文档也将是最终交付格式。 换句话说,在历史上我曾经使用纯文本的地方,我使用Markdown,因为Markdown的结构比非结构化文本有了很大的改进。

我还使用Markdown作为中间格式。 我通常在DocBook中写Opensource.com文章,然后输出到Markdown,以便站点编辑器可以轻松地查看和转换我的工作。 如果您正在运行自己的网站,则可以直接从DocBook转换为HTML,这非常有用,并且可以控制使用哪些标记,类和ID,但是当您暂时想忽略源元数据并仅提供源代码时,Markdown是一个很好的中间步骤。文字。

对于其他所有内容,DocBook是一个很好的解决方案。 尝试一下,您将永远不会再以相同的方式看待文字处理器,文本或XML。

翻译自: https://opensource.com/article/17/9/docbook

docbook

docbook_DocBook简介,一种值得学习的灵活标记语言相关推荐

  1. [译]为什么R语言是当今最值得学习的数据科学语言

    概述 在上周的博客里,我向大家解释了为什么应该精通R语言(尽管这些说辞最终可能没什么大用).我那篇文章是写给那些认为掌握R语言是件劳神费力的人看的(因为最后大家可能都会放弃R语言).但当我提到R最终确 ...

  2. C 语言还值得学习吗?C 语言会过时吗?C 语言解惑

    C 语言还值得学吗? 答案是肯定的. 第一,学习C有助于更好的理解C++,Java,C#,Perl以及其他基于C的特性的语言.第一开始就学习其他语言的程序员往往不能很好的掌握继承自C语言的基本特性. ...

  3. (自创) 一种新的轻量级文本标记语言 - MarkOwl

    设计目标 语法优雅 标记简洁 & 易于书写 语法健全. 不能出现自相矛盾, 漏洞百出, 解释不清的地方 标记含义明确, 不要有歧义 标记不可以对正文文字造成视觉干扰 (不能让阅读者看着眼花缭乱 ...

  4. Web前端技术开发学习笔记(HTML标记语言篇)——第4章 文字与段落标记

    第4章 文字与段落标记 第4章 文字与段落标记 4.1文字标记 4.1.1 文字内容的输入 1.普通文字的输入 2.空格的输入 3.特殊文字的输入 4.注释语句 4.1.2 对文字字体的设置 4.1. ...

  5. wav转mp3怎么转?几种值得学习的转换方法,打开看看!

    WAV和MP3都是常用的数字音频格式.WAV是一种无损音频格式,全称为Waveform Audio File Format.它最初由Microsoft和IBM联合开发,是Windows系统下最常用的音 ...

  6. Web前端技术开发学习笔记(HTML标记语言篇)——第6章 图片标记

    第6章 图片标记 6.1 网页常见图片格式 6.2 插入图片 6.2.1 设置图片大小 6.2.2 设置图片文本 6.2.3 设置图片与周围对象的间距 6.2.4设置图片的对齐方式 6.2.5设置图片 ...

  7. Web前端技术开发学习笔记(HTML标记语言篇)——第5章 列表标记

    第5章 列表标记 5.1 有序列表 5.1.1 有序列表的前导符设置 5.1.2 有序列表的前导符起始编号设置 5.2 无序列表 5.2.2 项目列表的前导符设置 5.2.3 定义列表 5.3 嵌套列 ...

  8. dll文件用什么语言编写_零基础学习markdown标记语言语法,十分简单便捷编写markdown文件...

    引言:在完成了使用开源的Atom软件搭建好编写markdown的环境后,接下来就进行我们的第一个markdown文件的编写,同时学习markdown标记语言的基础语法,都是十分简单的一些标记,如果学习 ...

  9. Qt值得学习吗?详解Qt的几种开发方式

    qt值得学习吗? 嵌入式要学的东西真的很多,我们可能会说不写界面的话就不用学qt了?我不赞同. Qt的实现主要是采用p-impl手法,实现接口与实现分离,它有很好的消息循环机制,有的对象与线程的相关性 ...

最新文章

  1. linux route 路由表操作命令
  2. Python学习笔记(六)if判断语句
  3. Http响应码及其含义--摘自apache官网
  4. Linux的软件包封装格式有,linux软件安装包详解---全
  5. 我的世界有宠物系统的服务器,我的世界1.6.4宠物战争服务器客户端
  6. c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改
  7. session演练1909051059
  8. LINUX下opencv的编译安装
  9. MyBatis-SELECT基本查询
  10. 串口与Modbus调试工具
  11. c语言求正方体的表面积和体积,2.事先编写一个程序,计算正方体、球体和圆柱体的表面积和体积。(提示:声明一个抽象基类 container,派...
  12. Angel-Eye: A Complete Design Flow for Mapping CNN onto Embedded FPGA阅读笔记
  13. 人脸识别访客系统解决方案
  14. 如何更改电脑桌面壁纸,换上自己想要的壁纸?
  15. 硅谷最有权势的人:孙正义和他的愿景帝国
  16. 我所理解的代码整洁之道(一)
  17. java集合练习题十六个国家随机分为四组
  18. 诗经 - 小雅 -伐木
  19. 大型网站架构改进历程
  20. 博客园 页首html代码,可爱的博客园样式美化、自定义博客园主题样式

热门文章

  1. 如何对一个对象进行深拷贝
  2. java解决XSS攻击常用方法总结
  3. mybatis源码学习篇之——执行流程分析
  4. 六招教你快速提升网站交互体验,降低跳出率
  5. SpringBoot系列: 单元测试2
  6. 20181121用户、组的基本概念
  7. 深度学习 - MPII Human Pose Database数据集下载
  8. 数据库备份checksum选项你会用么?
  9. php ajax练习
  10. mysql for vs2013_mysql vs2013