xml简介及基本语法

1、xml定义及用途

        XML是一种可扩展标记语言,被设计用来结构化、存储和传输信息。xml重点在于定义了数据的结构,这种数据传输结构独立于软件和硬件,用于各种应用程序之间的数据传输,如mybatis的mapper.xml、Spring的配置文件等,均支持使用xml文档来定义程序中要用到的数据。

        而xml语言本身 不提供任何预定义的标签,所有的标签由文档的使用者定义、识别。这体现了xml文档的扩展性。例如,mybatis程序可以识别、解析xml文档中的select标签,但并不能解析bean标签。

2、xml语法

XML 元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。一个元素可以包含其他元素、文本、属性。

一个简单的xml文档如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This is a comment --> 
<book date="08/08/2008"> 
    <author>J. K. Rowling/author> 
    <title>Harry Potter</title> 
    <language>english</language> 
    <content>Young wizarding student Harry Potter's six years of study and    adventures before and after Hogwarts</content> 
</book>

xml文档第一行<?xml version="1.0" encoding="UTF-8"?>是xml的声明,该声明定义了xml文档的版本(1.0)以及编码(UTF-8)。

第二行<!-- This is a comment -->是一个注释信息。

第三行<book>是文档的根元素开始标签,最后一行</book>是根元素的结束标签,每个xml都有且只有一个根元素。标签中的date是标签<book>的属性。

第四行到第七行是根元素的子元素,<author>、<title>、<language>、<content>都是根元素<book>的子元素。这几个子元素都包含文本。

一个xml文档有如下约束:

  • xml文档必须要有根元素,该根元素是其他所有元素的父元素
  • 所有元素都必须要有关闭标签,不能省略
  • 标签对大小写敏感,<title></title>与<Title></Title>是不同的标签。
  • 元素命名规则:
  1. 名称可以包含字母、数字以及其他的字符
  2. 名称不能以数字或者标点符号开始
  3. 名称不能以字母 xml(或者 XML、Xml 等等)开始
  4. 名称不能包含空格

 

XML 属性

xml属性可用来提供元素有关元素的信息,通常元数据应当存储为属性,而数据本身应当存储为元素。

xml属性有如下约束:

  • 属性值必须加引号,单引号和双引号均支持,若属性值本身包含双引号,可使用单引号例如:<if test='pk != "abc"'>
  • 属性不能包含多个值

 

xml实体引用

在xml元素中,一些符号有特殊意义,如果元素中出现"<"符号,那么xml文档解析时会把这个符号当作是下一个元素的开始,就会出现错误。针对这些特殊意义的符号,可通过对应的实体进行替换,xml中预定义了一下5个实体引用:

&lt;

<

小于

&gt;

>

大于

&amp;

&

&apos;

'

单引号

&quot;

"

双引号

例如在mybatis中mapper.xml文件中,经常会需要实体引用&lt;&gt;替换sql语句中的"<"和">"。

 

3、xml文档约束

        xml语言本身对xml文档没有任何预定义的元素、标签、属性。这些都是由使用者去约定的,使用者通常会定义应用程序能够识别、解析的一套xml约定,要想编写的xml文档能够正确的被该使用者所解析、处理,那么编写xml文档的人需按照定义的xml约定写出xml文档。xml文档定义约束的方式有两种:DTD(Document Type Definition)和XSD(XML Schemas Definition)

DTD

DTD是通过<!DOCTYPE>标签来进行声明的,<!DOCTYPE>标签声明的DTD分为内部DTD和外部DTD,格式如下:

  • 内部DTD,也就是DTD定义的内容直接写在<!DOCTYPE>标签里面,格式如下,root-element-name为该xml文档的根元素的名称,中括号[]里面就是定义的DTD的具体内容:
<!DOCTYPE root-element-name [] >
  • 外部DTD,即DTD的定义来自外部,又分为私有DTD和公共DTD,私有DTD格式如下:
<!DOCTYPE root-element-name SYSTEM url >

公共DTD格式定义如下,

<!DOCTYPE root-element-name PUBLIC public-name url>

公共DTD的public-name表示公共名称,其格式为"注册//组织//类型 标签//语言":

  • 注册:组织是否由国际标准化组织(ISO)注册,+表示是,-表示不是
  • 组织:组织名称,如:W3C
  • 类型:一般是DTD
  • 标签:指定公开文本描述,即对所引用的公开文本的唯一描述性名称,后面可附带版本号
  • 语言:DTD语言的ISO 639语言标识符,如:EN表示英文,ZH表示中文

例如mybatis的mapper.xml声明的DTD格式如下,根据这个定义,在解析xml文档时,找到对应的DTD定义也就是http://mybatis.org/dtd/mybatis-3-mapper.dtd这个rul所指的DTD,根据DTD里面的定义的元素、标签、属性来解析该xml文档。

<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.study.mybatis.mapper.UserMapper"> 
    <select id="selectUsersByNameAndAge" resultType="com.study.entity.User"> 
    SELECT * FROM user WHERE name = #{name} and age = #{age} 
    </select> 
</mapper>

打开mybatis-3-mapper.dtd这个DTD,可以看到里面定义mapper根元素下包括的子元素:

img2

而这些子元素与我们在编译器中提示的子元素是一致的。同时在我们输入未定义的元素时,编译器也会提示错误信息。

img1

XSD

XSD是定义 XML 文档的合法构建模块,与DTD作用类似,比DTD强大,其重要的能力之一就是对数据类型的支持。

XSD是由xml编写,可以使用xml的解析器来编辑、解析Schema 文件。

在xml文档中,通过根元素中的属性来对XSD进行声明,例如pom.xml文档中声明如下:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
</project>

xmlns="http://maven.apache.org/POM/4.0.0":命名空间的声明,类似包名,告诉schema验证器这个xml文档中的所有元素都被声明于http://maven.apache.org/POM/4.0.0这个命名空间。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":xml遵循的标签规范

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd":定义xmlschema的地址,也就是xml书写时需要遵循的语法,两部分组成,前面部分就是命名空间的名字,后面是xsd(xmlschema)的地址

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值