2012-08-16 241 views
3

我遇到了我的XSD問題,當我將代碼輸入到XSD驗證程序時出現此錯誤: 「no-xmlns:屬性聲明的{名稱}不能匹配'xmlns 」「。XMLNS屬性聲明

這裏是我的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Test"> 
     <xs:complexType> 
      <xs:attribute name="xmlns" type="xs:string" use="required"/> 
      <xs:sequence> 
       <xs:choice minOccurs="1" maxOccurs="unbounded"> 
        <xs:element name="Screens" minOccurs="0" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:sequence> 
           <xs:element name="Screen" minOccurs="1" maxOccurs="unbounded"> 
            <xs:complexType> 
             <xs:attribute name="name" type="xs:string" use="required"/> 
             <xs:attribute name="package" type="xs:string" use="required"/> 
             <xs:attribute name="class" type="xs:string" use="required"/> 
             <xs:sequence> 
              <xs:element name="ScreenData" minOccurs="1" maxOccurs="unbounded"> 
               <xs:complexType> 
                <xs:attribute name="step" type="xs:int" use="required"/> 
                <xs:attribute name="description" type="xs:string" use="required"/> 
                <xs:sequence> 
                 <xs:element name="element" minOccurs="1" maxOccurs="unbounded"> 
                  <xs:complexType> 
                   <xs:attribute name="name" type="xs:string" use="required"/> 
                   <xs:attribute name="type" type="xs:string" use="required"/> 
                   <xs:attribute name="value" type="xs:string" use="required"/> 
                  </xs:complexType> 
                 </xs:element> 
                </xs:sequence> 
               </xs:complexType> 
              </xs:element> 
             </xs:sequence> 
            </xs:complexType> 
           </xs:element> 
          </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="DBSession" minOccurs="0" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:attribute name="use_test.properties" type="xs:boolean" use="required"/> 
          <xs:attribute name="use_dbserver" type="xs:string" use="required"/> 
          <xs:attribute name="use_db" type="xs:string" use="required"/> 
          <xs:sequence> 
           <xs:element name="login" minOccurs="1" maxOccurs="1"> 
            <xs:complexType> 
             <xs:attribute name="server" type="xs:string" use="required"/> 
             <xs:attribute name="database" type="xs:string" use="required"/> 
             <xs:attribute name="username" type="xs:string" use="required"/> 
             <xs:attribute name="password" type="xs:string" use="required"/> 
             <xs:sequence> 
              <xs:element name="Queries" minOccurs="1" maxOccurs="1"> 
               <xs:complexType> 
                <xs:sequence> 
                 <xs:attribute name="query" type="xs:string" use="required"/> 
                 <xs:attribute name="expectedResults" type="xs:string" use="required"/> 
                </xs:sequence> 
               </xs:complexType> 
              </xs:element> 
             </xs:sequence> 
            </xs:complexType> 
           </xs:element> 
          </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="CLISession" minOccurs="0" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:attribute name="use_test.properties" type="xs:boolean" use="required"/> 
          <xs:sequence> 
           <xs:element name="login" minOccurs="1" maxOccurs="unbounded"> 
            <xs:complexType> 
             <xs:attribute name="host" type="xs:string" use="required"/> 
             <xs:attribute name="password" type="xs:string" use="required"/> 
             <xs:attribute name="username" type="xs:string" use="required"/> 
             <xs:sequence> 
              <xs:element name="Commands" minOccurs="1" maxOccurs="1"> 
               <xs:complexType> 
                <xs:sequence> 
                 <xs:element name="Command" minOccurs="1" maxOccurs="unbounded"> 
                  <xs:complexType> 
                   <xs:attribute name="exe" type="xs:string" use="required"/> 
                   <xs:attribute name="args" type="xs:string" use="required"/> 
                   <xs:attribute name="wait" type="xs:int" use="required"/> 
                   <xs:attribute name="expectedOutput" type="xs:string" use="required"/> 
                   <xs:attribute name="toVariable" type="xs:string" use="required"/> 
                  </xs:complexType> 
                 </xs:element> 
                </xs:sequence> 
               </xs:complexType> 
              </xs:element> 
             </xs:sequence> 
            </xs:complexType> 
           </xs:element> 
          </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
       </xs:choice> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

我假設它是值得做的代碼架構中的第二條線。此行與我的XML文檔中的以下行相關:

<Test xmlns="http://MyURL"> 
+0

解釋,我相信它是說你的第一個屬性的名稱不能是的xmlns – thatidiotguy 2012-08-16 20:59:29

回答

5

問題出在您的模式中。只需刪除該行:

<xs:attribute name="xmlns" type="xs:string" use="required"/> 

該XML文檔是正確的。在您的文檔中,您選擇通過分配值屬性xmlns將URI http://MyURL綁定到默認名稱空間。這非常好,正如Namespaces in XML 1.0中所解釋的那樣。

命名空間是特殊的。見末段XML Schema Part 1: 3.2.1 Attribute Details

[XML-信息集]區分,其名稱的xmlns或XMLNS屬性:從普通屬性XSL,確定他們爲[命名空間屬性。因此,模式不必包含與此類名稱空間聲明相對應的屬性聲明,參見xmlns不允許(第3.2.6節)。本規範中沒有提供爲名稱空間聲明提供默認值的方法。

您編寫的模式中的所有內容都位於您聲明的名稱空間中,因此沒有必要將文檔編寫者限定爲正確地聲明它。他們可以在更高級別的元素上聲明名稱空間。或者他們可以將它綁定到不同的名稱空間前綴。

順便說一句,你應該用你的最頂層schema元素上設置targetNamespace申報您的模式在文檔中的命名空間中XML Schema Primer

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://MyURL"> 
+0

感謝,似乎工作,還有一個問題。 我在我的XML中有''行作爲第二個標記。你能澄清一下,我沒有辦法讓它驗證,因爲我沒有擁有這個XML,並且不能使它成爲命名空間。 謝謝 – Colin747 2012-08-16 21:34:44