一、简单的dtd文件
1.代码
dtd文件:
<!ELEMENT person (name, age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "./demo1.dtd">
<person>
<name>zhangsan</name>
<age>18</age>
</person>
2.内容说明
- 标签(元素)
-
复杂元素:有子标签的元素,例如
<!ELEMENT 标签名称 (子标签)>person
-
简单元素:无子标签的元素,例如:
<!ELEMENT 标签名称 约束>name
,age
-
- xml中引入dtd文件
语法:<!DOCTYPE 根标签名称 SYSTEM “dtd文件的路径”>
注
:
- dtd文件可以写在xml文件内部:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<person>
<name>zhangsan</name>
<age>18</age>
</person>
- xml文件中子标签顺序要严格按照dtd中规定的写。
<!ELEMENT person (name,age)> <!-- name标签在age前面 -->
3.将,
改为|
时,标签只能出现其中一个。
<!ELEMENT person (name|age)> <!-- person的子标签只能存在name或者age -->
二、定义标签
- 简单标签:<!ELEMENT name (#PCDATA)>
- 语法:<!ELEMENT 标签名称 约束>
- 约束,如下表格:
约束 | 含义 |
---|---|
(#PCDATA) | <name>内容</name>,内容是字符数据 |
EMPTY | <name></name>,不存在内容 |
ANY | <name>内容</name>,可以存在内容 |
- 复杂标签:<!ELEMENT person (name,age)>
如上示例,name,age标签均只能出现一次,但子表签出现次数可以设置,如下:
符号 | 次数 |
---|---|
? | 出现零次或一次(<!ELEMENT person (name?,age)>) |
+ | 出现一次或多次(<!ELEMENT person (name+,age)>) |
* | 出现零次或多次(<!ELEMENT person (name*,age)>) |
三、定义标签属性
1.语法
<!ATTLIST 标签名 属性名 属性类型 约束>2.属性类型
属性类型 | 含义 | 示例 |
---|---|---|
CDATA | 属性值为字符串 | <!ATTLIST name id CDATA 约束> |
枚举 | 属性值为枚举范围中的一个 | <!ATTLIST name id (a|b|c) 约束> |
ID | 属性值只能是字母 或下划线 开头 | <!ATTLIST name id ID 约束> |
3.属性约束
属性约束 | 含义 | 示例 |
---|---|---|
#REQUIRED | 必须存在属性 | <!ATTLIST name id 属性类型 #REQUIRED> |
#IMPLIED | 可以存在属性 | <!ATTLIST name id 属性类型 #IMPLIED> |
#FIXED | 属性值固定,无法更改 | <!ATTLIST name id 属性类型 #FIXED "AAA"> |
属性值 | 默认属性值,如果未设置,则使用默认值 | <!ATTLIST name id 属性类型 "AAA"> |
四、实体
内部实体
- 语法:<!ENTITY 实体名称 "实体的值">
- 示例:
<!-- dtd中定义实体 -->
<!DOCTYPE person [
<!ELEMENT person (name, age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ENTITY entity "abc">
]>
<!-- 在xml中引用实体 -->
<person>
<name>&entity;</name>
<age >18</age>
</person>
注
:实体写在内部dtd中,写在外部可能浏览器获取不到。