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用来指定简化后的前缀名(简称),所以我们可以这样定义名称空间:
XML
<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文件使用我们定义的名称空间:
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:book
、novels:title
和novels: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。
示例:
XML
<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:schemaLocation
和xsi:noNamespaceSchemaLocation
是xsi
命名空间中的属性,它们告诉XML解析器在哪里可以找到与特定命名空间关联的XML Schema定义。
如何使用(两种方式):
- 你使用
xsi:schemaLocation
属性来指定命名空间和对应的Schema文件位置。它接受两个值:命名空间URI和Schema文件的位置。 - 如果你使用的XML文档没有使用命名空间,你可以使用
xsi:noNamespaceSchemaLocation
属性来指定Schema文件的位置。
示例:
XML
<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文件