XML之DTD详解
1.什么是XML
1.1 概念:
- XML是一种标记语言,全称是可扩展标记语言(Extensible Markup Language),用于描述、存储和传输数据。XML被设计成具有自我描述性、通用性和可扩展性,它可以用于创建各种类型的文档和数据格式。 XML基于标记(tag),标记是由尖括号包围的元素名称和相关内容组成,就像这样:content。通过定义自定义标记和命名空间,XML可以支持任何语言或应用程序的数据表示和交换。许多应用程序使用XML来表示和交换数据,例如RSS订阅、SOAP协议、配置文件等。
- xml用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。Xml是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
1.2 XML的特性和优势:
- 自我描述性:XML文档包含自我描述的标记,可以帮助人们理解和识别标记的用途和含义。
- 灵活性和可扩展性:XML可以根据需要定义自定义标记和命名空间,以适应不同的应用程序和需求。
- 可移植性:XML文档可以在不同的平台和应用程序之间传输和共享,例如在Web浏览器中显示或在服务器之间传输。
- 支持关系数据:XML还可以在文档中存储结构化数据,可以表示关系、层次结构以及其他结构。
总之,XML是一种强大的数据交换格式,可以帮助不同应用程序和平台之间实现数据的无缝交互。
2. XML的文档约束:
2.1 Schema
Schema是对XML文档结构的定义和描述,其主要的作用是用来约束XML文件,并验证XML文件有效性。
示例:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
2.2 DTD
DTD是定义XML的合法构建模块,它使用一系列的合法元素来定义文档结构。
示例:
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
3. XML编写格式要求
- XML文件必须是一个完整的文档,必须包含根元素(root element),并且所有元素必须闭合。
- XML元素、属性、命名空间等名称必须符合XML命名规则。元素名和属性名必须以字母或下划线开始,后跟任意字母、数字、横线、句点和冒号。元素名和属性名不能以xml或XML开头,不能包含空格和其他无效字符。
- XML标记必须使用小于号(“<”)和大于号(“>”)进行包裹,例如:
<element>content</element>`
- XML元素必须有一个唯一的元素标识符(Element Identifier),可以是标记名或命名空间URL和标记名的组合。
- XML属性必须被包含在元素的开始标记中,属性值必须以单引号或双引号包围。
- XML元素的属性值必须符合XML规范,不能包含未转义的字符和元素闭合标记,否则会导致解析错误。
- XML中的空元素必须使用自闭合标记表示,例如:
<br/>
- XML注释以“”结束。
- XML文件可以使用UTF-8、UTF-16或ISO-8859-1等编码方式进行编码。
**总结:**XML编写格式要求符合XML命名规范,必须包含根元素,元素必须闭合、属性值必须用引号包装等。遵循良好的编码习惯可以使XML文件易于阅读、修改和维护。
5. XML的特殊字符
5.1 特殊字符
特殊字符 | XML转义序列 |
& | & |
< | &It |
> | > |
" | " |
’ | &apos |
5.2 特殊字符的处理方法
- 采用<![CDATA[ ]]>特殊标签,将包含特殊字符的字符串封装起来。
- 使用XML转义序列表示这些特殊的字符,这5个特殊字符所对应XML转义序列
6. 什么是DTD
4.1 概念:
DTD是一种文档类型定义(Document Type Definition),用于定义XML文档结构和规则。它描述了XML文档应该包含哪些元素、属性和实体,以及它们之间的关系和约束条件。DTD定义了XML文档的结构和模式,提供了一种用于验证XML文档格式是否正确的方式。DTD通常作为一种单独的XML文档存在,通过DOCTYPE声明包含在XML文档中。
4.2 DTD元素和规则:
- 元素(Element):描述XML文档中所允许的元素名称、元素类型和元素内容。
- 属性(Attribute):描述XML文档中所允许的属性名称、属性类型和属性值。
- 实体(Entity):定义在XML文档中使用的实体、实体引用和其他符号。
- 实体(Entity):定义在XML文档中使用的实体、实体引用和其他符号。
总结:
DTD可以帮助开发者规范XML文档格式,并确保XML文档的结构和内容符合指定的模式和规则。在实际开发中,DTD常被用作验证XML文档格式是否正确的工具。
7. DTD的使用
7.1 在XMl中加入DTD声明
- 内部的DOCTYPE声明
格式:
<!DOCTYPE 根元素 [元素声明]>
- 外部文档声明
格式:
<!DOCTYPE 根元素 SYSTEM "文件名">
7.2 元素定义语法
格式:
<!ELEMENT 元素名称 元素类型>
7.3 元素分类
1. 空元素
格式:
<!ELEMENT 元素名称 EMPTY>
2. 文本元素
格式:
<!ELEMENT 元素名称 (#PCDATA)>
3. 混合元素
格式:
<!ELEMENT 元素名称 (子元素名称1,子元素名称2,...)>
7.4 元素的限制
限制 | 说明 |
, | 表示内容的出现顺序必须与声明一致 |
| | 表示两者或多个时只能出现一个 |
+ | 表示元素出现1次或多次 |
* | 表示元素出现0次或多次 |
? | 表示元素出现1次或1次 |
7.5 属性定义语法
7.5.1 基本语法
格式:
<!ATTLIST 元素名称 属性名称 属性类型 设置说明>
7.5.2 属性类型
类型 | 描述 |
CDATA | 值为字符数据 (character data) |
(en1|en2|…) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id |
IDREF | 值为另外一个元素的 id |
IDREFS | 值为其他 id 的列表 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为合法的 XML 名称的列表 |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
NOTATION | 此值是符号的名称 |
xml: | 值是一个预定义的 XML 值 |
7.5.3 设置说明
值 | 解释 |
值 | 属性的默认值 |
#REQUIRED | 属性值是必需的 |
#IMPLIED | 属性不是必需的 |
#FIXED value | 属性值是固定的 |
8. 综合案例
<?xml version="1.0" encoding="UTF-8"?> <!-- config标签:可以包含0~N个action标签 --> <!DOCTYPE config [ <!ELEMENT config (action*)> <!ELEMENT action (forward*)> <!ATTLIST action path CDATA #REQUIRED type CDATA #REQUIRED > <!ATTLIST forward name CDATA #REQUIRED path CDATA #REQUIRED redirect (true|false) 'true' > ]> <config> <!-- action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径 type:字符串,非空,子控制器的完整类名 --> <action path="/registerAction" type="test.action.RegisterAction"> <forward name="success" path="/index.jsp" redirect="true" /> <forward name="failed" path="/register.jsp" redirect="false" /> </action> <action path="/loginAction" type="test.action.LoginAction"> <forward name="a" path="/index.jsp" redirect="false" /> <forward name="b" path="/welcome.jsp" redirect="true" /> </action> </config>