2017-02-08 36 views
2

這似乎不是無論我怎樣形成我的XML,我收到以下錯誤:XML不符合架構

Schema Violation in message: Element 'message': No matching global declaration available for the validation root. 

,前兩個是XSD的線條看起來像這樣:

<xsd:schema targetNamespace="urn:gtig:/stuff/gunk/v7.9 xmlns:Geek="urn:gtig:/stuff/gunk/7.9 xmlns:xsd="http://www.w3.org/2001/XMLSchema elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xsd:element name="message" type="Geek:Message"/> 

我的XML的第一行是這樣的:

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 xsi:type="Geek:Message" xsi:schemaLocation="v7.9 /path/to/the/schema"> 

應該如何郵件的第一行看?

回答

2

修復兩個問題:

  • xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9缺少終止雙引號。
  • xsi:schemaLocation應該是命名空間URI - 模式位置對,而不是命名空間前綴 - 模式對。

具體來說,您的形成不是孔message元素從

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" 
     xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 
     xsi:type="Geek:Message" 
     xsi:schemaLocation="v7.9 /path/to/the/schema"> 

改變

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" 
     xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9" 
     xsi:type="Geek:Message" 
     xsi:schemaLocation="urn:gtig:/stuff/gunk/v7.9 /path/to/the/schema"> 

更新:正如邁克爾·凱在評論中指出,有更多要在此更正,因爲message當前不在命名空間和therefo中re xsi:schemaLocation將無助於將此XML與XSD關聯。

一個補丁修復將增加message由XSD目標命名空間:

<v7.9:message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" 
       xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9" 
       xsi:type="Geek:Message" 
       xsi:schemaLocation="urn:gtig:/stuff/gunk/v7.9 /path/to/the/schema"> 
+0

謝謝!輸入我的示例時錯過了雙引號 - 真正的問題是schemaLocation名稱空間URI。 – Mike

+0

但是這聽起來並不像整個答案,因爲'message'元素不在名稱空間中,而您正在爲'urn:gtig:/ stuff/gunk/v7.9'命名空間加載模式 –

+0

粗體文本爲相當於全部大寫,就像是大喊大叫,所以非常謹慎地使用它。 –