即懂——XML Schema的名称空间

embedded/2024/10/19 19:17:12/

javaweb书上表述冗杂,故有此篇。

1.名称空间是干啥的

想象一个图书馆

假设你有一个图书馆,图书馆里有不同种类的书,比如小说、教科书、漫画等。每种书都有自己的分类和编号系统。

图书馆的“名称空间”

在XML的世界里,我们可以把每种书的分类看作是一个“名称空间”。比如:

  • 小说类书籍的名称空间可能是:http://www.library.com/novels
  • 教科书类书籍的名称空间可能是:http://www.library.com/textbooks
  • 漫画类书籍的名称空间可能是:http://www.library.com/comics

        每个名称空间都有一个唯一的URI(就像一个网址),这个URI用来标识这个名称空间,确保它的唯一性。 

2.如何定义和使用

XML Schema的角色

        XML Schema就像图书馆的管理员,它定义了每种书应该有哪些信息(比如标题、作者、ISBN等),以及这些信息的格式。

定义名称空间

        首先明确:在XML Schema中,xmlns用来指定简化后的前缀名(简称),所以我们可以这样定义名称空间:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.library.com/novels"xmlns:novels="http://www.library.com/novels"><!-- 这里定义小说类书籍的结构 -->
</xs:schema>

        在这个例子中,targetNamespace属性定义了小说类书籍的名称空间。xmlns:novels定义了一个前缀novels,我们可以用它来引用这个名称空间。

使用名称空间

        现在,假设我们要创建一个XML文件来描述一本小说。我们需要告诉XML文件使用我们定义的名称空间:

<novels:book xmlns:novels="http://www.library.com/novels"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.library.com/novels novelSchema.xsd"><novels:title>1984</novels:title><novels:author>George Orwell</novels:author>
</novels:book>

在这个XML文件中:

  • novels:booknovels:titlenovels:author都是属于小说名称空间http://www.library.com/novels的元素。
  • xmlns:novels告诉XML解析器novels前缀对应的是哪个名称空间。
  • xsi:schemaLocation属性告诉XML解析器在哪里可以找到对应名称空间的Schema文件(novelSchema.xsd)。

一句话——给个简称同时确保元素唯一性

3.解惑:xsi引入与xmlns声明的区别

xmlns 声明命名空间

作用

  • xmlns(XML NameSpace)是用来声明一个XML文档中元素和属性所属的命名空间。
  • 它帮助避免命名冲突。例如,如果你有两个不同的XML文档,它们都有title元素,但是含义不同,你可以通过声明不同的命名空间来区分它们。

如何使用

  • 你在XML文档的根元素或任何元素上使用xmlns:前缀来声明一个命名空间。
  • 例如:<root xmlns:books="http://www.example.com/books">,这里books是前缀,http://www.example.com/books是命名空间的URI。

示例

<books:book xmlns:books="http://www.example.com/books"><books:title>XML Fundamentals</books:title>
</books:book>

在这个例子中,所有带有books:前缀的元素都属于http://www.example.com/books这个命名空间。

xsi 指定 Schema 位置

作用

  • xsi(XML Schema Instance)是一个特殊的命名空间,它提供了与XML Schema验证相关的属性。
  • xsi:schemaLocationxsi:noNamespaceSchemaLocationxsi命名空间中的属性,它们告诉XML解析器在哪里可以找到与特定命名空间关联的XML Schema定义。

如何使用(两种方式)

  • 你使用xsi:schemaLocation属性来指定命名空间和对应的Schema文件位置。它接受两个值:命名空间URI和Schema文件的位置。
  • 如果你使用的XML文档没有使用命名空间,你可以使用xsi:noNamespaceSchemaLocation属性来指定Schema文件的位置。

示例

<books:book xmlns:books="http://www.example.com/books"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.example.com/books bookSchema.xsd"><books:title>XML Fundamentals</books:title>
</books:book>

