xsi:schemaLocation的用途是什么?

时间:2011-05-03 20:03:01

标签: 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">

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

4 个答案:

答案 0 :(得分:81)

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

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

答案 1 :(得分:66)

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

  

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

xsi:schemaLocation应该提供有关实际架构位置的提示:

  可以在文档中使用

来提供关于可用于评估的模式文档的物理位置的提示。

答案 2 :(得分:20)

根据spec for locating Schemas

  

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

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

  

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

所以基本上只指定一个命名空间,你的XML&#34;可能&#34;尝试针对该位置的xsd进行验证(即使它缺少schemaLocation属性),具体取决于您的&#34;社区。&#34;如果您指定了特定的schemaLocation,那么它基本上意味着xml文档&#34;应该&#34;符合所说的xsd,所以&#34;请验证它&#34; (正如我读到的那样)。我的猜测是,如果你没有schemaLocationnoNamespaceSchemaLocation属性,它就不会被验证&#34;大部分时间(基于其他答案,看来java就是这样做的。)

这里的另一个问题是,如果您的XML文件在XML文件中指定了特定的schemaLocation xsd url,例如xsi:schemaLocation="http://somewhere http://somewhere/something.xsd",则通常使用java库中的xsd验证[例如:spring config xml文件]通常在你的一个依赖jar中,它将包含该xsd文件的副本,在其资源部分中,spring有一个&#34;映射&#34;能够说将xsd文件视为映射到url http://somewhere/something.xsd的能力(因此你永远不会最终进入Web并下载文件,它只存在于本地)。有关详细信息,另请参阅https://stackoverflow.com/a/41225329/32453

答案 3 :(得分:0)

如果您进入任何这些位置,那么您将找到这些架构中定义的内容。例如,它告诉您ini-method关键字值的数据类型是什么。