Intellij IDEA:如何验证XML SCHEMA 1

时间:2014-03-07 16:28:42

标签: xml intellij-idea xsd xml-validation

我正在尝试使用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”:注释,   “http://www.w3.org/2001/XMLSchema”:simpleContent的,   “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,   <{3}}“: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使用的验证器?

2 个答案:

答案 0 :(得分: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相同的解析器。

答案 1 :(得分: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 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”。

  3. 所以,我想说问题不在IDEA中:如果你使用了另一个验证器检查可以通过。我建议始终在几个验证器和版本上检查XML,以确保您的XML是真实的。