我见过Best tools for working with DocBook XML documents,但我的问题略有不同。对于XML DocBook,哪个是目前推荐的格式化工具链 - 而不是编辑工具?
在2003年的Eric Raymond的'The Art of Unix Programming'(一本优秀的书!)中,建议是XML-FO(XML格式化对象),但我已经看到这里的建议表明XML-FO不再是开发(虽然我无法再在StackOverflow上找到这个问题,所以可能是错误的。)
假设我主要对Unix / Linux(包括MacOS X)感兴趣,但我不会自动忽略仅限Windows的解决方案。
Apache's FOP是最好的方式吗?还有其他选择吗?
答案 0 :(得分:14)
我在cygwin下用DocBook做了一些手工编写,用来制作One Page HTML,Many Pages HTML,CHM和PDF。
我安装了以下内容:
编辑:在下面的代码中我使用了超过2个文件。如果有人想要清理版本的脚本和文件夹结构,请与我联系:guscarreno(squiggly / at)googlemail(期间/点)com
然后我使用configure.in:
AC_INIT(Makefile.in)
FOP=fop.sh
HHC=hhc
XSLTPROC=xsltproc
AC_ARG_WITH(fop, [ --with-fop Where to find Apache FOP],
[
if test "x$withval" != "xno"; then
FOP="$withval"
fi
]
)
AC_PATH_PROG(FOP, $FOP)
AC_ARG_WITH(hhc, [ --with-hhc Where to find Microsoft Help Compiler],
[
if test "x$withval" != "xno"; then
HHC="$withval"
fi
]
)
AC_PATH_PROG(HHC, $HHC)
AC_ARG_WITH(xsltproc, [ --with-xsltproc Where to find xsltproc],
[
if test "x$withval" != "xno"; then
XSLTPROC="$withval"
fi
]
)
AC_PATH_PROG(XSLTPROC, $XSLTPROC)
AC_SUBST(FOP)
AC_SUBST(HHC)
AC_SUBST(XSLTPROC)
HERE=`pwd`
AC_SUBST(HERE)
AC_OUTPUT(Makefile)
cat > config.nice <<EOT
#!/bin/sh
./configure \
--with-fop='$FOP' \
--with-hhc='$HHC' \
--with-xsltproc='$XSLTPROC' \
EOT
chmod +x config.nice
和Makefile.in:
FOP=@FOP@
HHC=@HHC@
XSLTPROC=@XSLTPROC@
HERE=@HERE@
# Subdirs that contain docs
DOCS=appendixes chapters reference
XML_CATALOG_FILES=./build/docbook-xsl-1.71.0/catalog.xml
export XML_CATALOG_FILES
all: entities.ent manual.xml html
clean:
@echo -e "\n=== Cleaning\n"
@-rm -f html/*.html html/HTML.manifest pdf/* chm/*.html chm/*.hhp chm/*.hhc chm/*.chm entities.ent .ent
@echo -e "Done.\n"
dist-clean:
@echo -e "\n=== Restoring defaults\n"
@-rm -rf .ent autom4te.cache config.* configure Makefile html/*.html html/HTML.manifest pdf/* chm/*.html chm/*.hhp chm/*.hhc chm/*.chm build/docbook-xsl-1.71.0
@echo -e "Done.\n"
entities.ent: ./build/mkentities.sh $(DOCS)
@echo -e "\n=== Creating entities\n"
@./build/mkentities.sh $(DOCS) > .ent
@if [ ! -f entities.ent ] || [ ! cmp entities.ent .ent ]; then mv .ent entities.ent ; fi
@echo -e "Done.\n"
# Build the docs in chm format
chm: chm/htmlhelp.hpp
@echo -e "\n=== Creating CHM\n"
@echo logo.png >> chm/htmlhelp.hhp
@echo arrow.gif >> chm/htmlhelp.hhp
@-cd chm && "$(HHC)" htmlhelp.hhp
@echo -e "Done.\n"
chm/htmlhelp.hpp: entities.ent build/docbook-xsl manual.xml build/chm.xsl
@echo -e "\n=== Creating input for CHM\n"
@"$(XSLTPROC)" --output ./chm/index.html ./build/chm.xsl manual.xml
# Build the docs in HTML format
html: html/index.html
html/index.html: entities.ent build/docbook-xsl manual.xml build/html.xsl
@echo -e "\n=== Creating HTML\n"
@"$(XSLTPROC)" --output ./html/index.html ./build/html.xsl manual.xml
@echo -e "Done.\n"
# Build the docs in PDF format
pdf: pdf/manual.fo
@echo -e "\n=== Creating PDF\n"
@"$(FOP)" ./pdf/manual.fo ./pdf/manual.pdf
@echo -e "Done.\n"
pdf/manual.fo: entities.ent build/docbook-xsl manual.xml build/pdf.xsl
@echo -e "\n=== Creating input for PDF\n"
@"$(XSLTPROC)" --output ./pdf/manual.fo ./build/pdf.xsl manual.xml
check: manual.xml
@echo -e "\n=== Checking correctness of manual\n"
@xmllint --valid --noout --postvalid manual.xml
@echo -e "Done.\n"
# need to touch the dir because the timestamp in the tarball
# is older than that of the tarball :)
build/docbook-xsl: build/docbook-xsl-1.71.0.tar.gz
@echo -e "\n=== Un-taring docbook-xsl\n"
@cd build && tar xzf docbook-xsl-1.71.0.tar.gz && touch docbook-xsl-1.71.0
自动生成上述文件输出。
我更喜欢使用nix方法编写脚本,因为工具集更容易查找和使用,更不用说链接了。
答案 1 :(得分:7)
我们使用XMLmind XmlEdit进行编辑,使用Maven的docbkx插件在构建期间创建输出。对于一组优秀模板,请查看Hibernate或Spring提供的模板。
答案 2 :(得分:7)
对于HTML输出,我使用Docbook XSL stylesheets和XSLT处理器xsltproc。
对于PDF输出,我使用dblatex,它转换为LaTeX,然后使用pdflatex将其编译为PDF。 (之前我使用过Jade,DSSSL样式表和jadetex。)
答案 3 :(得分:7)
我们使用
我们有一些想法:
使用每个产品版本进行部署,不仅包括PDF,还包括原始的完整DocBook文档(因为我们部分编写文档并部分生成它们)。保存完整的DocBook文档使它们将来可以独立于系统设置的更改。这意味着,如果系统发生变化,内容被提取(或由差异系统替换),我们将无法再生成确切的内容。这可能会导致问题,如果我们需要重新发布(使用不同的样式表)整个产品手册。与罐子相同;这些已编译的Java类也放在Nexus中(您不希望将它们存储在SCM中);我们也会使用生成的DocBook文档。
<强>更新强>
Fresh创建了一个 Maven HTML Cleaner Plug-in ,可以add DocBook content to a Maven Project Site(可用Beta版)。欢迎通过Open Discussion论坛提供反馈。
答案 4 :(得分:4)
DocBook样式表,加上FOP,效果很好,但我最终决定使用RenderX,它更彻底地涵盖了标准,并且有一些很好的扩展,DocBook样式表可以利用它们。
Bob Stayton的书DocBook XSL: The Complete Guide描述了几个替代工具链,包括可在Linux或Windows上工作的工具链(几乎可以肯定是MacOS,虽然我没有亲自使用过Mac)。
答案 5 :(得分:3)
一种流行的方法是使用DocBook XSL Stylesheets。
答案 6 :(得分:3)
关于Apache的FOP的问题:当我们建立我们的工具链时(类似于Gustavo建议的那样),我们使用RenderX XEP engine获得了非常好的结果。 XEP的输出看起来更加精致,据我所知,FOP在表格上存在一些问题(这是几年前的情况,但这可能已经改变了。)
答案 7 :(得分:3)
通过FOP,您可以获得某人认为他们想要实施的功能。我会说没有一个认真对待出版的人会在制作中使用它。使用RenderX或Antenna House或Arbortext,情况会好得多。 (我在过去十年的实施项目中都使用过它们。)这取决于您的业务需求,您希望自动化的程度,以及您的团队的技能,时间和资源。这不仅仅是一个技术问题。
答案 8 :(得分:3)
如果您使用的是Red Hat,Ubuntu或Windows,您可以查看Publican,它应该是一个相当完整的命令行工具链。红帽广泛使用它。
答案 9 :(得分:3)
名为The DocBook toolchain的文章也可能有用。它是Eric Raymond撰写的DocBook上HOWTO的一部分。
答案 10 :(得分:3)
我一直在使用两个CLI工具来简化我的docbook工具链:xmlto和publican。
Publican看起来很优雅,但足够适合Fedora&amp; Redhat出版物需要。
答案 11 :(得分:2)
我发布/正在开发一个名为bookshop的开源项目,这是一个RubyGem,它安装了一个完整的Docbook-XSL管道/工具链。它包括创建和编辑Docbook源文件以及输出不同格式(目前为pdf和epub,并且快速增长)所需的一切。
我的目标是让您可以在10分钟内从您的Docbook来源从零到导出(pdf或其他)。
摘要:
bookShop是一个基于OSS ruby的框架,用于docbook工具链的幸福和可持续生产力。该框架经过优化,可以帮助开发人员快速提升,允许他们更快速地进入并开发他们的DocBook-to-Output流程,支持约定优于配置,使用最佳实践,标准和工具来设置它们
答案 12 :(得分:1)
我更喜欢在我的大部分内容创建中使用Windows(Notepad ++编辑器)。 Linux中的Publican是一个很好的工具链,可以创建良好的文档结构和流程输出。我在我的Windows机器和Virtual Linux机器上使用Dropbox(还有其他文档共享服务,它应该可以在两个平台上运行良好)。 通过这种设置,我已经能够实现一个对我有用的组合。 一旦在Windows中完成编辑工作(立即与Linux机器同步),我就切换到Linux运行publican构建并创建HTML和PDF输出,这些输出也会在我的Windows文件夹中由Dropbox更新。