java - Spring Framework XML 配置元数据和命名空间

标签 java xml spring namespaces xsd

我一直在研究使用 Spring 的元数据信息的配置,我意识到我需要深入研究 XML。我对 XML 文件中的引用方案有疑问。到目前为止,我所知道的(我猜...)如下:

  1. 我读到 namespace 的使用对于分离很有用 标记 XML 文档中的元素,从而避免在 标记 ( source )。
  2. 使用 URI 命名命名空间被视为一种标准,而不是 意味着将在网址中搜索文件,例如 示例(source - 在“命名空间名称指向什么?”中)。
  3. 命名空间的声明是使用保留的 属性,“xmlns”。
  4. 命名空间使用前缀(也称为别名),但使用 标记各种子元素不需要前缀(source - 在“美化”中)。

当我遇到以下标记时,事情开始变得困惑:

<element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/1999/XSL/Transform
                             http://www.w3.org/1999/XSL/Transform.xsd
                             http://www.w3.org/1999/xhtml
                             http://www.w3.org/1999/xhtml.xsd">
</element>

根据许多来源(包括 this ),引用 XSD 模式是使用(在我看来)命名空间,如前所述,不指向任何东西,没有文件或任何东西。

据说在session 2.6命名空间识别和使用词汇表,让我明白名称“schemaLocation”是一个保留字,并与所选前缀“xsi”一起使用。我想知道一些与此处呈现的事实有关的事情:

  • “schemaLocation”的名称是什么,放在前缀之后 用过的?那叫“属性”吗?如果是这样,它是什么的属性?
  • Spring 以不同的方式识别某些命名空间,执行它的 在它上面有自己的逻辑,或者命名空间是否真的有可能 指向地址中的物理文件?
  • “xsi: schemaLocation”的使用无需声明 使用前缀为“xsi”的命名空间?

例如:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="..... http://www.springframework.org/schema/util 
   http://www.springframework.org/schema/util/spring-util-4.0.xsd">

这段代码摘自《Spring Framework 入门 - 第二版》,第 3 章,第 112 页。

  • 会不会是作者遗漏了声明“xmlns: xsi ...”?如果他没有遗漏,那么这段代码就错了?或者是这个 没必要写?

编辑

我希望我的问题得到答复,其中包括以下内容的定义、差异和适用性:

  • QNames。
  • 扩展名称。
  • 全局属性。

谢谢。

最佳答案

1) 给“schemaLocation”的名称是什么,放在使用的前缀之后?那叫“属性”吗?如果是这样,它是什么的属性? See here

In an instance document, the attribute xsi:schemaLocation provides hints from the author to a processor regarding the location of schema documents.

The schemaLocation attribute value consists of one or more pairs of URI references, separated by white space. The first member of each pair is a namespace name, and the second member of the pair is a hint describing where to find an appropriate schema document for that namespace. The presence of these hints does not require the processor to obtain or use the cited schema documents, and the processor is free to use other schemas obtained by any suitable means, or to use no schema at all.

2) Spring 以不同方式识别某些命名空间,在其之上执行自己的逻辑,或者命名空间是否真的指向地址中的物理文件?

Spring 使用

META-INF/spring.schemas

  1. 将 schemalocation 重新映射 (*) 到库中的 xsd
  2. (摘要)这个库只支持重新映射的版本
  3. 名为“spring.schemas”的属性文件包含 XML 模式位置的映射

META-INF/spring.handlers

  1. 为特定命名空间提供命名空间处理程序类
  2. 命名空间处理程序类提供解析器逻辑来解析 spring-batch bean,如作业、步骤等。

3) “xsi: schemaLocation”的使用可以在没有声明使用前缀为“xsi”的命名空间的情况下完成吗?

前缀是强制性的(XML标准)

关于java - Spring Framework XML 配置元数据和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368805/

相关文章:

java - 从父类获取子类名

java - 当我将它作为一个包发送时试图打开一个对象

c# - 可以在运行时使用代码针对 xsd 验证 xml 吗?

java - Spring Boot从请求中获取图像数据

java - hadoop安装

java - 在 JSP 中删除不起作用(表不存在)

java - 将 ImageView 中的图像缩放到高度,保持屏幕边界外的宽高比,并右对齐

java - 如何解析(然后查找特定的)从 API 请求接收到的 XML 数据?

java - 如何编写使用匿名内部类(例如PreparedStatementSetter)的类的JUnit测试?

java - 无法使用 IntelliJ 从 github 拉取项目