NingG +

XML文件入门

XML文件,是什么?

几点:

怎么写?

规范的XML

书写规范的XML(well formed),遵循几个原则:

下面是一段书写规范的XML:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<note>
	<to>George</to>
	<from>John</from>
</note>

第一行是XML声明,定义XML的版本(1.0)和所使用的编码(ISO-8859-1 = Latin-1/西欧字符集),此行必须为第一行,其告诉XML解析器如何工作。

XML中的注释:<!-- This is a comment -->

合法的XML

XML DTD

XML DTD定义XML文档的结构,并且验证XML文档是否合法,一个DTD文档,举例:

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

一个添加了外部DTD验证的XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE note SYSTEM "Note.dtd">
...

思考:上述<!DOCTYPE...>中每个字段的含义?

XML Schema(XSD)

XML Schema是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中引入上述xml schema?RE:通过下文中提到的schemaLocation属性设定。

命名空间

由于标签的名称都是有开发者自己定义的,当两个不同的文档使用相同的标签名称时,就会发生命名冲突。解决办法:标签添加前缀来避免命名冲突。举例:

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

思考:命名空间,什么作用?上述标签方式,已经解决标签的命名冲突了,命名空间本质是就是标签前缀,用于解决标签命名冲突问题。

在第一个添加前缀的标签内,增加属性xmlns:prefix属性,并且为其指定一个URI,则,所有带有相同前缀的子元素都会与同一个命名空间相关联。具体,参考下面:

<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>

解释:上述xmlns:h属性后面的URI地址,唯一作用是给命名空间设定一个名称,XML解析器并不会去这个URL上查找信息;不过,很多公司常常将xmlns:h指向一个真实存在的地址,并且在这一地址介绍命名空间的相关信息。

默认的命名空间

直接使用默认的命名空间,即设定属性xmlns,则可以省去所有子元素中使用前缀的工作。

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

在 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 实例命名空间:(对应URL是网络上不可变的物理空间,XML规范规定的)

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

获取了上述XML Schema实例之后,通过使用其schemaLocation 属性可以指定命名空间对应的xsd校验文件,具体此属性包含 2 个值:命名空间和命名空间对应的XML schema文档:

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

疑问:

RE:(可能理解有误,当前如此理解)

关于schemaLocation,几点:

参考来源

Top