首先,得理解这样一个关系,DTD是用来定义XML合法构建模块。我理解的意思就是给他设定一个规则,如果XML标签不符合这个规则,他就是不合法的。也就是说他是用来给XML设定规则用的。那么要学习DTD元素构建,首先就要了解XML的元素。
一.XML文档有哪些模块 元素呢?
1.元素(element)
这个是XML以及HTML文档的主要构建模块 ,例如HTML
元素的例子就是"body" “table”这样主要用来展示的标签。
XML元素的例子是“note”"message"这样用 来放数据的标签,html标签用来解决在哪里展示,怎么展示的问题。xml用来解决展示什么内容(就是数据)的问题。
2.属性
这个是跟在标签后面的,可以提供有关元素的额外信息。例如:
<img src="computer.gif" />
这里面img表示一个图像标签,src就是属性,代表这个图像资源的名字
3.实体
当遇到一些特殊符号的时候解析器可能会出现一些错误。
例如< > &这样的符号,需要使用实体引用来表示这些符号
实体引用 字符
< <
> >
& &
" "
' '
4.PCDATA
表示被解析的字符数据(parsed character data)开始标签和结束标签之间的文本会被解析器检查实体和标记。像< > &等这些字符不应该出现在这里,应该使用上面3中的实体引用来表示。
5.CDATA
是字符数据,和4不同的是这些数据不会被解析器解析。
好了,有了以上的知识,现在就可以来看DTD中的元素了。先来看语法。
1.怎么声明一个元素
<!ELEMENT element-name category>
或
<!ELEMENT element-name (element-content)>
element-name:就是元素名字,也就是所谓的标签。例如
<!ELEMENT bean (#PCDATA)>这里我声明了一个只有PCDATA元素的标签。xml可以写
<bean>Hello World</bean>
后面category就是元素类型了。
之后的就简单了,
总体格式就是
有以下几类:
1.空元素
就是元素类型为EMPTY.
<!ELEMENT element-name EMPTY>
2.只有 PCDATA 的元素
元素类型为(#PCDATA) 注意这里有圆括号
<!ELEMENT element-name (#PCDATA)>
实例:
<!ELEMENT from (#PCDATA)>
3.带有任何内容的元素
元素类型为ANY
<!ELEMENT element-name ANY>
实例:
<!ELEMENT note ANY>
4.带有子元素(序列)的元素
<!ELEMENT element-name (child1)>
或
<!ELEMENT element-name (child1,child2,...)>
实例:
<!ELEMENT note (to,from,heading,body)>
这里还有一种完整的写法:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
我理解是先声明一个note,他有四个子元素to from heading body。然后在分别声明他四个子element的声明。
为了省事期间,下面只写说明和语法说明
5.声明只出现一次的元素
<!ELEMENT element-name (child-name)>
实例:
<!ELEMENT note (message)>
上面的例子声明了:message 子元素必须出现一次,并且必须只在 “note” 元素中出现一次。
6.声明最少出现一次的元素
<!ELEMENT element-name (child-name+)>
7.声明出现零次或多次的元素
<!ELEMENT element-name (child-name*)>
8.声明出现零次或一次的元素
<!ELEMENT element-name (child-name?)>
9.声明"非…/即…"类型的内容
<!ELEMENT note (to,from,header,(message|body))>
上面的例子声明了:“note” 元素必须包含 “to” 元素、“from” 元素、“header” 元素,以及非 “message” 元素即 “body” 元素。
10.声明混合型的内容
<!ELEMENT note (#PCDATA|to|from|header|message)*>
上面的例子声明了:“note” 元素可包含出现零次或多次的 PCDATA、“to”、“from”、“header” 或者 “message”。
总结:
总体来看还是很简单的,无非就是定义
ELEMENT是什么样的属性,element里面还包含了哪些element,以及他的属性。