XML系列:(2)XML约束

1、什么是XML约束

在XML技术中,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

2、XML语法和XML约束的区别

XML语法和XML约束的区别
作用 制定者
XML语法 规范XML文件的基本编写规则 由w3c组织制定的
XML约束 规范XML文件数据内容格式的编写规则 由开发者自行定义

3、常用的XML约束技术

DTD约束:语法相对简单,功能也相对简单。学习成本也低。

Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)

4、XML约束DTD

DTD(Document Type Definition):文档类型定义

4.1、DTD与XML文件关联的三种方式

三种方式:内部DTD、引用本地DTD和引用公共DTD

4.1.1、内部DTD

语法:

<!DOCTYPE 根元素 [元素声明]>

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[
   <!ELEMENT note (to,from,heading,body)>
   <!ELEMENT to (#PCDATA)>
   <!ELEMENT from (#PCDATA)>
   <!ELEMENT heading (#PCDATA)>
   <!ELEMENT body (#PCDATA)>
]>
<note>
   <to>美国</to>
   <from>中国</from>
   <heading>Hello</heading>
   <body>主体</body>
</note>

4.1.2、引用本地DTD

语法:

<!DOCTYPE 根元素 SYSTEM "文件名">

实例:

文件note.dtd

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

文件note.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
   <to>美国</to>
   <from>中国</from>
   <heading>Hello</heading>
   <body>主体</body>
</note>

4.1.3、引用公共DTD

语法:

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">

实例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

4.2、DTD语法

4.2.1、元素

元素声明使用下面的语法:

<!ELEMENT 元素名称 类别>

或者

<!ELEMENT 元素名称 (元素内容)>

类别:

元素的类别
类型 类型值 作用
空标签 EMPTY 表示元素一定是空元素
普通字符串 (#PCDATA) 表示元素的内容一定是普通字符串(不能含有子标签)
任何内容 ANY 表示元素的内容可以是任意内容(包括子标签)

(元素内容)

顺序问题:<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>  按顺序出现子标签

次数问题:

元素出现的次数
标签 含义 语法 示例
(空) 必须且只出现1次 <!ELEMENT 元素名称 (子元素名称)> <!ELEMENT note (message)>
+ 至少出现1次 <!ELEMENT 元素名称 (子元素名称+)> <!ELEMENT note (message+)>
* 0或n次 <!ELEMENT 元素名称 (子元素名称*)> <!ELEMENT note (message*)>
? 0 或1次 <!ELEMENT 元素名称 (子元素名称?)> <!ELEMENT note (message?)>

4.2.2、属性

语法:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

<!ATTLIST 元素名称
                属性名称 属性类型 默认值
                属性名称 属性类型 默认值
                ...
>

默认值:

#REQUIRED 属性值是必需的

#IMPLIED   属性不是必需的

#FIXED value 属性不是必须的,但属性值是固定的

属性类型:控制属性值的

CDATA :表示普通字符串

(en1|en2|..): 表示一定是任选其中的一个值,枚举值

ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头

4.2.3、实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

在DTD定义中,通过定义一个实体,在
XML文件中就可以引用这个实体了。

语法:

<!ENTITY 实体名称 "实体的值">

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Persons[
	<!ENTITY author "张三">
	<!ENTITY home "中国 北京">
]>
<Persons>
&author;住在&home;
</Persons>

展示:

注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。

5、Schema

XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文档的结构。

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。

5.1、XML Schema与DTD

XML Schema符合XML语法结构,本身就是XML文档

DTD文档的结构是平铺性,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系,
Schema相对文档结构较强

XML Schema比DTD支持更多的数据类型,并支持用户自定义数据类型

XML Schema定义约束的能力更强大

XML Schema 对命名空间进行支持

5.2、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文件)

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.rk.com/books" 
	elementFormDefault="qualified">
	<!-- targetNamespace 表示当前XML Schema文档中声明的元素定义在http://www.rk.com/books命名空间中 -->
	<!-- elementFormDefault="qualified"表示在此schema中声明过的元素必须被命名空间限定 -->
	<element name="books"><!-- name属性表示当前元素的“标签名” -->
		<complexType><!-- 复杂元素,由complexType进行定义 -->
			<sequence><!-- 子元素序列 -->
				<element name="book" maxOccurs="unbounded">
					<complexType>
						<sequence>
							<element name="title" type="string"/><!-- 简单元素,由type属性进行定义 -->
							<element name="price" type="double"/>
							<any></any><!-- 后面可以任意写 -->
						</sequence>
						<!-- 属性的声明 一般写到 sequence 的后面 -->
						<attribute name="id" type="ID" use="required"/>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

books.xml(XML实例文件)

<?xml version="1.0" encoding="UTF-8"?>
<rk:books xmlns:rk="http://www.rk.com/books" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.rk.com/books books.xsd ">
	<!-- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 是固定写法,实例命名空间 -->
	<!-- xsi:schemaLocation此属性就有两个值:第一值是需要使用的命名空间;第二个值是该命名空间使用的XML Schema的位置 -->
  <rk:book id="b1">
    <rk:title>往事并不如烟</rk:title>
    <rk:price>49.9</rk:price>
  </rk:book>
  <rk:book id="b02">
  	<rk:title>XML学习</rk:title>
  	<rk:price>23.2</rk:price>
  </rk:book>
</rk:books>

booksWithDefaultNameSpace.xml(XML实例文件)

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.rk.com/books" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.rk.com/books books.xsd ">
	<!-- 使用默认命名空间 格式:xmlns="http://www.rk.com/books" -->
	<!-- 一个XML实例文档只允许有一个默认命名空间 -->
  <book id="b1">
    <title>最后的贵族</title>
    <price>49.9</price>
  </book>
</books>
时间: 2024-08-28 23:03:55

XML系列:(2)XML约束的相关文章

比较全的XML系列工具 可以轻松实现排版、转换和打印!

XML系列 -------------------------------------------------------------------------------- 1.Xsl Formatter-XML可视化工具 是根据W3C策划并推广的xsL式样开发的XML排版和打印转换软件,可以很好的显示和打印XML文档,并可将其转换为PDF文件. 功能: (1)实现XSL样式的排版功能,可将xml内容多版面显示,实现内容精准打印. (2)可以向PDF文件格式转换,在无Adobo Acrobat环

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

Java学习之Xml系列三:dtd校验、改、增、删

见摘要.见代码注释,其他话不多说: DTD文档: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> <!ELEMENT Price (#PCDATA)> <!ELE

Java学习之Xml系列一:初始步骤、查询元素及属性、遍历元素

话不多说,全在代码和注释说明里了. DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> <!ELEMENT Price

原 Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性

xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> &l

标准库系列之xml模块

Python标准库系列之xml模块 Python's interfaces for processing XML are grouped in the xml package. 带分隔符的文件仅有两维的数据:行和列.如果你想在程序之间交换数据结构,需要一种方法把层次结构.序列.集合和其他的结构编码成文本. XML是最突出的处理这种转换的标记(markup)格式,它使用标签(tag)分个数据,如下面的实例文件menu.xml所示: <?xml version="1.0" encod

Java学习之Xml系列五:SAX解析——搜索xml内容

本文对SAX解析进一步说明. 另外主要给利用SAX解析方法找到指定条件(如标签名称)的xml文档内容. 首先按需要介绍一下DefaultHandler. DefaultHandler类是SAX2事件处理程序的默认基类.它继承了EntityResolver.DTDHandler.ContentHandler和ErrorHandler这四个接口.包含这四个接口的所有方法,所以我们在编写事件处理程序时,可以不用直接实现这四个接口,而继承该类,然后重写我们需要的方法.(注意:ContentHandler

Quartz.NET学习系列(九)--- XML任务配置

Quartz.NET除了可以代码定义触发器.任务之外,还可以由XML定义这两个对象.其实Quartz.NET的理想架构是:计划管理容器作为服务器运行在服务机上,而触发器.任务的添加可通过自定义任务管理软件向服务器上添加特定的任务计划. 这时就要求数据的持久化以及服务器的容错性了,后面几篇文章将会介绍持久化以及集群相关内容. VS的XML只能提示 第一篇已经将Quartz.NET下载过来了,在路径doc/xml/文件加下可以找到job_scheduling_data_2_0.xsd vs的智能提示

XML系列:(3)XML解析

xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容,这叫做xml解析. 1.XML解析方式和工具 1.1.XML解析方式 XML解析分为两种方式:DOM和SAX. DOM:W3C组织推荐的一种解析方式.xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容.缺点: 不适合读取大容量的xml文件,容易导致内存溢出. SAX:(Simple API for XM