Eclipse WTP中的XML目录:如何引用独立的XML模式

时间:2012-02-01 11:50:24

标签: xml eclipse xmlcatalog

我有一个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文件的其他系统?
  3. 我在Eclipse维基上找到了这个页面,但我个人并不清楚这些说明: -

    Using the XML catalog in Eclipse

    我尝试过设置XML目录参数:

    然后添加

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

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

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

3 个答案:

答案 0 :(得分:2)

应该非常直截了当。在XML Catalog首选项页面中,单击“Add”以获取“Add XML Catalog Element”对话框。在那里,您要添加具有以下属性的目录条目:

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

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

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

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

在Eclipse 3.6或3.7中,您应该看到如下对话框: enter image description here

答案 1 :(得分: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浏览器(至少对我而言)。

答案 2 :(得分:0)

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