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和PCDATACDATA 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"> 引用方法 %实体名称; 更多内容请查看点击打开链接 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |