20150131--XML上-02

摘要:
L格式良好的XML:XML遵循XML语法L有效的XML:XML:DTD约束文档格式良好的XML文档:遵循DTD约束文档的合法XML文档XML:合理的XML文档合理的XML文件必须是合法的XML文档,但合法的XML文件不一定是合理的3。快速入门4 DTD约束文档分类1)内部DTD描述:XML文件中定义的DTD文档称为内部DTD基本语法:˂!):当前元素出现0或1次(0或1)l:互斥元素。当前元素只能出现在一种情况下:1)˂!

三、DTD约束

1、为什么需要DTD约束

clip_image002

DTD约束文件的主要功能:保证传输数据的有效性和完整性

2、什么是DTD

l Document Type Definition

l 文档类型定义

l 约束XML的书写规范

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

l 约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等。

l 格式良好的XML:遵循XML语法的XML

l 有效的XML:遵循DTD约束文档的XML

格式良好的XML文档:合法的XML的文档

遵循DTD约束文档的XML :合理的XML的文档

合理的XML文档肯定是合法的XML文档,但合法的XML文档不一定是合理的

3、快速入门

clip_image004

4、DTD约束文档分类

1)内部DTD

说明:在XML文件中定义的DTD文档我们称之为内部DTD

基本语法:

<!DOCTYPE 根元素 [

DTD约束语句

]>

clip_image006

说明:在浏览器中直接打开以上文档,发现系统被不会报错或有任何提示,那么如何来校检当前文档是否满足DTD约束呢?

答:可以通过W3C提供的官方校检工具(一段JavaScript代码)

clip_image008

说明:该文件只能通过鼠标右键——打开方式选择IE浏览器浏览,否则无法实现校检功能,谨记!!!!!

运行效果:

clip_image010

2)外部DTD

说明:外部DTD文件,是将DTD约束放入到一个指定的dtd为后缀的dtd文件中,并通过SYSTEM进行导入

基本语法:

<!DOCTYPE 根元素名称 SYSTEM “DTD文件路径”>

示例文件:

xml文档如下:

clip_image012

DTD约束文档:

clip_image014

运行效果如下:

clip_image010[1]

3)公用DTD

主要是由类似W3C这种权威机构定义的,所有用户或开发者必须遵守的一种公用DTD文档

基本语法如下:

<!DOCTYPE 根元素 PUBLIC “DTD标识名” “公用DTD的URI”>

clip_image016

5、DTD约束——元素(标记、标签)定义

关键词ELEMENT(element)

基本语法:

<!ELEMENT 元素名 (元素类型)>

示例代码:

clip_image018

元素类型:

l (#PCDATA) :该类型可包含任何字符数据,但是不能包含任何子元素

l EMPTY:该类型不能包含子元素和文本,但可以有属性 <br /> <hr />

l ANY:该类型可以包含任何在DTD定义的元素内容(一般用于根元素)

l (子元素) :定义当前子元素只能出现一次

l (子元素1,子元素2,……) :定义子元素出现的次数与出现的位置

l (子元素+) :当前元素出现1次或多次(1到多)

l (子元素*) :当前元素出现0次或多次(0到多)

l (子元素?) :当前元素出现0次或1次(0或1)

l (子元素1|子元素2) :互斥元素,当前元素只能出现其中一个

案例:

1)<!ELEMENT note (header,(message|body))>

<note>

<header></header>

<message></message>

</note>

<note>

<header></header>

<body></body>

</note>

2)<!ELEMENT note (header|message)*>

<note>

</note>

<note>

<header></header>

</note>

<note>

<message></ message >

</note>

<note>

<header></header>

<message></ message >

</note>

clip_image020

6、DTD约束——属性定义

关键词

ATTLIST

基本语法:

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

示例代码:

clip_image022

1)属性类型

l CDATA 字符

l (en1|en2|……) 枚举类型

l ID 属性唯一

l IDREF 引用

枚举类型示例代码:

clip_image024

ID 唯一类型示例代码:

clip_image026

IDREF属性引用类型

clip_image028

2)默认值

#REQUIRED 要求当前元素属性必填

#IMPLIED 当前元素的属性属于可选项

#FIXED 固定值,当当前元素没有默认属性时,系统会自动为其追加默认值

示例代码:

clip_image030

运行效果:

clip_image032

默认值类型示例代码:

clip_image034

运行效果:

clip_image036

说明:参考#FIXED案例与默认值案例可以发现,两者都是为元素属性设置默认值,唯一的区别的是,#FIXED不能更改属性的值,而默认值可以更改其值。

7、DTD约束——定义实体

关键词:ENTITY

定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容

引用实体

参数实体

1)引用实体

