当前位置:网站首页>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种:

  1. 任意类型
    这种元素既可以是字符串,也可以包含其他子元素,还可以是空元素
  2. 字符串值
    这种元素只能是字符串,不能包含其他子元素,也不可以是空元素
  3. 空元素
    这种元素是能是空元素,既不可以包含子元素,也不可以包含字符串值
  4. 包含子元素
    需要详细定义子元素之间的顺序和子元素出现的次数
  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. +: 出现1次或多次
  2. *: 出现0次或多次
  3. ?: 出现0次或一次
  4. 没有指定频率: 只能出现且必须出现一次

组合子元素

使用括号将多个子元素括起来形成元素组,元素组内的各个子元素之间可用英文逗号分隔,以表示元素组之间各元素有序,也可以用数显表示互斥。可以使用表示频率的标记紧跟元素组,用以表示该元素出现的频率。

无序子元素

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

原网站

版权声明
本文为[小代码2016]所创,转载请带上原文链接,感谢
https://khlbat.blog.csdn.net/article/details/88351727