XML以及DTD详解

本文介绍了XML的基本概念和作用,包括数据交换、存储、Web应用和数据分析。接着详细讲解了DTD(文档类型定义),包括其概念、作用以及如何在XML中添加。文章重点讨论了DTD约束,如元素约束的分类和次数限制,以及属性约束的类型和描述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日金句

家俭则兴 人勤则健 能勤能俭 永不贫贱


前言

框架通常借助设计模式、反射和配置文件等技术实现灵活的开发和可扩展性。而常见的配置文件有xml文件,今天我们就来学习它(今天主要介绍XML,以及XML的DTD约束)。

一、XML

1.1XML概念

  • XML 指可扩展标记语言(eXtensible Markup Language)
  • XML是一种常见的配置文件格式,可以使用各种XML解析器来解析和读取XML配置文件。XML可以方便地表示复杂的数据结构和层次关系,并且可以通过DTD或XSD等方式进行验证
  • 常用的技术:约束(Schema/DTD)、解析(Parsing)和建模技术(XML Schema/Relax NG)

1.2XML作用

1.2.1数据交换

XML可以作为数据交换的中间格式,供应用程序之间进行数据传输和交换。例如,Web服务可以使用XML格式传输数据。

1.2.2数据存储

XML可以作为数据存储格式,存储各种结构化数据,例如配置文件、日志文件、数据库数据等等。XML的可扩展性和灵活性使得它成为一个方便、可靠和可读的数据存储和传输方式。

1.2.3Web应用

XML是Web应用的核心技术之一,主要用于定义Web服务、SOAP消息、XML文档等。

1.2.4数据分析

XML可以作为数据分析的输入,将数据从文件中提取出来,并使用XML Schema或XSLT进行转换和处理。

1.3XML标准格式

  • XML声明:以 <?xml 版本="1.0" ?>的形式出现在XML文档的第一行,用于说明XML的版本和编码方式等信息。
  • 根元素:XML文档的根元素是XML文档的最外层元素,一个XML文档只能有一个根元素。
  • 元素:XML文档中的各个元素分别由开始标签、结束标签和元素内容组成。
    • 标签大小写正确区分;正确结束标签;正确嵌套标签
  • 属性:元素可以拥有零个或多个属性,属性是以键值对的形式出现在元素的开始标签中的。
  • 注释:以的形式出现在XML文档中,用于标记注释或者说明。

二、DTD约束

2.1概念

  • DTD(Document Type Definition)是一种用于定义XML文档结构和格式的语言,它可以用于定义XML文档的元素、属性、值、实体等信息,并对这些信息进行约束和验证。

  • DTD约束是指DTD规范定义的一些规则和约束,用于检查和验证XML文档是否符合DTD定义的结构和格式要求

2.2作用

DTD约束可以帮助开发人员检查和验证XML文档的结构、格式和内容是否符合规范和要求。通过使用DTD约束,可以确保XML文档在传递、存储和处理数据时的完整性、一致性和可靠性

2.3在XML中添加DTD

这跟在html里用css一样,可以外部引入,也可以内嵌。

<?xml version="1.0" encoding="UTF-8"?>
<!--外部引入-->
<!DOCTYPE catalog SYSTEM "root.dtd">
<!--自定义-->
<!DOCTYPE root[]>

三、常见的DTD约束

3.1元素约束

DTD可以用ELEMENT关键字定义XML文档中的元素和元素类型,约束元素在XML文档中出现的顺序、出现次数和内容等。

3.1.1元素的分类

空元素类

空元素类定义一个元素,只有开始标签;没有结束标签或结束标签是可选的。用<!ELEMENT ... EMPTY>来定义,例如:

<!ELEMENT hr EMPTY>

,表示“hr”元素为空元素,不需要结束标签。

文本元素类

指XML元素只包含文本数据,不包含子元素的类型,使用#PCDATA来定义。

例如,下面是一个文本元素类型的DTD定义:

<!ELEMENT title (#PCDATA)>

以上定义了一个名为title的元素,它只包含文本数据。

子元素序列类

子元素序列类定义了一组元素,这些元素必须以特定的顺序出现。序列元素类使用逗号分隔元素定义。例如:

<!ELEMENT person (name, telephone, email)>

表示“person”元素依次包含“name”、“telephone”、“email”三个子元素。

子元素选项类

子元素选项类定义了一组元素,这些元素中只能选择其中的一个来出现。用分隔符“|”组合多个定义项。例如:

<!ELEMENT phone (fax | email | url)>

表示“phone”元素中只能包含其中之一的子元素。

混合元素类

混合元素类包含了文本和子元素,即一个元素可以同时包含纯文本和子元素。
<!ELEMENT ... (#PCDATA | e1 | e2 |...) ><!ELEMENT ... (#PCDATA , e1 , e2 , ...) > 来定义.例如:

<!ELEMENT title (#PCDATA | emp | publisher)>

表示元素"title"可以包含文本和子元素“emp”和“publisher”这其中一个。

<!ELEMENT title (#PCDATA , emp , publisher)>

表示“title”元素依次包含文本和子元素“emp”和“publisher”。

3.1.2元素次数约束

使用+*以及?表示元素的出现次数。+表示元素至少出现一次,*表示元素可以出现零次或多次。对于一些特殊的元素出现次数约束,还可以使用?表示元素可以出现零次或一次。
例如:

<!ELEMENT title (#PCDATA , emp , publisher)*>

表示“title”元素依次包含文本和子元素“emp”和“publisher”,这些元素可以任意出现零次或多次。

3.2属性约束

DTD可以用ATTLIST关键字定义XML文档中的属性,约束属性的类型、值域和默认值等。

3.2.1属性类型

CDATA(Character Data)

字符数据类型,表示元素的属性可以是任何字符串,没有限制。
在这里插入图片描述
可以看到不管是什么字符串,都没有任何报错

ID(Identifier)

标识符类型,表示元素的属性值必须是唯一且非空的,它必须以字母或下划线开头,后跟字母、数字、连字符、下划线或句点的任意组合。

可以看到不满足条件的都会报错
在这里插入图片描述
我们将其修改成符合格式的:
在这里插入图片描述

IDREF(ID Reference)

引用标识符类型,表示元素的属性值必须引用其他元素的ID属性值。
在这里插入图片描述

ENTITY(实体类型)

表示元素的属性值必须是一个已定义的实体名称。
在这里插入图片描述
在这个例子中,我们使用#ENTITY声明了一个叫做author的实体,它的值是一个字符串John Doe。同时我们还声明了一个名为company的实体,它的值是ABC corp。在使用这些实体时,我们可以在合适的地方通过实体引用符(&和;)来调用这些实体,如上例中的&author;和&company;。

用实体的目的是在XML文档中共享和重复使用一些预定义的数据或代码块,可以提高代码的重用性和维护性

NMTOKEN(Name Token)

名称标记类型,表示元素的属性值必须是一个有效的名称标记,只能由字母、数字、下划线等字符组成,且不能以数字开头。通常用来实现非空需求,但它可重复。

3.2.2属性描述

#REQUIRED

属性值是必需的。
在这里插入图片描述

#IMPLIED

属性值是可选的,但在某些情况下可能需要使用它。
在这里插入图片描述

#FIXED value

定义固定属性值。这个属性值不能被修改。
在这里插入图片描述

好啦,今天的分享就到此为止!希望你看完本篇文章有所收获,祝你变得更强!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值