当前位置: 首页 > 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>

相关文章:

XML—DTD、 Schema

目录 DTD是什么&#xff1f; DTD有什么用途&#xff1f; DTD与XML有什么联系&#xff1f; DTD原理图 外部DTD DTD文件book.dtd: 使用外部DTD文件的XML文件 PCDATA XML 文档构建模块 一、元素 1、元素声明 ①、有元素&#xff1a; ②、空元素&#xff1a; ③、ANY…...

基于web的仓库管理系统jsp商品进销存java源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的仓库管理系统 系统有2权限&#xff1a;管理…...

GitLab启动失败:fail: alertmanager: runsv not running

问题描述 sudo gitlab-ctl restart &#xff0c;报错如下 &#xff1a; 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 私有仓库的迁移 &#xff08;1&#xff09;硬件升级或更换&#xff1a;如果源 Harbor 在旧的硬件设备上运行&#xff0c;并且计划将其迁移到新的硬件设备上&#xff0c;那么需要执行迁移操作。 &#xff08;2&…...

(六)k8s实战-存储管理

一、Volumes 1、HostPath 【使用场景&#xff1a;容器目录 挂载到 主机目录】 【可以持久化到主机上】 将节点上的文件或目录挂载到 Pod 上&#xff0c;此时该目录会变成持久化存储目录&#xff0c;即使 Pod 被删除后重启&#xff0c;也可以重新加载到该目录&#xff0c;该目…...

ChatGPT Prompting开发实战(二)

一、基于LangChain源码react来解析prompt engineering 在LangChain源码中一个特别重要的部分就是react&#xff0c;它的基本概念是&#xff0c;LLM在推理时会产生很多中间步骤而不是直接产生结果&#xff0c;这些中间步骤可以被用来与外界进行交互&#xff0c;然后产生new con…...

Android屏幕适配(5) — 最小宽度smallWidth适配

概述 最小宽度smallWidth适配实现屏幕适配方案 详细 前言 在之前的文章中&#xff0c;我们讲到了Android屏幕适配的一些知识&#xff0c;大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与…...

详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码

实现界面展示 这是一款天气显示器,由支持 wifi 的 ESP32 微控制器和 7.5 英寸电子纸(又名电子墨水)显示器供电。当前和预测的天气数据是从 OpenWeatherMap API 获取的。传感器为显示屏提供准确的室内温度和湿度。 该项目在睡眠时消耗约 14μA,在约 10 秒的清醒期…...

DC电源模块不同的尺寸可以适应实际应用场景

BOSHIDA DC电源模块不同的尺寸可以适应实际应用场景 DC电源模块是现代电子设备的必备部件之一&#xff0c;其可提供稳定的直流电源&#xff0c;保证电子设备正常运行。DC电源模块尺寸的选择直接影响到其适应的应用场景及其性能表现。本文将从尺寸方面分析DC电源模块的适应性&a…...

@XmlType,@XmlRootElement,@XmlAttribute的作用与区别

XmlType、XmlRootElement 和 XmlAttribute 都是 Java 标准库中 javax.xml.bind.annotation 包提供的注解&#xff0c;用于在使用 JAXB&#xff08;Java Architecture for XML Binding&#xff09;或其他 XML 绑定技术时&#xff0c;控制 Java 类与 XML 数据之间的映射关系。 它…...

安装虚拟机

软硬件准备 软件&#xff1a;推荐使用VMwear&#xff0c;我用的是VMwear 12 镜像&#xff1a;CentOS7 ,如果没有镜像可以在官网下载 &#xff1a;http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso 硬件&#xff1a;因为是在宿主机上运行虚拟…...

