XML
经常在一些框架(如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>
这个是文档的根元素,里面可以包含子元素。 有一点要注意的: <messge>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替“<”字符: <message>if salary < 1000 then</messag>
在 XML中,有5个预定义的实体引用: XML 元素可以在开始标签中包含属性,类似 HTML。属性提供关于元素的额外(附加)信息。 <beans xmlns="...">
</beans>
xmlns 就是 beans 元素的属性。 2 XML 验证拥有正确语法的 XML 被称为“形式良好”的 XML。通过 DTD(文档类型定义)验证的 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 DTDDTD的作用是定义 XML 文档的结构。如: <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
文档类型定义(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>
外部文档声明 <!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 SchemaW3C 支持一种基于 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 文档的结构。 下面这个例子是一个名为“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 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 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 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”这个命名空间。 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) 属性 xmlns:namespace-prefix="namespaceURI"
注释:用于标示命名空间的地址不会被解析器用于查找信息。其唯一的作用是赋予命名空间一个唯一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。 默认的命名空间(Default Namespaces) xmlns="namespaceURI"
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |