Intellij IDEA:如何验证 XML SCHEMA 1

Posted

技术标签:

【中文标题】Intellij IDEA:如何验证 XML SCHEMA 1【英文标题】:Intellij IDEA : How to validate XML SCHEMA 1 【发布时间】:2014-04-10 22:02:36 【问题描述】:

我正在使用 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":simpleContent, "http://www.w3.org/2001/XMLSchema":complexContent, "http://www.w3.org/2001/XMLSchema":group, “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 使用的验证器?

【问题讨论】:

How to indicate that an xml schema that requires schema 1.1 features?的可能重复 【参考方案1】:

尝试将xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"vc:minVersion="1.1" 添加到&lt;schema&gt;

<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 相同的解析器。

【讨论】:

不幸的是,Id 不起作用。网址“w3.org/2007/XMLSchema-versioning”正确吗? IDEA 错误是 (1)“外部资源 w3.org/2007/XMLSchema-versioning 未注册”和 (2)“文件过早结束”。我已经注册了,但是还是不行。 应该是。检查w3.org/2007/XMLSchema-versioning。也许您可以在那里升级您的 IDEA。由于 XSD 1.1 是相当新的,它们可能只在最近的版本中支持它。我的 WebStorm 8 是抢先体验版。我不确定它是否适用于 WS 7。 但是Premature end of file 看起来像别的东西,不是格式良好的问题。【参考方案2】:

如果您的 XML-validator 支持 XSD 1.0 和 1.1(不仅仅是一个版本),但不能自动识别 XSD 的版本,您需要添加属性(就像@helderdarocha 所说的

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

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

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

例如:

    XML Validator ".Net 4.0 (XSD 1.0)" 将说明无效文档,无论您是否指定了最低版本;

    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 正确无误。

【讨论】:

以上是关于Intellij IDEA:如何验证 XML SCHEMA 1的主要内容,如果未能解决你的问题,请参考以下文章

maven配置setting.xml修改远程和本地仓库地址+Intellij IDEA编辑pom.xml配置依赖

如何配置 IntelliJ IDEA 以对 MySQL 数据源使用明文密码身份验证?

java开发工具intellij idea如何创建不同类型的xml文件呢?

intellij idea如何快速将 xml 文件的所有展开的节点闭合

如果 pom.xml 不在根级别,我如何将 maven 项目添加到 intellij idea 中

如何从 IntelliJ IDEA 中获取“重新格式化代码”功能?