2011-11-22 13 views
0

我不是任何想象力的XML專家,但我對此有一點了解。客戶端使用適合我的模式獲取XML模式錯誤

我創建了一個Schema文檔和一個經過驗證的示例XML文檔。 我已經使用Altova XML Spy 2004 rel 4來創建和驗證XML模式和XML文檔。

我已經將XML smaple doc和XML Schema發送給已經測試過的客戶端,它工作正常。

我把它發送到第二個,他們報告錯誤。具體做法是:

enter image description here

如果您不能閱讀圖像的文字,它說:

Code Description             File 
-1 The length constraining facet is prohibited for 'Date'.  sample_xml201108.xml 
-1 The length constraining facet is prohibited for 'Date'.  xml201108.xsd 
-1 The MaxLength constraining facet is prohibited for 'Integer'. xml201108.xsd 
-1 The MaxLength constraining facet is prohibited for 'Integer'. xml201108.xsd 
-1 The MaxLength constraining facet is prohibited for 'Integer'. xml201108.xsd 

相關的XML架構的代碼是:

對於日期類型:

導致錯誤的代碼是:

<xs:simpleType name="dateType"> 
    <xs:restriction base="xs:date"> 
     <xs:length value="10"/> 
    </xs:restriction> 
</xs:simpleType> 

對於第一個整數元素:

<xs:element name="x_no" nillable="true"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
     <xs:maxLength value="10"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

對於第二個整數元素

<xs:element name="y_no" nillable="true"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
     <xs:maxLength value="16"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

對於第三個整數元素:

<xs:element name="z_no" nillable="true"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
     <xs:maxLength value="10"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

與理解任何幫助,爲什麼一個客戶端當我和另一位客戶都沒有這個問題時,我會感激地收到這些錯誤。

與錯誤的客戶端使用液體的XML工作室2009年,並與Altova的XML間諜試圖在2009年提前

謝謝...

回答

3

XML Schema規範第2部分,涉及到數據類型(例如,請參閱日期數據類型http://www.w3.org/TR/xmlschema-2/#date)告訴您每個XML Schema簡單類型的允許構面。最大長度是不允許的整數,你應該考慮使用totalDigits(限制只有有意義的數字,沒有前導零)或pattern, 例如:

<xs:element name="z_no" nillable="true"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
     <xs:totalDigits value="10"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

的日期相同的註釋:考慮使用pattern方面,而不是長度。

+0

文森特,非常感謝您的回答。您是否說我寫的XML模式現在已被棄用,因此在我的環境中工作,因爲它是舊版本的XML Spy? – Ollie

+0

我告訴過你的建議是從2004年10月開始的。你可能從2004年開始使用XML Spy並沒有意識到這一點。 –

+0

這是我的印象。感謝您的澄清和答案。 – Ollie

1

爲確保模式有效,您需要做的不僅僅是通過XML Spy運行它,尤其是與XML Spy 2004一樣舊的版本。您的示例顯示XML Spy未能檢測到錯誤使用'長度'與xs:date的方面,是一個完美的例子。

+0

謝謝,公平地說,我確實在其他地方驗證過它,看起來還不錯,但考慮到時間限制和技術,我曾使用過時的MaxLength方面。它仍在測試中,所以沒有造成任何損害,但它給了我的客戶升級到最新軟件版本的具體原因。 – Ollie