首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >saxon转换与saxon.jar document()的行为不同

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

Stack Overflow用户
提问于 2020-10-24 01:35:50
回答 1查看 70关注 0票数 0

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

请告诉我,这是记录良好的行为,在哪里记录的!

谢谢你们!

编辑:

代码语言:javascript
复制
<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输出的开始

代码语言:javascript
复制
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版本:

代码语言:javascript
复制
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, 902487 characters, 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中有没有快速修复的方法来获得同样的结果?

EN

回答 1

Stack Overflow用户

发布于 2020-10-24 05:07:00

根据RFC8089,URI file:../data/mpxvoc.xml不是有效的URI。但是,Saxon对URI采取了一种自由的方法,在这种上下文中,它将URI“按原样”传递给XML解析器,如果解析器准备接受它,那也没问题。在这一点上,平台之间的差异很可能会出现。

解决方案是避免使用不符合标准的URI。如果希望根据样式表的基URI解析相对URI,则删除"file:“部分。

RFC 8089在2017年才发布,在此之前,文件URI方案的规范是无可救药的模糊。2017年的规范来得太晚了,无法产生真正的影响,因为到那时,像Java和.NET这样的现有平台必须保持与各自过去的决定的兼容性。但是如果你坚持使用RFC8089,你应该能够实现合理的可移植性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64504817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档