XML系列:(2)XML约束
在XML技术中,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
2、XML语法和XML约束的区别DTD约束:语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)
4、XML约束DTDDTD(Document Type Definition):文档类型定义
4.1、DTD与XML文件关联的三种方式三种方式:内部DTD、引用本地DTD和引用公共DTD
4.1.1、内部DTD语法:
<!DOCTYPE根元素[元素声明]>
实例:
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEnote[<!ELEMENTnote(to,from,heading,body)><!ELEMENTto(#PCDATA)><!ELEMENTfrom(#PCDATA)><!ELEMENTheading(#PCDATA)><!ELEMENTbody(#PCDATA)>]><note><to>美国</to><from>中国</from><heading>Hello</heading><body>主体</body></note>
语法:
<!DOCTYPE根元素SYSTEM"文件名">
实例:
文件note.dtd
<!ELEMENTnote(to,from,heading,body)><!ELEMENTto(#PCDATA)><!ELEMENTfrom(#PCDATA)><!ELEMENTheading(#PCDATA)><!ELEMENTbody(#PCDATA)>
文件note.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEnoteSYSTEM"note.dtd"><note><to>美国</to><from>中国</from><heading>Hello</heading><body>主体</body></note>
语法:
<!DOCTYPE根元素PUBLIC"DTD名称""DTD文件的URL">
实例:
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
元素声明使用下面的语法:
<!ELEMENT元素名称类别>
或者
<!ELEMENT元素名称(元素内容)>
类别:
(元素内容)
顺序问题:<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> 按顺序出现子标签
次数问题:
语法:
<!ATTLIST元素名称属性名称属性类型默认值>
或
<!ATTLIST元素名称属性名称属性类型默认值属性名称属性类型默认值...>
默认值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的
属性类型:控制属性值的
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值,枚举值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
在DTD定义中,通过定义一个实体,在XML文件中就可以引用这个实体了。
语法:
<!ENTITY实体名称"实体的值">
实例:
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEPersons[<!ENTITYauthor"张三"><!ENTITYhome"中国北京">]><Persons>&author;住在&home;</Persons>
展示:
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
5、SchemaXML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
XML Schema符合XML语法结构,本身就是XML文档
DTD文档的结构是平铺性,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系,Schema相对文档结构较强
XML Schema比DTD支持更多的数据类型,并支持用户自定义数据类型
XML Schema定义约束的能力更强大
XML Schema 对命名空间进行支持
Schema本身就是一个XML文档,但扩展名为.xsd。
一个Schema文档通常称之为约束文档,遵循这个约束书写的XML文件称之为实例文档。
和XML文件一样,一个Schema文档必须有一个根节点,并且这个根节点的名称必须为schema。
编写一个Schema文档后,通常需要把这个文件中声明元素绑定到一个URI上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可能通过这个URI(即名称空间)来告诉解析引擎,XML文档中编写的元素来自哪里,被谁约束。
5.3、实例books.xsd(XML Schema文件)
<?xmlversion="1.0"encoding="UTF-8"?><schemaxmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.rk.com/books"elementFormDefault="qualified"><!--targetNamespace表示当前XMLSchema文档中声明的元素定义在http://www.rk.com/books命名空间中--><!--elementFormDefault="qualified"表示在此schema中声明过的元素必须被命名空间限定--><elementname="books"><!--name属性表示当前元素的“标签名”--><complexType><!--复杂元素,由complexType进行定义--><sequence><!--子元素序列--><elementname="book"maxOccurs="unbounded"><complexType><sequence><elementname="title"type="string"/><!--简单元素,由type属性进行定义--><elementname="price"type="double"/><any></any><!--后面可以任意写--></sequence><!--属性的声明一般写到sequence的后面--><attributename="id"type="ID"use="required"/></complexType></element></sequence></complexType></element></schema>
books.xml(XML实例文件)
<?xmlversion="1.0"encoding="UTF-8"?><rk:booksxmlns:rk="http://www.rk.com/books"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.rk.com/booksbooks.xsd"><!--xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"是固定写法,实例命名空间--><!--xsi:schemaLocation此属性就有两个值:第一值是需要使用的命名空间;第二个值是该命名空间使用的XMLSchema的位置--><rk:bookid="b1"><rk:title>往事并不如烟</rk:title><rk:price>49.9</rk:price></rk:book><rk:bookid="b02"><rk:title>XML学习</rk:title><rk:price>23.2</rk:price></rk:book></rk:books>
booksWithDefaultNameSpace.xml(XML实例文件)
<?xmlversion="1.0"encoding="UTF-8"?><booksxmlns="http://www.rk.com/books"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.rk.com/booksbooks.xsd"><!--使用默认命名空间格式:xmlns="http://www.rk.com/books"--><!--一个XML实例文档只允许有一个默认命名空间--><bookid="b1"><title>最后的贵族</title><price>49.9</price></book></books>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。