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)。时钟树由多个时钟分频器和时钟门控器组…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
