20.5.3 几个简单有关DTD的实例

【实例20.7】下面将举几个简单的实例,让读者进一步熟悉DTD文档的编写。


01<?xml version="1.0"encoding="gb2312"?>

02<!DOCTYPE company[

03<!ELEMENT company(employee|manager)*>///声明一个元素及其子元素

04<!ELEMENT employee(name)>///声明一个元素及其子元素

05<!ELEMENT manager EMPTY>///声明了manager的类型

06<!ELEMENT name(#PCDATA)>///声明它是一个字符串类型

07<!ATTLIST employee sn ID#REQUIRED>///规定它必须被提供属性值

08<!ATTLIST manager mgrid IDREF#REQUIRED>///规定它必须被提供属性值,但必须是其中一

09 ///个元素的属性值

10]>

11<company>

12 <employee sn="300212">

13 <name>赵浩</name>

14 </employee>

15 <employee sn="300213">

16 <name>李丽</name>

17 </employee>

18 <manager mgrid="300212"/>

19</company>


【代码说明】这个实例其实很简单,在company元素中有两个职员。每个职员拥有一个唯一的sn号。而职员中一个是经理。

【运行效果】浏览器中的效果如图20.6所示。

20.5.3 几个简单有关DTD的实例 - 图1

图 20.6 浏览器中的效果

【实例20.8】下面举个有关借书的实例。其代码如下:


01<?xml version="1.0"encoding="gb2312"?>

02<!DOCTYPE library[

03<!ELEMENT library(books|records)>///声明一个元素及其子元素

04<!ELEMENT books(book+)>///声明一个元素及其子元素

05<!ELEMENT book(title)>///声明一个元素及其子元素

06<!ELEMENT title(#PCDATA)>///声明它是一个字符串类型

07<!ELEMENT records(item*)>///声明一个元素及其子元素

08<!ELEMENT item(date, person)>///声明一个元素及其子元素

09<!ELEMENT date(#PCDATA)>///声明它是一个字符串类型

10<!ELEMENT person EMPTY>

11<!ATTLIST book bookid ID#REQUIRED>///规定它必须被提供属性值

12<!ATTLIST person name CDATA#REQUIRED>

13<!ATTLIST person borrowed IDREFS#REQUIRED>///规定它必须被提供属性值,但必须是其中

14 ///一个元素的属性值

15]>

16<library>

17 <books>

18 <book bookid="1-1-2">

19 <title>XML详解</title>

20 </book>

21 <book bookid="1-1-3">

22 <title>Java程序设计入门</title>

23 </book>

24 <book bookid="1-1-1">

25 <title>C程序设计入门</title>

26 </book>

27 </books>

28 <records>

29 <item>

30 <date>2007-9-3</date>

31 <person name="anson"borrowed="1-1-2 1-1-1"/>

32 </item>

33 <item>

34 <date>2007-3-3</date>

35 <person name="John"borrowed="1-1-2 1-1-3"/>

36 </item>

37 </records>

38</library>


【代码说明】上面的XML文档列出了某个人借书的一些情况。其实熟悉HTML的读者,可以发现XML文档与HTML最大的不同点在于:XML可以自定义标记,而HTML不能自定义标记,其标记都是事先规定好的,并且不容更改。

【运行效果】图20.7所示的效果直接在浏览器中查看。

20.5.3 几个简单有关DTD的实例 - 图2

图 20.7 浏览器中的效果