2017-05-06 39 views
0

我使用XML编辑器18.1编写和运行XSL样式表如下:二更新XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="xs" version="2.0"> 

<xsl:import-schema schema-location="orig.xsd"/> 

<xsl:template match="schema-element(orig)"> 
... 
</xsl:template> 

</xsl:stylesheet> 

<orig>被定义为在下面的没有命名空间模式中的顶级元素:

<?xml version="1.1" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" 
    xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xi="http://www.w3.org/2001/XInclude" 
    vc:minVersion="1.1"> 

    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml_namespace.xsd"/> 


<xs:element name="orig"> 
    <xs:complexType> 
     <xs:sequence> 
      ... 
     </xs:sequence> 
     <xs:attributeGroup ref="pointer_attributes"/> 
    </xs:complexType> 
</xs:element> 

在样式表编译,撒克逊-EE 9.6.0.7返回下面的错误消息:

系统ID:主验证文件:...引擎名称:Saxon-EE 9.6.0.7 严重性:fatal描述:XPST0008 XSLT模式语法错误 {schema-element(orig)}中第12行的字符26:There没有 声明元素的导入模式开始位置: 12:26网址:http://www.w3.org/TR/xpath20/#ERRXPST0008

编译罚款与下面的模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

<xs:element name="orig"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="nested_element" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

</xs:schema> 

但是,只要我添加vc:minVersion="1.1"的错误再次发生。

+0

是否满足https://www.w3.org/TR/xpath-30/#id-schema-element-test中的条件?您真的应该向我们展示最小但完整的XSLT样本,XSD,我们需要查看该模式是否具有顶级'xsl:element name =“orig”'。 –

+0

对不起,我忘了提,是的,''是一个顶级元素(它可以作为这个模式的一个实例的根元素)。我试图用一个只有'xsl:import-schema'和schema-element(orig)模板的简单样式表来调试XSLT,但是Saxon仍然告诉我'orig'没有在模式中声明。 – colibrisson

+0

正如我所说的,如果您希望其他人在这里提供帮助,那么最好发布最少但完整的代码示例,以便我们重现问题,因为您在使用Saxon时可能还想解释如何尝试运行架构完全意识到转换(例如在oXygen中或从显示确切命令行的命令行中)。 –

回答

2

问题几乎肯定会出现,因为Saxon被配置为作为XSD 1.0处理器而不是XSD 1.1处理器运行。默认配置是XSD 1.0。

你说你正在使用XML编辑器18.1(这可能是oXygen XML Editor 18.1)。所以你需要在oXygen中设置这个配置参数。在“Configure Transformation Scenario”中,首先选择Saxon-EE作为变压器引擎;然后单击代表“高级配置选项”的图标。朝这个表格的底部是标有“Saxon-EE特定选项”的部分,包括一个单选按钮来选择XSD 1.0或XSD 1.1。

+0

谢谢,也感谢@Martin,撒克逊配置解决了这个问题。 – colibrisson