DTD约束的基本概念

386 阅读5分钟

 一、前言

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声明

声明用于定义 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>

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