【问题】
用ant编译Docbook源码,生成webhelp,中间过程提示错误信息Request for label of unexpected element: bibliodiv,详细log如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/language_summary/src $ make webhelp =============================== generating webhelp ============================== ant webhelp Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar Buildfile: E:\Dev_Root\docbook\dev\books\language_summary\src\build.xml validate: clean: chunk: [ mkdir ] Created dir : E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp [xslt] Processing E:\Dev_Root\docbook\dev\books\language_summary\src\language_summary.xml to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\null2144588655 [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.1\profiling\profile.xsl [xslt] Processing E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\null2144588655 to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\null2070826396 [xslt] Loading stylesheet E:\Dev_Root\docbook\dev\ant\webhelp\xsl\webhelp_crl.xsl [xslt] language: en [xslt] Request for label of unexpected element: bibliodiv [xslt] Request for label of unexpected element: bibliodiv [xslt] Writing .. /output/webhelp/content/ch01s01 .html for sect1 ...... [xslt] Writing .. /output/webhelp/content/index .html for book [xslt] Writing .. /output/webhelp/index .html [xslt] Writing .. /output/webhelp/content/search/l10n .js [copy] Copied 1 empty directory to 1 empty directory under E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\content index: [copy] Copying 1 file to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp [copy] Copying 4 files to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp [ echo ] Indexing html files in .. /output/webhelp/content [java] Stemming enabled [java] The created index files are located in ..\output\webhelp\content\search\.js [java] Indexed the contents in 1 seconds webhelp: BUILD SUCCESSFUL Total time : 8 seconds |
此处的编译环境是:
cygwin + ant 1.8.4 +saxon 6.5.5 + docbook-xsl-ns 1.77.1
另外,之前用xsltproc编译其他格式,比如html,pdf等,都是正常的,没有此警告的。
【解决过程】
1.网上搜了下,找到对应的xsl了:
但是对于问题的解决没啥帮助。
2.找到其他人遇到类似问题:
但是无解。
3.看起来此警告信息是xslt抛出的,所以想办法去找ant的xslt当前用的是什么。
4.找到:
eclipsehelp – namespace problem, no template matches
也遇到Request for label of unexpected element的问题,但是无解。
5.后来更加网上的源码:
然后自己去找到了我本地的label.xsl,调用关系为:
webhelp.xsl -> xhtml/chunk.xsl -> docbook.xsl -> ../common/labels.xsl
其中有:
1 2 3 4 5 6 7 8 9 | < xsl:template match = "*" mode = "label.markup" > < xsl:param name = "verbose" select = "1" /> < xsl:if test = "$verbose" > < xsl:message > < xsl:text >Request for label of unexpected element: </ xsl:text > < xsl:value-of select = "local-name(.)" /> </ xsl:message > </ xsl:if > </ xsl:template > |
此处,不知道为何bibliodiv会出现此警告。
6.然后网上搜label.markup找到了官网的解释:
Chapter 10. General customizations
看了解释大概明白了,label.markup就是用于给各种docbook内的元素去添加编号的。
所以,此处很明显是对于bibliodiv,没法实现编号,而如果对于参数verbose设置为1的话,所以才抛出此警告的。
7.看到了一个有点异常的事情:
bibliography在html和pdf的输出都是正常的,都可以被翻译为:参考书目
但是webhelp中bibliography没有被翻译:
所以就又去找bibliography,然后在找到labels.xsl中的:
1 2 3 4 5 6 | < xsl:template match="d:bibliography|d:glossary| d:qandaset|d:index|d:setindex" mode = "label.markup" > < xsl:if test = "@label" > < xsl:value-of select = "@label" /> </ xsl:if > </ xsl:template > |
好像是可以正常编号的,但是翻译的事情,暂时懒得理了。
但是可以去添加bibliodiv进去:
1 2 3 4 5 6 | < xsl:template match="d:bibliography|d:glossary| d:qandaset|d:index|d:setindex|d:bibliodiv" mode = "label.markup" > < xsl:if test = "@label" > < xsl:value-of select = "@label" /> </ xsl:if > </ xsl:template > |
然后试试效果,结果是,竟然就可以解决问题,没有了上面的错误提示了,完整的log如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/language_summary/src $ make webhelp =============================== generating webhelp ============================== ant webhelp Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar Buildfile: E:\Dev_Root\docbook\dev\books\language_summary\src\build.xml validate: clean: [delete] Deleting directory E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp chunk: [ mkdir ] Created dir : E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp [xslt] Processing E:\Dev_Root\docbook\dev\books\language_summary\src\language_summary.xml to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\null884607957 [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.1\profiling\profile.xsl [xslt] Processing E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\null884607957 to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\null1987721164 [xslt] Loading stylesheet E:\Dev_Root\docbook\dev\ant\webhelp\xsl\webhelp_crl.xsl [xslt] language: en [xslt] Writing .. /output/webhelp/content/ch01s01 .html for sect1 [xslt] Writing .. /output/webhelp/content/ch01_lan_intro .html for chapter(ch01_lan_intro) [xslt] Writing .. /output/webhelp/content/ch02s01 .html for sect1 [xslt] Writing .. /output/webhelp/content/lan .python.html for sect1(lan.python) [xslt] Writing .. /output/webhelp/content/ch02s03s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s03s02 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s03s03 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s03s04 .html for sect2 [xslt] Writing .. /output/webhelp/content/lan .word_vba.html for sect1(lan.word_vba) [xslt] Writing .. /output/webhelp/content/ch02s04s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s04s02 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s04s03 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s04s04 .html for sect2 [xslt] Writing .. /output/webhelp/content/lan .excel_vba.html for sect1(lan.excel_vba) [xslt] Writing .. /output/webhelp/content/ch02s05s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/lan .javascript.html for sect1(lan.javascript) [xslt] Writing .. /output/webhelp/content/ch02s06s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s06s02s01 .html for sect3 [xslt] Writing .. /output/webhelp/content/ch02s06s02s02 .html for sect3 [xslt] Writing .. /output/webhelp/content/lan .php.crifanlib.html for sect2(lan.php.crifanlib) [xslt] Writing .. /output/webhelp/content/lan .php.html for sect1(lan.php) [xslt] Writing .. /output/webhelp/content/ch02s07s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/ch02s07s02 .html for sect2 [xslt] Writing .. /output/webhelp/content/lan .linux_shell.html for sect1(lan.linux_shell) [xslt] Writing .. /output/webhelp/content/win_bat_intro .html for sect2(win_bat_intro) [xslt] Writing .. /output/webhelp/content/win_bat_learn_summary .html for sect2(win_bat_learn_summary) [xslt] Writing .. /output/webhelp/content/win_bat_refer .html for sect2(win_bat_refer) [xslt] Writing .. /output/webhelp/content/lan .windows_bat.html for sect1(lan.windows_bat) [xslt] Writing .. /output/webhelp/content/ch02_script_lan .html for chapter(ch02_script_lan) [xslt] Writing .. /output/webhelp/content/ch03s01 .html for sect1 [xslt] Writing .. /output/webhelp/content/lan .csharp.html for sect1(lan.csharp) [xslt] Writing .. /output/webhelp/content/ch03s03s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/lan .cpp.html for sect1(lan.cpp) [xslt] Writing .. /output/webhelp/content/ch03_uppper_lan .html for chapter(ch03_uppper_lan) [xslt] Writing .. /output/webhelp/content/ch04s01s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/lan .xml.html for sect1(lan.xml) [xslt] Writing .. /output/webhelp/content/ch04s02s01 .html for sect2 [xslt] Writing .. /output/webhelp/content/html_refer .html for sect2(html_refer) [xslt] Writing .. /output/webhelp/content/lan .html.html for sect1(lan.html) [xslt] Writing .. /output/webhelp/content/ch04_web_lan .html for chapter(ch04_web_lan) [xslt] Writing .. /output/webhelp/content/reference .html for bibliography(reference) [xslt] Writing .. /output/webhelp/content/index .html for book [xslt] Writing .. /output/webhelp/index .html [xslt] Writing .. /output/webhelp/content/search/l10n .js [copy] Copied 1 empty directory to 1 empty directory under E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp\content index: [copy] Copying 1 file to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp [copy] Copying 4 files to E:\Dev_Root\docbook\dev\books\language_summary\output\webhelp [ echo ] Indexing html files in .. /output/webhelp/content [java] Stemming enabled [java] The created index files are located in ..\output\webhelp\content\search\.js [java] Indexed the contents in 1 seconds webhelp: BUILD SUCCESSFUL Total time : 9 seconds |
然后,此时,也稍微更加清楚了一点labels.xsl中的代码的逻辑。
labels.xsl中内部有很多个
<xsl:template match="xxx" mode="label.markup">
的代码,对应的就是去匹配docbook中的各种关键字xxx。
但是,如果对于xxx中所有的关键字都查找了一遍,还没有包括对应的关键字的话,那么则会调用最顶端的那个:
<xsl:template match="*" mode="label.markup">
然后抛出对应的警告:“Request for label of unexpected element: ”
所以,此时问题很清楚了,之前就是其中没有包含对应的bibliodiv这个关键字,导致最后抛出此警告的,所以添上之后,就没了此警告了。
8.虽然解决了问题,但是还是需要把刚才的改动提取出来,而不要影响到默认的docbook-xsl-ns-1.77.1中的配置。
所以,就去把原先对于labels.xsl的改动取消,然后去自己的xsl配置文件webhelp_crl.xsl中的最后的位置,添加上:
1 2 3 4 5 6 | <!-- remove warning: Request for label of unexpected element: bibliodiv --> < xsl:template match = "d:bibliodiv" mode = "label.markup" > < xsl:if test = "@label" > < xsl:value-of select = "@label" /> </ xsl:if > </ xsl:template > |
由此,即可解决问题,且保持不去改动docbook-xsl-ns-1.77.1原有的配置。
【总结】
上面之所以会有警告:
Request for label of unexpected element:
出现,是由于相关的xsl配置中,对于给各种docbook中的元素添加编号,使用的是label.markup这个mode,而对应的
docbook-xsl-ns-1.77.1\common\labels.xsl
中,没有包括对于bibliodiv这个关键字,即没有支持bibliodiv,所以才抛出警告的。
解决办法是,手动添加上对应的配置:
1 2 3 4 5 6 | <!-- remove warning: Request for label of unexpected element: bibliodiv --> < xsl:template match = "d:bibliodiv" mode = "label.markup" > < xsl:if test = "@label" > < xsl:value-of select = "@label" /> </ xsl:if > </ xsl:template > |
即可解决此警告。
另外,关于webhelp中,bibliography没有被翻译为“参考书目”的问题,等有空再解决吧。
转载请注明:在路上 » 【已解决】用ant编译docbook生成webhelp过程中出错:Request for label of unexpected element: bibliodiv