微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

saxon转换与saxon.jar document的行为不同

如何解决saxon转换与saxon.jar document的行为不同

我有一个带有document()函数的样式表。当我在.Net上使用saxon的转换运行它时会找到外部文档,但是当我使用java -jar saxon运行它时却找不到外部文件

请告诉我,有充分记录的行为以及记录在何处!

谢谢你们!

first version fails other succeeds

编辑:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    <xsl:strip-space elements="*" />

     <xsl:template match="/">
         <root>
             <xsl:variable name="dict" select="document('file:../data/mpxvoc.xml')"/>
             <xsl:message>
                 <xsl:value-of select="doc-available('file:../data/mpxvoc.xml')"/>
                 <xsl:value-of select="$dict/*/*[1]"/>
             </xsl:message>
         </root>
     </xsl:template>
</xsl:stylesheet>

EDIT2:是的,相同版本!

EDIT3:.NET / transform上-t输出的开始

C:\Users\mauri\OneDrive\smbdata\EM\SM-Plains\20200806>transform -t -s:2-MPX\vfix.mpx -xsl:C:\Users\mauri\eclipse-workspace\Pipeline\xsl\dtest.xsl -o:o.xml
Saxon-HE 9.9.1.6N from Saxonica
.NET 4.0.30319.42000 on Microsoft Windows NT 6.2.9200.0
URIResolver.resolve href="file:/C:/Users/mauri/eclipse-workspace/Pipeline/xsl/dtest.xsl" base="null"
Stylesheet compilation time: 1.25987s (1259.87ms)
Processing file:/C:/Users/maurI/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx
Using parser org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:///C:/Users/maurI/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 222.8786ms
Tree size: 42580 nodes,902487 characters,26182 attributes
Building tree for file:///C:/Users/mauri/eclipse-workspace/Pipeline/data/mpxvoc.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 59.3813ms
Tree size: 20788 nodes,725994 characters,10214 attributes

...

Java版本:

C:\Users\mauri\OneDrive\smbdata\EM\SM-Plains\20200806>java -jar "C:\Program Files\Saxonica\SaxonHE10-2J\saxon-he-10.2.jar" -t -s:2-MPX\vfix.mpx -xsl:C:\Users\mauri\eclipse-workspace\Pipeline\xsl\dtest.xsl -o:o.xml
Saxon-HE 10.2J from Saxonica
Java version 1.8.0_261
Stylesheet compilation time: 635.9066ms
Processing file:/C:/Users/maurI/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/C:/Users/maurI/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 348.0487ms
Tree size: 42580 nodes,26182 attributes
URIResolver.resolve href="file:../data/mpxvoc.xml" base="file:/C:/Users/mauri/eclipse-workspace/Pipeline/xsl/dtest.xsl"
falseError FODC0002 while evaluating xsl:message at line 12 of file:/C:/Users/mauri/eclipse-workspace/Pipeline/xsl/dtest.xsl: Document has been marked not available: file:../data/mpxvoc.xml
Execution time: 414.5074ms
Memory used: 62Mb

URIResolver显示不同的基础。是吗,是否有快速解决方案来在Java中获得相同的结果?

解决方法

根据RFC 8089,URI file:../data/mpxvoc.xml不是有效的URI。但是,Saxon对URI采用一种宽松的方法,在这种情况下,它将URI“按原样”传递给XML解析器,如果解析器为准备接受它就可以了。此时,平台之间的差异可能会出现。

解决方案是避免使用不符合标准的URI。如果要相对于样式表的基本URI解析相对URI,请删除“文件:”部分。

RFC 8089仅在2017年发布,在此之前,文件URI方案的规范含糊其词。 2017年的规范为时已晚,无法产生真正的改变,因为那时Java和.NET等现有平台必须保持与各自过去决定的兼容性。但是,如果您遵循RFC 8089,则应该能够实现合理的可移植性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。