2012-08-16 112 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