DTD约束标签
<!ELEMENT 元素名称 类别> 或<!ELEMENT 元素名称 (元素内容)>
类别:约束标签的内容
EMPTY:空标签
PCDATA:普通字符串(没有子标签)
ANY : 可以是任何内容(包含子标签)
(元素内容): 标签包含子标签的情况
顺序问题:
(A,B,C,D): 按顺序依次出现
(A|B|C|D): 任意出现一个(枚举式出现)
数量问题:
A: 必须出现1次
A*: 可以出现0或多次
A+:可以出现1或多次
A?: 可以出现0或1次
约束属性
<!ATTLIST元素名称 属性名称 属性类型 默认值>
默认值:属性是否必须填写
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value
属性类型: 约束属性值
CDATA值为字符数据 (character data)
(en1|en2|..)此值是枚举列表中的一个值
ID 值是唯一的
现在有一个DTD的文件,内容如下:
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
根据以上内容可以编写出XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TVSCHEDULE SYSTEM "test.dtd">
<TVSCHEDULE NAME="one"> <!-- #REQUIRED必须出现的属性 -->
<CHANNEL CHAN="001"> <!--因为有“+”表示一个或多个 -->
<BANNER>just do it</BANNER> <!--#PCDATA: 字符串 -->
<DAY> <!--因为有“+”表示一个或多个 -->
<DATE></DATE>
<HOLIDAY>暑假</HOLIDAY> <!-- 二者出现一个 -->
</DAY>
<DAY> <!--因为有“+”表示一个或多个 -->
<DATE></DATE>
<HOLIDAY>暑假</HOLIDAY> <!-- 二者出现一个 -->
</DAY>
</CHANNEL>
<CHANNEL CHAN="002">
<BANNER>just do it</BANNER>
<DAY>
<DATE></DATE>
<HOLIDAY>暑假</HOLIDAY>
<PROGRAMSLOT VTR="v"> <!-- 属性可以选择要或不要 -->
<TIME >2016.7.13</TIME>
<TITLE RATING="r" LANGUAGE="l">今天学习DTD</TITLE> <!-- 属性可以选择要或不要 -->
<DESCRIPTION></DESCRIPTION> <!-- ?为可以出现0次或1次 -->
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>