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.mzph.cn/news/708220.shtml

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

相关文章

js 面试 什么是WebSockets?HTTP和HTTPS有什么不同?web worker是什么?

概念&#xff1a; webSocket 是一种在客户端和服务端之间建立持久连接的协议&#xff0c;它提供全双工通信通道&#xff0c;是服务器可以主动向客户端推送数据&#xff0c;同时也可以接受客户端发送的数据。 1 webSocket与https区别&#xff1f; 在网络通信中&#xff0c;We…

vue-waterfall2 瀑布流,触底加载更多

监听滚动到底部事件&#xff1a; function isScrollToBottom() {const scrollTop document.documentElement.scrollTop || document.body.scrollTop;const scrollHeight document.documentElement.scrollHeight || document.body.scrollHeight;const clientHeight document…

SVN教程-SVN的基本使用

SVN&#xff08;Apache Subversion&#xff09;是一款强大的集中式版本控制系统&#xff0c;它在软件开发项目中扮演着至关重要的角色&#xff0c;用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比&#xff0c;SVN 的集中式架构使得团队能够更加协同地进行开发&…

如何进行写作的刻意练习

写作从来不可能一蹴而就&#xff0c;而是一件需要我们持续坚持、努力的事情。 人如果没有目标就会迷失方向&#xff0c; 既然需要长期的坚持&#xff0c;就需要我们根据自身情况制定每一阶段的目标。 目标的制定要清晰可达&#xff0c;不能模棱两可&#xff0c;要认证对待。 …

基于springboot+vue的二手手机管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【Vue】插槽-slot

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 插槽 作用&#xff1a;让组件内部一些 结构 支持 自定义 插槽的分类&#xff1a; 默认插槽。具名插槽。 基础语法 组件内需要定制的结构部分&…

WEB漏洞 逻辑越权之支付数据篡改安全

水平越权 概述&#xff1a;攻击者尝试访问与他拥有相同权限的用户的资源 测试方法&#xff1a;能否通过A用户操作影响到B用户 案例&#xff1a;pikachu-本地水平垂直越权演示-漏洞成因 1&#xff09;可以看到kobe很多的敏感信息 2&#xff09;burp抓包&#xff0c;更改user…

Codeforces Round 929 (Div. 3)(A,B,C,D,E,F,G)

这场没考什么算法&#xff0c;比较水&#xff0c;难度也不是很高。比赛链接 硬要说的话E有个 前缀和 加 二分&#xff0c;F是数学BFS&#xff0c;G是个构造 A. Turtle Puzzle: Rearrange and Negate 题意&#xff1a; 给你一个由 n n n 个整数组成的数组 a a a 。您必须对…

Unix Domain Socket 比 localhost(127.0.0.1)更快

当本机的进程间通讯时&#xff0c;使用localhost&#xff08;127.0.0.1&#xff09;、本机IP 和 Unix Domain Socket 之间有什么区别以前理解比较模糊&#xff0c;今天看了一篇文章&#xff0c;终于高明白了&#xff0c;就是这篇文章&#xff0c;写的非常好&#xff1a; (65 封…

【ERROR-pip-ubuntu】error: can‘t find Rust compiler

这个错误的关键信息是&#xff1a; error: cant find Rust compiler这表示无法找到 Rust 编译器。 针对这个问题&#xff0c;你可以尝试以下解决方法之一&#xff1a; **安装 Rust 编译器&#xff1a;**根据提示&#xff0c;你可以尝试安装 Rust 编译器。你可以从 Rust 官网&…

vscode安装配置

一、通过Code-Server安装 1.1、脚本安装 curl -fsSL https://code-server.dev/install.sh | sh#!/bin/sh set -eu# code-servers automatic install script. # See https://coder.com/docs/code-server/latest/installusage() {arg0"$0"if [ "$0" sh ];…

uniapp+node.js前后端做帖子模块:获取帖子列表(社区管理平台的小程序)

目录 0前提1.一些准备1.1表帖子表 post帖子评论表 postComment帖子点赞表 postLike 1.2总体思路 2.前端3.后端 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的意见是…

IOC 和 AOP

IOC 所谓的IOC&#xff08;inversion of control&#xff09;&#xff0c;就是控制反转的意思。何为控制反转&#xff1f; 在传统的程序设计中&#xff0c;应用程序代码通常控制着对象的创建和管理。例如&#xff0c;一个对象需要依赖其他对象&#xff0c;那么它会直接new出来…

LNMP架构搭建

前言 LNMP架构是一种用于搭建Web服务器环境的解决方案&#xff0c;它由Linux、Nginx、MySQL&#xff08;或MariaDB&#xff09;、PHP&#xff08;或Python或Perl&#xff09;这四个开源软件组成。这种架构通常用于搭建高性能的网站和Web应用程序。 目录 一、编译安装nginx …

MySQL里的两个“二次”

文章中所有图片均来自网络 一、double write 第一个二次是mysql一个崩溃恢复很重要的特性-重复写入。 doublewrite缓冲区是位于系统表空间中的存储区域&#xff0c;在该区域中&#xff0c;InnoDB会在将页面写入数据文件中的适当位置之前&#xff0c;从InnoDB缓冲池中刷新这些页…

服务器常见的问题及解决方案

在面对硬件结构复杂、繁琐的服务器&#xff0c;企业不免会遇到服务器发生异常问题或者是出现系统故障的情况&#xff0c;从而导致重要数据的丢失&#xff0c;给企业造成巨大的损失&#xff0c;那么面对服务器异常&#xff0c;我们应该如何进行解决呢? 1.用户无法访问页面 对于…

React中使用useActive

1.引入 import { useActivate } from "react-activation";2.React Activation 在React中使用react-activation,其实就是类似于Vue中的keep-alive&#xff0c;实现数据的缓存&#xff1b; 源码&#xff1a; import { ReactNode, ReactNodeArray, Context, Component…

vue3+vite+ts配置多个代理并解决报404问题

之前配置接口代理总是报404,明明接口地址是对的但还是报是因数写法不对;用了vue2中的写法 pathRewrite改为rewrite 根路径下创建env文件根据自己需要名命 .env.development文件内容 # just a flag ENVdevelopment# static前缀 VITE_APP_PUBLIC_PREFIX"" # 基础模块…

为高频大功率设计的双面水冷厚膜电阻方案

EAK双面水冷厚膜电阻是一种具有良好散热性能的电阻器&#xff0c;常用于需要高效散热的电子设备中。其包括第一绝缘介质层、厚膜电阻层、第二绝缘介质层以及用于液体流通的金属腔体&#xff0c;第一绝缘介质层设置于金属腔体的上表面&#xff1b;第一绝缘介质层表面设有厚膜电阻…

Vue2:路由组件缓存技术

一、情景说明 我们的页面中 可能同时存在多个路由组件需要切换 有些路由组件中有input等输入框&#xff0c;当输入了内容后&#xff0c;点击其他组件按钮 再次切换回来时&#xff0c;内容被清空了 这样&#xff0c;用户体验就很差 这里&#xff0c;就用到路由组件缓存技术 二…