用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这个命令.当编译 ...
随机推荐
- ios开发 网络编程浅析(一)
iphone包含了很多框架和库,从底层的套接字到不同层次的封装,可以方便地给程序添加网络功能. (1)BSD套接字.最底层的套接字,这是Unix网络开发常用的API.如果从其他系统移植程序,而程序用的 ...
- PHP5.3中关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
转自:http://www.htmer.com/article/716.htm 最近在PHP官网上看到又有新版的PHP下载了,于是上去找找For Windows的版本,可是一看确傻眼了,一共给了四个版 ...
- 微信公众号"赞赏"功能来了 觉得不错就给作者打个赏吧
微信很早以前就开始测试“赞赏”功能了,只是官方还没出公告,近日腾讯科技就发了一篇题为 试试给微信公众号“赞赏” 的文章,算是一个回应吧.微信打赏功能势在遏制公众账号抄袭,鼓励用户创造优质内容,内容付费 ...
- editplus快捷键大全其他editplus快捷键
editplus快捷键大全其他editplus快捷键,更多快捷键请参考以下文章:editplus快捷键大全之editplus搜索快捷键 editplus快捷键大全之editplus编辑快捷键 edit ...
- java笔记--关于克隆技术
关于克隆 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884817.html"谢谢-- 1.假克隆 如: ObjectA ...
- Android的webview加载本地html、本apk内html和远程URL
//打开本包内asset目录下的index.html文件 wView.loadUrl(" file:///android_asset/index.html "); //打开本地sd ...
- Lucene4.3开发之分词器总结
Lucene4.3开发之分词器总结 http://java.chinaitlab.com/tools/940011.html
- 将mysql的查询结果导出为csv
要将mysql的查询结果导出为csv,一般会使用php连接mysql执行查询,将返回的查询结果使用php生成csv格式再导出. 但这样比较麻烦,需要服务器安装php才可以实现. 直接使用mysql导出 ...
- [ruby on rails] 跟我学之(9)删除数据
首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...
- 二模Day2题解
小明搬家 题目描述 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运过程效率太 ...