xml约束技术之dtd
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。这篇文章作简单介绍下DTD的用法。想学习完整的请点击下面w3c的教程。
1.DTD官方教程
2.xml约束技术:
DTD约束:语法相对简单,功能也相对简单。先出现
Schema约束:语法相对复杂,功能也相对强大。采用和xml语法类似的编写方式,Schema约束出现就是为了替换DTD约束。
3.DTD简介:
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
3.1导入DTD的方式:
1.内部导入:
#导入方式:
<!DOCTYPE root-element [element-declarations]>
#实例:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
- (第二行)定义此文档是 note(根标签) 类型的文档。
- (第三行)定义 note 元素有四个元素(标签):"to、from、heading,、body"
- (第四行)定义 to 元素为 "#PCDATA" 类型
- (第五行)定义 frome 元素为 "#PCDATA" 类型
- (第六行)定义 heading 元素为 "#PCDATA" 类型
- (第七行)定义 body 元素为 "#PCDATA" 类型
2.外部导入方式:
本地文件:
#导入方式:
<!DOCTYPE note SYSTEM "note.dtd">
#note.dtd文件内容:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
公共的外部导入:一般项目采用公共外部导入,比如ssh的xml文件基本上就是采用了这种方式
#导入方式:
<!DOCTYPE 根元素 PUBLIC "http://rlovep.com/peace.dtd">
#如hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
3.2DTD语法:
1.约束标签
语法:
<!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>
类别:
- 空标签: EMPTY。 表示元素一定是空元素.例如:<bb/>:
- 普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。例如:
- 任何内容: ANY。表示元素的内容可以是任意内容(包括子标签) 例如:
元素内容:
顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 0或n次。
标签? : 0 或1次。
声明"非.../既..."类型的内容
2.约束属性:
语法:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型:
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
默认值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的
3.3测试如下,请细看注释:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from+,heading*,body?,(br|b))>
<!--带有子序列的元素,需要按照先后顺序出现;
to只能出现一次
from最少出现一次
heading次数随意
body出现零次或者一次
非出现br就出现b
-->
<!--元素约束-->
<!ELEMENT to (#PCDATA)><!--pcdata元素-->
<!ELEMENT from ANY><!--任何内容的元素-->
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT br EMPTY><!--空元素-->
<!ELEMENT b EMPTY><!--空元素-->
<!--属性约束-->
<!ATTLIST to number CDATA #REQUIRED><!--必须有属性值出现,且属性值类型为字符串-->
<!ATTLIST from length CDATA "10"><!--默认属性值,不写出属性时属性值为10-->
<!--假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。-->
<!ATTLIST heading length CDATA #IMPLIED>
<!ATTLIST body length CDATA #FIXED "123"><!--属性拥有固定的值,并不允许作者改变这个值-->
<!ATTLIST br type (check|cash) "cash"><!--属性值可以为check和cash中的一个-->
]>
<note>
<to number="1234">Tove</to>
<from>Jani</from>
<heading length="10">Reminder</heading>
<body length="123">Don't forget me this weekend</body>
<br type="check"/>
</note>
xml约束技术之dtd的更多相关文章
- 2.xml约束技术----------dtd约束
1.xml的约束 (1)为什么需要定义约束了 比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个元素<猫>,发 ...
- XML约束技术
为了使XML文档规范化,对XML文档的书写进行约束 XML DTD XML文档(test.xml) <?xml version="1.0" encoding="ut ...
- 5.xml约束技术--------schema
1.schema约束 (1)dtd语法:<!ELEMENT 元素名称 约束> (2)schema符合xml的语法,xml语句 (3)一个xml文件中只能有一个dtd,但是可以有多个sche ...
- javaweb学习总结八(xml约束DTD)
一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...
- XML约束(3)
本节要点: 了解XML的约束模式 了解DTD 了解Schema 1 了解XML的约束模式 计算机程序在处理XML文档之前,必须能够解析出XML文档的内容中各个元素的相关信息.将解析出来的信息再交给下游 ...
- XML约束——DTD约束
参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...
- xml的应用与dtd约束
1.xml的应用 *不同的系统之间的传输数据(qq消息传输) *用来表示生活中有关系的数据(省市区的包含关系) *经常用在文件配置 **比如现在连接数据库,肯定知道数据库的名称和密码及用户名. ...
- XML约束之DTD
XML文件的约束:什么叫约束呢?顾名思义,就是对xml文件的内容进行按照既定规则的限制.我们知道,因为xml文件的标签是可以自定义的,而往往我们用xml文件都是为了表达一定的数据集合(即小型的数据库) ...
- 【代码笔记】XML深入学习:DTD约束与DTD语法(1)
2015-12-27 文件名 student.xml <?xml version="1.0" encoding="GB2312" standalon ...
随机推荐
- Oracle 日志报错导致的 “没有登录” 问题
遇到的问题是日志空间满了,导致Oracle无法登陆,但用PL/SQL登录仅会提示“没有登录” # 首先检查日志空间是否满了,并删除过期日志 rman target sysdba/password@or ...
- ActiveMQ 使用文档
一.为什么使用ActiveMQ 在总线的设计中可能会使用到JMS(Java Message Service)通道, Java消息服务(JMS)超越了生产商专有的MOM(Message-Oriented ...
- activeMQ集群搭建及高可用
三台服务器搭建如下的集群,达到了高可用.也同时达到了负载的目的: /****************************************************************** ...
- VisualVM远程连接Tomcat(转)
转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...
- Zookeeper使用--开源客户端
一.ZkClient ZkClient是在Zookeeper原生API接口之上进行了包装,是一个更易用的Zookeeper客户端,其内部还实现了诸如Session超时重连.Watcher反复注册等功能 ...
- JMeter基础使用方法
1.修改测试计划名称 2.点击”保存“,并选择保存的路径 3.添加线程组 操作步骤:右击”测试计划“——添加——Threads——线程组 添加成功后,Test1节点下回多出一个“线程组”的节点 4.配 ...
- smarty 使用php函数
strtotime() time() <{if strtotime($activity.start_time) gt time()}> <a href="?action=d ...
- 电脑破解wifi密码(至少连过1次的才可以)
电脑破解wifi密码(至少连过1次的才可以) 连过的wifi密码忘记了怎么办? 只要你电脑连过的都能破解. cmd输入以下内容查看电脑连接过的wifi名字. netsh wlan show profi ...
- CMDB和运维自动化
IT运维,指的是对已经搭建好的网络,软件,硬件进行维护.运维领域也是有细分的,有硬件运维和软件运维 硬件运维主要包括对基础设施的运维,比如机房的设备,主机的硬盘,内存这些物理设备的维护 软件运维主要包 ...
- 简单引入logback
pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...