元素类型“xs:schema”必须后跟属性规范,“>”或“/>” - XML架构设计验证失败

时间:2014-06-16 21:06:32

标签: xml xsd

我有以下XSD文件。它显示了一条错误消息

  

元素类型“xs:schema”必须后跟属性规范,“>”或“/>”

我已经检查了所有开始和结束标记。无法解决问题。我从 here 中获取了此代码。 <xs:schema>代码有什么问题?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns:ms="http://codereq.com/mathservice/schemas"   elementFormDefault="qualified"  
    targetNamespace="http://codereq.com/mathservice/schemas">
        
    <element name="MathServiceRequest">
                
        <complexType>
        <sequence>
            <element name="Number" type="xs:integer"/>
        </sequence>
    </complexType>
    </element>
    <element name="MathServiceResponse">
        
        <complexType>
        <sequence>
            <element name="Number" type="xs:integer" />
            <element name="isEven" type="xs:boolean" />
        </sequence>
    </complexType>
    </element>
</xs:schema>

1 个答案:

答案 0 :(得分:1)

XSD中的子元素不属于正确的命名空间。您必须在前缀中添加与<xs:schema>xmlns:xs="http://www.w3.org/2001/XMLSchema"元素相同的前缀:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns:ms="http://codereq.com/mathservice/schemas"   
    elementFormDefault="qualified"  
    targetNamespace="http://codereq.com/mathservice/schemas">

    <xs:element name="MathServiceRequest">

        <xs:complexType>
            <xs:sequence>
                <xs:element name="Number" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="MathServiceResponse">

        <xs:complexType>
            <xs:sequence>
                <xs:element name="Number" type="xs:integer" />
                <xs:element name="isEven" type="xs:boolean" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

这个奇怪的错误消息可能是,因为你的类型是前缀的,有效的XSD类型,但元素不是。通常,验证者会抱怨不同的消息,例如:

  

元素元素不能出现在这里:(element,attribute,complexType,...)

中的一个

仍然看起来令人困惑(因为没有提到丢失的命名空间前缀),但不那么模糊。

注意:只要XSD命名空间是使用{{1的默认命名空间,您实际上可以在架构中具有无前缀的元素}}:

xmlns="http://www.w3.org/2001/XMLSchema"

这样就可以了,因为目标命名空间<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ms="http://codereq.com/mathservice/schemas" elementFormDefault="qualified" targetNamespace="http://codereq.com/mathservice/schemas"> <element name="MathServiceRequest"> <complexType> <sequence> <element name="Number" type="xs:integer"/> </sequence> </complexType> </element> <element name="MathServiceResponse"> <complexType> <sequence> <element name="Number" type="xs:integer" /> <element name="isEven" type="xs:boolean" /> </sequence> </complexType> </element> </schema> 被映射到前缀(而不是使用默认命名空间,这是常见的)。