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>
答案 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/beans
:http://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
属性是以空格分隔的命名空间/模式对列表。