02Document Type Definition
Document Type Definition
1. Document Type Definition
DTD(Document Type Definition)文件格式定义作用是给予文件一种格(Type)式使用户知道所使用的XML文件需包含哪些标记(Tag)、属性(Attribute)、实体(Entities)
3.1内部DTD文件
ANY元素的声明格式
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT booklist (book+)>
<!ELEMENT book ANY>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
子元素列表的设定
子元素列表的设定语法如下:
<!ELEMENT Element_Name(Child_Element1, Child_Element2,…)>
其中“(Child_Element1, Child_Element2,…)”部分为Element_Name所拥有的子元素列表。
可选择的子元素
<!ELEMENT Emnt_Name(Child_Emnt1|Child_Emnt2|……)>
其中,“(Child_Emnt1|Child_Emnt2|…)”部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。
符号 |
含义 |
+ |
最少一次 |
* |
零次或多次 |
? |
零次或一次 |
| |
子元素列表之一 |
(…) |
将元素列表括起来 |
DTD 属性声明
DTD 属性
简单来讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。
声明格式:
<!ATTLIST Element_name Attribute_name TYPE Default_value>
其中,<!ATTLIST>为关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。
元素内容说明 |
含义 |
CDATA |
属性是字符数据 |
Enumerated |
枚举型数据 |
ENITITY |
在DTD中声明的实体 |
ENITITYES |
在DTD中声明的若干实体,实体间用空格分隔 |
ID |
该属性的值唯一地标识包含其的元素 |
IDREF |
其属性值须映射到XML文件已经存在的ID类型属性 |
IDREFS |
文档中若干个元素的ID属性值 |
NMTOKEN |
任意不含空格的XML名称,但可用数字为名称开头 |
NMTOKENS |
多个XML名称,每个NMTOKEN间以空格分隔 |
NOTATION |
在DTD中声明的记号名 |
属性有4种不同类型的默认值,可在属性声明中的Default_value部分指定。
① default:表示使用提供的默认值,default不是一个关键字,它代表一个预设的字符串。
<!ATTLIST bookinfo bookcat("文艺"|"自然科学")"文艺" >
此例句表示当在XML文档中省略了对bookinfo元素的bookcat属性值进行设定时,该属性的默认值就是“文艺”。
② #REQUIRED:表示属性值必须指定。
③ #IMPLIED:表示元素的这个属性可用可不用。
④ #FIXED:表示元素的这个属性值是一个固定值,且必须是指定的值。
1. CDATA型
CDATA型表明属性值为不包含“<”和“””的任意字符串,如果属性值中需要包含“<”和“””,则可使用特殊字符来代替
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT booklist (book+)>
<!ELEMENT book ANY>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ATTLIST book sales CDATA #REQUIRED >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE booklist SYSTEM "char03-tutorial.dtd">
<booklist>
<book sales="已售出">
<author>Francis Glassborow</author>
<title>You Can Do It!</title>
</book>
<book sales="未售出">
<title>Tom Swan'Code Secrets</title>
<author>Tom Swan</author>
</book>
<book sales="未售出">
<title>Digital Control System</title>
</book>
</booklist>
2. Enumerated型
如果属性值并不是任意的字符串,而是在几个可能的值中进行选择,如书籍的“类别”属性,其值可为“文艺”,也可为“自然科学”,而不可能为其他情况时,则可以将书籍的“类别”属性设定为Enumerated型。
3. ID型
当元素的某个属性值是不能重复时,如书籍的ISBN属性、个人的“身份证号”属性等,要定义这样的属性则需使用属性的ID类型。在一个XML文档中,所有元素的ID类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的属性。
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT booklist (book+)>
<!ELEMENT book ANY>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ATTLIST book id ID #REQUIRED >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE booklist SYSTEM "char03-tutorial.dtd">
<booklist>
<book id="ISBN7-302-2">
<author>Francis Glassborow</author>
<title>You Can Do It!</title>
</book>
<book id="ISBN7-302-3">
<title>Tom Swan'Code Secrets</title>
<author>Tom Swan</author>
</book>
<book id="ISBN7-302-4">
<title>Digital Control System</title>
</book>
</booklist>
4. IDREF与IDREFS型
IDREF为Identifier Reference的缩写,IDREF与ID类型属性的关系为子元素与父元素的关系,即IDREF类型属性的值必须是其他元素的ID类型属性的值,且该ID类型属性的值必须在文档的其他地方被设定过。IDREFS类型属性的属性值可有多个,每一个都必须是在文档其他地方被设定了的ID类型属性的值,而这多个属性值之间用空格隔开。<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT BookOrder (Customer+, book+)>
<!ELEMENT Customer (name*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT book (publishing+)>
<!ELEMENT publishing (#PCDATA)>
<!ATTLIST Customer id IDREF #REQUIRED >
<!ATTLIST book id ID #REQUIRED >
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE BookOrder SYSTEM "IDREF.dtd">
<BookOrder>
<Customer oid="ISBN7-302-07916-2">
<name>Larry</name>
</Customer>
<Customer oid="ISBN0-03-057568-0">
<name>Tom</name>
</Customer>
<book id="ISBN7-302-07916-2">
<publishing>清华大学出版社</publishing>
</book>
<book id="ISBN0-03-057568-0">
<publishing>科学出版社</publishing>
</book>
</BookOrder>
5. ENTITY与ENTITIES型
ENTITY类型的属性提供了把外部二进制形式的文件(如.jpeg、.mp3等)和外部不可解析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的通用实体名。ENTITIES类型属性的属性值可由多个不可解析的外部实体名称组成,各实体名称之间使用空格隔开。
6. NMTOKEN与NMTOKENS型
NMTOKEN类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数字、“.”、 “_”、“-”、“:”等组成,这里有几点需要注意。
(1) 不能包括空格。
(2) 以上字符中除“:”以外,其他字符都可以作为开头字符。
(3) “:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。
7. NOTATION型
XML文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进行处理。
空白属性类型
xml:space是XML中用来设置解析器与应用程序之间处理方法的属性
是枚举类型的属性,有default和preserve两个值
default:表示解析器将空格符传递给应用程序后,由应用程序决定如何处理空格符
preserve:表示解析器将空格符传递给应用程序后,要求应用程序保留这些空格符
语法:
<!ATTLIST 元素名称 xml:space (default|preserve)>
Eg.
<!ATTLIST ele xml:space (default|preserve) “default”>
语系属性类型
Xml:lang属性是用来设置元素中文字的语言信息
语法:
<!ATTLIST 元素名称 xml:lang (en|TW) “en”>
la:拉丁文 en:英文
tw:繁体中文 zh-CN:检体中文
语系的作用:搜索数据时,应用程序可根据这个属性决定是否对元素内的数据进行处理
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book*)>
<!ELEMENT book (title,author,year,price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<bookstore>
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
3.2外部DTD文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT bookstore (book*)>
<!ELEMENT book (title,author,year,price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore SYSTEM "bookstore.dtd">
<bookstore>
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
02Document Type Definition的更多相关文章
- 【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error
在使用Mybatis的过程中,使用了resultMap延迟加载. 延迟加载:association联表查询的过程中,查询另外两个表的对象.而延迟加载是指只有在使用这两个对象的时候才会进行查询. 问题的 ...
- java webservice wsimport 无法将名称 'soapenc:Array' 解析为 'type definition' 组件 时对应的解决方法
(一):代码如下: package com.enso.uploaddata; import org.apache.axis.client.Call; import org.apache.axis.cl ...
- Cannot find type definition file for '.svn'
描述: Ionic项目在执行ionic build --prod过程中,出现如下错误: 看来是.svn文件影响了编译. 解决办法:升级TortoiseSVN版本(https://tortoisesvn ...
- window date type
Most string operations can use the same logic for Unicode and for Windows code pages. The only diffe ...
- input type=file accept中可以限制的文件类型
在上传文件的时候,需要限制指定的文件类型. <input type="file" accept="image/*" /> accept表示可以上传文 ...
- 不一样的go语言-不同的语法之type
前言 在go语言中,type用于类型定义(type definition)与类型别名(type alias).这两者的差别从名字上已经可以初见端倪. 类型定义即定义新类型,是一个全新的类型,但 ...
- input输入框type=file时accept中可以限制的文件类型(转载)
转载自: input type=file accept中可以限制的文件类型 在上传文件的时候,需要限制指定的文件类型. <input type="file" accept=& ...
- Python笔记 #01# Convert Python values into any type
源:DataCamp datacamp 的 DAILY PRACTICE + 日常收集. How much is your $100 worth after 7 years? Guess the t ...
- 上传文件时文件类型限制 <input id="File1" type="file" accept=""/>
在做项目项目中经常需要上传文件,类型也就那几种.虽然在js中加了上传文件类型的限制,但是为了减少因为用户选择不当而造成的反复检验.可以在input标签上加上accept属性.这种限制只是优化了选择文件 ...
随机推荐
- 【转】iOS笔记-自定义控件(OC)
原文网址:http://www.jianshu.com/p/f23862eb7b8a 导读: iOS开发中,很多时候系统提供的控件并不能很好的满足我们的需求,因此,自定义控件便成为搭建UI界面中必不可 ...
- hdu 1284
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 虚拟机C盘扩容
使用 <分区助手> 下载地址:http://115.com/file/belj8wkm
- JSP+MySQL实例
转自:https://www.yiibai.com/jsp/jsp_mysql.html 在本章中,我们将讨论如何使用JSP访问数据库(这里以MySQL数据库为例).并假设您对JDBC应用程序的工作方 ...
- HDU4418:Time travel(高斯消元+期望)
传送门 题意 一个人在数轴上来回走,以pi的概率走i步i∈[1, m],给定n(数轴长度),m,e(终点),s(起点),d(方向),求从s走到e经过的点数期望 分析 设E[x]是人从x走到e经过点数的 ...
- Spring boot下,集成任务调度中心(XXL-JOB)
一.使用背景 目前项目中,采用的是微服务框架,由于在微服务中,存在需要定时的任务.但如果定时任务维护在每个微服务下,当微服务部署多个实例的情况下,会出现定事任务多次执行的情况.并且在解决问题的基础上, ...
- 【POJ - 1458】Common Subsequence(动态规划)
Common Subsequence Descriptions: A subsequence of a given sequence is the given sequence with some e ...
- (博弈论 高精度小数)51NOD 1185 威佐夫游戏 V2
有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...
- logstash | logstash && logstash-input-jdbc 安装
Windows系统: 1.安装Logstash 1.1 进入官网下载zip包 [1] https://artifacts.elastic.co/ ...
- 最短路(Dijkstra) HDOJ 4318 Power transmission
题目传送门 题意:起点s到终点t送电,中途会有损耗,问最小损耗是多少 分析:可以转换为单源最短路问题,用优先队列的Dijkstra版本,d[]表示从s出发到当前点的最小损耗,用res保存剩下的电量.当 ...