DTD约束的基本概述

简介: DTD约束的基本概述

一、前言

1.什么是DTD

              DTD,全称为“文档类型定义”(Document Type Definition),是一种定义 XML 或 HTML 等文档的结构的方式。DTD 通常包含对元素、属性、实体、命名空间等方面的定义。

作用:

        DTD 主要用于指定 XML 或 HTML 文档中元素、属性、实体等的定义和规范。使用 DTD 可以定义标记、元素、实体、注释等,从而确保 XML 或 HTML 等文档的结构和格式的正确性。

        DTD 可以内联在 XML 或 HTML 文档中,也可以作为一个外部文件引用,以进行重复使用。通过使用 DTD 可以实现文档的可验证性(验证文档结构是否符合规范)、可读性(便于人类理解)和可扩展性(方便增加和调整文档内容)。

2.什么是XML

            XML(可扩展标记语言)是一种用于描述数据的标记语言,其设计目标是传输数据、数据的存储和数据的交换。XML 的设计宗旨是具有通用性、简单性和易用性,它为所有的语言和所有的操作系统提供了一种统一的数据格式。

XML与HTMl的不同之处:

        XML 与 HTML 类似,但不同于 HTML 的是,XML 可以根据需要定义标记,并允许创建自定义的标记。XML 的标记没有事先定义好,而是由开发者自己定义。XML 的标记需被正确地嵌套,且标记名称需严格相符,这使得XML文档中的数据更加结构化、可读性更高。

       XML 适合于数据的描述、传输和处理,通常应用于数据交换、web服务、数据存储等领域。在 XML 中,节点和属性都是以标记(元素)的形式出现,并且在数据处理方面,XML 通常与 XSL、XQuery、XPath 等技术一起使用,从而实现数据的处理和转换。

二、XML的两种文档约束

在 XML 中,常见的两种文档约束是 DTD 和 XML Schema。

1.DTD(Document Type Definition)文档约束

DTD 是一种基于 XML 的约束语言,它定义了 XML 文档中可以出现哪些元素和属性,以及它们之间的关系和规则。使用 DTD 可以确保 XML 文档的有效性和一致性。

DTD 一般以独立的 .dtd 文件形式存储,也可以直接嵌入到 XML 文档中进行定义。DTD 的定义包括元素(Element)、属性(Attribute)、实体(Entity)、注释(Comment)等。

2.XML Schema 文档约束

XML Schema 是一种基于 XML 的语言,它是一种更强大和灵活的文档约束,可以定义比 DTD 更复杂且精确的数据模型。和 DTD 不同,XML Schema 可以通过命名空间(Namespace)来对不同的元素和属性进行区分。

XML Schema 的定义一般以 .xsd 文件形式存储,也可以作为声明性元素嵌入到 XML 文档中。XML Schema 的定义包括类型(Type)、元素(Element)、属性(Attribute)、注释(Annotation)等。

总的来说,XML Schema 比 DTD 更强大和灵活,但也更加复杂和繁琐,需要更多的学习和使用成本。

三、XML格式要求

既然是门“语言”肯定有约束,下面让我们来看看XMl的约束吧!

1.XML文档有且只有一个根元素

2.XML中的元素必须要有关闭标签(首尾呼应)

3.XML标签严格区分大小写

4.XML的属性需要加双引号

5.XML标签必须正确的嵌套

6.XMl中的特殊字符必须处理

7.XML中合法的使用标签名

四、特殊字符

有特别的字符出现是需要用到特殊标记的。

>     >
< &lt;
& &amp;
' &apos;
" &quot;

五、元素(标签)定义

1.DTD声明

<!DOCTYPE [   ]>

声明用于定义 XML 文档的文档类型、元素、属性、数据类型等的规则。

2.元素(标签)的分类

<!ELEMENT  元素名称   EMPTY>-------------空元素     (一个标签例如:  <br/> )

