分享

PHP教程(31) XML的介绍+DTD的实现案例

 知识书馆 2022-07-18 发布于广东

万能的数据传输格式——XML

目录

万能的数据传输格式——XML

一、XML简介

1、历史起源

2、什么是xml

3xmlhtml区别

4xml应用场景

1)充当程序间交互的中间件(通讯标准)

2)配置文件

3)小型数据库

4)规范数据格式(DTD+XML

5xml传输原理

二、XML基本语法

1、快速入门

2xml基本语法

1)文档声明

2)元素(标记、标签)

3)元素属性

4)注释

5)特殊字符

6CDATA区段(CDATA节)

7)处理指令PI

3、扩展:车载系统中的RSS实现

三、DTD约束

1、为什么需要DTD约束

2、什么是DTD

3、快速入门

4DTD约束文档分类

1)内部DTD

2)外部DTD

3)公用DTD

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

6DTD约束——属性定义

1)属性类型

2)默认值

7DTD约束——定义实体

1)引用实体

2)参数实体

8、综合案例


一、XML简介

1、历史起源

gml(1969)->sgml(1985)->html(1993)->xml(1998)

gml :通用标记语言

IBM 1969 砖家共同研究一个课题:一个程序如何运行在多个系统中(系统可移植性)

sgml :标准通用标记语言

IBM 1985 对基本的gml进行了升级

html :英国科学家博纳斯. sgml 中定义了20html标签实现了世界上第一个网页

html 1993 W3C 进行推广和使用

xml 1998

2、什么是xml

XML

   称:Extensible Markup Language

中文名:可扩展标记语言

用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,允许用户对自己的标记语言进行定义的源语言。

<html>

         <head></head>

         <body></body>

</html>

<游戏></游戏>

面试题:什么是XMLXML主要用途是什么?

答:可扩展标记语言,XML用于传输数据与存储数据

3xmlhtml区别

1)html标签不能自定义,从标签上不能达到“见词知意”的目的

<table></table>

<表格></表格>

2)html将数据与格式绑定在一起

xml只负责数据的传输与存储,其标签没有任何意义

3)不同浏览器解html不同

html语法要求不严格

等等

html主要用于数据的显示,xml主要用于数据传输

4xml应用场景

1)充当程序间交互的中间件(通讯标准)

快递100接口(Java           XML          PHP

2)配置文件

config.php  php

config.xml  phpjavac#

3)小型数据库

php+mysql 金山词霸

php+xml 金山词霸

4)规范数据格式(DTD+XML

PHPExcel

1                     2          3            4

产品编号   产品名称    产品数量    产品单价

itcast001    php教程     100                       998

5xml传输原理

二、XML基本语法

1、快速入门

描述人的信息

运行效果:

描述书的信息

运行效果:

说明:xml运行调试方式有两种:

第一种:在xml文档上直接鼠标右键,打开方式选择浏览器直接打开

第二种:直接在浏览器地址栏输入网址,直接访问即可

2xml基本语法

l 文档声明

l 元素

l 元素属性

l 注释

l 特殊字符

l CDATA区段

l 处理指令

1)文档声明

需要先使用文档声明来声明XML文档

最简单的语法:

l <?xml version=1.0 encoding=utf-8?>

l version 版本为1.0 (代表当前xml文档的版本)

l encoding 编码格式 (编码格式utf-8big5gb2312

l standalone 是否独立(是否依靠dtd文件)  默认yes

作用:告诉浏览器在解释时所采用的版本与格式等信息

2)元素(标记、标签)

l 一个标签分为起始和结束标签(不能省略)

错误:<title>三国志

正确:<title>三国志</title> 

      <title />

l 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套

错误:<title><price></title></price>

正确:<title><price></price></title>

l 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签

<html>

           <head></head>

</html>

元素的命名规则

l 元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点

    正确的:<abc></abc>

    错误的:<!@#></!@#>

l 严格区分大小写;

正确的:<abc></abc>

错误的:<abc></ABC>

