xsi:schemaLocation的用途是什么?

sab*_*sab 127 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.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">
Run Code Online (Sandbox Code Playgroud)

为什么需要它以及它用于什么?Spring会进入网址并验证吗?xmlns和xsi:schemaLocation有什么区别?

ska*_*man 85

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

如果省略schemaLocation,则XML解析器将不知道从何处获取架构以验证配置.


Ode*_*ded 67

An xmlns是文档中的唯一标识符 - 它不必是模式的URI:

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

xsi:schemaLocation 应该给出一个关于实际架构位置的提示:

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


rog*_*ack 20

根据定位Schemas规范

可能存在或者可能没有可通过命名空间名称检索的模式...用户社区和/或消费者/提供者协议可能会建立[尝试从命名空间URL检索xsd]是合理的默认策略的情况

(谢谢你明确无误,规格!)

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

因此,基本上只指定一个命名空间,您的XML"可能"会尝试针对该位置的xsd进行验证(即使它缺少schemaLocation属性),具体取决于您的"社区".如果你指定一个特定的schemaLocation,那么它基本上暗示xml文档"应该"符合所述xsd,所以"请验证它"(当我读它).我的猜测是,如果你不做一个schemaLocationnoNamespaceSchemaLocation属性它只是"大多数时候都没有验证"(根据其他答案,看来java就是这样做的).

另一个问题是,通常情况下,如果您的XML文件在XML文件中指定了特定的schemaLocationxsd url ,那么通常在java库中使用xsd验证[例如:spring config xml文件] ,就像xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"通常在您的一个依赖关系jar中一样,它将包含一个副本xsd文件,在其资源部分,和spring有一个"映射"功能,说要将xsd文件视为映射到url http://somewhere/something.xsd(因此你永远不会去Web和下载文件,它只是在本地存在).有关详细信息,另请参阅/sf/answers/2885773061/.