2015-09-04 192 views
1

我有一個複雜的XML文件,我需要構建一個數據提交給第三方。驗證XML對XSD

他們爲我提供了2架構的與我所放置在有問題的文檔:

http://www.fresh.co.uk/twschemas/Common.xsd
http://www.fresh.co.uk/twschemas/PCPolicy.xsd

我想驗證我的XML對這些XSD。現在,我使用XMPLIFY的MAC做到這一點,常見問題告訴我,我應該聲明一個目標命名空間,我的XML文檔的根元素,並使用以下格式

<?xml version="1.0" encoding="UTF-8"?> 

<root xmlns="http://example.com/namespace" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://example.com/namespace 
         http://example.com/schema.xsd"> 
</root> 

我的XML

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<PolicyInput xmlns="http://www.tradewisebrokerexchange.com/schemas/2012/10" xsi:schemaLocation="http://www.fresh.co.uk/twschemas/Common.xsd"> 

但是我收到一個驗證錯誤,指出:

Element '{http:www.tradewisebrokerexchange.com/schemas/2012/10)PolicyInput': No matching global declaration available in the validation root. 

我是相當新的XML和我haev驗證對XSD的前卻只有1 XSD地方,因爲好像是2 XSD對這個特定的網絡連接樂。

所有的幫助表示讚賞,因爲我不希望繼續發送我的XML到第三方爲他們告訴我它的錯誤,所以我需要正確驗證它。

謝謝。

回答

1

元素PolicyInput不會出現在您的任何一個XSD中,因此它是無效的,因此您會收到驗證錯誤。

如果您必須處理多個XSD,那麼這些只有在某些情況下相互導入時纔有意義。這似乎是這種情況。主要XSD是PCPolicy.xsd,其中進口Common.xsd。最終效果是任何使用PCPolicy.xsd的人都可以使用Common.xsd中聲明的任何內容。

下一步是確保您的模式位置是正確的。在你的情況下,你寫:

xsi:schemaLocation="http://www.fresh.co.uk/twschemas/Common.xsd" 

這是無效的。 Schemalocation是URI和名稱空間的空格分隔列表,兩者必須找到您的XSD的物理位置。 I .: .:

xsi:schemaLocation="http://www.tradewisebrokerexchange.com/schemas/2012/10 file:/D:/Projects/tests/SO_PCPolicy.xsd"> 

但是這不會幫助你,因爲這兩個模式都沒有定義的元素,它只定義類型。你需要的是一個模式,從這些模式定義給定類型的元素。我認爲你的文檔還沒有完成,並且你缺少一個實際使用這些類型的模式,或者你展示的模式尚未完成。

在給定類型中有一個元素之前,您可以做的事情並不多,並且您對這些模式進行驗證的任何操作都會失敗。

舉例來說,如果我創建了以下XSD:

<xs:schema 
    targetNamespace="http://www.tradewisebrokerexchange.com/schemas/2012/10" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pcp="http://www.tradewisebrokerexchange.com/schemas/2012/10" 
    elementFormDefault="qualified"> 

    <xs:include schemaLocation="SO_PCPolicy.xsd"/> 

    <xs:element name="root" type="pcp:PCAdjustment"></xs:element> 
</xs:schema> 

,並稱之爲PolicyImpl.xsd,我現在已經創建了PCAdjustment類型的元素root。現在我可以真正開始建立我的XML:

<pcp:root 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="test" 
    xmlns:pcp="http://www.tradewisebrokerexchange.com/schemas/2012/10" 
    xsi:schemaLocation="http://www.tradewisebrokerexchange.com/schemas/2012/10 file:/D:/Projects/tests/PolicyImpl.xsd"> 

    <pcp:PolicyNumber></pcp:PolicyNumber> 

</pcp:root> 

這仍然是無效的,但至少現在我得到有意義的驗證錯誤:

  • CVC-的minLength-有效:值「」,長度=對於'PolicyNumber'類型,'0'對於minLength'1'不是facet-valid。
  • cvc-type.3.1.3:元素'pcp:PolicyNumber'的值''無效。
  • cvc-complex-type.2.4.b:元素'pcp:root'的內容不完整。 「{」http://www.tradewisebrokerexchange.com/schemas/2012/10「:EffectiveDate}」之一是預期的。

我對你的要求一無所知,所以你必須檢查文檔或供應商如何實際應用這些模式的有意義。

略微OT:使用一個編輯器,可以做實時驗證,並給你上下文敏感的幫助。我更喜歡oXygen,但有相當多的免費(Eclipse)和非免費的可用。

+1

你發現了,跟着你現在說的,我知道我在找什麼。如你所說,有一個額外的文件丟失。頂級男士,謝謝。 – Lynchie