一、前言
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中合法的使用标签名
四、特殊字符
有特别的字符出现是需要用到特殊标记的。
> | > |
< | < |
& | & |
' | ' |
" | " |
五、元素(标签)定义
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>
编写不易,博主叹气😥给博主个免费心心吧!!