这涉及到使用最新的SAXONEE9.8对XSLT转换输入的模式感知验证。
我的XSLT文件包含以下内容。
命名空间和相关架构定义如下:
<xsl:import-schema namespace="http://www.fpml.org/2005/FpML-4-2" schema-location="/path/to/some_swbml.xsd"/>
符合上述模式的结果文档:
<xsl:result-document method="xml" href="{$file}" format="swbml-format" validation="strict">
<SWBML xmlns="http://www.fpml.org/2005/FpML-4-2" xsl:use-attribute-sets="ir">
GENERATE SOME MORE XML TO BE VALIDATED BY THE XSD
</SWBML>
</xsl:result-document>
您将注意到结果文档中的父标记
<SWBML>
使用属性集
xsl:use-attribute-sets="ir"
.
属性集定义如下:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:attribute-set name="ir">
<xsl:attribute name="version">4-2</xsl:attribute>
</xsl:attribute-set>
</xsl:stylesheet>
这是一个玩具例子,上面的样板文件不合理!
当我使用它时,它可以很好地工作:
java net.sf.saxon.Transform -sa -ext:on -it -o:output.xml -xsl:example.xslt
这是预期的,因为正如我理解的那样“-sa”只检查输出的XML文档。
这不起作用:
java net.sf.saxon.Transform -val:lax -ext:on -it -o:output.xml -xsl:example.xslt
给:
FORG0001: Attribute @xsl:use-attribute-sets is not allowed on element <SWBML>
我的问题是
-在尝试验证属性集之前,验证程序不应该处理该属性集
<SWBML>
?在我看来,这似乎是在抱怨输出XML文档中不允许使用XSLT指令,这当然是正确的,但似乎检查得太早了。
结果XML有效:
<SWBML xmlns="http://www.fpml.org/2005/FpML-4-2" version="4_2">
如用“-sa”选项转换所示。
我不确定这是XSLT的限制,还是Saxon处理中的错误?我觉得我应该能做到!
有什么想法吗?