当前位置: 首页 > 知识库问答 >
问题:

XMLSchema和XMLSchema-没有schemaLocation的实例命名空间

景志
2023-03-14

关于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”这样的名称空间,但没有给出这些名称空间的schemaLocation?
  2. XML解析器如何知道(例如验证)xmlns=“http://www.w3.org/2001/xmlschema”定义元素,如
  3. 阅读了许多文章后,我明白了名称空间及其URI基本上没有任何意义,它们只是为了避免名称冲突而使用。但我还读到,如果您声明了xmlns=“http://www.w3.org/2001/xmlschema”名称空间错误,XML文件将无效,为什么?
  4. 为什么在最后一段代码中始终没有给出http://www.w3.org/2001/xmlschema-instance的schemaLocation。

共有1个答案

公西财
2023-03-14
  1. 这些内置名称空间属于XSD组件本身。不需要schemaLocation,因为XML架构建议隐含了它们的定义。
  2. 符合定义的XML解析器将理解xs:attribute等的含义。
  3. 我不会说名称空间没有任何意义。名称空间不仅是区分以标识方式命名的组件的一种方式,还可以用于将组件的使用与其在另一个XSD中的集体定义相关联。
  4. 如#1所述,http://www.w3.org/2001/xmlschema-instance是一个内置的命名空间,由XML架构建议中已经暗示了其定义的组件组成。
 类似资料: