DTD规则非常灵活,定义指令和文件内容,可以在XML文档外部单独存储DTD文件,达到共享目的,也可以直接放在XML文档内独享。
自定义XML标记常用的有三种,定义元素(element),定义属性(attribute)以及定义实体(entity)。下面我们分别说明。先声明,这些定义可以出现在DTD文件内,也可以放在XML文件内。而且语句相同,完全一样。就是说:你完全可以把DTD文件内容全部拷贝黏贴在XML文档内,然后省略DTD文档。减去XML文档的依赖负担。
首先记住,DTD定义的内容不论单独文件内,还是在XML文档开始处,都必须现在以声明指令之中。即:开始指令:“<!DOCTYPE 根元素名 [”和结束指令:“]”。这一点,上一篇文内已经说明。今天在强调一遍。
一、定义元素(element)
定义格式:<!ELEMENT 根元素名(子元素1,子元素2)>
开始指令:<!ELEMENT根元素名(子元素1,子元素2)
结束指令:>
使用方法举例:
灵活运用定义元素指令,下面举例说明常见各种情况。
1、定义元素,可以是空之标记
例如:<!ELEMENT br EMPTY>
在XML文档使用,可以为:<br/>
2、定义元素,可以没有任何内容的标记
例如:<!ELEMENT note ANY>
在XML文档使用,可以为:<note></note>
3、定义元素,可以定义只能在note标记内出现一次的子元素
<!ELEMENT note(address)>
在XML文档使用举例:
<note>
<address>现在住址:黄埔区大沙东路78号</address>
</note>
4、 定义元素,可以定义子元素,至少在note标记内出现一次。
<!ELEMENT note(address+)>
在XML文档使用,可以为:
<note>
<address>现在住址:黄埔区大沙东路78号</address>
<address>户口地址:天河区五山路67号</address>
</note>
5、定义元素,可以定义子元素,在note标记可以不出现,也可以出现多次。
<!ELEMENT note(address*)>
在XML文档使用,可以为:这个不用举例,想出现就出现,也可不出现。
6、定义元素,可以定义子元素,在note标记可以不出现,或出现一次。
<!ELEMENT note(address?)>
在XML文档使用,可以为:这个不用举例,可以不出现,或出现一次。
7、 定义元素,定义多个子元素,在note标记中,有的子元素可以非此即彼。
<!ELEMENT note(to,from,heading,(body|message))>
在XML文档使用:在note内不是使用body就是使用message。
不是使用<body></body>就是使用<message></message>
8、 定义元素,定义多个子元素,在note标记中,可以随便使用。
在XML文档使用:这个不用举例,可以随便使用。
9、 定义元素的数据类型。
<!ELEMENT from(#PCDATA)>
这种元素标记,都是这种类型。XML文档中出现的标记都是必须定义这种类型。
二、定义属性(attribute)
定义属性的格式:
定义格式:<!ATTLIST元素名属性名属性类型“属性值”>
开始指令:<!ATTLIST元素名属性名属性类型“属性值”
结束指令:>
使用方法举例:
<!ATTLIST payment type CDATA “check”>
在XML文档中:
<payment type=“check”/>
三、定义实体(entity)
定义属性的格式:
定义格式:<!ENTITY 实体名“实体值”>
开始指令:<!ENTITY 实体名“实体值”
结束指令:>
使用方法举例:
<!ENTITY writer“张三”>
在XML文档中:
<author>&writer;</ author>
关于定义属性和实体的详细说明,下篇细说。
北荒客
2020.2.26