在DTD文件中定义,在XML文件中使用的

基本语法:

<!ENTITY 实体名称 “实体的值”>

示例代码:

clip_image038

运行效果:

clip_image040

2)参数实体

在外部DTD文件中定义,在外部DTD文件中使用

基本语法:

<!ENTITY % 实体名称 “实体的值”>

引用时通过%实体名称;

示例代码:

clip_image042

引用实体与参数实体比较:

定义与使用位置不同:

引用实体:在DTD文件中定义,在XML文件中引用的

参数实体:在外部DTD文件中定义,在外部DTD文件中引用的

定义语法不同:

引用实体:<!ENTITY 实体名称 “实体的值”>

参数实体:<!ENTITY % 实体名称 “实体的值”>

引用时语法不同

引用实体:&实体名称;

参数实体:%实体名称;

8、综合案例

要求:能通过现有DTD约束文件编写出合理的XML文档

产品目录 DTD

clip_image044

分析:

通过阅读代码可知:当前文档属于内部DTD所以直接直接放在XML文档内部

阅读第2行可知:当前XML文档的根元素为CATALOG

分析3-5行可知:

clip_image046

当前几行都是定义参数实体

阅读第6行可知,当前CATALOG元素有多个PRODUCT子元素

clip_image048

分析7、8可知

clip_image050

当前元素拥有四个子元素,且第一个和第三个是必选,其他可选

阅读9-14行可知

clip_image052

通过分析可知,该行代码都是用于设置PRODUCT元素的属性,属于可选项

阅读15行可知:

clip_image054

规格类型为文本类型

阅读16-18行可知

clip_image056

规则下有两个属性,分别为WEIGHT与POWER都是文本类型可选项

阅读19行一下代码,可知其都是可选参数,根据需要填写

clip_image058

作业:

1、中级项目(完善+美化)

2、微信公众平台注册:

地址:https://mp.weixin.qq.com/

注册时请想好一个名称,准备头像,准备一张手持身份证照片

注册时选择订阅号账号(订阅号、服务号、企业号)

免责声明:文章转载自《20150131--XML上-02》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring boot 项目打成war包并在idea中运行ASP.NET Core Web API下事件驱动型架构的实现(五):在微服务中使用自我监听模式保证数据库更新与消息派发的可靠性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

甲骨文ARM架构云服务器部署宝塔+.net 5.0

前言 前一段时间,甲骨文推出ARM架构的免费服务器,最高可以申请永久免费的4核,24G内存,4G带宽(目测是G口),算是非常给力。 不过由于ARM架构的CPU。无法100%兼容x86x64的软件,所以在部署上碰到一些坑,本文也是对部署过程的一些踩坑记录。 一、选择镜像 建议选择:Oracle Redhat 8.0版本。这个跟Centos差不多。主要是8相对...

sumo快速运行简单仿真实例详细教程

本文旨在让大家快速的了解sumo,并给出运行一个简单的sumo的例子的教程,进而了解基本sumo工程的架构,使大家对该软件产生兴趣并持续学习下去,刚开始学习仿真的确枯燥,项目“跑起来”才是大家学习下去的动力,国内参考文献太少了,sumo官网又是纯英文,出于此产生了本篇教程,在写作过程中引用了几位CDDN博主的文章,还有两篇介绍车联网仿真模型的论文,就不一一...

haproxy 配置详解

OPTION 选项: option httpclose :HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送                              此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略           ...

HTTP 1.1 中TransferEncoding chunked编码 | haohtml's blog

HTTP 1.1 中Transfer-Encoding chunked编码 | haohtml's blog HTTP 1.1 中Transfer-Encoding chunked编码Posted on 2010/07/24 by admin 大多数的站点相应用户请求时发送的HTTP Headers中包含Content-Length头.此头信息定义在HT...

KETTLE集群搭建

KETTLE集群搭建 说明: 本文档基于kettle5.4 一、集群的原理与优缺点 1.1集群的原理          Kettle集群是由一个主carte服务器和多个从carte服务器组成的,类似于master-slave结构,不同的是’master’处理具体任务,只负责任务的分发和收集运行结果。 Master carte结点收到请求后,把任务分成多个部...

[转]使用 Angular CLI 和 ng-packagr 构建一个标准的 Angular 组件库

使用 Angular CLI 构建 Angular 应用程序是最方便的方式之一。 项目目标 现在,我们一起创建一个简单的组件库。 首先,我们需要创建一个header组件。这没什么特别的,当然接下来会明白的。 我们能从中能得到什么收获? 自动生成项目结构 自动生成组件库的组件、模块和服务 自动生成组件库的测试用例 在打包组件库之前会自动生成对应的测试环境测...