【问题标题】:Element type "xs:schema" must be followed by either attribute specifications, ">" or "/>" - XML schema design validation failing元素类型“xs:schema”必须后跟属性规范、“>”或“/>”——XML 模式设计验证失败
【发布时间】:2014-06-16 21:06:31
【问题描述】:

我有以下 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>

【问题讨论】:

  • 抱歉问了这么愚蠢的问题。我只是将代码复制到一个新的 xsd 文件中,它就可以工作了。真是奇怪的问题!!
  • 请注意,您提供的 XSD 仍然不正确。有关详细信息,请参阅@helderdarocha 的最佳答案。说您“只是将代码复制到一个新的 xsd 文件并且它工作”掩盖了真正的问题。

标签: xml xsd


【解决方案1】:

XSD 中的子元素不属于正确的命名空间。您必须使用与 xmlns:xs="http://www.w3.org/2001/XMLSchema" 中的 &lt;xs:schema&gt; 元素相同的前缀作为它们的前缀:

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

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

元素元素不能出现在此处:应为 (element, attribute, complexType, ...) 之一

这似乎仍然令人困惑(因为没有提到缺少的命名空间前缀),但不那么晦涩。

注意:您实际上可以在架构中包含不带前缀的元素,只要 XSD 命名空间是使用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>

这在你的情况下是可以的,因为目标命名空间xmlns:ms="http://codereq.com/mathservice/schemas"被映射到一个前缀(而不是使用默认命名空间,这是通常的)。

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 2017-03-12
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多