我有一些抄写手稿的 XML 文件,这些手稿来自这些手稿所在书籍的共享描述。它在我的 XML 中通过三个包含语句进行格式化,如下所示:
<xi:include href="../Witness_Descriptions/Trinity_R_3_20.xml" xpointer="publication" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="../Witness_Descriptions/Trinity_R_3_20.xml" xpointer="Trinity_R_3_20" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="../Witness_Descriptions/Minor_Poems_Vol_II.xml" xpointer="MacCracken" xmlns:xi="http://www.w3.org/2001/XInclude"/>
当我在 oXygen 中运行 xslt 将其转换为 html(使用 oXygen 的内置 Saxon-PE 10.6 Transformer)时,它工作正常。但是,我需要能够在整个文档语料库之间生成比较,我使用 saxon-he 9 转换器和以下命令行:
java -Xms128m -Xmx1024m -XX:+UseCompressedOops -cp saxon9he.jar net.sf.saxon.Query -t -xi -q:test.xq -o:1698815174.72894737321461.xml line=l.1 zone=EETS.ME.I marginalia=text collection=/home/matrygg/minorworksoflydgate.net/XML/Mumming_Eltham
如果 Mumming_Eltham 目录中的 XML 文件没有任何包含内容,则效果很好。如果我这样做 - 正如我已经开始按照上面提到的那样 - 我会收到以下错误:
Warning: org.xml.sax.SAXParseException; systemId:
file:/home/matrygg/minorworksoflydgate.net/XML/Mumming_Eltham/Trinity_College_R_3_20_Mumming_Eltham.xml; lineNumber: 22; columnNumber: 142; Include operation failed, reverting to fallback. Resource error reading file as XML (href='../Witness_Descriptions/Trinity_R_3_20.xml'). Reason: XPointer resolution unsuccessful.
Error on line 22 column 142 of Trinity_College_R_3_20_Mumming_Eltham.xml:
SXXP0003: Error reported by XML parser: An include with href
'../Witness_Descriptions/Trinity_R_3_20.xml'failed, and no fallback element was found.
Query failed with dynamic error: org.xml.sax.SAXParseException; systemId: file:/home/USERNAME/minorworksoflydgate.net/XML/Mumming_Eltham/Trinity_College_R_3_20_Mumming_Eltham.xml; lineNumber: 22; columnNumber: 142; An include with href '../Witness_Descriptions/Trinity_R_3_20.xml'failed, and no fallback element was found.
对我来说很明显,问题在于它不处理相对路径,但我找不到任何如何在命令行界面或 xml 中解决此问题的示例,只能通过 xsl 中的 fn:resolve-uri 来解决。有没有办法在命令行执行此操作,或者我是否必须为我可能想要包含的所有内容输入绝对 URI?我已经检查过,这些文件存在于预期的位置,并且应该具有允许解析它们的权限。
Saxon-HE 9 中的 XInclude 问题是由
xi:include
组件中提供的相对路径引起的。与 oXygen 中的内置 Saxon-PE 变压器相比,Saxon-HE 9 似乎不支持 XInclude 的相对路径。要解决此问题,请在 xi:include
元素中使用绝对 URI。您可以通过将相对路径替换为格式为 file:///path/to/your/file
的整个文件 URI 来实现此目的。
<xi:include href="file:///home/matrygg/minorworksoflydgate.net/XML/Witness_Descriptions/Trinity_R_3_20.xml" xpointer="publication" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="file:///home/matrygg/minorworksoflydgate.net/XML/Witness_Descriptions/Trinity_R_3_20.xml" xpointer="Trinity_R_3_20" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="file:///home/matrygg/minorworksoflydgate.net/XML/Witness_Descriptions/Minor_Poems_Vol_II.xml" xpointer="MacCracken" xmlns:xi="http://www.w3.org/2001/XInclude"/>