XSLT 2.0中的相对路径名

时间:2011-03-25 17:58:31

标签: xslt-2.0

考虑:

<xsl:result-document 
    href="{string-join(
              ($scripts-offset, $metadata-directory, $redirect-file),
              '/'
           )}" 
    format="text">

其中string-join的净效果是“../ resources / foo.txt”。

这应该是什么相对的?样式表?输入文件?

修改

谢雪儿回答:在提出这个问题之后,我有一阵能量和咖啡,并仔细阅读了xs:result-document的规范,并且我还阅读了Saxon-B的实现。该规范要求href相对于“主输出文档”。根据您调用Saxon的方式,它可能会从您将其作为目标提供的File对象中正确设置...或者可能需要您进行额外调用来设置它。因此,所有问题都得到了支持,并为所有麻烦感到抱歉。

2 个答案:

答案 0 :(得分:3)

这是implementation defined

来自http://www.w3.org/TR/xslt20/#creating-result-trees

  

href属性是可选的。该   默认值是零长度   串。有效价值   属性必须是URI引用,   这可能是绝对的或相对的。   可能有实现定义   对绝对形式的限制   可以使用的URI,但是   不需要实现   执行任何限制。任何合法的   必须接受相对URI。注意   零长度字符串是合法的   相对URI。

     

文档节点的基URI   最终结果树的根是   基于有效价值   href属性。如果有效值   是一个相对URI,然后它被解析   相对于基本输出URI。如果   该实现提供了一个API   访问最终结果树,然后它   必须允许最终结果树   通过此基本URI识别。

来自http://www.w3.org/TR/xslt20/#dt-base-output-uri

  

本文件未指明任何内容   应用程序编程接口或   用于启动a的其他接口   转型。但是,本节   描述的信息   转换时提供   启动。除非另有说明   表示,信息是   必需的。

     
      
  • 基本输出URI。 [定义:基本输出URI 是一个URI   在解析分配给final的相对URI时用作基URI   结果树。如果转换生成多个最终结果树,则通常会为每个结果树分配相对于此基数的URI   URI。建立基本输出URI的方式是实现定义的。
  •   

但更重要的是,请考虑一下这个说明:

  

注意:

     

最终结果树的基URI   不一定是一样的   其序列化的URI   磁盘上的表示,如果有的话。对于   例如,服务器(或浏览器客户端)   可能只存储最终结果树   内存或内部磁盘缓存。   只要处理器满足   请求这些URI,它是   他们实际上在哪里无关紧要   写在磁盘上,如果有的话。

答案 1 :(得分:1)

在Saxon和AltovaXML中,它相对于来自XSLT处理器的路径被调用。例如:

cd somePath

java -classpath lib\saxon9he.jar net.sf.saxon.Transform -o:output.xml xml\input.xml xsl\stylesheet.xsl

"C:\Program Files (x86)\Altova\AltovaXML2011\AltovaXML.exe" -xslt2 xsl\stylesheet.xsl -in xml\input.xml -out output.xml

在你的情况下,它将是:

somePath\..\resources\foo.txt