加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML - DTD

发布时间:2020-12-16 05:16:46 所属栏目:百科 来源:网络整理
导读:DTD简述 全称 Document type Definition 文档类型定义DTD作用DTD是XML的一部分,描述XML文档结构,效验XML文档格式是否正确DTD文档包含元素的定义规则元素之间的关系属性的定义规则可使用的实体或者符号规则DTD与XML的关系DTD是抽象的,XML是具体的一个DTD可以

DTD简述

全称 Document type Definition 文档类型定义
DTD作用
	DTD是XML的一部分,描述XML文档结构,效验XML文档格式是否正确
DTD文档包含
	元素的定义规则
	元素之间的关系
	属性的定义规则
	可使用的实体或者符号规则
DTD与XML的关系
	DTD是抽象的,XML是具体的
	一个DTD可以生成多个XML,就像一个类可以生成多个对象
DTD局限性
	不能扩展
	不支持命名空间
	只提供了有限的数据类型,用户无法自定义类型
	不使用XML语法(写XML文档实例的时候用一种语法,写DTD用另一种语法)

CDATA和PCDATA

CDATA
	character data 字符数据
	使用在属性上面,表示属性的值是一般的字符串
PCDATA
	parsed character data 被解析的字符数据
	使用在元素上面,表示元素中间的内容是普通的字符串

声明元素

<!ELEMENT 元素名称 元素类型>
元素类型可取值
	EMPTY:不能包含子元素和文本,但可以有属性(空元素)
		示例:<!ELEMENT people EMPTY>
	ANY:该元素包含DTD中定义的任何元素内容  
		示例:<!ELEMENT book ANY>  
		需要注意的是将根元素设置为ANY类型后,元素出现的次数和顺序不受限制  
	#PCDATA:只能是普通字符串,不能包括子元素  
	   	示例:<!ELEMENT name (#PCDATA)>
	带有子元素(序列)的元素
	    示例:<!ELEMENT book (name,author,price)>

XML引用DTD两种方式

外部引用
	book.dtd
		<?xml version="1.0" encoding="UTF-8"?>
		<!ELEMENT book (name,price)>
		<!ELEMENT name		(#PCDATA)>
		<!ELEMENT author	(#PCDATA)>
		<!ELEMENT price		(#PCDATA)>
	book.xml
		<?xml version="1.0" encoding="UTF-8"?>  
		<!DOCTYPE book SYSTEM "book.dtd">  
		<book>  
		    <name>Java</name>  
		    <author>John</author>  
		    <price>99</price>  
		</book>
内部引用
 	book.xml
 		<?xml version="1.0" encoding="UTF-8"?>  
		<!DOCTYPE book [
			<!ELEMENT book (name,price)>
			<!ELEMENT name		(#PCDATA)>
			<!ELEMENT author	(#PCDATA)>
			<!ELEMENT price		(#PCDATA)>
		]>
		<book>  
		    <name>Java</name>  
		    <author>John</author>  
		    <price>99</price>  
		</book>

DTD修饰符号

()	来用给元素分组 
 	示例:(古龙|金庸),毛毛
|   多个选择一个
  	示例:(古龙|金庸),毛毛,必须按照指定顺序出现
  	示例:(古龙|金庸),毛毛
声明只出现1次的元素:  
    示例:<!ELEMENT book (name)>  
声明出现大于等于1次的元素:  
    示例:<!ELEMENT book (name+)>  
声明出现0或多次的元素:  
    示例:<!ELEMENT book (name*)>  
声明出现0或1次的元素:  
    示例:<!ELEMENT book (name?)> 

DTD属性

<!ATTLIST 元素名称 属性名称 属性类型 属性特点>  
   	示例:<!ATTLIST name width CDATA "20">
属性类型的选项
	CDATA:属性值可以是任何字符(包括数字和中文)
		示例:<!ATTLIST name width CDATA "20">
    NMTOKEN/NMTOKENS都是CDATA的子集  
        NMTOKEN表示属性值不能是含有空格
       		示例:<!ATTLIST name width NMTOKEN #REOUIRED>  
        NMTOKENS表示属性值允许有空格  
			示例:<!ATTLIST name width NMTOKENS #REOUIRED>  
    ID:表示该属性的取值必须是唯一的  
       	示例:<!ELEMENT 公司职员 ANY>  
        	<!ATTLIST 公司职员 编号 ID #REOUIRED 姓名 CDATA #REOUIRED>
			正确  
	         	<公司职员 编号="Z001" 姓名="张三">  
	            <公司职员 编号="Z002" 姓名="张三">  
	      	错误  
	            <公司职员 编号="Z001" 姓名="张三">  
	            <公司职员 编号="Z001" 姓名="张三">
    IDREF/IDREFS  
        IDREF属性的值指向文档中其他地方声明的ID类型的值  
        IDREFS同IDREF,但可以具有由空格分开的多个引用  
    Enumerated:事先定义好的一些值,属性的值必须在所列出的值中一个
		示例:<!ATTLIST name sex (boy|girl) #REOUIRED>
属性特点的选项  
    #REQUIRED       属性值是必需的  
    #IMPLIED        属性不是必需的  
    #FIXED value    属性值是固定的  
    Default value   属性值的默认值  
    #REQUIRED  
		示例:<!ATTLIST name width CDATA #REQUIRED>  
		标签name的width属性必须有  
    #IMPLIED  
		示例:<!ATTLIST name width CDATA #IMPLIED>  
		标签name的width属性有没有都可以  
    #FIXED  
		示例:<!ATTLIST name width CDATA #FIXED "20">  
		标签name的width属性值是固定的20,不等于20就是非法的
案例  
    book.dtd  
        <?xml version="1.0" encoding="UTF-8"?>  
        <!ELEMENT book (name,price)>  
		<!ELEMENT name       (#PCDATA)>  
		<!ATTLIST name id CDATA #REQUIRED>  
		<!ELEMENT author (#PCDATA)>  
		<!ATTLIST author name CDATA #IMPLIED>   
		<!ELEMENT price      (#PCDATA)>  
		<!ATTLIST price width CDATA #FIXED "20">   
    book.xml          
        <?xml version="1.0" encoding="UTF-8"?>  
        <!DOCTYPE book SYSTEM "book.dtd">  
        <book>  
            <!-- name元素id属性是必须的 -->  
            <name id="name">Java</name>  
            <!-- author元素name属性是可有可无 -->  
            <author name="author">John</author>  
            <!-- price元素width属性的值只能等于20 -->  
            <price width="20">99</price>  
        </book>

DTD实体

实体相当一个变量,引用已经定义好的值
内部语法
	语法
		<!ENTITY 实体名 "实体值">
	DTD示例
		<!ENTITY writer "writerContent">
		<!ENTITY copyright "copyrightContent">
	XML示例
		<author>&writer;?right;</author>
外部声明
	语法
		<!ENTITY 实体名称 SYSTEM "URI/URL">
	DTD示例
		<!ENTITY copyright SYSTEM "http://www.baidu.com">
	XML示例
		<author>?right;</author>
实体类型分类
	普通实体
		使用场合
			用在XML文档中
		内部声明方式
			<!ENTITY 实体名 "实体值">
		外部声明方式
			<!ENTITY 实体名称 SYSTEM "URI/URL">
		引用方法
			&实体名称;
	参数实体
		使用场合
			用在DTD中元素和属性声明中
		内部声明方式
			<!ENTITY %实体名 "实体值">
		外部声明方式
			<!ENTITY %实体名称 SYSTEM "URI/URL">
		引用方法
			%实体名称;

更多内容请查看

点击打开链接

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读