为什么xsi:schemaLocation声明中存在冗余?

时间:2014-12-09 16:48:46

标签: java xml spring

xml架构位置包含http://www.springframework.org/schema/beans,它已经是架构全局命名空间。那为什么它总是在xsi:schemaLocation元素中重复? XSD / DTD定义了XML,因此解析器进行XML验证需要,但为什么重复命名空间?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

       <bean id="test" />
</beans>

2 个答案:

答案 0 :(得分:2)

xmlns="http://www.springframework.org/schema/beans"

声明默认命名空间,即。如果没有指定,则为http://www.springframework.org/schema/beans

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

声明可以使用此处的XSD验证命名空间http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

答案 1 :(得分:1)

它只是看起来多余,因为您只定义了一个命名空间模式。如果存在多个模式,则需要将名称空间与其模式定义配对。

<foo xmlns="http://www.example.com/foo"
     xmlns:bar="http://www.example.com/bar"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.example.com/foo http://www.example.com/foo.xsd
                         http://www.example.com/bar http://www.example.com/bar.xsd">
  <bar:tag />
</foo>

这意味着默认命名空间为http://www.example.com/foo,其架构位于http://www.example.com/foo.xsd,但我们还使用其架构位于http://www.example.com/bar的命名空间http://www.example.com/bar.xsd schemaLocation属性是以空格分隔的命名空间/模式对列表。