XML模式属性错误,包括类型,外观和语法

时间:2014-08-21 06:30:03

标签: xml xsd

我需要针对定义良好的架构验证我的XML。问题是我通常会收到很多错误。对你的例子进行了广泛的审视,一切似乎都没问题。问题如下:

Multiple annotations found at this line:
    - s4s-att-not-allowed: Attribute 'type' cannot appear in element 'attribute'.
    - s4s-elt-invalid-content.1: The content of '#AnonType_frominterNodeConnect' is invalid. Element 'attribute' is invalid, misplaced, or 
     occurs too often.
    - src-resolve: Cannot resolve the name 'name' to a(n) 'attribute declaration' component.

以下是XML的示例:

<struct>
        <attribute name="sensorReading"/>
        <field name="photo" type="integer"/>
        <field name="solar" type="integer"/>
        <field name="temp" type="real"/>
        <field name="humid" type="real"/>
</struct>

以下是需要验证它的架构:

<xs:element name="struct">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="field" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attribute ref="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
                        <xs:attribute ref="type" type="xs:string" minOccurs="1" maxOccurs="1"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute ref="name" type="xs:string" minOccurs="1" maxOccurs="1"/> 
        </xs:complexType>
</xs:element>

我不明白为什么会出现这种错误。在这里读取某个属性需要在复杂类型的末尾移动,但这显然没有多大帮助。

关心每个知道错误所在的人。

1 个答案:

答案 0 :(得分:2)

一种可能的XML Schema来验证XML是这样的:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="struct">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="attribute">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute name="name" use="required" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="field" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="type" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

¿为什么?

  1. 属性不能包含 maxOccurs minOccurs (他们有 use = required | optional | prohibited )。
  2. 您的XML中有一个元素名为属性(这不是属性,它是一个元素)。
  3. 属性 ref 用于引用XML Schema其他部分中定义的内容。如果要指定属性名称,请使用属性 name =“x”
  4. 正如我在评论中所说,如果您阅读此simple tutorial

    ,将会很有趣