加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML

发布时间:2020-12-16 05:38:22 所属栏目:百科 来源:网络整理
导读:经常在一些框架(如Spring)中看到下面的配置文件的头: ?xml version="1.0" encoding="utf-8"? beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.

经常在一些框架(如Spring)中看到下面的配置文件的头:

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/schema/spring-beans.xsd">
    .....
</beans>

这个配置文件时什么意思呢?
解释:

<?xml version="1.0" encoding="utf-8"?>

XML 声明,定义了 XML 的版本(1.0)和所使用的编码(utf-8)

<beans xmlns="..." xmlns:xsi="..." xmlns:schemaLocation="...">
</beans>

beans 是根元素,xmlns(以及xmlns:xsi和xmlns:schemaLocation)是beans 的一个属性

xmlns="http://www.springframework.org/schema/beans"

声明了一个默认命名空间(http://www.springframework.org/schema/beans),这个URI不是用于查找信息的,而只是定义了一个唯一的名字而已。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

声明了一个名为 xsi 的命名空间。

xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/schema/spring-beans.xsd"

schemaLocation 属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML Schema 的位置。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/schema/spring-beans.xsd"

这两句合起来是对XML Schema文件的引用,XML Scheme文件描述了 XML 文档的结构,可以根据这个对这个 XML 文档进行验证。

下面是具体的知识点:

参考:http://www.w3school.com.cn/xml/index.asp

1 XML 基础

首先它是一个XML文件。XML指可扩展标记语言。XML被设计用来传输和存储数据。XML标签没有被预定义,需要自行定义标签。XML被设计为具有自我描述性。XML是w3c的推荐标准。

<?xml version="1.0" encoding="utf-8"?>

第一行是XML声明。它定义XML的版本(1.0)和所使用的编码(utf-8)

<beans>
</beans>

这个是文档的根元素,里面可以包含子元素。


有一点要注意的:
在 XML 中,一些字符拥有特殊的意义。
如果把字符“<”放在 XML 元素中,会发生错误,这是因为解析器会把它当做新元素的开始。
这样会产生 XML 错误:

<messge>if salary < 1000 then</message>

为了避免这个错误,请用实体引用来代替“<”字符:

<message>if salary &lt; 1000 then</messag>

在 XML中,有5个预定义的实体引用:


XML 元素可以在开始标签中包含属性,类似 HTML。属性提供关于元素的额外(附加)信息。

<beans xmlns="...">
</beans>

xmlns 就是 beans 元素的属性。

2 XML 验证

拥有正确语法的 XML 被称为“形式良好”的 XML。通过 DTD(文档类型定义)验证的 XML 是“合法”的 XML。
XML的一个例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

2.1 XML DTD

DTD的作用是定义 XML 文档的结构。如:

<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可以作为一个外部引用。

内部的 DOCTYPE 声明
假如 DTD被包含在您的 XML 源文件中,它应该通过下面的语法包装在一个 DOCTYPE 声明中:

<!DOCTYPE 根元素 [元素声明]>

带有 DTD 的 XML 文档实例:

<?xml version="1.0"?>
<!DOCTYPE note [ <!ELEMENT note (to,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

外部文档声明
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

<!DOCTYPE 根元素 SYSTEM "文件名">

这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

这是包含 DTD 的“note.dtd”文件:

<!ELEMENT note (to,from,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

2.2 XML Schema

W3C 支持一种基于 XML 的DTD 代替者,它名为 XML Schema:

<xs:element name="note">

<xs:complexType>
  <xs:sequence>
    <xs:element name="to" type="xs:string"/>
    <xs:element name="from" type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

</xs:element>

XML Schema 描述 XML 文档的结构。
XML Schema 语言也被称作 XML Schema 定义(XML Schema Definition,XSD)。
XML Schema 使用 XML 语法。

下面这个例子是一个名为“note.xsd”的 XML Schema 文件,它定义了一个 XML 文档的元素:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">

<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
    <xs:element name="to" type="xs:string"/>
    <xs:element name="from" type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

对 XML Schema 的引用
此文件包含对 XML Schema 的引用:

<?xml version="1.0"?>
<note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

元素
元素是每一个 XML Schema 的根元素:

<?xml version="1.0"?>

<xs:schema>

...
...

</xs:schema>

元素可包含属性。一个 schema 声明往往看上去类似这样:

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">

...
...
</xs:schema>

代码解释:
下面的片段:

xmlns:xs="http://www.w3.org/XMLSchema"

显示 schema 中用到的元素的数据类型来自命名空间“http://www.w3.org/2001/XMLSchema”。同时它还规定了来自命名空间“http://www.w3.org/2001/XMLSchema”的元素和数据类型应该使用前缀 xs:

这个片段:

targetNamespace="http://www.w3school.com.cn"

显示被此 schema 定义的元素(note,to,body)来自命名空间:“http://www.w3school.com.cn”。

这个片段:

xmlns="http://www.w3school.com.cn"

指出默认的命名空间是“http://www.w3school.com.cn”。

这个片段:

elementFormDefault="qualified"

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

在 XML 文档中引用 Schema
此 XML 文档含有对 XML Schema 的引用:

<?xml version="1.0"?>

<note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

代码解释:
下面的片段:

xmlns="http://www.w3school.com.cn"

规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于“http://www.w3school.com.cn”这个命名空间。
一旦您拥有了可用的 XML Schema 实例命名空间:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值时需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:

xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

3 XML 命名空间

在 XML 中,当两个不同的文档使用相同的元素名称时,假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的相同名称的元素,就会发生命名冲突。如下:

<table>
   <tr>
   <td>Apples</td>
   <td>Bananas</td>
   </tr>
</table>

<table>
   <name>African Coffee Table</name>
   <width>80</width>
   <length>120</length>
</table>

3.1可以使用前缀来避免命名冲突:

<h:table>
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
   </h:tr>
</h:table>

<f:table>
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

3.2 使用命名空间(Namespaces)

<h:table xmlns:h="http://www.w3.org/TR/html4/">
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
   </h:tr>
</h:table>

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

与仅仅使用前缀不同,我们为

标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

XML Namespace (xmlns) 属性
XML 命名空间属性被放置于元素的开始标签之中,并使用一些的语法:

xmlns:namespace-prefix="namespaceURI"

注释:用于标示命名空间的地址不会被解析器用于查找信息。其唯一的作用是赋予命名空间一个唯一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

默认的命名空间(Default Namespaces)
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。
使用下面的语法:

xmlns="namespaceURI"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读