XML—DTD、 Schema

news2024/11/24 8:27:58

目录

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.coloradmin.cn/o/942044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes(K8s 1.28.x)部署---超详细

目录 一、基础环境配置&#xff08;所有主机均要配置&#xff09; 1、配置IP地址和主机名、hosts解析 2、关闭防火墙、禁用SELinux 3、安装常用软件 4、配置时间同步 5、禁用Swap分区 6、修改linux的内核参数 7、配置ipvs功能 二、容器环境操作 1、定制软件源 2、安…

MySQL select语句的执行流程

MYSQL基础架构 连接器查询缓存分析器优化器执行器存储引擎 比如说&#xff0c;我们经常能够在mysql的查询语句中看到如下的查询语句&#xff1a; mysql> select * from T where ID10&#xff1b;在了解它在mysql中的执行流程之前&#xff0c;首先我们来看一下mysql中的基本…

Qt之进程通信-IPC(QLocalServer,QLocalSocket 含源码+注释)

文章目录 一、IPC通信示例图1.1 设置关键字并连接的示例图1.2 进程间简单的数据通信示例图1.3 断开连接的示例图1.3.1 由Server主动断开连接1.3.2 由Socket主动断开连接 1.4 Server停止监听后的效果二、个人理解与一些心得三、一些疑问&#xff08;求教 家人们&#x1f602;&am…

VueRouter的基本使用

路由的基本使用 文章目录 路由的基本使用01-VueRouterVueRouter的使用 &#xff08; 5 2&#xff09;综合代码 拓展&#xff1a;组件存放问题 什么是路由呢&#xff1f; 在生活中的路由&#xff1a;设备和IP的映射关系 在Vue中&#xff1a;路径 和 组件 的 映射 关系。 01-Vu…

与面试官互动:建立积极的技术讨论氛围

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

OpenCV简介

OpenCV简介 OpenCV&#xff08;开源计算机视觉库&#xff1a;http://opencv.org&#xff09;是一个开源库&#xff0c;包含数百种计算机视觉算法。OpenCV 具有模块化结构&#xff0c;主要包括下列模块&#xff1a; 核心功能&#xff08;core&#xff09; - 定义基本数据结构的…

3、监测数据采集物联网应用开发步骤(3)

监测数据采集物联网应用开发步骤(2) 系统整体结构搭建 新建项目 输入项目名称&#xff1a;MonitorData 所谓兵马未动粮草先行&#xff0c;按下图创建好对应的模块备用&#xff1a; com.plugins 业务插件模块 com.zxy.adminlog 日志或文本文…

【从零开始学习JAVA | 第四十六篇】处理请求参数

前言&#xff1a; 在我们之前的学习中&#xff0c;我们已经基本学习完了JAVA的基础内容&#xff0c;从今天开始我们就逐渐进入到JAVA的时间&#xff0c;在这一大篇章&#xff0c;我们将对前后端有一个基本的认识&#xff0c;并要学习如何成为一名合格的后端工程师。今天我们介绍…

Apache Celeborn 让 Spark 和 Flink 更快更稳更弹性

摘要&#xff1a;本文整理自阿里云/数据湖 Spark 引擎负责人周克勇&#xff08;一锤&#xff09;在 Streaming Lakehouse Meetup 的分享。内容主要分为五个部分&#xff1a; Apache Celeborn 的背景Apache Celeborn——快Apache Celeborn——稳Apache Celeborn——弹Evaluation…

河湖长制综合管理信息平台建设项目总体设计方案[507页Word]

导读&#xff1a;原文《河湖长制综合管理信息平台建设项目总体设计方案[507页Word]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 部分内容&#xff1a; 1.1.1.3…

【conda install】网络慢导致报错CondaHTTPError: HTTP 000 CONNECTION FAILED for url

⭐⭐问题&#xff1a; 部署安装环境经常会出现由于网络慢问题&#xff0c;导致conda安装不了库&#xff0c;报错如下&#xff1a; Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/…

什么是应用程序监控

应用程序监控是一项基本功能&#xff0c;可以对两者进行实时分析关键业务应用程序的前端和后端性能。应用程序监控起着至关重要的作用 通过提供对应用程序的宝贵见解来确保应用程序的不间断运行可用性、性能和最终用户体验。主动监控应用程序有助于快速识别和解决任何潜在问题&…

最新ChatGPT程序源码+AI系统+详细图文搭建教程/支持GPT4/AI绘画/H5端/完整Prompt知识库

一、AI系统 如何搭建部署人工智能源码、AI创作系统、ChatGPT系统呢&#xff1f;小编这里写一个详细图文教程吧&#xff01;SparkAi使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到AIGC系统&#xff01; 1.1 程序核心功能 程序已支持ChatGPT3.5/GPT-4提问、AI绘画、Mi…

spring打入filter内存马+冰蝎成功

环境&#xff1a; springboot版本2.4.5 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from r…

设计模式—观察者模式(Observer)

目录 思维导图 一、什么是观察者模式&#xff1f; 二、有什么优点吗&#xff1f; 三、有什么缺点吗&#xff1f; 四、什么时候使用观察者模式&#xff1f; 五、代码展示 ①、双向耦合的代码 ②、解耦实践一 ③、解耦实践二 ④、观察者模式 六、这个模式涉及到了哪些…

12.工作数字钟

效果 源码 <!doctype html> <html><head><meta charset="utf-8"><title>Digital Clock</title><link rel="stylesheet" href="style.css"></head><body><div id="time">…

开源项目的测试和质量保证

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

《Flink学习笔记》——第一章 概念及背景

​ 什么是批处理和流处理&#xff0c;然后由传统数据处理架构为背景引出什么是有状态的流处理&#xff0c;为什么需要流处理&#xff0c;而什么又是有状态的流处理。进而再讲解流处理的发展和演变。而Flink作为新一代的流处理器&#xff0c;它有什么优势&#xff1f;它的相关背…

短视频seo搜索矩阵系统源码----独立应用搭建

前言&#xff1a;抖音账号矩阵系统/抖音seo霸屏系统/抖音矩阵seo系统源码/独立部署,技术团队如何围绕抖音矩阵关键词霸屏来做开发&#xff1f;来做到抖音seo优化达到账号排名效果&#xff0c;关键词起到至关重要的作用&#xff0c;依托于抖音平台的正规权限。 当普通对象属性更…

启动项目时Service有却找不到而报错

解决方法&#xff0c;重启一下Idea&#xff0c;看是否可以&#xff0c;如果不行的话 点击File->setting中 勾上&#xff0c;重启一下。接可以了