2013-03-26 140 views
15

我對XML模式等有點新,並且一直在努力開發一些XML,模式和樣式表(XSLT)。我已經取得了合理的進展,但後來意識到我的Schema已經停止工作,所以我已經回到了一個更簡單的非描述性示例。XML模式驗證:找不到元素的聲明

這裏是我的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="Test.Namespace" 
     schemaLocation="http://myNameSpace.com Test1.xsd"> 
    <element1 id="001"> 
     <element2 id="001.1"> 
      <element3 id="001.1" /> 
     </element2> 
    </element1> 
</Root> 

我寫了一個模式,它是在這裏:

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="Test.Namespace" 
      elementFormDefault="qualified"> 
    <xsd:element name="Root"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:complexType name="element1Type"> 
     <xsd:sequence> 
      <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/> 
     </xsd:sequence> 
     <xsd:attribute name="id" type="xsd:string"/> 
    </xsd:complexType> 

    <xsd:complexType name="element2Type"> 
     <xsd:sequence> 
      <xsd:element name="item" type="element3Type"/> 
     </xsd:sequence> 
     <xsd:attribute name="id" type="xsd:string"/> 
    </xsd:complexType> 

    <xsd:complexType name="element3Type"> 
     <xsd:attribute name="id" type="xsd:string"/> 
    </xsd:complexType>   
</xsd:schema> 

的架構是代表我真正的XML的結構。

現在,當我嘗試驗證我的XML,我得到這個錯誤:

cvc-elt.1: Cannot find the declaration of element 'Root'. [7]

這個我想是與根元素的命名空間的問題做的,但我真的不知道。

有人可以建議我做錯了請。

回答

14

cvc-elt.1: Cannot find the declaration of element 'Root'. [7]

schemaLocation屬性應該是xsi:schemaLocation,並且您需要解決它使用正確的命名空間。

你或許應該改變架構的targetNamespace和文檔的xmlnshttp://myNameSpace.com(因爲名稱空間應該是有效的URI,這Test.Namespace不是,雖然urn:Test.Namespace將是確定)。一旦你這樣做,它應該找到模式。重點在於模式的所有三個目標名稱空間,文檔的名稱空間以及您爲其提供架構位置的名稱空間必須相同。

(雖然它仍然不會驗證爲您<element2>包含在架構預計item在文檔中<element3>

+3

我已經按照您的建議更正了以下內容,現在它可以正常工作 「三個」命名空間的說明正是我所需要的。 – Nerdio 2013-03-27 10:07:19

1

你的XML架構的元素的命名空間一旦你同意上述不匹配(點在主場迎戰Test.Namespace逗號Test,Namespace

targetNamespace,你必須考慮你的element2有屬性訂單不在您的XSD中。根元素

+0

謝謝你,並發現兩個明顯的錯誤。我糾正了這些; '代碼' <根 的xmlns:的xsi = 「http://www.w3.org/2001/XMLSchema-instance」 的xmlns =「Test.Namespace」 schemaLocation =「http://myNameSpace.com Test1.xsd」 > '代碼' (對不起,我似乎不正確插入的代碼)。 問題仍然存在... – Nerdio 2013-03-27 08:15:03

17

感謝大家之上,但是這已經得到解決。爲了其他人的利益,最重要的錯誤是按照Ian的建議對齊三個名稱空間。

爲了完整起見,這裏是校正XML和XSD

下面是XML,與錯別字校正(抱歉引起遲到的任何混淆)

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

<Root 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="urn:Test.Namespace" 
    xsi:schemaLocation="urn:Test.Namespace Test1.xsd" 
    > 
    <element1 id="001"> 
     <element2 id="001.1"> 
      <element3 id="001.1" /> 
     </element2> 
    </element1> 
</Root> 

和,這裏是架構

<?xml version="1.0"?> 

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="urn:Test.Namespace" 
      xmlns="urn:Test.Namespace" 
      elementFormDefault="qualified"> 
    <xsd:element name="Root"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:complexType name="element1Type"> 
     <xsd:sequence> 
      <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/> 
     </xsd:sequence> 
     <xsd:attribute name="id" type="xsd:string"/> 
    </xsd:complexType> 

    <xsd:complexType name="element2Type"> 
     <xsd:sequence> 
      <xsd:element name="element3" type="element3Type"/> 
     </xsd:sequence> 
     <xsd:attribute name="id" type="xsd:string"/> 
    </xsd:complexType> 

    <xsd:complexType name="element3Type"> 
     <xsd:attribute name="id" type="xsd:string"/> 
    </xsd:complexType>   
</xsd:schema> 

再次感謝大家,我希望這對未來的其他人有用。

+4

如果我可以對你的答案提出一些改進:你應該不接受我的答案,等一天我想,然後接受你的答案,因爲從技術上講,你的答案包含所有的修正;我還會修復你的NID部分URN,它是無效的(刪除'.',這是NID的無效字符),並添加強制NSS部分,由另一個':'分隔。 schemaLocation只是一個提示,如果不是出於安全原因,XSD知道的驗證器可以自由忽略它 - 這就是爲什麼它不應該是XML無效的原因。 – 2013-03-27 11:54:00

相關問題