当前位置:网站首页>xml dtd 记录
xml dtd 记录
2022-06-23 05:38:00 【小代码2016】
引入方式
内部DTD
将DTD与XML数据定义放在同一份文档中
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- 内部DTD -->
<!DOCTYPE books[
<!ELEMENT books (book)*>
<!ELEMENT book (name,autor,price,desc)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT desc (#PCDATA)>
]>
<!-- xml 文档 -->
<books>
<book>
<name>java</name>
<autor>laolang</autor>
<price>500</price>
<desc>java 书籍</desc>
</book>
<book>
<name>php</name>
<autor>php</autor>
<price>400</price>
<desc>php 书籍</desc>
</book>
</books>
外部DTD
dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book)*>
<!ELEMENT book (name,autor,price,desc)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT desc (#PCDATA)>
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "one.dtd">
<books>
<book>
<name>java</name>
<autor>laolang</autor>
<price>500</price>
<desc>java 书籍</desc>
</book>
<book>
<name>php</name>
<autor>php</autor>
<price>400</price>
<desc>php 书籍</desc>
</book>
</books>
公用DTD
DTD 文档结构
第 1 行是DTD声明部分,与XML相同
0到多个注释,与XML相同
0到多个<!ELEMENT…>定义,每个<!ELEMENT…>定义一个XML元素
0到多个<!ATTLIST…>定义,每个<!ATTLIST…>为XML元素定义一个属性
0到多个<!ENTITY…>,每个<!ENTITY…>定义一个实体
0到多条<!NOTATION…>定义,每个<!NOTATION…>定义一个符号
这4个元素无须相互嵌套
ELEMENT
<!ELEMENT 元素名 元素类型描述>元素类型描述主要有如下5种:
- 任意类型
这种元素既可以是字符串,也可以包含其他子元素,还可以是空元素 - 字符串值
这种元素只能是字符串,不能包含其他子元素,也不可以是空元素 - 空元素
这种元素是能是空元素,既不可以包含子元素,也不可以包含字符串值 - 包含子元素
需要详细定义子元素之间的顺序和子元素出现的次数 - 混合类型
指定XML元素的值只能是几个确定的类型,混合类型比任意类型的约束更强
任意类型
语法 : <!ELEMENT 元素名 ANY>
例:
DTD
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books ANY>
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "one.dtd">
<books>
books
</books>
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "one.dtd">
<books/>
空元素
语法 : <!ELEMENT 元素名 EMPTY>
例:
DTD
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books EMPTY>
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "one.dtd">
<books/>
字符串
语法 : <!ELEMENT books (#PCDATA)>
例 :
DTD
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (#PCDATA)>
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "one.dtd">
<books>
books
</books>
混合内容
语法:<!ELEMENT 父元素名 (#PCDATA | 子元素1 | 子元素2 | 子元素3 ...)*>
指定了父元素的内容既可以是普通字符串,也可以是各子元素名所指定的子元素。值得指出的是,这里的子元素1、子元素2和子元素三之间的竖线不是表示互斥,而只是表示这些子元素能无序地重复出现,出现多少次不受限制。
dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT games (#PCDATA | game)*>
<!ELEMENT game (#PCDATA | name | type)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT type (#PCDATA)>
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE games SYSTEM "one.dtd">
<games>
游戏和编程是类似的,最是一种兴趣
<game>
<type>动作格斗</type>
<name>侍魂</name>
适合释放紧张的、沉闷的感觉
</game>
<game>
放松、舒缓心情的好游戏
<name>雷电</name>
<type>飞行射击</type>
</game>
<game>
<name>雷电</name>
</game>
<game>
<name>雷电</name>
<name>侍魂</name>
</game>
</games>
子元素
有序的子元素
如果使用英文逗号作为子元素之间的分隔符,则子元素之间必须遵守所定义的顺序
dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT games (game)*>
<!ELEMENT game (name,type)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT type (#PCDATA)>
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE games SYSTEM "one.dtd">
<games>
<game>
<name>侍魂</name>
<type>动作格斗</type>
</game>
<game>
<name>雷电</name>
<type>飞行射击</type>
</game>
</games>
互斥子元素
互斥的子元素表示一系列子元素之间只能出现其中之一。使用竖线分隔
dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT games (game)*>
<!ELEMENT game (name | type)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT type (#PCDATA)>
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE games SYSTEM "one.dtd">
<games>
<game>
<name>侍魂</name>
</game>
<game>
<type>飞行射击</type>
</game>
</games>
子元素频率
- +: 出现1次或多次
- *: 出现0次或多次
- ?: 出现0次或一次
- 没有指定频率: 只能出现且必须出现一次
组合子元素
使用括号将多个子元素括起来形成元素组,元素组内的各个子元素之间可用英文逗号分隔,以表示元素组之间各元素有序,也可以用数显表示互斥。可以使用表示频率的标记紧跟元素组,用以表示该元素出现的频率。
无序子元素
dtd没有专门定义无序子元素,不过可以借助元素组来实现
<!ELEMENT games (game)*>
<!ELEMENT game(name|autor|price|type)+>
<ELEMENT name (#PCDATA)>
<ELEMENT autor (#PCDATA)>
<ELEMENT price (#PCDATA)>
<ELEMENT type (#PCDATA)>
定义属性
<!ATTLIST 属性所属的元素 属性名 属性类型 [元素对属性的约束] [默认值]>
在没有指定“元素对属性的约束”时,必须为该属性指定默认值
当“元素对属性的约束”是 #REQUIRED时,不能指定默认值
当“元素对属性的约束”是 #IMPLIED时,不能指定默认值
当“元素对属性的约束”是 #FIXED时,必须指定默认值
#REQUIRED : 必须
#IMPLIED : 可有可无
#FIXED : 固定属性
属性类型
实体
符号
done
边栏推荐
- Machine learning artifact scikit learn minimalist tutorial
- English语法_形容词比较级 - 3级变化
- 解读创客教育中的团结协作精神
- Laravel log channel 分组配置
- 坐标 转化
- Kubesphere offline deployment without network environment
- js创建数组(元素都是对象)
- Link of Baidu URL parameter? Research on URL parameter encryption and decryption (code example)
- Shutter style
- 如何查看本机IP
猜你喜欢

业务逻辑安全思路总结

Explain csma/cd, token bus and token ring clearly

二叉树的遍历及相关知识

索引——MySQL

解读创客教育中的团结协作精神

Understand how learning JSX works

Sword finger offer 42 Maximum sum of successive subarrays

Sklearn classification in sklearn_ Report & accuracy / recall /f1 value

Index - MySQL

记一次GLIB2.14升级GLIB2.18的记录以及其中的步骤原理
随机推荐
Usage Summary of item views and item widgets controls in QT
Functions and basic structure of CPU
C language obtains second, millisecond, subtle and nanosecond timestamps
Home address exchange
Open source ecology 𞓜 super practical open source license basic knowledge literacy post (Part 2)
1161 Merging Linked Lists
C Advanced Learning -- Reflection
Phpstudy set 301 redirection
English语法_副词 - ever / once
解读创客教育中的团结协作精神
phpStudy设置301重定向
30 data visualization tips that can not be ignored
There are so many code comments! I laughed
2020 smart power plant industry insight white paper
2.17 haas506 2.0开发教程-system(仅支持2.2以上版本)
云盒子联合深信服,为南京一中打造智慧双模教学资源分享平台
索引——MySQL
Set tensorflow1 X to pytorch
2.17 haas506 2.0 development tutorial system (only versions above 2.2 are supported)
从 WAN 到 SD-WAN 边缘设备的网络架构