l 只能以字母或下划线开头;

正确的:<abc123></abc123>

错误的:<123abc></123abc>

l 名称字符之间不能有空格或制表符;

正确的:<abc></abc>

错误的:<a b c></a b c>

l 名称字符之间不能使用冒号

正确的:<abc></abc>

错误的:<ab:c></ab:c>

3)元素属性

l 一个元素可以有多个属性

l 属性值一定要用引号(单引号或双引号)引起来

l 属性名称的命名规范与元素的命名规范相同

l 元素中的属性是不允许重复的

l 标签属性所代表的信息也可以被改成用子元素的形式来描述

4)注释

基本语法:

<!—注释内容-->

注:XML声明之前不能有注释,注释不能嵌套

运行效果:

5)特殊字符

观看一下示例:

我们在运行时发现,系统在第7行发现了一个错误,主要是由于系统中的特殊字符导致浏览器无法对特殊字符的解析而产生的,如何解决?

答:可以使用以下字符代替xml文档中的特殊字符

说明:第四个字符代表单引号

以上错误案例,可以采用如下方式解决:

6CDATA区段(CDATA节)

CDATACharacter Data

作用:把标签当做普通文本内容

语法:<![CDATA[内容]]>

示例代码:

对于特殊字符与CDATA区段,比较?

共同点:都是用于对特殊字符的转化

不同点:特殊字符只能用于数据量较少的情况,比如小于号、大于号等情况

                 CDATA区段可以用于大批量数据的转化,如文章描述、文章内容等信息

7)处理指令PI

功能:主要用于xml数据的显示

作用:用来指挥软件如何解析XML文档。

语法:必须以“<?”作为开头,以“?>”作为结尾。

常用处理指令:

xml指令

xml-stylesheet指令:调用相应的css显示数据

例:<?xml-stylesheet  type="text/css“  href=“style.css"?>

xml示例代码:

style.css代码

3、扩展:车载系统中的RSS实现

rss:是一种订阅服务,在很多网站如(新浪、网易)等系统中都可以看到

在网站系统中可以提供一个api接口,来实现rss信息的输出

1rss基本结构

通过阅读rss手册,可以确定rss也是一种基于xml的特殊格式

xml文档中,定义文档声明

2)载入rss格式

在文档声明下方,载入rss格式

3)定义channel显示标签

4)定义rss内容(定义item标签)

运行效果如下:

三、DTD约束

1、为什么需要DTD约束

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、快速入门

4DTD约束文档分类

1)内部DTD

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

基本语法:

<!DOCTYPE 根元素 [

         DTD约束语句

]>

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

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

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

运行效果:

2)外部DTD

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

基本语法:

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

示例文件:

xml文档如下:

DTD约束文档:

运行效果如下:

3)公用DTD

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

基本语法如下:

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

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

关键词ELEMENTelement

基本语法:

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

示例代码:

元素类型:

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

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

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

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

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

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

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

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

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>

6DTD约束——属性定义

关键词

ATTLIST

基本语法:

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

示例代码:

1)属性类型

l CDATA  字符

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

l ID  属性唯一

l IDREF 引用

枚举类型示例代码:

ID 唯一类型示例代码:

IDREF属性引用类型

2)默认值

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

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

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

示例代码:

运行效果:

默认值类型示例代码:

运行效果:

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

7DTD约束——定义实体

关键词:ENTITY

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

引用实体

参数实体

1)引用实体

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

基本语法:

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

示例代码:

运行效果:

2)参数实体

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

基本语法:

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

引用时通过%实体名称;

示例代码:

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

定义与使用位置不同:

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

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

定义语法不同:

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

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

引用时语法不同

引用实体:&实体名称;

参数实体:%实体名称;

8、综合案例

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

产品目录DTD

分析:

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

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

分析3-5行可知:

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

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

分析78可知

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

阅读9-14行可知

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

阅读15行可知:

规格类型为文本类型

阅读16-18行可知

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

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

作业:

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

2、微信公众平台注册:

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

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

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多