Intellij IDEA:如何验证 XML SCHEMA 1

问题描述 投票:0回答:2

我正在使用 JDK 7 在 IDEA 13.02 中尝试 XML SCHEMA 1.1

这是我从教程中获得的 XML 架构代码。当我在 IntelliJ IDEA 中打开此文件并单击“验证”时,出现以下错误:

cvc-complex-type.2.4.a:发现无效内容开头 元素“开放内容”。之一 '{“http://www.w3.org/2001/XMLSchema”:注释, “http://www.w3.org/2001/XMLSchema”:简单内容, “http://www.w3.org/2001/XMLSchema”:复杂内容, “http://www.w3.org/2001/XMLSchema”:组, “http://www.w3.org/2001/XMLSchema”:全部, “http://www.w3.org/2001/XMLSchema”:选择, “http://www.w3.org/2001/XMLSchema”:序列, “http://www.w3.org/2001/XMLSchema”:属性, “http://www.w3.org/2001/XMLSchema”:attributeGroup, 预期为“http://www.w3.org/2001/XMLSchema”:anyAttribute}'。

这是使用 XML Schema 1.1 增强功能的 XSD 文件:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.books.org"
        xmlns:pub="http://www.books.org"
        elementFormDefault="qualified">

    <complexType name="Publication" abstract="true">
        <openContent mode="interleave">
            <any />
        </openContent>
        <sequence>
            <element name="Title" type="string" />
            <element name="Author" type="string" />
            <element name="Date" type="gYear"/>
        </sequence>
    </complexType>

    <complexType name="BookPublication">
        <complexContent>
            <extension base="pub:Publication">
                <openContent mode="none">
                </openContent>
                <sequence>
                    <element name="ISBN" type="string"/>
                    <element name="Publisher" type="string"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <element name="BookStore">
        <complexType>
            <sequence>
                <element name="Book" type="pub:BookPublication" maxOccurs="unbounded" />
            </sequence>
        </complexType>
    </element>

</schema>

有没有办法验证这一点或升级 IDEA 使用的验证器?

xml intellij-idea xsd xml-validation
2个回答
0
投票

尝试将

xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1"
添加到
<schema>

<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.books.org"
        xmlns:pub="http://www.books.org"
        elementFormDefault="qualified"
        xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
        vc:minVersion="1.1"
>  ... </schema>

它将通知 IDEA 您正在使用 XSD 1.1 架构。

我已将 XSD 1.1 与 WebStorm 8 一起使用,我相信它使用与 IDEA 相同的解析器。


0
投票

如果您的XML验证器支持XSD 1.0和1.1(不仅是一种版本),但无法自动识别XSD的版本,您需要添加属性(就像@helderdarocha所说)

    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
    vc:minVersion="1.1"

“schema”标签和验证器将知道需要使用什么版本进行检查。

但是如果您的 XML 验证器仅支持 XSD 1.0,您应该删除不支持的项目,这是验证的唯一方法,引用 minVersion 将不起作用。

例如:

  1. XML 验证器“.Net 4.0 (XSD 1.0)”会提示文档无效,无论您是否指定了最低版本;

  2. XML 验证器“Xerces 2.11.0”支持两个版本的 XSD,但是:

    2.1 如果您将在 XSD 1.0 模式下验证您的文档,如果未指定“minVersion”,验证器将提示文档不正确。如果添加了 minVersion,验证器将跳过检查 1.1 版本中的项目。

    2.2 如果您将在 XSD 1.1 模式下验证文档,则不需要“minVersion”。

所以,我想说问题不在 IDEA 中:如果您使用其他验证器,检查就可以通过。我建议始终在多个验证器和版本上检查 XML,以确保您的 XML 是真实正确的。

© www.soinside.com 2019 - 2024. All rights reserved.