第二次使用schema-element()更新XSLT,以查找没有名称空间

时间:2017-05-06 08:13:19

标签: xml xslt xsd xslt-2.0 saxon

我正在使用XML Editor 18.1编写和运行下面的XSL样式表:

<?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>被定义为下面的no namespace模式中的顶级元素:

<?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>

在样式表编译期间,Saxon-EE 9.6.0.7返回以下错误消息:

  

系统ID:主要验证文件:...引擎名称:Saxon-EE 9.6.0.7   严重性:致命描述:XPST0008 XSLT模式语法错误   {schema-element(orig)}中第12行的char 26:没有   导入模式中元素的声明起始位置:   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",错误就会再次发生。

1 个答案:

答案 0 :(得分:2)

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

您说您使用的是XML Editor 18.1(大概是oXygen XML Editor 18.1)。因此,您需要在oXygen中设置此配置参数。在“配置转换场景”中,首先选择Saxon-EE作为变换器引擎;然后单击代表“高级配置选项”的图标。在此表单的底部是标有“Saxon-EE特定选项”的部分,包括用于选择XSD 1.0或XSD 1.1的单选按钮。