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

目录

​编辑

一、DTD

什么是DTD?

[为什么要使用 DTD?](#为什么要使用 DTD?)

[内部 DTD 声明](#内部 DTD 声明)

[具有内部 DTD 的 XML 文档](#具有内部 DTD 的 XML 文档)

[外部 DTD 声明](#外部 DTD 声明)

[引用外部 DTD 的 XML 文档](#引用外部 DTD 的 XML 文档)

二、XML

什么是XML?

[XML 不执行任何操作](#XML 不执行任何操作)

[XML 和 HTML 之间的区别](#XML 和 HTML 之间的区别)

[XML 不使用预定义的标记](#XML 不使用预定义的标记)

[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示例:

XML 复制代码
<!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 复制代码
<?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 复制代码
<?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:

XML 复制代码
<!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示例:

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:

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 声明

    XML 复制代码
    <!DOCTYPE 根元素 [元素声明]>
  • 外部文档声明

    XML 复制代码
    <!DOCTYPE 根元素 SYSTEM "文件名">

2.元素定义语法

XML 复制代码
<!ELEMENT 元素名称 元素类型 >

3.元素的分类

  • 空元素

    XML 复制代码
    <!ELEMENT 元素名称 EMPTY>
  • 文本元素

    XML 复制代码
    <!ELEMENT 元素名称 (#PCDATA)>
  • 混合元素

    XML 复制代码
    <!ELEMENT 元素名称 (子元素名称1,子元素名称2,...)>

4.元素的限制

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

5.属性定义语法

基本语法

XML 复制代码
<!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 属性值是固定的
相关推荐
songbaoxian4 分钟前
ElasticSearch
java·linux·elasticsearch
非 白19 分钟前
【Java】代理模式
java·开发语言·代理模式
知识分享小能手25 分钟前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5
IT、木易27 分钟前
大白话React第二章深入理解阶段
前端·javascript·react.js
Good Note29 分钟前
Golang的静态强类型、编译型、并发型
java·数据库·redis·后端·mysql·面试·golang
晚安72033 分钟前
Ajax相关
前端·javascript·ajax
图书馆钉子户35 分钟前
怎么使用ajax实现局部刷新
前端·ajax·okhttp
bin91531 小时前
DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)
前端·javascript·vue.js·ecmascript·deepseek
qianmoQ1 小时前
第五章:工程化实践 - 第五节 - Tailwind CSS 常见问题解决方案
前端·css
我就是我3521 小时前
记录一次SpringMVC的406错误
java·后端·springmvc