当前位置: 首页 > news >正文

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.lryc.cn/news/144662.html

相关文章:

  • 基于web的仓库管理系统jsp商品进销存java源代码Mysql
  • GitLab启动失败:fail: alertmanager: runsv not running
  • JVM核心原理解读(一)---执行引擎
  • Docker:Harbor 私有仓库迁移
  • (六)k8s实战-存储管理
  • ChatGPT Prompting开发实战(二)
  • Android屏幕适配(5) — 最小宽度smallWidth适配
  • 详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码
  • DC电源模块不同的尺寸可以适应实际应用场景
  • @XmlType,@XmlRootElement,@XmlAttribute的作用与区别
  • 安装虚拟机
  • (动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】
  • 【文心一言】如何申请获得体验资格,并简单使用它的强大功能
  • 1. 卷积原理
  • pandas读取excel,再写入excel
  • 【React学习】—React中的事件绑定(八)
  • 记录在ubuntu 18.04系统上安装虚拟机的过程
  • C/C++ 个人笔记
  • Stm32的时钟系统以及使用SysTick滴答定时器实现延时
  • 重生c++系列之类与对象(中篇)
  • Java中synchronized基本介绍和细节讨论。使用Synchronized来解决售票超卖问题
  • java内存分区
  • 【JavaScript】V8 引擎解析 JavaScript 的过程
  • Qt:界面实时响应鼠标拖动绘制
  • Docker拉取RocketMQ及可视化界面
  • 花5分钟判断,你的Jmeter技能是大佬还是小白!
  • macOS - 安装 Python 及地址
  • 前端组件库造轮子——Tree组件开发教程
  • java打war包、jar包方式,java运行war包、jar包方式
  • “超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”