没有schemaLocation的XMLSchema和XMLSchema实例名称空间

时间:2015-08-21 08:19:42

标签: xml xsd xml-namespaces

我对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>

问题是:

  1. 为什么我们总是声明名称空间 xmlns =“http://www.w3.org/2001/XMLSchema” xmlns:xsi =“http://www.wc3.org/2001/XMLSchema-instance”< / strong>但是没有给出 schemaLocation
  2. XML解析器如何知道(例如用于验证) xmlns =“http://www.w3.org/2001/XMLSchema”定义<attribute><complexType><sequence>等元素?
  3. 阅读很多帖子我理解名称空间,因此他们的URI, 基本上没什么意思,它们只是用来避免名字 相互矛盾的。但我还读到,如果你宣布 xmlns =“http://www.w3.org/2001/XMLSchema”名称空间错误,XML文件无效,为什么?
  4. 为什么在最后一个代码片段中始终没有给出schemaLocation 的 http://www.w3.org/2001/XMLSchema-instance

1 个答案:

答案 0 :(得分:2)

  1. 这些内置命名空间与XSD组件本身有关。没有 schemaLocation是必要的,因为它们的定义是隐含的 XML Schema Recommendation。
  2. 根据定义,一致的XML解析器将理解其含义 xs:attribute等等。
  3. 我不会说名称空间毫无意义。超越成为一种方式 区分其他识别命名的组件,命名空间 也可用于将组件的使用与其关联 另一个XSD中的集体定义。
  4. 如#1中所述,http://www.w3.org/2001/XMLSchema-instance是一个 内置命名空间,由定义为的组件组成 已经暗示了XML Schema Recommendation。