<!ELEMENT 元素名称  (#PCDATA)>--------文本元素(只有内容没有子标签)

<!ELEMENT 元素名称 (子元素名称1,子元素名称2,...)>--------------混合元素    (有子标签)

3.元素(标签)的限制    

如果混合标签内有多个子标签用“ ”隔开。

存在是非标签用“ | ”隔开(两个标签的情况下)。

允许标签出现零次或者一次用 “ ”。

允许标签出现零次或者N次用 “ * ”。

允许标签出现一次或者N次用 “ + ”。

六、属性定义

1.DTD属性声明

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

2.type属性类型

  • CDATA:表示属性值是字符数据可以是任意字符。
  • ID:表示属性值是唯一标识符(ID),用于唯一标识文档中的某个元素。
  • IDREF:表示属性值是另一个元素的唯一标识符(ID)引用。
  • IDREFS:表示属性值是多个 IDREF 的空格分隔列表。
  • NMTOKEN:表示属性值是名称令牌(NMTOKEN),只能包含字母、数字、下划线、连字符等标识符字符。
  • NMTOKENS:表示属性值是多个 NMTOKEN 的空格分隔列表。
  • ENTITY:表示属性值是实体引用名称(ENTITY)。
  • ENTITIES:表示属性值是多个实体引用名称(ENTITY)的空格分隔列表。
  • NOTATION:表示属性值是标注名称(NOTATION)。
  • (XXX|XXX):表示选择标签 ,在后面可以设置默认值,但默认值只能是括号内的。

3.设置说明

  • #REQUIRED:属性值必须在元素上出现。
  • #IMPLIED:属性值是可选的。
  • #FIXED value:属性值必须是固定值 value

注意:只有(XXX|XXX)选择标签的时候,desc才可以使用默认的方式并且写了默认值

下面我给大家看一篇我自己写的范文,供参考!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons [
<!--元素约束-->
<!ELEMENT persons (person*)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT br EMPTY>
<!--标签约束-->
<!ATTLIST
person pid ID  #REQUIRED
       sex (男|女|变态) "变态"
       qq CDATA #IMPLIED
       parent IDREF #IMPLIED
>
]>
<persons>
  <person pid="p1" sex="男" qq="aaa" parent="p2">
    <name>xxw</name>
    <age>10</age>
    <contact>
      <phone>1234567</phone>
    </contact>
    <br />
  </person>
  <person pid="p2">
    <name>xw</name>
    <age>35</age>
    <contact>
      <email>123@qq.com</email>
    </contact>
  </person>
</persons>

编写不易,博主叹气😥给博主个免费心心吧!!

相关文章
|
数据库管理
【SQLite】解决unrecognized token:“‘“
【SQLite】解决unrecognized token:“‘“
1531 0
|
监控 数据可视化 测试技术
从工作分解到产品分解:如何灵活应用项目管理结构?
在项目管理中,工作分解结构(WBS)和产品分解结构(PBS)是将大型任务分解为可管理步骤的关键方法。本文详细介绍了WBS和PBS的概念、应用场景和实践步骤,并推荐了板栗看板、Asana和Microsoft Project等高效项目管理工具,帮助提升项目管理效率。
669 4
|
监控 Java API
构建微服务架构的简易指南
【8月更文挑战第31天】在这篇文章中,我们将探索如何从零开始搭建一个微服务架构。通过简单易懂的语言和步骤,我们将一起学习设计、实现和部署微服务的最佳实践。无论你是后端开发的新手还是希望提升现有技能,本文都将为你提供有价值的指导。
|
数据采集 Web App开发 前端开发
Python中好用的爬虫框架
**Scrapy** 是一个强大的Python爬虫框架,适合大规模数据采集,提供高度可定制的爬取流程、内置数据提取工具、自动请求调度、分布式爬取支持、中间件扩展及多种数据存储方式。 **Beautiful Soup** 和 **Requests** 结合使用,便于Python中简单网页的请求和HTML解析。Requests发送HTTP请求,Beautiful Soup解析内容,适合小型项目或数据提取。 **Requests-HTML** 是Requests的扩展,支持HTML解析和CSS选择器,自动处理链接,适合网页解析任务。
447 1
|
安全 Linux 数据安全/隐私保护
Linux 文件、目录和用户权限管理指南
Linux 文件、目录和用户权限管理指南
736 0
|
存储 监控 图形学
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
1127 0
|
数据库 数据安全/隐私保护 数据库管理
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)(2)
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)
194 1
|
关系型数据库 MySQL Linux
关系型数据库mysql的跨平台支持
【6月更文挑战第12天】
577 1
|
存储 SQL 数据可视化
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
EMR StarRocks 线上公开课第1期 ,直播主题:EMR Serverless StarRocks3.x,极速统一的湖仓新范式。
1297 1
|
算法 Java 数据库连接
【分库分表】基于mysql+shardingSphere的分库分表技术
【分库分表】基于mysql+shardingSphere的分库分表技术
692 0