(动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】

❓剑指 Offer 48. 最长不含重复字符的子字符串 难度&#xff1a;中等 请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为…...

【文心一言】如何申请获得体验资格,并简单使用它的强大功能

目录 一、文心一言1.1、它能做什么1.2、技术特点1.3、申请方法 二、功能体验2.1、文心一言2.2、写冒泡排序代码 测试代码2.3、画一个爱心2.4、画一个星空 三、申请和通过3.1、申请时间3.2、通过时间 文心一言&#xff0c;国内首个大型人工智能对话模型&#xff0c;发布已经快一…...

1. 卷积原理

① 卷积核不停的在原图上进行滑动&#xff0c;对应元素相乘再相加。 ② 下图为每次滑动移动1格&#xff0c;然后再利用原图与卷积核上的数值进行计算得到缩略图矩阵的数据&#xff0c;如下图右所示。 import torch import torch.nn.functional as Finput torch.tensor([[1, 2…...

pandas读取excel,再写入excel

需求是这样的&#xff0c;从一个表读取数据&#xff0c;然后每次执行创建一个新表将值写入 读取这个表 写入到这个表 分别对应的是e、h列数据&#xff0c;代码如下&#xff1a; import pandas as pd import openpyxl import datetime dfpd.read_excel(rC:\Users\admin\Deskt…...

【React学习】—React中的事件绑定(八)

【React学习】—React中的事件绑定&#xff08;八&#xff09; 一、原生JS <body><button id"btn1">按钮1</button><button id"btn2">按钮2</button><button onclick"demo()">按钮3</button><scr…...

记录在ubuntu 18.04系统上安装虚拟机的过程

- 下载ubuntu镜像 ubuntu镜像下载地址 我下载的是desktop桌面版&#xff0c;比较好操作。 - 烧录 我用的Mac&#xff0c;使用的是balenaEtcher软件进行磁盘烧录。 balenaEtcher下载地址 如果出现磁盘损坏或者无法再次使用&#xff0c;参考这里解决&#xff1a;进入 - 安…...

C/C++ 个人笔记

仅供个人复习&#xff0c; C语言IO占位符表 %d十进制整数(int)%ldlong%lldlong long%uunsigned int%o八进制整型%x十六进制整数/字符串地址%c单个字符%s字符串%ffloat&#xff0c;默认保留6位%lfdouble%e科学计数法%g根据大小自动选取f或e格式&#xff0c;去掉无效0 转义符表…...

Stm32的时钟系统以及使用SysTick滴答定时器实现延时

前言 STM32的时钟系统由多个时钟源和时钟树组成时钟源包括主时钟源&#xff08;HSE&#xff09;、内部高速时钟源&#xff08;HSI&#xff09;、内部低速时钟源&#xff08;LSI&#xff09;和外部低速时钟源&#xff08;LSE&#xff09;。时钟树由多个时钟分频器和时钟门控器组…...

重生c++系列之类与对象(中篇)

好的继上期&#xff0c;我们今天带来c类与对象系列的继续学习。 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员 函数。 …...

Java中synchronized基本介绍和细节讨论。使用Synchronized来解决售票超卖问题

基本介绍 线程同步机制:在多线程编程下&#xff0c;一些敏感数据不允许被多个现在在同一时刻访问&#xff0c;此时就使用同步访问机制&#xff0c;保证数据在任何同一时刻最多只有一个进程访问&#xff0c;以保证数据的完整性。&#xff08;即&#xff1a;当有一个线程在对内存…...

java内存分区

按照垃圾收集&#xff0c;将 Java 堆划分为**新生代 &#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;**两个区域&#xff0c; 新生代存放存活时间短的对象&#xff0c;而每次回收后存活的少量对象&#xff0c;将会逐步晋升到老年代中…...

【JavaScript】V8 引擎解析 JavaScript 的过程

V8 是由 Google 开发的 JavaScript 引擎&#xff0c;用于执行 JavaScript 代码。它被广泛应用于 Chrome 浏览器和 Node.js 等环境。V8 的解析和执行过程是一个复杂的流程&#xff0c;以下是其大致步骤&#xff1a; 词法分析&#xff08;Lexical Analysis&#xff09;&#xff1…...

Qt:界面实时响应鼠标拖动绘制

采用双缓冲实现界面实时响应鼠标的拖动绘制。 思想如下&#xff1a;首先需要两张画布pix和tempPix&#xff0c;他们都是QPixmap实例&#xff1b;pix用来保存初始界面或上一阶段以完成的绘制&#xff1b;tempPix用来作为鼠标拖动时的实时界面绘制&#xff1b;当鼠标左键按下后拖…...

Docker拉取RocketMQ及可视化界面

本文介绍Docker拉取RocketMQ及可视化界面操作步骤 Linux下安装Docker请参考&#xff1a;Linux安装Docker 文章目录 安装namesrv创建挂载目录授权相关权限拉取镜像运行容器查看运行情况 安装Broker创建挂载目录及配置文件目录授权相关权限创建配置文件运行容器查看运行情况 安装…...

花5分钟判断,你的Jmeter技能是大佬还是小白!

jmeter 这个工具既可以做接口的功能测试&#xff0c;也可以做自动化测试&#xff0c;还可以做性能测试&#xff0c;其主要用途就是用于性能测试。但是&#xff0c;有些公司和个人&#xff0c;就想用 jmeter 来做接口自动化测试。 你有没有想过呢&#xff1f; 下面我就给大家讲…...

macOS - 安装 Python 及地址

文章目录 Python 官方安装包Pip3Applications - PythonMiniconda多个python环境有多种方式安装 python,比如 Python 官方包、anaconda、miniconda、brew 等 这里记录使用 Python 官方包进行安装,和 miniconda 安装方式,以及安装后 各执行文件、安装包的地址。 明确这些地址后…...

前端组件库造轮子——Tree组件开发教程

前端组件库造轮子——Tree组件开发教程 前言 本系列旨在记录前端组件库开发经验&#xff0c;我们的组件库项目目前已在Github开源&#xff0c;下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验&#xff0c;开源分…...

java打war包、jar包方式,java运行war包、jar包方式

Java spring boot部署到生产环境有两种常见方式 1打jar包&#xff0c;使用了内置的tomcat服务器&#xff0c;流程简单 2打war包&#xff0c;可以放标准tomcat服务器中 jar包 1pom.xml新增 <build><plugins><plugin><groupId>org.springframework.b…...