目录
DTD(Document Type Definition)
- 定义XML文件的结构
- 为XML文件提供语法与规则
- 内容既可以定义在XML文件中,也可以定义在XML文件之外
- 使用XML进行数据交换的行业或组织可定义自己的DTD
- DTD对于XML是可选的内容
为什么要使用DTD
- 为例正确交换数据,XML文件需要确定的结构
DTD存储类型
- XML内置DTD内容
- 外部DTD
XML内置DTD内容:
<!--XML声明-->
<?xml version="1.0" encoding="utf-8"?>
<!--XML内置DTD内容-->
<!DOCTYOE 书籍列表[
<!ELEMENT 书籍列表(计算机书籍)*>
<!ELEMENT 计算机书籍(书名,价格,简要介绍)> <!--计算机数据目录下由3个元素-->
<!ELEMENT 书名(#PCDATA)> <!--书名下面是内容,没有元素了-->
<!ELEMENT 价格(#PCDATA)>
<!ELEMENT 简要介绍(#PCDATA)>
]>
<!--元素-->
<书籍列表> <!--根元素-->
<计算机书籍> <!--子元素-->
<书名>XML大全</书名>
<价格>20</价格>
<简要介绍>这本书讲解了数据的传输<简要介绍>
</计算机书籍>
</书籍列表>
外部DTD:
- 每个XML文档单独定义的DTD可推广为一个系统内共享的公用DTD
- 关键字SYSTEM用于引用一个作者或组织所编写的众多XML文档中通用的DTD
<!DOCTYPE 实体名称 SYSTEM "URL/URI">
- 另一种外部DTD,一个由权威机构制定的,提供给特定行业或公众使用的DTD,关键字是PUBLIC
<!DOCTYPE 实体名称 PUBLIC "URL/URI">
DTD元素
(空元素、带有任何内容的元素、出现元素的个数、元素出现的顺序)
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称(元素内容)>
例子:
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 计算机书籍(书名,价格,简要介绍)>
DTD属性
(不同的属性类型,来限制属性,属性的默认值)
属性通过ATTLIST来进行声明
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
例子:
DTD文件中
<!ATTLIST payment type CDATA "cash">
XML文件中
<payment type="cash"/>
DTD实体
外部实体声明
DTD文件中:
<!ENTITY 实体名称 SYSTEM “URL/URI”>
XML文件中,得到实体的值
<author>&实体名称;</author>
解决命名冲突
命名空间:
- 在一个XML文档中,包含由多个DTD描述的元素,会出现名称冲突问题
- 为了解决名称冲突问题,W3C的XML小组制定了被称为命名空间(NameSpace)的标准
前缀标识法:
在元素名和属性名前面增加一个标识,以唯一区分当前元素或属性来自哪一个DTD
Schema
- 描述XML结构
- 基于XML的DTD替代者
- 比DTD强大
- 使用XML语法
- 可使用XML编译器来编辑Schema文件
- 可使用XML解析器来解析Schema文件
- Schema可保护数据通信(例如各个国家的时间格式不一样,可以用Schema统一,双方获得相同内容的“期望值”)
- Schema可扩展(在其他的Schema中重复使用你的Schema,在相同的文档中引用多重的Schema)
Schema优势
- 可针对未来的需求进行扩展
- 更完善,功能更强大
- 基于XML编写
- 支持数据类型
格式:
<!--<schema>元素是Schema文件的根元素,可以起其他名字,显示schema中用到的元素和数据类型来自命名空间http://www.w3.org/xmlschema,同时还规定了来自该命名空间的元素和数据类型应该使用前缀xs-->
<schema xmlns:xs="http://www.w3.org/xmlschema">
<xs:elment name="email">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"><.xs:element>
<xs:element name="to" type="xs:string"><.xs:element>
<xs:element name="to" type="xs:string"><.xs:element>
</xs:sequence>
</xs:complexType>
</xs:elment>
</schema>