用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这个命令.当编译 ...
随机推荐
- jquery json ajax
当html中用script包含了不在同一个目录下的js外部文件(主要是为了通用代码的重用)时,这个js文件的 内容就如同在当前html文件中了,写jquery的时候不用考虑路径问题,可以直接引用htm ...
- 模板插件aTpl
摘要: 前面给大家分享了一款js模板插件,后来经过完善推荐给大家.该插件支持ie5+,chrome等浏览器以及移动端浏览器,支持for和if语法,以及表达式. 项目地址:https://github. ...
- 小白科普之JavaScript的BOM模型
一.什么是BOM 1. BOM是browser object model的缩写,简称浏览器对象模型: 2. BOM提供了独立于内容而与浏览器窗口进行交互的对象,描述了与浏览器进行交互的方法和接口: 3 ...
- Fifth scrum meeting - 2015/10/30
概述 从昨天开始,我们的开发工作终于进入了正轨,由于之前没有mooc服务器API接口,一些工作无法进行. 因为我们团队开始开发较晚,因此我们将开发阶段的截至时间定为了下周五,测试阶段则压缩为下周周六和 ...
- Coursera台大机器学习课程笔记13 -- Regularization
这一节讲的是正则化,在优化中一直会用到正则化项,上课的时候老师一句话代过,没有作过多的解释.听完这节课后, 才明白好大学和野鸡大学的区别有多大.总之,这是很有收获的一节课. 首先介绍了为什么要正则化, ...
- 搭建自己的ngrok服务
转载:http://tonybai.com/2015/03/14/selfhost-ngrok-service/ 在国内开发微信公众号.企业号以及做前端开发的朋友想必对ngrok都不陌生吧,就目前来看 ...
- Python Template 错误
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is und ...
- django 1.5+ 权限设计浅析
权限关系图 依赖app: django.contrib.auth django.contrib.contenttype admin后台的权限控制解析 (path/to/django.contrib.a ...
- snoopy 强大的PHP采集类使用实例代码
下载地址: http://www.jb51.net/codes/33397.html Snoopy的一些特点: 1抓取网页的内容 fetch 2 抓取网页的文本内容 (去除HTML标签) fetcht ...
- java 异常处理 Throwable Error 和Exception
Java异常类层次结构图: 异常的英文单词是exception,字面翻译就是“意外.例外”的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 比如使用 ...