XML 命名空间如何在没有工作网络连接的情况下工作?

2022-09-02 09:05:39
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"

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

  <context:component-scan
      base-package="com.springinaction.chapter01.knight" />

</beans>

上面的示例显示了具有多个命名空间的 XML 文件的示例。这些命名空间的目的是什么,最重要的是,为什么即使没有互联网连接,它们也能工作?

我认为以 开头的第二位包含用于验证 XML 文档结构的 XML 架构文件。如果我在不在网络上的计算机上运行使用此配置文件的应用程序,为什么这些仍然有效?URL 是否以某种方式成为 JAR 文件的别名?xsi:schemaLocation


答案 1

尝试忽略这样一个事实,即许多命名空间名称看起来像您可能在浏览器中键入的 URL。它们只是随机的字符串,它们不是网络上资源的地址。人们采用此约定的原因是它显示了谁“拥有”该名称 - 与他们选择“xsd1.0”作为命名空间名称相比,http://www.w3.org/2001/XMLSchema 所指的是什么更清楚,并且不太可能与其他人选择的名称意外冲突。有些人还喜欢这样一个事实,即您可以将文档放在相关位置,但是没有XML软件会自动查找文档。


答案 2

让我们假设我们有这个XML文档。

<?xml version="1.0" encoding="UTF-8"?>
<html>
      <body>
        Your text here
      </body>
      <body>
        <height>182 cm</height>
        <weight>83 kg</weight>
      </body>
</html>

它包括HTML,它具有具有HTML渲染器语义含义的body标记。它还具有另一个身体标签,其中包含有关特定人员的信息。命名空间定义此标记的语义作用域。如果没有命名空间(如提供的示例所示),解析器就不可能区分,因为它们在语法上是相同的。

以下是同一文档的语义正确版本:

<?xml version="1.0" encoding="UTF-8"?>
<html:html xmlns:html="http://www.w3.org/TR/xhtml1/">
  <html:body>
    Your text here
  </html:body>
  <human:body xmlns:human="http://www.example.com/human/">
    <human:height>182 cm</human:height>
    <human:weight>83 kg</human:weight>
  </human:body>
</html:html>

因此,多亏了命名空间,我们不必担心具有不同含义的标签冲突。

命名空间 URI 本身从未实际解析过,并且是任意的(因此您可以脱机使用它们)。


推荐