版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/89173065
DTD(文档类型定义) 的作用是定义 XML文档 的合法性。是 XML文档 的一种约束。
DTD 可以在 XML文档 内部,也可在外部引用。
通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。
独立的团体可一致地使用某个标准的 DTD 来交换数据。
DOCTYPE 在 XML文档 中只能有一个。英文表示:
ELEMENT:元素(element)
ATTLIST:属性(attlist)
ENTITY:实体(entity)
一、内部的DTD
包含在 XML 源文件中。
格式:
<!DOCTYPE 根元素 [element声明]>
例子:
<!DOCTYPE note [
<!ELEMENT note (to,from)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
</note>
解释:
!DOCTYPE note
: 定义此文档是 note类型 的文档。
!ELEMENT note
: 定义 note元素 里有两个元素(且保持顺序):“to、from”。
!ELEMENT to
: 定义 to 元素为 “#PCDATA” 类型。
!ELEMENT from
: 定义 from 元素为 “#PCDATA” 类型。
#PCDATA
: parser character data 被解析的文本数据。
二、外部的DTD
格式1:
<!DOCTYPE 根元素 SYSTEM "fileName">
SYSTEM: 本地系统
fileName: 外部DTD的文件路径(相对于当前 xml文档 位置)
格式2:
<!DOCTYPE 根元素 PUBLIC "DTD名称" "fileName">
PUBLIC: 网络系统
fileName: 外部DTD的文件路径(相对于当前 xml文档 位置)
注: 外部的DTD可以包含 DTD元素 和 DTD属性,不能包含 DTD实体。在浏览器浏览时 外部DTD文件 中的 DTD属性 不会执行,因为浏览器只会解析 xml文件,不能解析 外部的DTD文件。
note.dtd 的内容:
<!ELEMENT note (to,from)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ATTLIST age
realAge CDATA #FIXED "18"
>
<!ATTLIST address
schoolAddress CDATA "江苏"
>
三、DTD元素(ELEMENT)
格式:
<!ELEMENT 元素名 元素类型/子元素>
元素类型/子元素:
1、(子元素1+, 子元素2…)
+
: 1次及多次
?
: 0次或1次
*
: 0次及多次
,
: 按照先后顺序出现…
|
: 或
2、EMPTY: 空类型,该元素内不允许出现任何子元素,或文本(包括空白)。
3、ANY: 任何类型,该元素内允许出现任意的子元素或文本(包括空白),没有任何限定。
4、(#PCDATA): 该元素中可以出现任意字符串,但是不能包括子元素(叶子)。
例子:
<!ELEMENT class (student+)>
<!ELEMENT student (name, age, address?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT age EMPTY>
注意:
<!ELEMENT employee (#PCDATA | name)*>
: 混合内容必须被定义零个或多个。
<!ELEMENT ... (#PCDATA)>
: 必须写,表示这是叶子。
四、DTD属性(ATTLIST)
格式:
<!ATTLIST 元素名
属性名1 值类型 属性特点
属性名2 值类型 属性特点
>
值类型:
CDATA: 任意字符
ID: 值必须唯一,必须满足 XML 命名规范
IDREFS/IDREF: 值必须是类型为 ID 的值
IDREFS: 多个,用空格隔开
枚举(男|女)
属性特点:
#REQUIRED
:该属性必须出现
#IMPLIED
:可以出现也可以不出现
#FIXED "值"
:可以出现也可以不出现,如果出现,那么值必须是指定的值。
"值"
:可以出现也可以不出现,如果不出现,那么采用默认值。
例子:
<!ATTLIST student
sid ID #REQUIRED
refId IDREFS #REQUIRED
gender (男|女) #IMPLIED
>
<!ATTLIST age
realAge CDATA #FIXED "18"
>
<!ATTLIST address
schoolAddress CDATA "江苏"
>
五、DTD实体(ENTITY)
格式:
<!DOCTYPE 根元素名称[
<!ENTITY 实体名 实体内容>
]>
例子:
<!DOCTYPE root[
<!ENTITY aa "这是什么">
<!ENTITY bb "这是bb">
]>
<root>
...&aa....
......&bb.....
</root>