XML文件入门
2013-04-09
XML文件,是什么?
几点:
- XML,可扩展标记语言(EXtensible Markup Language);
- XML,一种标记语言,很类似HTML;
- XML,设计宗旨是:传输数据,而非显示数据;
- XML,用于传输、存储数据;
- 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"
疑问:
- 上述
xmlns:xsi
属性的详细含义? xmlns:xsi
取值,只能为http://www.w3.org/2001/XMLSchema-instance
?schemaLocation
的含义?
RE:(可能理解有误,当前如此理解)
- 使用
http://www.w3.org/2001/XMLSchema-instance
作为URL,设定的xmlns:xsi
,其中这一URL是网络上的唯一标识,而后缀名xsi
可以随意取; - 以
http://www.w3.org/2001/XMLSchema-instance
作为URL的命名空间,自带有4个属性:type、nil、schemaLocation、noNamespaceSchemaLocation;(具体参考xsi - type和XML build-in attribute declarations) - 特别说明,只有上面的URL作为命名空间时,带有默认属性
schemaLocation
,这一属性用于指定不同命名空间、及其对应的检验文件;
关于schemaLocation
,几点:
- 作用:设定命名空间(namespace)对应的校验文档;
- 命名空间URI与对应的校验文档位置,成对出现,并且以
参考来源
- W3School-XML系列教程
- 如何使用XSD?
- XSD - schema 元素
- XML学习笔记(一):XML中的命名空间
- 一个 XSD 实例
- xsi - type
- Attribute Declaration for the attribute ‘schemaLocation’
- Is xsi a special case in XML?
原文地址:https://ningg.top/xml-intro/