(8)DTD中的元素声明

来源:互联网 发布:ko.js 事件 编辑:程序博客网 时间:2024/05/13 13:52

DTD中的元素(ELEMENT)是用来约束标记的,用元素声明来定义一个标记,元素声明以“<!ELEMENT”开始,用“>”结束,格式为: 

     <!ELEMENT  标记名称  标记的约束>

例如 :

     <!ELEMENT name (#PCDATA)>

这段代码定义了一个标记,名称为name,它标记的内容只能含有文本数据。

有5种元素内容种类:

1.#PCDATA(纯文本):包含任何文本,但是没有子元素
2.Empty(没有或空):不包含任何文本或子元素,只允许元素属性。
3 .Any(任意):任何格式正规的XML数据。
4.Element Only(纯元素):只包含子元素。
5.Mixed(混合):可能包含子元素和文本数据的混合体。
说明:这几种类型都允许在元素的起始标记中使用属性。
注意:在DTD中有一个原则,没有明确声明就是禁止,并且同名的元素只能声明一次。


纯文本内容(#PCDTTA)元素表示元素内容为可解析的数据,实际上就是字符数据(文本数据和实体引用),由“(#PCDATA) (Parsed Character DATA)”表明。
语法格式:<!ELEMENT  元素名  (#PCDATA)>
例如:<!ELEMENT  说明   (#PCDATA)>
合法示例:<说明>信管07班为文明班</说明>
非法:<说明><学号>2007999</学号></说明>


空元素(EMPTY元素内容)—不包含任何文本或子元素,只允许元素属性。
其定义语法为:<!ELEMENT 元素名称 EMPTY>

例如:



Any类型

语法格式:
<!ELEMENT  元素名  ANY>
ANY要大写
表示元素的内容可以是可析的字符数据,也可以是任意数量和顺序的子元素、注释、PI、CDATA节等。
实际上是对内容没有限制(只要是良构的文档即可)。
尽量避免使用,容易造成结构不明确。


纯元素

纯元素——只包含子元素,在子元素以外没有文本内容。
元素定义主要解决:
(1)该元素包含什么子元素
(2)各个子元素出现的次序和个数
语法定义:
<!ELEMENT  元素名  (子元素,子元素,……)>
子元素必须按设定的次序、次数出现,如:
<!ELEMENT  学生(姓名,性别,英语,数学)>

对应上述定义,正确的XML是:
<学生>
<姓名>李载源</姓名>
<性别>男</性别>
<英语>99</英语>
<数学>88</数学> 
</学生>


基数操作符定义了子元素在内容模型里出现的次数。

例如:
<!ELEMENT 图书 (书名,作者+,书号? ,出版日期*)>
<!ELEMENT  学生(姓名,性别,爱好,爱好)>
<!ELEMENT  学生(姓名,性别,爱好*)>

有时需要在2个或多个互斥的子元素中进行选择,此时需要用到OR(“|”)操作符。
语法定义:
<!ELEMENT 元素名 (子元素名1|子元素名2|子元素名3|…) >
例如:
<!ELEMENT 作者联系方式 (姓名,地址+,(电话|手机|email))>
<tel>或者是<email>或者是<mail>,三者必居其一 ,而不能三个都有。


时候,一个父元素的几个子元素在逻辑上是有联系的。可以使用一对括号把多个元素合为一个独立元素。此时小括号中的元素的出现或不出现是作为一个整体而言的。
【例3-9】小括号的使用。
      也可将选择性子元素声明与基数操作符和小括号组合使用,实现对元素内容更为灵活、强大的控制。
例如:<!ELEMENT 作者 (姓名,(电话|手机|email)*)>


混合型元素内容

假设采用XML 对人物信息进行描述,描述内容采用文本形式,但同时希望文本内出现的人物姓名、籍贯、职业等信息采用元素方式进行结构化表示,也就是说,子元素可以任意散布在一段段的文本之中。
可采用混合内容描述方法:


混合内容示例:


0 0
原创粉丝点击