Java XML Schema Validation elementFormDefault =" qualified"

时间:2017-02-21 19:29:58

标签: java xml xsd

我有一个XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified"
       elementFormDefault="qualified">
<xs:element name="Structure">
    <xs:annotation>
        <xs:documentation>Comment describing your root element</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" ref="Tag1"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" ref="Tag2"/>
            <xs:element minOccurs="0" ref="Properties"/>
            <xs:element minOccurs="0" ref="Tag3"/>
        </xs:sequence>
        <xs:attribute name="url"/>
    </xs:complexType>
</xs:element>
<xs:element name="Tag1">
    <xs:complexType>
        <xs:attribute name="attr"/>
        <xs:attribute name="attr2"/>
    </xs:complexType>
</xs:element>
<xs:element name="Tag2">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element minOccurs="0" ref="Object"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" ref="Tag2"/>
        </xs:sequence>
        <xs:attribute name="filter"/>
    </xs:complexType>
</xs:element>
<xs:element name="Object">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="tag35">
                <xs:complexType>
                    <xs:sequence minOccurs="0">
                        <xs:element maxOccurs="unbounded" minOccurs="0" ref="Tag3"/>
                    </xs:sequence>
                    <xs:attribute name="attr4"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="attr48"/>
    </xs:complexType>
</xs:element>

<xs:element name="element52">
    <xs:annotation>
        <xs:documentation>Text54</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" ref="el58"/>
        </xs:sequence>
        <xs:attribute name="vector"/>
    </xs:complexType>
</xs:element>
<xs:element name="el66" type="el66Type"/>
<xs:element name="el58">
    <xs:complexType mixed="true">
        <xs:attribute name="ID" type="xs:string"/>
    </xs:complexType>
</xs:element>
<xs:element name="Tag3">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded" minOccurs="0">
            <xs:element minOccurs="0" name="MetaProperty">
                <xs:complexType>
                    <xs:sequence minOccurs="0">
                        <xs:any/>
                    </xs:sequence>
                    <xs:attribute name="name"/>
                    <xs:attribute name="value"/>
                </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="Property"/>
        </xs:sequence>
        <xs:attribute name="ID"/>
        <xs:attribute name="language" use="optional"/>
    </xs:complexType>
</xs:element>
<xs:element name="Property">
    <xs:complexType>
        <xs:sequence minOccurs="0">
            <xs:any minOccurs="0" processContents="skip"/>
        </xs:sequence>
        <xs:attribute name="name"/>
        <xs:attribute name="type"/>
    </xs:complexType>
</xs:element>
<xs:element name="Properties">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded" minOccurs="0">
            <xs:element minOccurs="0" ref="Property"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:complexType mixed="true" name="el66Type">
    <xs:attribute name="ID" type="xs:string"/>
</xs:complexType>   
</xs:schema>

和xml:

<Structure url="/Test/url">
<Tag1/>
<Tag2>
    <Object>
        <tag35/>
    </Object>
</Tag2>
<Properties>
    <Property name="bla" type="value1"/>
    <Property name="bla2" type="value2"/>
</Properties>
</Structure>

我正在进行验证,我收到以下错误:

org.xml.sax.SAXParseException; cvc-complex-type.2.4.a: Invalid content was found starting with element 'Tag2'. One of '{Tag1, Tag2, Tag3}' is expected.

我检查过以前的问题,并且解决方案始终与 elementFormDefault =&#34;合格&#34; 相关,但现在情况并非如此,是否有可能存在错误那里?任何线索,都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的XML对您的问题中发布的XSD有效。

不会返回您问题中的错误消息。它必须来自不同的XML或XSD文档。

Michael Kay在评论中说:

  • elementFormDefault仅影响本地元素声明。
  • elementFormDefault仅在XSD有targetNamespace时才会发挥作用。

有关elementFormDefault的更多详情,请参阅 this answer