XML文件的指定文档结构--DTD文档类型定义

由于XML文件中Element的定义可能会不规则,我们直接用Java对XML文件进行解析的时候,会需要大量的编程和错误检查工作,还要检查该文档包含的节点是否和我们期待的一样。

我们可能会需要指定XML文档的结构,比如:文档类型定义(DTD)和XML Schema。DTD和Schema包含了用于解释文档如何构成的规则,这些规则指定了每个元素的合法子元素和属性。

提供DTD的方法有多种:

第一种,就是直接将DTD的规则纳入到XML文件当中

<?xml version ="1.0"?>
<!DOCTYPE configuration<pre name="code" class="html"><span style="white-space:pre">	</span><?configuation是下面的configuration,你是可以换成其他的,只要保证和XML文件中的开头就可以了?>
[ <!Element configuration ...> more rules ...]><configuration>...</configuration>

 正如你看到的将这些规则纳入到XML文件当中并用[]符号限定其界限。 

第二种,编写外部DTD文件(和xml文件差不多的写法,文档类型存为.dtd就可以了),在XML文件中通过SYSTEM声明来实现这个目标。

test1.dtd

<!ELEMENT configuration (title|body|window|color|menu)+>
<!ELEMENT title (fontname,fontsize)>
<!ELEMENT body (fontname,fontsize)>
<!ELEMENT window (heigh,width)>
<!ELEMENT color (red,green,blue)>
<!ELEMENT menu (item)+>
<!ELEMENT fontname (#PCDATA)>
<!ELEMENT fontsize (#PCDATA)>
<!ELEMENT heigh (#PCDATA)>
<!ELEMENT width (#PCDATA)>
<!ELEMENT red (#PCDATA)>
<!ELEMENT blue (#PCDATA)>
<!ELEMENT green (#PCDATA)>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item fontsize CDATA #REQUIRED>


test1.xml

<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>

 
<!DOCTYPE configuration SYSTEM "test1.dtd>
<configuration>
...
</configuration>

上面讲了如何定位DTD文件,下面来介绍一些DTD文件中的不同类型的规则

1.ELEMENT规则:用于指定某个元素可以拥有怎么样的子元素。


元素内容的规则

规则
含义
E*0或者多个E
E+1或者多个E
E?0或者1个E
E1|E2|...|EnE1,E2,...,En中的一个
E1,E2,...,EnE1 随后是E2,...,En
#PCDATA文本
(#PCDATA|E1|...|En)*0或者多个文本和E1,E2,...,En,以任意顺序排列(混合式内容)
ANY允许任意子元素
EMPTY不允许有子元素










通用语法一般为以下:

<pre name="code" class="html"><!ELEMENT element type>
比如
<!ELEMENT configuration (title|body|window|color|menu)*>

 
<!ELEMENT menu(item)*>
<!ELEMENT fontname(#PCDATA)>

2.元素属性的规则

属性类型
类型含义
CDATA任意字符串
(A1|A2|...|An)字符串属性A1|A2|...|An之一
NMTOKEN NMTOKENS1或者多个名字标记
ID1个唯一的ID
IDREF IDREFS1个或者多个对唯一ID的引用
ENTITY ENTITIES1或者多个未解析的实体



属性的默认值
默认值含义
#REQUIRED属性是必须的
#IMPLIED属性是可以选择的
A属性是可选,未指定时为A
#FIXED A属性必须是未指定或者A:两种情况下属性都是A

通用语法为:

</pre><pre name="code" class="plain"><!ATTLIST element attribute type default>
比如
<pre name="code" class="html"><!ATTLIST item fontName #CDATA #REQUIRED>

 

实例:

test1.dtd

<!ELEMENT configuration (title|body|window|color|menu)+>
<!ELEMENT title (fontname,fontsize)>
<!ELEMENT body (fontname,fontsize)>
<!ELEMENT window (heigh,width)>
<!ELEMENT color (red,green,blue)>
<!ELEMENT menu (item)+>
<!ELEMENT fontname (#PCDATA)>
<!ELEMENT fontsize (#PCDATA)>
<!ELEMENT heigh (#PCDATA)>
<!ELEMENT width (#PCDATA)>
<!ELEMENT red (#PCDATA)>
<!ELEMENT blue (#PCDATA)>
<!ELEMENT green (#PCDATA)>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item fontsize CDATA #REQUIRED>
test1.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration SYSTEM "test1.dtd">
<configuration>
	<title>
		<fontname>Helvetica</fontname>
		<fontsize>36</fontsize>
	</title>
	<body>
		<fontname>Helvetica</fontname>
		<fontsize>36</fontsize>
	</body>
	<window>
		<heigh>200</heigh>
		<width>400</width>
	</window>
	<color>
		<red>0</red>
		<green>50</green>
		<blue>100</blue>
	</color>
	<menu>
		<item fontsize="12">Times Roman </item>
		<item fontsize="12">Helvetica</item>
	</menu>
	<window>
		<heigh>2200</heigh>
		<width>4200</width>
	</window>
	<color>
		<red>20</red>
		<green>150</green>
		<blue>100</blue>
	</color>
	<menu>
		<item fontsize="12">Times Roma1n </item>
		<item fontsize="12">Helvetic1a</item>
	</menu>
</configuration>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值