Java XML 模式验证 elementFormDefault ="qualified"

标签 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="qualified" 有关,但现在情况并非如此,那么,是否可能存在错误?任何线索,将不胜感激。

最佳答案

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

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

正如迈克尔·凯在评论中所说:

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

有关 elementFormDefault 的更多详细信息,请参阅 this answer

关于Java XML 模式验证 elementFormDefault ="qualified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376267/

相关文章:

java - JAXB:生成 "group"和 "attributeGroup"作为接口(interface)声明

Java Atm机(如何添加备注)

java - 在 Java 程序中开始结果集之前获取 SQL 错误 1078

java - 格式化 XML 文件 : Indentation

php - 使用字符串将 XML 注入(inject)节点

java - 无法将名称解析为 (n) 'type definition' 组件

visual-studio-2013 - 如何在 VS 2013 中为转换 .config 中的 <rewrite> 启用 IntelliSense?

java - 尝试使用 JNA 从 Java 调用 C 函数

java - 如何让 App Engine cron 作业显示在 Web 界面的 "scheduled tasks"选项卡中?

Android 使用 saxparser 解析 xml