了解 xml 架构位置

Posted

技术标签:

【中文标题】了解 xml 架构位置【英文标题】:Understanding xml schemalocation 【发布时间】:2015-02-27 12:35:18 【问题描述】:

我正在尝试实现以下 xml 文件的 xmlns 定义的要点:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">   
</beans>

我没有得到这里指定的 schemaLocation。例如,为什么我应该将xmlns:mvc = "http://www.springframework.org/schema/mvc"http://www.springframework.org/schema/mvc 添加到schemaLocation 属性以在我的spring 配置文件中使用mvc:xxx_something_xxx

我只是想了解我每次开始创建spring-mvc应用程序时都在做什么,而不是在不了解的情况下从google复制粘贴它。

【问题讨论】:

【参考方案1】:

这是两个不同的东西:

xmlns:mvc="http://www.springframework.org/schema/mvc" 是一个声明,在这里你说“嘿,当我要在我的 XML 代码中使用“mvc”前缀时,我将使用这个命名空间中的元素和类型”;声明的命名空间应与所需架构中的 xmlns 属性匹配,以便可以识别它 schemaLocation="http://www.springframework.org/schema/mvc" 是一个模式位置,就像 java 中的类路径或 linux 中的路径一样,它是 XML 处理器可以找到 XSD 模式文件的源列表;您需要的架构应该位于此列表中,以便可以找到 XSD 文件

如果没有声明,您不能引用不同于当前模式命名空间(在您的情况下为 xmlns="http://www.springframework.org/schema/beans")的命名空间中的元素和类型。

如果没有架构位置,您将收到无法找到元素或类型的错误。

【讨论】:

所以,据我了解,当我们使用 mvc:xxx_smth_xxx 时,SAXParser 转到 schemaLocation 中指定的 URL 以获取 XSD 模式,然后调用验证。但是当我关闭互联网连接时它仍然可以工作,为什么? 因为它当然有缓存,所以请考虑任何时候你想处理你的 applicationContext.xml 你从互联网上读取模式 - 这将非常糟糕【参考方案2】:

xmlns 定义了一个命名空间。如果你想使用mvc:xxx,你必须定义mvc命名空间是什么。

xsi:schemaLocation 定义 XSD(用于 XML 验证)的位置。

如果我没记错的话,最新的不是强制性的,但如果你不设置它,那么你可能会使用无效的 XML 而不会注意到它。

相关:

What does "xmlns" in XML mean? what is the use of xsi:schemaLocation?

【讨论】:

以上是关于了解 xml 架构位置的主要内容,如果未能解决你的问题,请参考以下文章

Excel里怎么处理 XML 映射?

分布式架构的基石,简单的 RPC 框架实现(JAVA)

在MVVM架构Android中启动服务的正确位置是什么

如何使用 MVVM 架构编写核心位置并执行单元测试?

web.xml 中spring-servlet.xml 和 application.xml 配置位置及含义

在 MVVM 架构 Android 中启动服务的正确位置是啥