1、申明xml
<?xml version=1.0 encoding="UTF-8?>
2、引入外部样式表
<?xml-sheetstyle type="text/css" href="c.css" ?>
3、自定义实体
<!DOCDYPE
ROOT[
<!ENTITY entityName entityValue>
]
>
eg:
<!DOCTYPE root[
<!ENTITY name "tom">
]>
4、编写dtd
DTD的目的:
验证该xml文档是否是有效的xml文档
如果一个良构的xml文档满足了DTD的声明就是一个有效的xml文档。
注意:良构 不一定 有效,但是有效一定良构
DTD对xml文件中元素的约束:
格式:<!ELEMENT 元素名 (内容模式)>
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA|id|name|age)*>
内容模式:
empty
1).EMPTY:元素不能包含子元素和文本(空元素)
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu EMPTY>
xml文件:
<students>
<!--这个stu元素中的内容必须为空-->
<stu></stu>
</students>
2).(#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu (#PCDATA)>
xml文件:
<students>
<stu>tom</stu>
</students>
3).ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu ANY>
xml文件:
<students>
<stu>tom</stu>
</students>
或者
<students>
<stu>
<name>tom</name>
</stu>
</students>
修饰元素内容的
() 用来对元素的内容分组
| 或
+ 1 n
* 0 n
? 1或者0
, 按照顺序
默认修饰符 有且仅有一个
属性约束:
<!ATTLIST 元素名称
属性名称 值类型 属性特点
属性名称 值类型 属性特点
>
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id CDATA #REQUIRED
name CDATA #REQUIRED
>
1、值类型:
1).CDATA:属性值可以是任何字符(包括数字和中文)
2).ID:属性值必须唯一,属性值必须满足xml命名规则
3).IDREF/IDREFS
IDREF属性的值指向文档中其它地方声明的ID类型的值。
IDREFS同IDREF,但是可以具有由空格分开的多个引用。
4).enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
gender (男|女) #REQUIRED
>
2、属性特点:
1).#REQUIRED:元素的所有实例都必须有该属性
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #REQUIRED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
</students>
注意:
1. name属性必须出现
2. name属性的值可以为空也可以不为空
2).#IMPLIED :属性可以不出现
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性的值可以为空也可以不为空
3).default-value:属性可以不出现,并且当它不出现的时候是有默认值的,而该属性的默认值就是atttibute-value
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA "tom"
>
xml文件:
<students>
<stu name="zhangsan"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性如果不出现则默认值为tom
4).#FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
school CDATA #FIXED "briup"
>
xml文件:
<students>
<stu school="briup"></stu>
<stu></stu>
</students>
注意:
1. name/school属性可以出现也可以不出现
2. school属性如果出现那么值一定要是briup
引入外部dtd
<!DOCDYPE root public id url >
<!DOCDYPE root system path>
内部dtd
<!DOCTYPE root[
<!--约束元素 element-->
<!ELEMENT root (test+)>
<!ELEMENT test (id)>
]>
混合dtd
<!DOCTYPE root SYSTEM "../dtd/dtdTest1.dtd"[
<!ELEMENT test (name)>
]>