You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML与XSD分属不同包时,如何用相对路径实现XSD验证?

如何将XML的Schema Location改为相对路径并保留Eclipse验证功能

我来帮你搞定这个问题——把绝对路径的Schema引用改成相对路径,同时保留Eclipse的验证功能其实很简单,分几种场景来操作:

场景1:fonts.xsd和fonts.xml在同一个目录下

这是最常见的情况,直接修改fonts.xml里的xsi:schemaLocation属性,把绝对路径换成文件名即可:

修改后的fonts.xml代码:

<!-- name="default" version="110" -->
<fonts xmlns="http://www.example.org/fonts" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.example.org/fonts fonts.xsd">
    <font fontName="defaultRegular" fontSize="17" fontFamily="Roboto-Regular"/>
    <font fontName="defaultLight" fontSize="17" fontFamily="Roboto-Light"/>
    <font fontName="defaultMedium" fontSize="17" fontFamily="Roboto-Medium"/>
    <font fontName="defaultBold" fontSize="17" fontFamily="Roboto-Bold"/>
    <font fontName="intermediateLight" fontSize="16" fontFamily="Roboto-Light"/>
    <font fontName="intermediateRegular" fontSize="16" fontFamily="Roboto-Regular"/>
    <font fontName="intermediateMedium" fontSize="16" fontFamily="Roboto-Medium"/>
    <font fontName="intermediateBold" fontSize="16" fontFamily="Roboto-Bold"/>
    <font fontName="smallLight" fontSize="14" fontFamily="Roboto-Light"/>
    <font fontName="smallRegular" fontSize="14" fontFamily="Roboto-Regular"/>
    <font fontName="smallMedium" fontSize="14" fontFamily="Roboto-Medium"/>
    <font fontName="smallBold" fontSize="14" fontFamily="Roboto-Bold"/>
    <font fontName="smallerLight" fontSize="12" fontFamily="Roboto-Light"/>
    <font fontName="tinyLight" fontSize="10" fontFamily="Roboto-Light"/>
    <font fontName="bigRegular" fontSize="21" fontFamily="Roboto-Regular"/>
</fonts>

改完之后右键项目选Refresh,Eclipse会自动从相对路径加载XSD,原来的验证规则(比如删除必填属性报错)完全保留。

场景2:fonts.xsd在不同的包/目录下

如果XSD和XML不在同一个目录,需要根据目录层级写相对路径。比如假设你的项目结构是这样的:

你的项目根目录/
├─ src/main/resources/
│  ├─ com/java/mypackage/fonts/
│  │  └─ fonts.xml
│  └─ com/java/shared/schemas/
│     └─ fonts.xsd

那从fonts.xml的位置到fonts.xsd的相对路径是../../../../shared/schemas/fonts.xsd,修改后的schemaLocation就是:

xsi:schemaLocation="http://www.example.org/fonts ../../../../shared/schemas/fonts.xsd"

不过这种跨目录的相对路径容易因为项目结构变动失效,更推荐用Eclipse XML Catalog的方法,一劳永逸:

用XML Catalog配置全局Schema引用

  1. 打开Eclipse的偏好设置:Window -> Preferences -> XML -> XML Catalog
  2. 点击右侧的Add按钮
  3. 在弹出窗口中,选择File System,浏览找到你的fonts.xsd文件
  4. 「Key type」选择Namespace name,「Key」填入你的XSD目标命名空间:http://www.example.org/fonts
  5. 点击OK保存配置

之后不管你的XSD文件移动到哪里,只要更新Catalog里的路径,Eclipse都会通过命名空间自动找到它,甚至可以直接去掉schemaLocation属性,验证功能依然正常。

验证功能是否保留

修改完成后,你可以测试一下:随便删除一个<font>元素的fontName属性,Eclipse应该立刻弹出验证错误,说明原来的验证逻辑完全生效。

内容的提问来源于stack exchange,提问作者Claudiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:00