XML—DTD、 Schema

目录

DTD是什么?

DTD有什么用途?

DTD与XML有什么联系?

DTD原理图

外部DTD

DTD文件book.dtd:

使用外部DTD文件的XML文件

PCDATA

XML 文档构建模块

一、元素

1、元素声明

①、有元素:

②、空元素:

③、ANY带有任何内容元素:

2、定义某个标签内元素个数(利用一些符号标识)

声明只出现一次的元素

声明最少出现一次的元素

声明出现零次或多次的元素

声明出现零次或一次的元素

声明或

声明混合型的内容

二、属性(ATTLIST)

①、语法:

②、类型

③、默认值

三、实体

内部实体声明

外部实体声明

四、命名空间

前缀标识法

Schema是什么?

为什么说Schema比DTD更强大呢(进步在哪儿了)?

使用有什么好处吗?

有哪些特点?

有哪些用途?

可保护数据通信

可扩展的,因为它们由XML编写通过可扩展的Schema定义,可以:

如何使用Schema?

验证XML是否符合Schema


DTD是什么?

Document Tye Definition,文档类型定义

DTD有什么用途?

它使用一系列合法的元素来定义文档的结构。

为xml文件提供语法与规则(方便数据共享,形成规则,大家读的时候都按xml文件读取)

PS:简而言之,DTD就是用来约束XML文档的,使其在一定的规范下使用,除了DTD技术外,还有Schema技术,也是用于约束XML文档的。

DTD与XML有什么联系?

DTD为XML文件提供语法与规则。我们知道XML的标记是可以自定义,每个人定义的不同,那进行数据共享的时候如何让别人看得懂呢?在编写XML的时候按照DTD来规范格式,比方说某个元素只能出现一次、各个子元素的顺序……这样形成规则,大家共享的时候都按xml文件读取

DTD原理图

外部DTD

DTD与XML的内容分别在不同的文件中:

DTD文件book.dtd:

