最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】用saxon编译docbook为webhelp过程中,使用ant出错:属性 ‘href’ 在元素外部 / Attribute ‘href’ outside of element

Docbook crifan 1937浏览 0评论

【问题】

在折腾用Saxon将Docbook编译为webhelp的过程中,出错:

Administrator@K470 /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/webhelp
$ ant webhelp -Doutput-dir=test-ouput
Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar
Buildfile: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml

validate:

clean:

chunk:
    [mkdir] Created dir: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput
     [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\docsrc\readme.xml to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null626727916
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\profiling\profile.xsl
     [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null626727916 to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null1178824252
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\xsl\webhelp.xsl
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 548: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 597: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 597: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 621: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 621: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/lists.xsl: line 817: 属性 'type' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/callout.xsl: line 110: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/xref.xsl: line 182: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/xref.xsl: line 967: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/formal.xsl: line 210: 属性 'id' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/formal.xsl: line 421: 属性 'id' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/htmltbl.xsl: line 23: 属性 'id' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 97: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 97: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 132: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 132: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 172: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 172: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 694: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 911: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1028: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1158: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1158: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1258: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1296: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 325: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 325: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 395: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 395: 属性 'href' 在元素外部。
     [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/annotations.xsl: line 108: 属性 'onClick' 在元素外部。
     [xslt] : Error! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/webhelp/xsl/webhelp.xsl: line 8: '[variable(chunk.hierarchy)]' 中存在循环变量/参数引用。
     [xslt] : Fatal Error! 无法编译样式表
     [xslt] Failed to process E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null626727916

BUILD FAILED
E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml:61: Fatal error during transformation

Total time: 6 seconds

【解决过程】

1. 去搜:

Warning xhtml/autoidx.xsl 属性 ‘href’ 在元素外部

Warning autoidx.xsl 属性 ‘href’ 在元素外部

Warning autoidx.xsl 属性 href 在元素外部

等等,都搜不到相关帖子

2. 后来去google搜:

ant webhelp autoidx.xsl href

倒是找到了对应的英文的错误的版本:

Attribute ‘href’ outside of element

比如这里:

[docbook-apps] Getting errors trying to convert docbook to webhelp

其遇到了和我同样的错误。

3. 然后按照回答者的提示,去把saxon9he.jar换回saxon65.jar,即把:

xslt-processor-classpath=/cygdrive/e/Dev_Tools/saxon/SaxonHE9-4-0-4J/saxon9he.jar

换为:

xslt-processor-classpath=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon65.jar

4.再去试试。结果错误依旧。

同时注意到了,遇到同样问题的那位:

Getting errors trying to convert docbook to webhelp

所用环境,和我的是基本一样的:

ant 1.8.4

saxon65.jar

docbook-xsl-1.77.0(我的是docbook-xsl-ns-1.77.0)

对此错误,另外一个回答者说要确保是saxon-6.5.5.jar,然后才注意到,我此处用docbook-xsl-ns-1.77.0中的是saxon65.jar,不知道是否和教程中的Saxon 6.5.x是一样的。

5. 所以再去下载Saxon 6.5.x,注意实际上是跳转到

http://sourceforge.net/projects/saxon/files/saxon6/6.5.5/

去下载saxon6-5-5.zip的,然后下载下来saxon-6-5-5.zip,解压后,是一堆文档加上saxon.jar,saxon-jdom.jar,saxon-xml-apis.jar。

然后拷贝saxon6.jar到docbook-xsl-ns-1.77.0/extensions/下,并改名为saxon-6.5.5.jar,然后修改配置为:

xslt-processor-classpath=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar

再去试试。

6.结果问题依旧。

然后把saxon-jdom.jar,saxon-xml-apis.jar也拷贝到该文件夹下,再试试,同样问题依旧。

很明显,是saxon和现在的1.77.0的docbook的各种xsl等文件,不匹配了。

但是现在也不清楚如何修改。

因为去看了第一个错误所在,autoidx.xsl的548行,但是发现内容是好好的,xml的内容和结构都是正常的,没什么错误,所以还是不懂此处的错误的具体含义,没法解决问题。

7.突然想起来了,不知道是否有可能是xercesImpl.jar和xml-apis.jar的问题,也许两者的版本和教程中所期望的不一样?

8.这人也遇到类似问题了:

Error messages when building webhelp

但是也没有说如何解决。

9。后来找到这里的解释,说问题原因在于没有安装3,4两步配置好那些jar,但是此处的确已经配置好啦。

后来想了想,难道是由于路径不是cygwin的路径,而是windows的路径?

所以把:

xslt-processor-classpath=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar
xercesImpl.jar=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xercesImpl.jar
xml-apis.jar=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xml-apis.jar

换为:

xslt-processor-classpath=E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions\saxon-6.5.5.jar
xercesImpl.jar=E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions\xercesImpl.jar
xml-apis.jar=E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions\xml-apis.jar

再去试试,结果错误依旧。

10.再去换为windows的路径,但是路径中分隔符是UNIX中的/,因为之前曾经记得,好像cygwin中,对于windows的路径,是可以识别这种的:

xslt-processor-classpath=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar
xercesImpl.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xercesImpl.jar
xml-apis.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xml-apis.jar

试试,结果,就可以正常编译了:

Administrator@K470 /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/webhelp
$ ant webhelp -Doutput-dir=test-ouput
Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar
Buildfile: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml

validate:

clean:
   [delete] Deleting directory E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput

chunk:
    [mkdir] Created dir: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput
     [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\docsrc\readme.xml to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null152638183
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\profiling\profile.xsl
     [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null152638183 to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null1467394249
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\xsl\webhelp.xsl
     [xslt] language: en
     [xslt] Writing test-ouput/content/ch01.html for chapter
     [xslt] Writing test-ouput/content/ch02s01.html for section
     [xslt] Writing test-ouput/content/ch02s02.html for section
     [xslt] Writing test-ouput/content/ch02s03.html for section
     [xslt] Writing test-ouput/content/ch02s04.html for section
     [xslt] Writing test-ouput/content/ch02s05.html for section
     [xslt] Writing test-ouput/content/ch02.html for chapter
     [xslt] Writing test-ouput/content/ch03s01.html for section
     [xslt] Writing test-ouput/content/ch03s02.html for section
     [xslt] Writing test-ouput/content/ch03.html for chapter
     [xslt] Writing test-ouput/content/ch04.html for chapter
     [xslt] Writing test-ouput/content/index.html for book
     [xslt] Writing test-ouput/index.html
     [xslt] Writing test-ouput/content/search/l10n.js
     [copy] Copying 92 files to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput
     [copy] Copying 1 file to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\content

index:
     [copy] Copying 1 file to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput
     [copy] Copied 1 empty directory to 1 empty directory under E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput
     [copy] Copying 4 files to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput
     [echo] Indexing html files in test-ouput/content
     [java] Stemming enabled
     [java] The created index files are located in test-ouput\content\search\.js
     [java] Delay = 1 seconds

webhelp:

BUILD SUCCESSFUL
Total time: 8 seconds

真不容易啊。

 

【总结】

用saxon编译webhelp时,如果出现

autoidx.xsl: line 548: 属性 ‘href’ 在元素外部 / Attribute ‘href’ outside of element

之类的错误,那么需要:

1. 确保使用的是6.5.5版本的saxon,而不是其他版本的

(1)所谓6.5.5版本的saxon,就是通过去saxon6 – 6.5.5下载下来的saxon6-5-5.zip再解压所得到的那个saxon.jar。

(2)其他的版本都会出错,比如我下载的最新的9.4.0.4版本的saxon9he.jar,docbook-xsl-ns-1.77.0/extensions下面的那个自带的saxon65.jar等等,都是会出现错误的,所以都是不能用的。

2. 确保xslt-processor-classpath,xercesImpl.jar,xml-apis.jar的路径正确

在确保使用了正确的6.5.5版本的saxon的基础上,如果上述路径设置错误,则也会出现错误。

而路径正确与否,相信多数人,在linux/unix环境下,有了对应的jar之后,将对应的路径地址设置过来,就不会出现错误的。

但是需要注意的是,如果是和我一样,是在win7+cygwin下使用ant的话,则对应的路径,一定要设置为类似于下面的这种

xslt-processor-classpath=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar
xercesImpl.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xercesImpl.jar
xml-apis.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xml-apis.jar

即路径是,在普通windows中的路径(分隔符为反斜杠’\’)的基础上:

E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions

把反斜杠’\’换为linux/unix下的斜杠’/’所得到的地址:

E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions

因为这样的地址:

(1)windows中,本身也是识别的,比如在资源管理器中输入该地址,也是可以打开对应文件夹的。

(1)cygwin中对其也是兼容的,可以正确识别的。

相反,如果上面的路径设置为:

(1)cygwin中的路径:/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions

(2)windows中的路径:E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions

则都会导致cygwin中使用ant时,找不到对应的saxon等jar包,而出现上述的“属性 ‘href’ 在元素外部”错误。

这些总结,也是我折腾了足够长的时间,才清楚的。

 

额外提示:

(1)如果是在windows的cmd下使用ant,估计路径是本身windows的路径即可,具体情况自己去试试,我暂时没折腾。

(2)关于用saxon编译docbook为webhelp的教程,目前已发现有多种,详情可去参考这里:用Saxon将Docbook编译为webhelp

(3)如果有其他错误,要注意教程中所写的一句话:

The Saxon 6.5 jar should not be in your CLASSPATH when you generate the webhelp output. If you have any problems, try running ant with an empty CLASSPATH.

即,如果是在最后使用ant编译webhelp时,记得CLASSPATH中一定不要有对应的那个6.5.5的saxon的jar包。

转载请注明:在路上 » 【已解决】用saxon编译docbook为webhelp过程中,使用ant出错:属性 ‘href’ 在元素外部 / Attribute ‘href’ outside of element

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.177 seconds, using 22.38MB memory