我对xml名称空间有一些疑问,我将用以下三段代码解释:
1-非常简单的XML模式:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.library.com"
targetNamespace="http://www.library.com"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<element name="Book" type="tns:BookType" />
<complexType name="BookType">
<sequence>
<element name="Title" type="string" />
<element name="Author" type="string" />
</sequence>
</complexType>
</schema>
2-使用新创建的XML架构的XML:
<?xml version="1.0" encoding="US-ASCII"?>
<Book xmlns:xsi="http://www.wc3.org/2001XMLSchema-instance"
xsi:schemaLocation="http://www.library.com ex9.xsd"
xmlns="http://www.library.com">
<Title>Scherlock Holmes</Title>
Author>Arthur Conan Doyle</Author>
</Book>
3-另一个与上述两个代码没有关系的片段代码:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
....
</beans>
问题是:
为什么我们总是像
xmlns=“http://www.w3.org/2001/xmlschema”和xmlns:xsi=“http://www.wc3.org/2001/xmlschema-instance”但是没有给出这些的schemaLocation?
XML解析器如何知道(例如验证)
xmlns=“http://www.w3.org/2001/xmlschema”定义
<attribute>
、<complexType>
、<sequence>
等元素?阅读了许多文章,我了解了名称空间和它们的uri,
基本上没什么意思,只是用来避讳名字
冲突。但我也看到如果你宣布
xmlns=“http://www.w3.org/2001/xmlschema”命名空间错误XML文件将无效,为什么?
为什么在最后一个代码片段中总是没有为
http://www.w3.org/2001/XMLSchema-instance
最佳答案
那些内置的名称空间属于xsd组件本身。不schemaLocation
是必要的,因为它们的定义隐含在
XML模式建议。
根据定义,一致的XML解析器将理解xs:attribute
等。
我不会说名称空间毫无意义。不仅仅是一种方式
区分以其他方式标识命名的组件、命名空间
也可用于将组件的使用与其
另一个xsd中的集合定义。
如1所述,http://www.w3.org/2001/XMLSchema-instance
是
由定义为
已经被xml模式建议所暗示。