前言
框架通常借助设计模式、反射和配置文件等技术实现灵活的开发和可扩展性。而常见的配置文件有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
定义固定属性值。这个属性值不能被修改。
好啦,今天的分享就到此为止!希望你看完本篇文章有所收获,祝你变得更强!!!