用DTD约束XML详解及示例
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
dtd的三种引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
(2)使用内部的dtd文件
<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
(3)使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
例如 struts2 框架配置文件 使用 外部的dtd文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
使用dtd定义元素
简单元素:没有子元素的元素 <!ELEMENT 元素名 约束> 如:<!ELEMENT name (#PCDATA)>
约束: (#PCDATA): 约束name是字符串类型
EMPTY : 元素为空(没有内容)
ANY:任意类型
复杂元素:有子元素的元素 <!ELEMENT 元素名称 (子元素)> 如:<!ELEMENT person (name+,age?,sex*,school)>
子元素后面的符号表示子元素出现的次数 + :表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次
无 :子元素只能出现一次
子元素直接使用逗号进行隔开 ,表示元素出现的顺序
子元素直接使用|隔开,表示元素只能出现其中的任意一个
使用dtd定义属性
语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
属性类型:CDATA: 字符串 如:<!ATTLIST birthday ATT CDATA #REQUIRED>
枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个 。如<!ATTLIST age ATT2 (AA|BB|CC) #REQUIRED>
ID: 值只能是字母或者下划线开头 <!ATTLIST name ATT3 ID #REQUIRED>
属性的约束: #REQUIRED:属性必须存在
#IMPLIED:属性可有可无
#FIXED: 表示一个固定值 <!ATTLIST sex ATT4 CDATA #FIXED "ABC">
直接值:不写属性,使用直接值,写了属性,使用设置那个值 <!ATTLIST school ATT5 CDATA "WWW">
实体的定义
语法: <!ENTITY 实体名称 "实体的值"> 如:<!ENTITY TEST "HAHAHEHE">
使用实体: &实体名称; 比如 &TEST;(注:定义实体需要写在内部dtd里面,如果写在外部的dtd里面,有某些浏览器下,内容得不到)
实例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name+,age?,sex*,school,birthday)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name ATT ID #REQUIRED >
<!ELEMENT age (#PCDATA)>
<!ATTLIST age ATT2 (AA|BB|CC) #REQUIRED >
<!ELEMENT sex (#PCDATA)>
<!ATTLIST sex ATT4 CDATA #FIXED "ABC" >
<!ELEMENT school (#PCDATA)>
<!ATTLIST school ATT5 CDATA "WWW">
<!ELEMENT birthday (#PCDATA)>
<!ATTLIST birthday ATT1 CDATA #IMPLIED >
<!ENTITY TEST "HAHAHEHE">
]>
<person>
<name ATT="A1">&TEST;</name>
<age ATT2="CC">20</age>
<sex ATT4="ABC">111</sex>
<school>1111</school>
<birthday>2015</birthday>
</person>
显示结果:
aaarticlea/png;base64,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" alt="" />
用DTD约束XML详解及示例的更多相关文章
- Ant 之bulid.xml详解
ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...
- logback的使用和logback.xml详解,在Spring项目中使用log打印日志
logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分 ...
- 转载 logback的使用和logback.xml详解 http://www.cnblogs.com/warking/p/5710303.html
logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前 ...
- Web.xml详解(转)
这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一. Web.xml详解: (一) web.xml加载过程(步骤) 首 ...
- build.xml详解
build.xml详解1.<project>标签每个构建文件对应一个项目.<project>标签时构建文件的根标签.它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如 ...
- C#中的Linq to Xml详解
这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...
- Tomcat配置(二):tomcat配置文件server.xml详解和部署简介
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Tomcat(二):tomcat配置文件server.xml详解和部署简介
Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...
- Ant之build.xml详解
Ant之build.xml详解 关键字: ant build.xml Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译 ...
随机推荐
- 【转】不得不看的两次从C++回归C的高手评论C++
不得不看的两次从C++回归C的高手评论C++ Linux之父炮轰C++:糟糕程序员的垃圾语言 Linux之父话糙理不糙 不得不看的两次从C++回归C的高手评论C++ C语言是否该扔进垃圾桶 为什么每个 ...
- Ubuntu无法关机解决办法
说明:如果不成功请参考一下文章最后的内容,也许会有帮助. 其实不止在ubuntu里面,fedora里面我也遇到了这个问题,就是电脑可以重启,但是不能直接关机,否则就一直停在关机界面,需手动关机.郁闷很 ...
- 最长不下降子序列(LIS)
最长上升子序列.最长不下降子序列,解法差不多,就一点等于不等于的差别,我这里说最长不下降子序列的. 有两种解法. 一种是DP,很容易想到,就这样: REP(i,n) { f[i]=; FOR(j,,i ...
- 教你安装漂亮的Arc GTK主题
导读 近日,我们又发现了一款深受 Linux 用户喜爱的桌面主题 — Arc GTK,Arc GTK 主题已被很多 GNU/Linux 操作系统支持和采用,其中就包括即将到来的 Linux Mint ...
- bitbucket新建分支
/workspace/ott_app_store:fetch-xml$ git branch edit_package_page /workspace/ott_app_store:fetch-xml$ ...
- 入侵检测课设之Libnids开发包
Libnids开发包介绍 Libnids是一个用于网络入侵检测开发的专业编程接口,它使用了Libpcap所以它具有捕获数据包的功能.同时,Libnids提供了TCP数据流重组功能,所以对于分析 ...
- 转SISD、MIMD、SIMD、MISD计算机的体系结构的Flynn分类法
1. 计算平台介绍 Flynn于1972年提出了计算平台的Flynn分类法,主要根据指令流和数据流来分类,共分为四种类型的计算平台,如下图所示: 单指令流单数据流机器(SISD) SISD机器是一种传 ...
- PHP很有用的一个函数ignore_user_abort ()
PHP很有用的一个函数ignore_user_abort () 2013-01-16 14:21:31| 分类: PHP | 标签:php 函数 |举报|字号 订阅 ignore_us ...
- 用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面
现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动. 微信浏览器中打开网页游戏效果还不错,对 ...
- .Net Attribute特性
1.什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标 ...