标记语言: 用文字做标记,表达一些内容效果,携带一些数据
DTD(Document Type Definition)
1.定义了XML文件的结构,为XML文件提供语法规则
2.既可以定义在XML文件内,也可以定义在XML文件外
3.使用XML进行数据交换的行业或组织可以定义自己的DTD
4.DTD对XML是可选的内容
使用DTD原因
为了正确的交换数据,XML文件需要确定的结构
DTD的2种使用方式
XML内置DTD内容
DTD内容放到XML外部(专用)
单独写一个dtd文件,单独把规则拿出来
DTD内容放到XML外部(公用):有权威机构制定,提供给特定行业或公众使用的DTD。关键字public
XML文件构成:元素,属性,实体,PCDATA(文本内容),CDATA(原样输出内容)
元素声明: <!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 元素内容>
元素(文本内容)
元素(其他子元素)
空元素声明:<!ELEMENT 元素名称 EMPTY>
DTD中:<!ELEMENT br EMPTY>
XML中:<br/>
带有任务内容的元素声明:<!ELEMENT 元素名称 ANY>
DTD中:<!ELEMENT student ANY>
XML中:<student>赵芬<student/> 带有文本内容
<student><name>赵芬</name></student> 包含子元素
元素中子元素的个数:
只出现一次:
<!ELEMENT 元素名称 (子元素名称)>
例如:<!ELEMENT 书籍列表 (计算机书籍)>
最少出现一次:
<!ELEMENT 元素名称 (子元素名称+)>
例如:<!ELEMENT 书籍列表 (计算机书籍+)>
声明出现零次或多次的元素:
<!ELEMENT 元素名称 (子元素名称*)>
例如:<!ELEMENT 书籍列表 (计算机书籍*)>
声明出现零次或一次的元素:
<!ELEMENT 元素名称 (子元素名称?)>
例如:<!ELEMENT 书籍列表 (计算机书籍?)>
声明或:
<!ELEMENT 元素名称 (子元素名称|子元素名称)>
例如:<!ELEMENT 书籍列表 (计算机书籍|文学书籍)>
声明混合型:
<!ELEMENT 子元素名称 (#PCDATA|子元素名称)*>
例如:<!ELEMENT 书籍列表 (#PCDATA|计算机书籍)*>
子元素要求顺序:
DTD: <!ELEMENT 计算机书籍(书名, 价格)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
XML:
<书籍列表>
<计算机书籍>
<书名>J2SE书</书名>
<价格>100</价格>
</计算机书籍>
</书籍列表>
子元素不要求顺序:
DTD: <!ELEMENT 计算机书籍(书名| 价格)*>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
XML:
<书籍列表>
<计算机书籍>
<书名>J2SE书</书名>
<价格>100</价格>
</计算机书籍>
</书籍列表>
重复元素:
DTD: <!ELEMENT 计算机书籍(书名| 作者+)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
XML:
<书籍列表>
<计算机书籍>
<书名>J2SE书</书名>
<作者>赵芬</作者>
<作者>田佳琪</作者>
</计算机书籍>
</书籍列表>
成组元素:
DTD: <!ELEMENT 计算机书籍(书名| 价格)+>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
XML:
<书籍列表>
<计算机书籍>
<书名>J2SE书</书名>
<价格>100</价格>
<书名>XML书</书名>
<价格>50</价格>
</计算机书籍>
</书籍列表>
XML文件构成:属性(ATTLIST)声明
语法:<!ATTLIST 元素名称 属性名称 属性类型 默认值>
DTD:<!ATTLIST paymetnt type CDATA ""cash">
XML:<payment type="cash"/>
<payment />
属性的类型
属性值
属性默认值例子:
DTD:<!ELEMENT payment EMPTY>
<!ATTLIST payment type CDATA "cash">
XML:<payment type="check"/>
属性不是必须默认值例子:
<!ATTLIST 元素名称 属性名称 属性类型 #IMPLIED>DTD: <!ATTLIST payment type CDATA #IMPLIED>
XML: <payment type="cash"/>
<payment/>
属性必须为默认值例子:
<!ATTLIST 元素名称 属性名称 属性类型 #REQUIRED>DTD: <!ATTLIST payment type CDATA #REQUIRED>
XML: <payment type="cash"/>
DTD实体
内部实体声明:<!ENTITY 实体名称 "实体的值">
DTD:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright jobedu,com,cn">
XML:
<author>&writer;©right;</quthor>
内部实体声明:<!ENTITY 实体名称 SYSTEM "URI/URL">
DTD:
<!ENTITY writer SYSTEM "http://www.jobedu.com.cn/dtd/person.dtd">
XML:
<author>&writer;</quthor>
在一个xml文件中使用多个DTD文件,不同DTD文件中元素冲突,解决方法:命名空间
采用前缀标识发,在元素名和属性名前面增加一个标识,区分当前元素来自于那个DTD
浏览器是无法检测xml是否符合了DTD规则的。Java代码实现对xml文件的验证,是否符合DTD规则
Schema比DTD
Schema是DTD的plus替代者,用来描述XML文档的结构,被称为XML Schema Definition(XSD)
Schema使用xml语法,使用xml编写Schema不用学习新的语言,可以用XML编辑器解析器来编辑解析Schema文件
Schema作用:
1.保护数据通信
2.Schema可以扩展(在其他Schema里使用)