在这个例子中:

  • xmlns:books="http://www.example.com/books"声明了一个命名空间。
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"声明了xsi前缀对应的命名空间。
  • xsi:schemaLocation="http://www.example.com/books bookSchema.xsd"指定了命名空间http://www.example.com/books对应的Schema文件位置是bookSchema.xsd

区别和作用

  • 区别xmlns用于声明命名空间,而xsi用于指定与这些命名空间关联的Schema文件的位置。
  • 作用xmlns确保元素和属性名在XML文档中是唯一的,避免了不同XML文档中的命名冲突。xsi则确保XML文档的结构和内容符合预定义的Schema,提供了验证XML文档的方法。

        一句话——xmlns声明为schema文件设定简称,xsi引入负责查找这些schema文件


http://www.ppmy.cn/embedded/128812.html

相关文章

利用移动式三维扫描技术创建考古文物的彩色纹理网格【上海沪敖3D】

文章来源于蔡司工业质量解决方案&#xff0c;作者蔡司工业质量 在考古环境中&#xff0c;三维扫描技术应用广泛&#xff0c;如存档、保存、复制和分享&#xff08;包括实体和虚拟形式&#xff09;。 文中&#xff0c;通过真实的扫描案例&#xff0c;您将了解到三维光学解决方案…

傅里叶变换(FT)与快速傅里叶变换(FFT)的区别

傅里叶变换&#xff08;Fourier Transform, FT&#xff09;和快速傅里叶变换&#xff08;Fast Fourier Transform, FFT&#xff09;都是用于信号频域分析的工具&#xff0c;但它们在计算方式和效率上存在显著的区别。下面小编将详细说明傅里叶变换和快速傅里叶变换的定义、原理…

自然语言处理 (NLP) 的 5 个步骤

自然语言处理 (NLP) 的 5 个步骤 引言 如今&#xff0c;我们的世界在数字化连接方面达到了前所未有的水平。信息、见解和数据不断争夺我们的注意力&#xff0c;我们不可能全部消化。对于你的企业来说&#xff0c;挑战在于了解客户和潜在客户对你的产品和服务的看法&#xff0c;…

2024系统分析师---论文写作要点

摘要&#xff1a; 摘要是对论文全文内容的浓缩和精华&#xff0c;通过摘要&#xff0c;可让读者迅速总览全文内容。一般来说&#xff0c;摘要至少包含三部分内容&#xff0c;一是项目背景简介&#xff0c;如时间&#xff0c;项目名称&#xff0c;项目主要内容&#xff1b;二是作…

【工具】使用perf抓取火焰图

背景 当程序存在cpu性能问题时&#xff0c;我们需要找到是哪个函数占用较多的CPU&#xff0c;也就是找出热点函数&#xff1b;perf的火焰图就是这个用途 安装 在Linux系统中&#xff0c;perf 是 Linux 内核提供的性能分析工具&#xff0c;它通常包含在内核源代码包中。大多数…

【优选算法】(第三十八篇)

目录 数据流中的第K⼤元素&#xff08;easy&#xff09; 题目解析 讲解算法原理 编写代码 前K个⾼频单词&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 数据流中的第K⼤元素&#xff08;easy&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&…

嵌入式Linux:发送实时信号

目录 1、发送进程 2、接收进程 非实时信号有一个明显的局限性&#xff1a;当同一个信号多次发生时&#xff0c;它只会被记录为一次&#xff0c;且不会记录发生的次数。因此&#xff0c;当该信号被解除阻塞后&#xff0c;它仅会被处理一次。这种行为使得标准信号在某些应用场景…

如果用Java设计MySQL中表级锁、行级锁和间歇锁会是怎么的?

在 MySQL 中&#xff0c;锁机制是确保数据一致性和并发控制的重要手段。MySQL 支持多种锁类型&#xff0c;包括表级锁、行级锁等&#xff0c;每种锁的适用场景、影响范围和实现机制各不相同。我们将逐一介绍它们&#xff0c;并通过模拟代码展示不同锁的实现。 1. 锁类型及其影…