XMLNS属性声明

时间:2012-08-16 20:57:54

标签: xml xsd

我的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>

我假设它与架构中的第二行代码有关。这一行与我的XML文档中的以下行相关:

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

1 个答案:

答案 0 :(得分:5)

问题出在您的架构中。只需删除该行:

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

XML文档是正确的。在您的文档中,您选择通过分配该值属性http://MyURL将URI xmlns绑定到默认命名空间。这完全没问题,如Namespaces in XML 1.0中所述。

命名空间很特殊。请参阅XML Schema Part 1: 3.2.1 Attribute Details

的最后一段
  

[XML-Infoset]使用普通属性中的xmlns或xmlns:xsl等名称来区分属性,将它们标识为[名称空间属性]。因此,模式不必包含并且实际上不可能包含与此类命名空间声明相对应的属性声明,请参阅xmlns Not Allowed(第3.2.6节)。本规范中没有提供为名称空间声明提供默认值的方法。

您编写的模式中的所有内容都在您声明的名称空间中,因此没有必要将文档编写者绑定到以这种方式声明它。他们可以在更高级别的元素上声明命名空间。或者他们可以将它绑定到不同的名称空间前缀。

顺便提一下,您应该在targetNamespace

中解释,在最上面的schema元素上设置<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://MyURL"> ,从而在文档中声明架构的命名空间。
{{1}}