2

我有一个 XML 模式文档(由我处理的公司提供)来验证他们的系统所需的某个 XML 文件。

假设架构的前几行看起来像这样(我已经修改了 URI 以保护有罪的人!):

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/manifest-plugin"
xmlns="http://www.example.com/manifest-plugin">

XSD 中的 URI 在未修改的原始文件中无效,即您不能去那里获取此 XSD 文件的副本。我不知道他们为什么没有在 XSD 中定义的 URL 上发布它,但他们没有。

我有一个 XSD 的本地副本,我想用它来验证我使用 Eclipse 的 XML 目录的特性创建的 XML 文件。显然,由于 URI 无效,因此没有必要让系统尝试从 Web 检索 XSD。

假设本地 XSD 文件位于我的本地驱动器上:

C:\xml_schemas\manifest-plugin.xsd

XML 文件的开头两行如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

谁能举例说明如何做到这一点?

具体来说:

  1. 根据我上面提供的值,我在 Eclipse 的 XML 目录对话框中设置了哪些值?
  2. 我应该在 XML 文件中放入什么来使其针对本地 XSD 进行验证,而不会混淆我读取我的 XML 文件的其他系统?

我在 Eclipse wiki 上找到了这个页面,但我个人觉得说明不是很清楚:-

在 Eclipse 中使用 XML 目录

我已经尝试设置 XML 目录参数:

然后添加

<manifest xmlns:targetNamespace="http://www.example.com/manifest-plugin">

到 XML 文件,但它似乎不起作用。

顺便说一句,如果您的 Eclipse 版本没有 XML 目录,那么您可能还没有安装“Web 工具平台 (WTP)”特性。它们带有 Eclipse 的 Java EE 版本,但可以单独安装。

4

3 回答 3

2

这应该很简单。从 XML 目录首选项页面单击“添加”以获取“添加 XML 目录元素”对话框。您想在此处添加具有以下属性的目录条目:

本地 XSD 可以在您的工作空间中(使用 Eclipse 路径变量),也可以在工作空间外部的文件系统上。添加条目后,Eclipse 应该能够验证工作空间中的 XML 文档。

请注意,XML 目录与您的应用程序运行时验证 XML 文档没有任何关系。

更新:XML 文件应包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns="http://www.example.com/manifest-plugin">
...

在 Eclipse 3.6 或 3.7 中,您应该会看到如下对话框: 在此处输入图像描述

于 2012-02-01T14:21:16.707 回答
1

如果我没记错的话,您可以指定一个本地模式位置,该位置将优先于 XML 模式文件的远程位置。

因此,如果您将 XSD 文件放在 XML 文件所在的目录中,则 manifest.xml 文件的标题应为:

<manifest xmlns="http://my.super.xsd.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3schools.com manifest.xsd">

我在 Eclipse 下测试过,它可以工作(你甚至可以点击 XSD 链接)。现在,如果您的 XSD 和 XML 文件都在同一个目录中,这将有效。

如果您想将 XSD 放在单独的本地位置,则必须使用该file协议。给定您的示例,您的 XML 文件将如下所示:

<manifest xmlns="http://my.super.xsd.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3schools.com file:///C|/xml_schemas/manifest-plugin.xsd"">

这个例子也可以在 Eclipse 下运行,尽管当单击 XSD 时,它会打开 Web 浏览器(至少对我而言)。

于 2012-02-01T13:15:05.377 回答
0

如果 xml 中未指定 schemaloaction,您应该能够在 Eclipse 中使用 XML catelog 来覆盖模式位置。

于 2012-11-07T06:14:26.623 回答