Intellij IDEA:如何验证 XML SCHEMA 1

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

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

cvc-complex-type.2.4.a:发现以元素“openContent”开头的无效内容。 '{" http://www.w3.org/2001/XMLSchema ":annotation, " http://www.w3.org/2001/XMLSchema ":simpleContent, " http://www.w3.org/2001/XMLSchema ":complexContent, " http://www.w3.org/2001/XMLSchema ":group, " http://www.w3.org/2001/XMLSchema ":all, "之一 http://www.w3.org/2001/XMLSchema ":choice, " http://www.w3.org/2001/XMLSchema ":sequence, " http://www.w3.org/2001/XMLSchema ":attribute, " 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 使用的验证器?

stack overflow Intellij IDEA : How to validate XML SCHEMA 1
原文答案

答案:

作者头像

尝试将 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 Schema。

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

作者头像

如果你的 XML-validator 支持 XSD 1.0 和 1.1(不止一个版本),但不能自动识别 XSD 的版本,你需要添加属性( like said @helderdarocha

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

“模式”标签和验证器将知道需要使用哪个版本进行检查。

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

例如:

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

  2. XML Validator "Xerces 2.11.0" 支持两个版本的 XSD,但是:

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

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

所以,我想说问题不在于 IDEA:如果你使用另一个验证器,检查可以通过。我建议始终在多个验证器和版本上检查 XML,以确保您的 XML 正确无误。