1、什么是DTD
一种xml约束技术。是一种编写文档,用于约束xml的。
2、声明方式
2.1 外部声明(本地)
<!DOCTYPE 根元素 SYSTEM "文件名">
如 <!DOCTYPE 数 SYSTEM "e:f.dtd">
2.2外部声明(网址)
<!DOCTYPE 文档根节点 PUBLIC "文件名" “dtd文件的url”>
如<!DOCTYPE web PUBLIC "sss" "https:xxx.xxx.xxx">
2.3 内部声明
<!DOCTYPE 根元素 [元素声明]>
3、元素
<!ELEMENT 元素名称 元素类型(内容)>
元素内容: <!ELEMENT 人 (男人,女人)>表示人 有两种内容类型,一个是男人(ELEMENT)一种是女人(ELEMENT)
逗号分隔表示内容出现的顺序是跟声明时候一致的(男人,女人) 就是先男人后女人,如果是|来分隔的话,就是其中一种可能,既可以多个也可以一个
+,*,?设置内容元素出现的次数
+:表示一次或者多次
?:0次或者一次
*:0次或者多次
列子:
<!ELEMENT 人 ((男人,女人)|老人?)|(中国人+,美国人*)>
元素类型:EMPTY 用于定义空元素
ANY 表示元素内容是任意类型
PCDATA 表示任意字符内容
4、属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
4.1 元素名称
对应 ELEMENT中的元素名称,也就是为哪个元素名称设置属性
4.2 属性类型
CDATA | 值为字符数据 (character data) |
(en1|en2|..) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id,属性值就是唯一值,不能重复 |
IDREF | 值为另外一个元素的 id |
IDREFS | 值为其他 id 的列表 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为合法的 XML 名称的列表 |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
NOTATION | 此值是符号的名称 |
xml: | 值是一个预定义的 XML 值 |
4.3 描述
#REQUIRED | 属性值是必需的 |
#IMPLIED | 属性不是必需的 |
#FIXED value | 属性值是固定的 |
4.4属性名称
就是有什么属性
列子:
<!ATTLIST 人
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
帅不 CDATA #FIXED "默认值"
有钱 CDATA "默认值"
技能 (Android|JAVA)"JAVA"
>
4.5 实体
引用实体
<!ENTITY 实体名称 "实体的值">
使用:
&实体名称;
如:<!ENTITY 实体名称 "实体的值">
然后在书写xml的时候就可以直接&web;
参数实体
<!ENTITY % web "ssss">
使用:
%实体名称
列子:
<!ENTITY % web "
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
帅不 CDATA #FIXED "默认值"
有钱 CDATA "默认值"
技能 (Android|JAVA)"JAVA"">
<!ATTLIST 人 %web >
参数实体和引用实体的区别是在于,后者是给xml用的,前者是用于配置xml
引用外部实体
<!ENTITY 实体名称 SYSTEM "URI/URL">
如:
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<author>&writer;</author>
<!DOCTYPE TVSCHEDULE [ <!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 version="1.0" encoding="utf-8" ?>
<!DOCTYPE TVSCHEDULES [
<!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>
]>
<TVSCHEDULES>
<TVSCHEDULE NAME="1111">
<CHANNEL CHAN="asdasd">
<BANNER>
asdasdas
</BANNER>
<DAY >
<DATE>asdasdasd</DATE>
<HOLIDAY>asdasd</HOLIDAY>
</DAY>
</CHANNEL>
</TVSCHEDULE>
</TVSCHEDULES>
<TVSCHEDULES>
<TVSCHEDULE NAME="1111">
<CHANNEL CHAN="asdasd">
<BANNER>
asdasdas
</BANNER>
<DAY >
<DATE>asdasdasd</DATE>
<PROGRAMSLOT>
<TIME>sss</TIME>
<TITLE RATING="asdad" LANGUAGE="adasdasd">sss</TITLE>
<DESCRIPTION>asdasds</DESCRIPTION>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>
</TVSCHEDULES>