XSD 小结
在实际开发中,常会遇到一些 XML 类型的配置文件,那么如何去理解其所含的标签,以及正确的进行配置呢!
追本溯源,如果想明确 XML 文件中的每一个标签的含义,最好的办法是找到定义这个文档的人问道问道。
当然,这是不现实的,好在,XML 文档中提供了一个 XSD 文档地址供我们查阅。
XSD,XML Schema Definition,是定义 XML 文档的文档。
以 Maven 的 Settings.xml 文件为例:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<settings>
实际上,几乎每一个 XML 文档的根标签中都有诸如上面的属性,那么他们有啥含义呢!
简单来说,就是声明该标签中的默认命名空间,并指明了解析该文档的所需的 XSD 文档的地址。
xmlns, xml name space
默认的命名空间,其后的值通常是一个链接,其实只要确保唯一即可,XML 解析器并不会去访问该链接。
xmlns:xsi
前缀为 xsi
的命名空间,xsi, xml schema instance
表示一个 xml schema
实例,实际上,这个前缀是什么并不重要,只要在当前文档中唯一即可,重要的是其后赋的 http://www.w3.org/2001/XMLSchema-instance
值。引入该命名空间,实际是为了使用 schemaLocation
来指明当前 XML 文档的 XSD 定义文档的地址。
xsi:schemaLocation=<要使用的命名空间> <针对前面的命名空间进行定义的 XSD 地址>
访问 http://maven.apache.org/xsd/settings-1.0.0.xsd 查询 XML Shema 定义。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
elementFormDefault="qualified"
targetNamespace="http://maven.apache.org/SETTINGS/1.0.0">
</xs:schema>
xmlns:xs="http://www.w3.org/2001/XMLSchema"
指明了当前文档中使用 xs
前缀的标签的命名空间。
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
默认命名空间。
elementFormDefault="qualified"
表示该文档中定义的标签在被使用时,必须有命名空间的限定。
targetNamespace="http://maven.apache.org/SETTINGS/1.0.0"
表示文档中定义的标签是限定在该命名空间中的。
将 Settings.xml
和 settings-1.0.0.xsd
的根标签的属性联系起来,可知,前者使用默认的命名空间、指定 XSD 位置时使用的命名空间,都需要同后者的 xmlns
、targetNamespace
保持一致。
XSD 文档中是如何定义 XML 文档的,可以参见 XML Schema。
实际上,XSD 和 XML 的格式很像,那么 XSD 中使用的标签又是从何而来,凭什么决定的呢!
寻其本源,最终是大家约定的结果,W3C 制定规则,而软件商则根据该规则来编写 XML 解析器。
网络世界就是规则的世界,我们身处的世界的本质或许也是一条条规则。