当我将代码输入XSD验证器时,我的XSD出现问题,我收到此错误:"no-xmlns:属性声明的{name}必须与'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>
Run Code Online (Sandbox Code Playgroud)
我假设它与模式中的第二行代码有关.该行与我的XML文档中的以下行相关:
<Test xmlns="http://MyURL">
Run Code Online (Sandbox Code Playgroud)
问题出在您的架构中.只需删除该行:
<xs:attribute name="xmlns" type="xs:string" use="required"/>
Run Code Online (Sandbox Code Playgroud)
XML文档是正确的.在您的文档中,您选择http://MyURL通过分配该value属性将URI绑定到默认命名空间xmlns.这非常好,如XML 1.0中的Namespaces所述.
命名空间很特殊.请参阅XML Schema第1部分的最后一段:3.2.1属性详细信息
[XML-Infoset]使用普通属性中的xmlns或xmlns:xsl等名称来区分属性,将它们标识为[名称空间属性].因此,模式不必包含并且实际上不可能包含与此类命名空间声明相对应的属性声明,请参阅xmlns Not Allowed(第3.2.6节).在本说明书中没有提供为名称空间声明提供默认值的方法.
您编写的模式中的所有内容都在您声明的名称空间中,因此没有必要将文档编写者绑定到以这种方式声明它.他们可以在更高级别的元素上声明命名空间.或者他们可以将它绑定到不同的名称空间前缀.
顺便提一下,您应该通过设置targetNamespace最顶层的schema元素来声明文档中的模式命名空间,如XML Schema Primer中所述.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://MyURL">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7855 次 |
| 最近记录: |