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 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
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;©right;</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>
相关文章:
XML—DTD、 Schema
目录 DTD是什么? DTD有什么用途? DTD与XML有什么联系? DTD原理图 外部DTD DTD文件book.dtd: 使用外部DTD文件的XML文件 PCDATA XML 文档构建模块 一、元素 1、元素声明 ①、有元素: ②、空元素: ③、ANY…...
基于web的仓库管理系统jsp商品进销存java源代码Mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于web的仓库管理系统 系统有2权限:管理…...
GitLab启动失败:fail: alertmanager: runsv not running
问题描述 sudo gitlab-ctl restart ,报错如下 : summergaoubuntu:/etc/gitlab$ sudo gitlab-ctl start fail: alertmanager: runsv not running fail: gitaly: runsv not running fail: gitlab-exporter: runsv not running fail: gitlab-workhorse: …...
JVM核心原理解读(一)---执行引擎
Java虚拟机规范制定了Java字节码执行引擎的概念模型,Java执行引擎作用概括起来就是执行编译产生的Java class文件,为用户提供了底层OS的调用,屏蔽了不同平台硬件和OS的差异性,使得编写的代码无差别的在各个平台运行;对于Java字节码执行一般有解释执行和编译执行两种,具体使用哪…...
Docker:Harbor 私有仓库迁移
Harbor 私有仓库迁移 一.私有仓库迁移的介绍 1.为何要对Harbor 私有仓库的迁移 (1)硬件升级或更换:如果源 Harbor 在旧的硬件设备上运行,并且计划将其迁移到新的硬件设备上,那么需要执行迁移操作。 (2&…...
(六)k8s实战-存储管理
一、Volumes 1、HostPath 【使用场景:容器目录 挂载到 主机目录】 【可以持久化到主机上】 将节点上的文件或目录挂载到 Pod 上,此时该目录会变成持久化存储目录,即使 Pod 被删除后重启,也可以重新加载到该目录,该目…...
ChatGPT Prompting开发实战(二)
一、基于LangChain源码react来解析prompt engineering 在LangChain源码中一个特别重要的部分就是react,它的基本概念是,LLM在推理时会产生很多中间步骤而不是直接产生结果,这些中间步骤可以被用来与外界进行交互,然后产生new con…...
Android屏幕适配(5) — 最小宽度smallWidth适配
概述 最小宽度smallWidth适配实现屏幕适配方案 详细 前言 在之前的文章中,我们讲到了Android屏幕适配的一些知识,大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与…...
详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码
实现界面展示 这是一款天气显示器,由支持 wifi 的 ESP32 微控制器和 7.5 英寸电子纸(又名电子墨水)显示器供电。当前和预测的天气数据是从 OpenWeatherMap API 获取的。传感器为显示屏提供准确的室内温度和湿度。 该项目在睡眠时消耗约 14μA,在约 10 秒的清醒期…...
DC电源模块不同的尺寸可以适应实际应用场景
BOSHIDA DC电源模块不同的尺寸可以适应实际应用场景 DC电源模块是现代电子设备的必备部件之一,其可提供稳定的直流电源,保证电子设备正常运行。DC电源模块尺寸的选择直接影响到其适应的应用场景及其性能表现。本文将从尺寸方面分析DC电源模块的适应性&a…...
@XmlType,@XmlRootElement,@XmlAttribute的作用与区别
XmlType、XmlRootElement 和 XmlAttribute 都是 Java 标准库中 javax.xml.bind.annotation 包提供的注解,用于在使用 JAXB(Java Architecture for XML Binding)或其他 XML 绑定技术时,控制 Java 类与 XML 数据之间的映射关系。 它…...
安装虚拟机
软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:CentOS7 ,如果没有镜像可以在官网下载 :http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso 硬件:因为是在宿主机上运行虚拟…...
(动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】
❓剑指 Offer 48. 最长不含重复字符的子字符串 难度:中等 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为…...
【文心一言】如何申请获得体验资格,并简单使用它的强大功能
目录 一、文心一言1.1、它能做什么1.2、技术特点1.3、申请方法 二、功能体验2.1、文心一言2.2、写冒泡排序代码 测试代码2.3、画一个爱心2.4、画一个星空 三、申请和通过3.1、申请时间3.2、通过时间 文心一言,国内首个大型人工智能对话模型,发布已经快一…...
1. 卷积原理
① 卷积核不停的在原图上进行滑动,对应元素相乘再相加。 ② 下图为每次滑动移动1格,然后再利用原图与卷积核上的数值进行计算得到缩略图矩阵的数据,如下图右所示。 import torch import torch.nn.functional as Finput torch.tensor([[1, 2…...
pandas读取excel,再写入excel
需求是这样的,从一个表读取数据,然后每次执行创建一个新表将值写入 读取这个表 写入到这个表 分别对应的是e、h列数据,代码如下: import pandas as pd import openpyxl import datetime dfpd.read_excel(rC:\Users\admin\Deskt…...
【React学习】—React中的事件绑定(八)
【React学习】—React中的事件绑定(八) 一、原生JS <body><button id"btn1">按钮1</button><button id"btn2">按钮2</button><button onclick"demo()">按钮3</button><scr…...
记录在ubuntu 18.04系统上安装虚拟机的过程
- 下载ubuntu镜像 ubuntu镜像下载地址 我下载的是desktop桌面版,比较好操作。 - 烧录 我用的Mac,使用的是balenaEtcher软件进行磁盘烧录。 balenaEtcher下载地址 如果出现磁盘损坏或者无法再次使用,参考这里解决:进入 - 安…...
C/C++ 个人笔记
仅供个人复习, C语言IO占位符表 %d十进制整数(int)%ldlong%lldlong long%uunsigned int%o八进制整型%x十六进制整数/字符串地址%c单个字符%s字符串%ffloat,默认保留6位%lfdouble%e科学计数法%g根据大小自动选取f或e格式,去掉无效0 转义符表…...
Stm32的时钟系统以及使用SysTick滴答定时器实现延时
前言 STM32的时钟系统由多个时钟源和时钟树组成时钟源包括主时钟源(HSE)、内部高速时钟源(HSI)、内部低速时钟源(LSI)和外部低速时钟源(LSE)。时钟树由多个时钟分频器和时钟门控器组…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
