我有以下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>
答案 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>
被映射到前缀(而不是使用默认命名空间,这是常见的)。