<?xml Version="1.0" encoding="utf-8">    version:版本  encoding:文件使用的字符编码方法
<!ELEMENT 书籍列表(计算机书籍)*>  
<!ELEMENT 计算机书籍(书名,价格,简要介绍)>  计算机书籍元素有3个元素:书名、价格、简要介绍
<!ELEMENT 书名(#PCDATA)>  子元素单独定义,书名元素为"#PCDATA" 类型
<!ELEMENT 价格(#PCDATA)>
<!ELEMENT 简要介绍(#PCDATA)>

使用外部DTD文件的XML文件

<?xml version="1.0" encoding="utf-8">
<!DOCTYPE 书籍列表 SYSTEM “book.dtd">

PCDATA

PCDATA 的意思是被解析的字符数据(parsed character data)。

可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。



XML 文档构建模块

一、元素

1、元素声明

①、有元素:

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

<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 计算机书籍(书名,价格,简要介绍)>

②、空元素:

<!ELEMENT 元素名称 EMPTY>

DTD中:<!ELEMENT br EMPTY>
XML中:<br/>

③、ANY带有任何内容元素:

<!ELEMENT 元素名称 ANY>

DTD中:<!ELEMENT student ANY>
XML中:<student>刘伟</student><student><name>刘伟</name></student>

2、定义某个标签内元素个数(利用一些符号标识)

声明只出现一次的元素

<!ELEMENT 元素名(子元素名称)>

举例:<!ELEMENT 书籍列表(计算机书籍)>

声明最少出现一次的元素

<!ELEMENT 元素名(子元素名称+)>

举例:<!ELEMENT 书籍列表(计算机书籍+)>

重复元素例子:

DTD中:
<!ELEMENT 书籍列表(书名,作者+)>  
<!ELEMENT 书名(#PCDATA)>  
<!ELEMENT 作者(#PCDATA)>XML中:
<书籍列表><计算机书籍><书名>J2EE教程</书名><作者>张三</作者><作者>李四</作者></计算机书籍>
</书籍列表>

成组元素例子:

DTD中:
<!ELEMENT 书籍列表(书名,价格)+>  
<!ELEMENT 书名(#PCDATA)>  
<!ELEMENT 价格(#PCDATA)>XML中:
<书籍列表><计算机书籍><书名>J2EE教程</书名><价格>100</价格><书名>XML教程</书名><价格>50</价格></计算机书籍>
</书籍列表>

声明出现零次或多次的元素

<!ELEMENT 元素名(子元素名称*)>

举例:<!ELEMENT 书籍列表(计算机书籍*)>

声明出现零次或一次的元素

<!ELEMENT 元素名(子元素名称?)>

举例:<!ELEMENT 书籍列表(计算机书籍?)>

声明或

<!ELEMENT 元素名(子元素名称|子元素名称2)>

举例:<!ELEMENT 书籍列表(计算机书籍|文学书籍)>

声明混合型的内容

<!ELEMENT 子元素名称(#PCDATA|子元素名称)*>

举例:<!ELEMENT 书籍列表(#PCDATA|计算机书籍)*>

PS:子元素要求顺序。


二、属性(ATTLIST)

①、语法:<!ATTLIST 元素名称 属性名称 属性类型 默认值>

DTD文件中:
<!ATTLIST payment type CDATA "cash">XML文件中:
<payment type="cash/>或
<payment/>

②、类型

③、默认值


三、实体

  • 实体是用于定义引用普通文本或特殊字符的快捷方式的变量
  • 实体引用是对实体的引用
  • 实体可在内部或外部进行声明

内部实体声明

<!ENTITY 实体名称 SYSTEM "URI/URL">

DTD文件中:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright jobedu.com.cn">
XML文件中:
<author>&writer;&copyright;</author>

外部实体声明

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

DTD文件中:
<!ENTITY writer SYSTEM "http://www.jobedu.com.cn/dtd/person.dtd">
XML文件中:
<author>&writer</author>


四、命名空间

在一个XML文档中,包含由多个DTD描述的元素。会出现名称冲突问题。

为了解决名称冲突问题,W3C的XML小组制定了被称为命名空间(NameSpace)的标准

前缀标识法

即在元素名和属性名前面增加一个标识,以唯一区分当前元素或属性来自哪一个DTD。


Schema是什么?

XML Schema Definitior(XSD)

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。是基于XML的DTD替代者,要比DTD更强大

描述XML文档的结构,使用XML语法,自身也是XML文件的,规定XML元素顺序等等

为什么说Schema比DTD更强大呢(进步在哪儿了)?

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

使用有什么好处吗?

不必学习新的语言

可使用XML编辑器来编辑Schema文件

可使用XML解析器来解析Schema文件

有哪些特点?

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序
  • 定义子元素的数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型
  • 定义元素和属性的默认值以及固定值

有哪些用途?

可保护数据通信

  • 当数据从发送方被发送到接收方时,其要点是双方应有关于内容的相同的“期望值”
  • 通过Schema,发送方可以用一种接收方能够明白的方式来描述数据
  • 一种数据,比如“03-11-2004”,在某些国家被解释为11月3日,而在另一些国家为当作3月11日
  • 但是一个带有数据类型的XML元素,比如:<data type="date">2004-03-11</date>,可确保对内容一致的理解,这是因为XML的数据类型“date”要求的格式是“YYYY-MM-DD”

可扩展的,因为它们由XML编写通过可扩展的Schema定义,可以:

  • 在其他Schema中重复使用您的Schema
  • 创建由标准类型衍生而来的您自己的数据类型
  • 在相同的文档中引用多重的Schema

如何使用Schema?


验证XML是否符合Schema

IE不能验证XML是否符合Schema

email.xsd文件中

<?xml version="1.0 encoding="UTF-8> 
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:complexType><xs:sequence><xs:element name="to" type="xs:string"></xs:element><xs:element name="from" type="xs:string"></xs:element><xs:element name="title" type="xs:string"></xs:element><xs:element name="body" type="xs:string"></xs:element><xs:element name="date" type="xs:string"></xs:element></xs:sequence></xs:complexType>
</schema>

email.xml文件中

<?xml version="1.0 encoding="UTF-8> 
<email xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceShemaLocation="email.xsd"><to>liuwei9999@163.com</to><from>hellokitty@163.com</from><title>about loving</title><body>I Love you forever</body><date>2008-11-12</date>
</email>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87550.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 判定对象是否死亡的两种方式

引用计数法&#xff1a;&#xff08;脑门刻字法&#xff09;和 可达性分析 引用计数算法 引用计数器的算法是这样的&#xff1a;在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一…

Linux 桌面上的 Firefox 面临着大问题

导读毫无疑问&#xff0c;无论是在桌面、笔记本电脑还是移动设备上&#xff0c;浏览器都是任何操作系统中最重要的应用之一。 如果没有一个功能强大、快速且稳定的浏览器&#xff0c;操作系统的实用性将大幅度降低&#xff0c;以至于我相当确定&#xff0c;如果一个操作系统没有…

将Spring boot 项目部署到tomcat服务艰难

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z X Y Z

基于AVR128单片机智能传送装置

一、系统方案 1、板载可变电阻&#xff08;电位器&#xff09;R29的电压作为处理器ATmega128的模数转换模块中单端ADC0的模拟信号输入&#xff08;跳线JP13短接&#xff09;。 2、调节电位器&#xff0c;将改变AD转换接口ADC0的模拟信号输入&#xff0c;由处理器完成ADC0的A/D转…

释放 ChatGPT 的价值:5 个专家提示

随着近来ChatGPT的热议&#xff0c;人工智能技术被推上风口浪尖&#xff0c;由此以数字化技术为基础的数字营销也再次受到了不小的关注&#xff0c;但是营销的本质从来都没有变过&#xff0c;今天我们聊下ChatGPT无论如何演进&#xff0c;人工智能无论变得多么先进&#xff0c;…

JVM知识点(一)

1、JVM基础概念 &#xff08;1&#xff09;JVM、JRE、JDK JRE&#xff1a;JVM基本类库组成的运行环境就是JRE。JVM自己是无法完成一次编译&#xff0c;处处运行的&#xff0c;需要有一个基本类库告诉JVM如何操作运行&#xff0c;如如何操作文件&#xff0c;连接网络等&#x…

xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路

ext4 文件系统扩容、缩容操作 扩容系统根分区 根文件系统在 /dev/VolGroup/lv_root 逻辑卷上&#xff0c;文件系统类型为ext4&#xff0c;大小为10G&#xff0c;现在要将其扩容成20G。 给空闲空间分区# 调整分区类型为LVM&#xff0c;也就是8e类型 fdisk /dev/sdb# 选定分区后使…

微前沿 | 第1期:强可控视频生成;定制化样本检索器;用脑电重建视觉感知;大模型鲁棒性评测

欢迎阅读我们的新栏目——“微前沿”&#xff01; “微前沿”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 01. 强可…

ChatGPT 随机动态可视化图表分析

动态可视化图表分析实例如下图: 这样的动态可视化图表可以使用ChatGPT OpenAI 来实现。 给ChatGPT发送指令: 你现在是一个数据分析师,请使用HTML,JS,Echarts,来完成一个动态条形图,条形图方向横向,数据可以随机生成,并且随机生成10个不同的商品名称,每个类别分别用…

网络防御和入侵检测

网络防御和入侵检测是维护网络安全的关键任务&#xff0c;可以帮助识别和阻止未经授权的访问和恶意行为。以下是一些基本的步骤和方法&#xff0c;用于进行网络防御和入侵检测。 网络防御&#xff1a; 防火墙设置&#xff1a; 部署防火墙来监控和控制网络流量&#xff0c;阻止…

[FPGA IP系列] BRAM IP参数配置与使用示例

FPGA开发中使用频率非常高的两个IP就是FIFO和BRAM&#xff0c;上一篇文章中已经详细介绍了Vivado FIFO IP&#xff0c;今天我们来聊一聊BRAM IP。 本文将详细介绍Vivado中BRAM IP的配置方式和使用技巧。 一、BRAM IP核的配置 1、打开BRAM IP核 在Vivado的IP Catalog中找到B…

springboot服务端接口外网远程调试,并实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…