DTD、XML阐述、XML的两种文档类型约束和DTD的使用

目录

​编辑

一、DTD

什么是DTD?

为什么要使用 DTD?

内部 DTD 声明

具有内部 DTD 的 XML 文档

外部 DTD 声明

引用外部 DTD 的 XML 文档

二、XML

什么是XML?

XML 不执行任何操作

XML 和 HTML 之间的区别

XML 不使用预定义的标记

XML 是可扩展的

三、XML的两种文档约束

四、XML格式要求

五、使用DTD

1.在XML中加入DTD申明

2.元素定义语法

3.元素的分类

4.元素的限制

5.属性定义语法


一、DTD

什么是DTD?

DTD(Document Type Definition)是一种用于定义XML文档结构和元素的规范。它可以指定文档中允许出现的元素、元素的顺序、元素的属性以及元素之间的关系等信息。

参考地址:DTD Tutorial

在XML文档中,可以通过引用DTD来验证文档的结构是否符合规范。DTD通常以一种特定的语法格式编写,包括元素声明、属性声明、实体声明等内容。

简单的DTD示例:

<!DOCTYPE note [<!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>
]>

这个DTD定义了一个名为note的元素,其中包含to、from、heading和body四个子元素,它们的内容类型均为文本数据(#PCDATA)。

为什么要使用 DTD?

使用 DTD,独立的人群可以就交换数据的标准 DTD 达成一致。

应用程序可以使用 DTD 来验证 XML 数据是否有效。

内部 DTD 声明

如果 DTD 是在 XML 文件中声明的,则必须将其包装在<中!DOCTYPE>定义:

具有内部 DTD 的 XML 文档

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

上面的 DTD 是这样解释的:

  • !DOCTYPE note 定义此文档的根元素是 note
  • !ELEMENT note 定义 note 元素必须包含四个元素:“to、from、heading、body”
  • !ELEMENT 将 to 元素定义为类型为“#PCDATA”
  • !ELEMENT from 将 from 元素定义为类型为“#PCDATA”
  • !ELEMENT heading 将标题元素定义为类型为“#PCDATA”
  • !ELEMENT body 将 body 元素定义为类型为“#PCDATA”

外部 DTD 声明

如果 DTD 是在外部文件中声明的,则<!DOCTYPE>定义必须 包含对 DTD 文件的引用:

引用外部 DTD 的 XML 文档

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>
</note>

 这里是文件“note.dtd”,其中包含 DTD:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

二、XML

什么是XML?

XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有自我描述性并且易于阅读。XML被广泛应用于各种领域,如网页开发、数据交换和配置文件等。

参考地址:XML Introduction

XML的基本语法规则包括使用标签、属性和值来描述数据的结构和内容。标签用尖括号包围,属性以键值对的形式出现在标签中,值则位于标签的起始和结束之间。

XML示例:

<bookstore><book category="fiction"><title>Harry Potter</title><author>J.K. Rowling</author></book><book category="non-fiction"><title>Introduction to XML</title><author>John Doe</author></book>
</bookstore>

XML 不执行任何操作

也许这有点难以理解,但XML不做任何事情。

此注释是 Jani 给 Tove 的注释,存储为 XML:

<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>
</note>

上面的 XML 是相当自我描述的:

  • 它有发件人信息
  • 它有接收器信息
  • 它有一个标题
  • 它有一个消息正文

但是,上面的XML仍然没有做任何事情。XML 只是包装在标签中的信息。

必须有人编写一个软件来发送、接收、存储或显示它:

XML 和 HTML 之间的区别

XML 和 HTML 的设计目标不同:

  • XML 旨在承载数据 - 重点关注数据是什么
  • HTML 旨在显示数据 - 重点是数据的外观
  • XML 标记不像 HTML 标记那样是预定义的

XML 不使用预定义的标记

XML 语言没有预定义的标记。

上面示例中的标记(如 <to> 和 <from>)未在任何 XML 标准中定义。这些标记是由 XML 文档的作者“发明”的。

HTML 适用于预定义的标签,如 <p>、<h1>、<table> 等。

使用 XML 时,作者必须同时定义标签和文档结构。

XML 是可扩展的

即使添加了新数据,大多数 XML 应用程序也会按预期工作(或 已删除)。

想象一下,一个旨在显示原始版本的应用程序note.xml (<> <从> <heading> <body>)。

然后想象一个更新版本的note.xml,增加了<日期>和<小时> 元素,并删除了<标题>。

XML的构造方式,旧版本的应用程序仍然可以工作。

三、XML的两种文档约束

XML(可扩展标记语言)的两种主要文档约束分别是 DTD(文档类型定义)和 XML Schema。这两种文档约束用于定义 XML 文档的结构、元素、属性和约束规则,以确保文档的有效性和一致性。

  1. DTD(文档类型定义):DTD 是一种声明性约束,它使用一组语法规则定义 XML 文档的结构、元素和属性。通过 DTD,可以定义元素的顺序、数量和内容约束,以及元素和属性的数据类型。DTD 使用简单的语法规则,但在处理命名空间和数据类型等方面具有一定的局限性。

  2. XML Schema:XML Schema 是一种更加强大和灵活的文档约束方式,它使用 XML 格式本身来定义 XML 文档的结构和约束规则。XML Schema 支持更丰富的数据类型定义、命名空间管理、键值约束等功能,使得对 XML 文档的约束和验证更加灵活和强大。XML Schema 常用于替代 DTD,成为更现代化的 XML 文档约束方式。

四、XML格式要求

  • XML 元素都必须有关闭标签

  • XML 标签对大小写敏感

  • XML 必须正确地嵌套

  • XML 文档必须有根元素,有且只有一个

  • XML 的属性值须加引号

  • XML中的特殊字符处理

特殊字符实体引用
>>
<<
&&
''
""

五、使用DTD

 

1.在XML中加入DTD申明

  • 内部的 DOCTYPE 声明

    <!DOCTYPE 根元素 [元素声明]>
  • 外部文档声明

    <!DOCTYPE 根元素 SYSTEM "文件名">

2.元素定义语法

<!ELEMENT 元素名称 元素类型 >

3.元素的分类

  • 空元素

    <!ELEMENT 元素名称 EMPTY>
  • 文本元素

    <!ELEMENT 元素名称 (#PCDATA)>
  • 混合元素

    <!ELEMENT 元素名称 (子元素名称1,子元素名称2,...)>

4.元素的限制

限制说明
,表示内容的出现顺序必须与声明一致
|表示两者或多个时只能出现一个
+表示元素出现1次或多次
*表示元素出现0次或多次
?表示元素出现1次或1次

5.属性定义语法

基本语法

<!ATTLIST 元素名称 属性名称 属性类型 设置说明>

属性类型

类型描述
CDATA值为字符数据 (character data)
(en1|en2|..)此值是枚举列表中的一个值
ID值为唯一的 id
IDREF值为另外一个元素的 id
IDREFS值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS值为合法的 XML 名称的列表
ENTITY值是一个实体
ENTITIES值是一个实体列表
NOTATION此值是符号的名称
xml:值是一个预定义的 XML 值

设置说明

解释
属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value属性值是固定的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/266489.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题100 刷题笔记

一&#xff1a;哈希表 一般哈希表都是用来快速判断一个元素是否出现集合里。 直白来讲其实数组就是一张哈希表&#xff0c;哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素。 1.两数之和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode…

MATLAB练习题:判断整数是否为回文数

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 给定一个1到1亿之间的整数&#xff0c;请判断这个整数是否为回…

【毛毛讲书】【时间贫困】时间都去哪了?

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容&#xff…

奇点云:SAFe框架下,我们对平台软件工程生产线做了4项改造

导读&#xff1a; 客户规模扩大&#xff0c;如何保证大数据软件产品和服务质量始终如一&#xff1f;几乎所有成长中的软件厂商&#xff0c;尤其是需要通过私有化部署交付的厂商&#xff0c;都会面临这个问题。正如《人月神话》中多次表明的&#xff0c;单纯地增加人手、扩大团队…

网络传输基本流程(封装,解包)+图解(同层直接通信的证明),报头分离问题,协议定位问题,协议多路复用

目录 网络传输基本流程 引入 封装 过程梳理 图解 报文 解包 过程梳理 图解 -- 同层直接通信的证明 总结 解包时的报头分离问题 举例 -- 倒水 介绍 自底向上传输时的协议定位问题 介绍 解决方法 协议多路复用 介绍 优势 网络传输基本流程 引入 首先,我们明确…

数据库分库分表中间件选择

目前分库分表的中间件有三种设计思路&#xff0c;分别是&#xff1a; 采用分散式架构&#xff0c;适用于用Java开发的高性能轻量级OLTP应用程序&#xff0c;以Sharding-JDBC为代表。采用中间层Proxy架构&#xff0c;提供了静态输入和所有语言支持&#xff0c;适用于OLAP应用程…

适用Java SpringBoot项目的分布式锁

在分布式系统中&#xff0c;常用到分布式锁&#xff0c;它有多中实现方式&#xff0c;如&#xff1a;基于redis&#xff0c;database&#xff0c;zookeeper等。Spring integration组件有这三种服务的分布式锁实现&#xff0c;今天来看看用的比较多的redis和database实现方式。 …

MYSQL06高级_为什么使用索引、优缺点、索引的设计、方案、聚簇索引、联合索引、注意事项

文章目录 ①. 为什么使用索引②. 索引及其优缺点③. InnoDb - 索引的设计④. InnoDb中的索引方案⑤. 索引 - 聚簇索引⑥. 索引 - 二级索引⑦. B树索引的注意事项⑧. MyISAM中索引方案⑨. 索引总结 - 重点 ①. 为什么使用索引 ①. 索引是存储引擎用于快速找到数据记录的一种数据…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例&#xff1a;内存用户认证案例 Demo&#xff1a;快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1&#xff1a;数据库用户认证案例 Demo&#xff1a;让数据库守护你的秘密 3.1.4 拓…

【力扣hot100】刷题笔记Day18

前言 晚上巩固一下今天的回溯题&#xff0c;基础不牢地动山摇&#xff0c;po一张代码随想录总结的 组合补充 77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution:def combine(self, n: int, k: int) -> List[List[int]]:path []res []def backtrack(star…

ARM简介

ARM&#xff1a;ARM是Advanced RISC Machine的缩写&#xff0c;意为高级精简指令集计算机。 英国ARM公司&#xff0c;2016年被软银创始人孙正义斥资320亿美元收购了。现在是软银旗下的芯片设计公司&#xff0c;总部位于英国剑桥&#xff0c;专注于设计芯片&#xff0c;卖芯片生…

Git安装的一些步骤解说(小白好奇心严重版本)

Use bundled OpenSSH 安装 Git 时&#xff0c;您面临的选择是使用 Git 自带的 SSH 客户端&#xff08;bundled OpenSSH&#xff09;还是使用系统上已安装的外部 SSH 客户端&#xff08;external OpenSSH&#xff09;。以下是两个选项的一些考虑因素&#xff1a; 使用 Git 自带的…

【OpenGL的着色器03】内置变量(gl_Position等)

目录 一、说明 二、着色器的变量 2.1 着色器变量 2.2 着色器内置变量 三、最常见内置变量使用范例 3.1 常见着色器变量 3.2 示例1&#xff1a; gl_PointSize 3.3 示例2&#xff1a;gl_Position 3.4 gl_FragColor 3.5 渲染点片元坐标gl_PointCoord 3.6 gl_PointCoo…

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

Java根据excel模版导出Excel&#xff08;easyexcel、poi&#xff09;——含项目测试例子拿来即用 1. 前言1.1 关于Excel的一般导出2.2 关于easyexcel的根据模版导出 2. 先看效果2.1 模版2.2 效果 3. 代码实现&#xff08;核心代码&#xff09;3.1 项目代码结构3.2 静态填充例子…

如何使用Portainer创建Nginx容器并搭建web网站发布至公网可访问【内网穿透】

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

《互联网的世界》第三讲-tcp

dns 找到了地址&#xff0c;spf 确定了路径&#xff0c;如何运输数据呢&#xff1f;今天讲 tcp。 计算机网络领域的特定技术是最后当你干这个事时才要用的&#xff0c;我对孩子们这样说&#xff0c;实际上你可以随便看一个快递单子来理解端到端传输协议。 源地址&#xff0c…

华为s5720s-28p-power-li-ac堆叠配置

叠物理约束&#xff1a; • 连线推荐示意图选用产品子系列中固定的一款设备做示例&#xff0c;与选择产品时指定型号的外观可能不同。示意图主要用于让用户了解相同子系列设备可以用作堆叠的端口的位置&#xff0c;以及使用不同的连线方式时如何连接设备上的端口。因此&#xf…

万字带你走过数据库的这激荡的三年

本文收集了卡内基梅隆大学计算机科学系数据库学副教授 Andy Pavlo 从 2021 到 2023 连续三年对数据库领域的回顾&#xff0c;希望通过连续三年的回顾让你对数据库领域的技术发展有所了解。 关于 Andy Pavlo&#xff1a;卡内基梅隆大学计算机科学系数据库学副教授&#xff0c;数…

SpringCloud Alibaba(保姆级入门及操作)

第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个…

iOS消息发送流程

Objc的方法调用基于消息发送机制。即Objc中的方法调用&#xff0c;在底层实际都是通过调用objc_msgSend方法向对象消息发送消息来实现的。在iOS中&#xff0c; 实例对象的方法主要存储在类的方法列表中&#xff0c;类方法则是主要存储在原类中。 向对象发送消息&#xff0c;核心…