Xsd xsi:schemaLocation的用途是什么?

Xsd xsi:schemaLocation的用途是什么?,xsd,Xsd,我发现我们有多个url作为该属性的值,就像在spring中一样: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.

我发现我们有多个url作为该属性的值,就像在spring中一样:

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

为什么需要它?它的用途是什么?Spring是否转到url并进行验证? xmlns和xsi:schemaLocation之间的区别是什么?

是文档中的唯一标识符-它不必是架构的URI:

XML名称空间提供了一种简单的方法,通过将可扩展标记语言文档中使用的元素和属性名称与URI引用标识的名称空间相关联来限定它们

应提供关于实际架构位置的提示:

可以在文档中使用,以提供有关可用于评估的模式文档的物理位置的提示


spring使用的Java XML解析器将读取
schemaLocation
值,并尝试从internet加载它们,以便验证XML文件。反过来,Spring会截获这些加载请求,并从自己的JAR文件中提供版本

如果省略了
schemaLocation
,那么XML解析器将不知道从何处获取模式以验证配置。

根据

可能存在也可能不存在可通过命名空间名称检索的架构。。。用户社区和/或消费者/提供者协议可能会确定[尝试从名称空间url检索xsd]是明智的默认策略的情况

(感谢您的明确说明,spec!)

如果文档作者(人类或非人类)创建了视图中具有特定模式的文档,并保证部分或全部文档符合该模式,则会提供schemaLocation和noNamespaceSchemaLocation[属性]

因此,基本上只要指定一个名称空间,就可以根据您的“社区”尝试根据该位置的xsd验证您的XML(即使它缺少
schemaLocation
属性)。如果您指定一个特定的
schemaLocation
,则基本上意味着XML文档“应该”要符合所说的xsd,所以“请验证它”(正如我所读的)。我的猜测是,如果您不执行
schemaLocation
noNamespaceSchemaLocation
属性,那么大多数情况下它只是“未经验证”(根据其他答案,java似乎是这样做的)


这里的另一个问题是,在java库[ex:spring config xml files]中进行xsd验证时,如果您的xml文件在xml文件中指定了特定的
schemaLocation
xsd url,如
xsi:schemaLocation=”http://somewhere http://somewhere/something.xsd"
通常在一个依赖项jar中,它将在其参考资料部分包含该xsd文件的副本,spring具有“映射”功能,可以将该xsd文件视为映射到url
http://somewhere/something.xsd
(因此,您永远不会访问web并下载该文件,它只存在于本地)。另请参阅以获取更多信息。

如果您进入这些位置中的任何一个,那么您将找到这些模式中定义的内容。例如,它告诉您ini方法关键字值的数据类型

XML解析器不会搜索类路径吗?@skaffman,这是否意味着当我运行带-o(脱机)标志的基于spring的项目的maven build时,尽管所有依赖项都在我的本地存储库中可用,但构建将失败?@HDave但是XML解析器会寻找什么,模式可能有任何名称,XML解析器将首先尝试从internet加载模式,如果找不到或internet访问不可用,它将从类路径本地搜索*.xsd文件,如果仍然找不到,将忽略它。有关spring intercept层的更多信息,请参阅