XML—DTD、 Schema

目录

DTD是什么?

DTD有什么用途?

DTD与XML有什么联系?

DTD原理图

外部DTD

DTD文件book.dtd:

使用外部DTD文件的XML文件

PCDATA

[XML 文档构建模块](#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>
相关推荐
吾日三省吾码3 小时前
JVM 性能调优
java
LNTON羚通3 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
弗拉唐4 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi774 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
少说多做3435 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀5 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
哭泣的眼泪4085 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
蓝黑20205 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea
Ysjt | 深5 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++