【问题标题】:Problem validating XML against XSD with Eclipse/ADT - no "Validate" context menu entry使用 Eclipse/ADT 针对 XSD 验证 XML 时出现问题 - 没有“验证”上下文菜单条目
【发布时间】:2011-06-26 14:44:37
【问题描述】:

我正在尝试让 Eclipse 验证我创建的 XML 文件是否针对我也创建的架构,但它不起作用,我在上下文菜单中没有“验证”条目。

我正在使用带有 ADT 10.0.1 的 Eclipse 3.6.2,在帮助 -> 关于 -> 安装详细信息,插件选项卡中我有 Eclipse XML 编辑器和工具版本 1.1.103。

根据我在 Eclipse 的网站上找到的内容和关于 SO 的其他问题,我应该能够右键单击 XML 文件并单击“验证”。我的上下文菜单没有“验证”条目,我发现的所有内容都假定它在那里。我进入了 Eclipse Preferences -> XML -> XML Files -> Validation 并勾选了“启用标记验证”,但这并没有改变任何东西..

在保存 XML 文件时,将 noNamespaceSchemaLocation 值更改为不正确的值不会给我任何错误。我不知道我在这里错过了什么

这个想法是让 Eclipse 中的属性窗格显示一个显示有效值的元素“名称”属性的下拉列表,我希望一旦我可以针对 XSD 进行验证,就会发生这种情况。

类似问题

eclipse: validate xml with xsd 就像我一样,即使答案被接受,也没有找到解决方案。评论提到已安装的 Web Tools Platform。

XML validation and auto-complete in Eclipse我已经做了接受的答案提到的事情

文件

它们可能很糟糕,我以前没有做过太多 XML。

res/xml/magicks.xml:

<?xml version="1.0" encoding="utf-8"?>
<magicks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="magicksschema.xsd">

<magick name="Haste" description="Increases the wizard's movement speed by up to double for 10 seconds.">
    <combination>
        <element name="Lightning"/>
        <element name="Arcane" />
        <element name="Fire" />
    </combination>
</magick>
</magicks>

res/xml/magicksschema.xsd:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="magicks">
<xs:complexType>
    <xs:sequence>
        <xs:element name="magick" maxOccurs="unbounded">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="combination">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="element" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:attribute name="name">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:enumeration value="Water" />
                                                    <xs:enumeration value="Life" />
                                                    <xs:enumeration value="Shield" />
                                                    <xs:enumeration value="Cold" />
                                                    <xs:enumeration value="Lightning" />
                                                    <xs:enumeration value="Arcane" />
                                                    <xs:enumeration value="Earth" />
                                                    <xs:enumeration value="Fire" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:attribute>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
                <xs:attribute name="name" type="xs:string" />
                <xs:attribute name="description" type="xs:string" />
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

编辑

  • 将架构更新为 @Per Normann 的版本

【问题讨论】:

    标签: xml eclipse validation


    【解决方案1】:

    您的架构不正确,特别是 w.r.t.你如何声明属性。

    1) 属性直接在类型上声明,而不是作为序列的一部分。

    2) 您将元素 定义为枚举限制,而不是属性“名称”。

    此架构与您的 XML 匹配(并且 eclipse 验证工作正常)。

    <xs:element name="magicks">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="magick" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="combination">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="element" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:attribute name="name">
                                                    <xs:simpleType>
                                                        <xs:restriction base="xs:string">
                                                            <xs:enumeration value="Water" />
                                                            <xs:enumeration value="Life" />
                                                            <xs:enumeration value="Shield" />
                                                            <xs:enumeration value="Cold" />
                                                            <xs:enumeration value="Lightning" />
                                                            <xs:enumeration value="Arcane" />
                                                            <xs:enumeration value="Earth" />
                                                            <xs:enumeration value="Fire" />
                                                        </xs:restriction>
                                                    </xs:simpleType>
                                                </xs:attribute>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string" />
                        <xs:attribute name="description" type="xs:string" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    

    【讨论】:

    • 感谢您修复我的架构!我看到的例子只声明了一个属性,我注意到序列被用于多个元素,所以我做了一点:)虽然我仍然无法在 Eclipse 中验证,它实际上给了我一个解析错误(在最后行:“未找到元素”)用于新模式。在编写原始模式时,我也遇到了奇怪的解析错误。也许我的 Eclipse 安装坏了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多