XML DTD详解(转)
前情提要与本文内容介绍
前面的两篇XML相关博文:
第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节
第二篇介绍DTD,引入有效的XML的概念(符合语法规范并符合DTD要求),并介绍DTD的三种使用方法:有效的XML: DTD(文档类型定义)介绍与三种使用方式
一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集。
本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义。
元素的定义

DTD中的修饰符号:

这部分符号可以联系正则表达式的符号来记忆。
属性的定义

属性类型——CDATA
比如:
<!ATTLIST title name CDATA #REQUIRED>
定义了一个属性,是属于title元素的,属性名叫name,类型是字符串(包括数字和中文),并且是一个必须要有的属性。
属性类型——NMTOKEN/NMTOKENS

左边图中因为加了空格而出错。
属性类型——ID
类型为ID的属性取值必须是唯一的。

从这个例子还可以看到同一个元素可以一次定义多个属性,多个属性之间用空格分隔即可。
属性类型——IDREF/IDREFS

(“儿子”后面漏掉了一个斜线)
属性类型——Enumerated
实现定义好一些值,属性的值必须在所列出的值的范围内。

属性的特点
#REQUIRED
元素的所有实例都必须有该属性的值(NOT NULL)。
语法:
<!ATTLIST 元素名 属性名 属性类型 #REQUIRED>
DTD示例:
<!ATTLIST person number CDATA #REQUIRED>
XML示例:
<person number="6788"/>
#IMPLIED
元素的实例中可以忽略该属性(NULL)。
语法:
<!ATTLIST 元素名 属性名 属性类型 #IMPLIED>
DTD示例:
<!ATTLIST contact fax CDATA #IMPLIED>
XML示例:
<contact fax="888-228833"/>
没有这个属性也是对的。
#FIXED value
元素实例中该属性的值必须为指定的固定值。
语法:
<!ATTLIST 元素名 属性名 属性类型 #FIXED "value">
DTD示例:
<!ATTLIST sender company CDATA #FIXED "Microsoft">
XML示例:
<sender company="Microsoft"/>
Default value
为属性提供一个默认的值。
语法:
<!ATTLIST 元素名 属性名 属性类型 "value">
DTD示例:
<!ATTLIST hello paymenttype CDATA "check">
XML示例:
<hello paymenttype="check"/>
定义实体
一般
语法:
<!ENTITY 实体名 "实体值">
DTD示例:
<!ENTITY writer "Donald Duck"> <!ENTITY copyright "Copyright W3Schools">
XML示例:
<author>&writer;©right;</author>
外部实体:
语法:
<!ENTITY 实体名 SYSTEM "URI/URL">
DTD示例:
<!ENTITY writer SYSTEM "http://www.baidu.com/index.php?tn=coralqq"> <!ENTITY copyright SYSTEM "http://www.baidu.com/index.php?tn=coralqq">
XML示例:
<author>&writer;©right;</author>
与上面的区别就是加上了SYSTEM关键字。
这样就不是使用网址的字符串来代替,而是用网址的文档本身内容。
实体类型

前面所讲的都是普通实体,分为内部实体和外部实体。
所谓参数实体,该实体实际上不是在具体实例化文档中使用,而是在DTD文档内部被使用。
我们可以定义一个实体,然后在DTD内部来引用它。
如下:
<!ENTITY %地址 "街道,城市,邮编,国家"> <!ELEMENT 联系人 (人名,电话,%地址;)>
总结如下:
普通实体:DTD中定义,XML中使用,使用格式: &名;
参数实体:DTD中定义,定义的时候要用%,DTD中使用,使用格式: %名;
普通实体和参数实体都分为内部实体和外部实体两种,外部实体定义需要加上SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。
如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。
XML DTD详解(转)的更多相关文章
- XML DTD详解
XML DTD详解 一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集. 本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义. 元素 ...
- sqlMapConfig.xml配置文件详解
sqlMapConfig.xml配置文件详解: Xml代码 Xml代码 <? xml version="1.0" encoding="UTF-8" ?& ...
- XML文件详解以及解析
转自:https://blog.csdn.net/com_ma/article/details/73277535 一.xml基础详解: 1.概述: xml:即可扩展标记语言,xml是互联网数据传输的重 ...
- web.xml 文件详解
目录 1. web.xml各版本区别 2. web.xml配置详解 2.1 java web项目启动加载顺序 2.2 web.xml中定义的元素 web.xml文件是Java Web项目中的一个配置文 ...
- testNG xml文件详解
网上看到一篇整理的非常详细的xml文件详解,分享一下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 < ...
- Web.xml配置详解(转)
Web.xml配置详解 Posted on 2010-09-02 14:09 chinaifne 阅读(295105) 评论(16) 编辑 收藏 1 定义头和根元素 部署描述符文件就像所有XML文件一 ...
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...
- Java web.xml 配置详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- java web.xml配置详解
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
随机推荐
- git tag使用
#git tag command git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] ...
- tomcat 重启进程
查看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是 ...
- 采用jqueryUI创建日期选择器
该公司的项目使用的插件时间选择,百度很长一段时间.没有找到合适的,而且,他们在看了jqueryUI.自己变成一个更好的集成日期选择器.为了以后遇到相同的问题是可以解决. 以下就贴出部分使用的代码,比較 ...
- iOS:编译错误 linker command failed with exit code 1 (use -v to see invocation)
将project不加入.m要求加入 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzI0MzQ2OQ==/font/5a6L5L2T/fontsi ...
- [LeetCode]Word Ladder 最短距离字符串转换 (Dijkstra)
要求最短距离.采纳dijkstra查找节点之间的最短路径. 当心:假设是一个枚举字典22是否元素可以,如果转换,暂停. 提高:每串,带您历数它的字符值事件,对于的长度n一个字符串枚举n*26次要. 设 ...
- 利用Sails.js+MongoDB开发博客系统
http://yoyoyohamapi.me/categories/利用Sails-js-MongoDB开发博客系统/ 利用Sails.js+MongoDB开发博客系统 Apr 14, 2016 利用 ...
- 分布式搜索elasticsearch 文献检索索引 入门
1.首先,例如,下面的数据被提交给ES该指数 {"number":32768,"singer":"杨坤","size": ...
- Spark SQL 源代码分析系列
从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...
- Spark 1.0.0版本发布
前言 如今Spark终于迈出了里程碑一步,1.0.0标记的版本号出版物Spark1.0时代.1.0.0版本号不仅增加了非常多新特性.而且提供了更好的API支持.Spark SQL作为一个新的组件增加. ...
- T4模板合并js
使用T4模板合并js文件 不知道该怎么表达,或许直接贴图贴代码更好 前因:在第一个使用angularjs的项目中我将所有的controller写到一个文件里面,深知维护起来那滋味,所以再次使用angu ...