2017-05-06 44 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