xml DTD中的ELEMENT和ATTLIST
是W3C的一个文档类型定义规则文件,是用来让浏览器根据你定义的DTD(文档类型定义)来解释页面代码的。
doctype声明指出阅读程序应该用什么规则集来解释文档中的标记。在Web文档的情况下,“阅读程序”通常是浏览器或者校验器这样的一个程序,“规则”则是W3C所发布的一个文档类型定义(DTD)中包含的规则。
每个DTD都包括一系列标记、attributes和properties,它们用于标记Web文档的内容;此外还包括一些规则,它们规定了哪些 标记能出现在其他哪些标记中。每个Web建议标准(比如HTML 4 Frameset和XHTML 1.0 Transitional)都有自己的DTD。
假如文档中的标记不遵循doctype声明所指定的DTD,这个文档除了不能通过代码校验之外,还有可能无法在浏览器中正确显示。对于标记不一致的问题,浏览器相较于校验器来说更宽容。但是,不正确的doctype声明经常导致网页不正确显示,或者导致它们根本不能显示。
一个DTD文档实际上就是元素定义的集合,而元素可能包含属性,也可能不包含属性。
1. <!-- 一个ELEMENT的示例。ELEMENT定义语法:
<!ELEMENT ITEM SUBITEM | ITEMTYPE>
SUBITEM:子元素的组合(SUBITEM1,SUBITEM2)
子元素的语法
() :给内容分组 (Sub11|Sub12|Sub13),(Sub21|Sub22), Sub3
| :选择
, :依次按顺序出现
+ :一次或多次
? :0次或一次
* :任意次
ITEMTYPE 可以为如下类型:
EMPTY : 不能包含数据元素,以<Example />方式出现
ANY : 任何本身有效的元素内容
#PCDATA: 任何字符数据,不能包含子元素
-->
<!ELEMENT Employee (Name,ID,Department,Project*)>
2.<!-- ATTLIST是一个XML语言的保留字,也可以称为是关键字。一个元素ELEMENT 可以包含多个属性,一个属性有三部分构成:属性名称(AttributeName)、属性类型(Type)和属性特点(Default)。 ElementName表示元素的名称,元素的名称相当于程序设计语言中变量的名称,你可以任意取。AttributeName表示属性的名字,你可以任意取名,比如身高、体重、性别等等。Type表明该属性的类型,就象在C++中我们对一个变量需要指定它的类型(比如int,double,bool等等)。Default表明这个属性的特点,在XML语言中,可以有四种形式:#REQUIRED,#IMPLIED,#FIXED value,defaultvalue。一个属性定义的例子。
语法:
<! ATTLIST ElementName
AttributeName Type Default
AttributeName Type Default
…
>
类型 具体的含义说明
CDATA 这个类型表明该属性只能包含字符数据,比如"Lucent","CDMA","老板"等等
ID 该属性的取值必须是唯一的,就象我们每个人都有的身份证号码一样。在一个文档内 ID属性的值必须唯一。
IDREF,IDREFS 这个属性的值引用一个文档中其他地方声明的ID值。如果具体的文档中该属性的取值和它所指向的ID值不匹配的话,就会返回错误。IDREFS和IDREF类似,但是可以具有由空格分隔的多个引用。
ENTITY,ENTITIES ENTITY属性的值必须对应一个在文档内部声明的但还没有分析过的实体。ENTITIES属性和ENTITY类似,不同的是它可以包含多个实体,每一个 实体之间可以用空格进行分隔。需要注意的是实体包括普通实体、外部实体、参数实体和外部参数实体。一般来说,你可以把实体理解为类似C++中的一个定义, 比如在C++中,我们定义一个变量: const MYCOMPANYNAME="BigSoft"以后你就可以在程序中使用变量MYCOMPANYNAME。这里可以把MYCOMPANYNAME当成一 个实体来理解。
NMTOKEN,NMTOKENS NMTOKEN和CDATA非常类似,不同之处在于它是CDATA的一个子集。它所使用的字符必须是字母、数字、句点、破折号、下划线或冒号。NMTOKENS和NMTOKEN类似,不同之处在于它可以包含多个值,每个值之间用空格进行分隔
NOTATION NOTATION属性的值必须引用在文档中其他地方声明的某个注解的名称
NOTATION(enumerated) 该属性的值必须匹配NOTATION名称列表中的某个名称,比如我们已经存在两个NOTATION,一个为beauty,一个为beast。我们可以定义一个属性类型为NOTATION(beauty|beast)
Enumerated 这个几乎和C++中的枚举变量一样,我们事先定义好一些值,该属性的值必须匹配所列出的这些值。该属性的类型就可以表现为定义的枚举值,枚举值之间用"|"进行分隔。
Default 的四种选择
#REQUIRED 用来告诉XML解析程序,该元素的所有实例都必须有该属性的值。就象数据表中某一个字段不允许为空一样。
#IMPLIED 表示如果该元素的实例中没有指定该元素的值的话,就忽略该属性。就象在数据表中某一个字段的值可以为NULL一样。
#FIXED value 表示包含该属性的元素实例必须指定所列出的值,比如一个属性名称为美女:美女 CDATA #FIXED "我的老婆"表示如果在实例中没有列出这个属性的话,解析器依然认为存在美女这个属性,它的值就是"我的老婆"。一般的应用是设计这个属性用来说明这些文 档都是由一个DTD来实例化产生的。
Defaultvalue 为属性提供一个默认的值。比如一个属性名称为美女:美女 CDATA "我的老婆"如果在该属性的实例中没有包含这个属性的话,解析器就认为该属性的值就是"我的老婆",如果在该属性的实例中包含了这个属性并赋值了的话,就采用这个赋值。
-->
<!ATTLIST Employee
nickname CDATA #REQUIRED
HRID ID #REQUIRED
married CDATA #IMPLIED
>
<!ELEMENT Employee (Name,IdentificationID,Department,Task)>
<!ATTLIST Employee
nickname CDATA #REQUIRED
HRID ID #REQUIRED
married CDATA #IMPLIED
>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT IdentificationID (#PCDATA)>
<!ELEMENT Department (DName,Team,Floor)>
<!ELEMENT DName (#PCDATA)>
<!ELEMENT Team (#PCDATA)>
<!ELEMENT Floor (#PCDATA)>
<!ELEMENT Task (Project*)>
<!ELEMENT Project (description)>
<!ATTLIST Task
taksId ID #REQUIRED
TaskName CDATA #REQUIRED
PreTaskId IDREF #IMPLIED>
<!ELEMENT description (#PCDATA)>
对于上面的DTD文件中的Task的Type为IDREF,这个表明该属性的值必须在文档中出现过。如果该属性的值没在文档中出现过的话,该文档就属于不规范文档,解析器就不会认为该文档是有效的。
如果下面XML文档:
<Project>
<PERSON taskId="T_1" TaskName="P_1">
<PERSON taskId="T_2" TaskName="P_2">
<PERSON taskId="T_4" PreTaskId="T_1 T_5" TaskName="P_3">
</Project>
文档中PreTaskId的T_5在文档中没有出现过,则该文档问不规范文档。
原文:http://qustliuyongjie.blog.163.com/blog/static/16950897201166111122830/
xml DTD中的ELEMENT和ATTLIST的更多相关文章
- xml dtd 定义元素
ANY 如果需要定义某个元素的值可以是任意类型,可采用如下语法 <!ELEMENT 元素名 ANY> DTD必须定义XML文档中允许出现的所有元素,所以下面这样是不行的,因为<hel ...
- XML DTD验证
XML DTD验证 一.什么是DTD 文档类型定义(DTD:Document Type Definition)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行 ...
- JavaScripts学习日记——XML DTD Schema
今日关键词: XML DTD Schema 1.XML 1 XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和 ...
- XML Dtd Schema
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 整体比较: XML Schema符合XML语法结构. DOM.SAX等XML API很容易解析出XML Schem ...
- XML DTD详解(转)
前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二篇介绍DTD,引入有效的XML的概念(符合语 ...
- 有效的XML: DTD(文档类型定义)介绍(转)
文档类型定义和命名空间 有效(Valid)的XML文档: 首先,XML文档是个格式正规的(Well-formed)XML文档:(见格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节). ...
- 超全面的JavaWeb笔记day05<xml&dtd&jaxp>
0.表单提交方式(*****) button提交 超链接提交 事件 1.xml简介和应用(了解) 2.xml文档声明和乱码解决(*****) 文档声明 必须放在第一行第一列 设置xml编码和保存编码一 ...
- XML——DTD
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 通过实例来学习XML DTD
使用DTD的原因: 注意:由于它自身的一些缺点,DTD终将被淘汰,但是它还是要学习的.学习完DTD后,后面继续学习XML Schema. 1,通过 DTD,您的每一个 XML 文件均可携带一个有关其自 ...
随机推荐
- 用最简单的例子理解适配器模式(Adapter Pattern)
中国足球的水平虽然不高,但实际上,在每个城市会有一批足球爱好者,他们踢球.看球.懂球.有这样的2个足球爱好者,一个是左脚选手,另一个是右脚选手. public class PlayWithLeft { ...
- 解决eclipse安装maven的问题:Unable to update index for central|http://repo1.maven.org/maven2
问题产生如下:因为单位使用了过滤,访问Internet时,超过10M的内容就拒绝.因为maven插件在初始时,需要下载Maven的index文件,这个文件比较大,有38M多,下载不成功.所以造成使用M ...
- 张明楷:案件事实认定方法的七点注意 z
作者|张明楷 来源|<法学杂志> 大体而言,定罪是一个三段论的推理过程.刑法规范是大前提,案件事实是小前提,如果二者相符合,便可以作出相应的判决.具体地说,法官必须把应当判决的.具体的个案 ...
- jdbc连接遭遇RAC设备
今天进行junit的Case回归测试,功能测试人员告知数据库ip进行了变更,于是 将jdbc连接的url进行了相应的变更如下 jdbcConnection = java.sql.DriverManag ...
- Win8 下配置Java开发环境
背景: 大学期间学习过一段时间的JavaEE.不算很熟悉. 后来学习并在工作中很多其它是iOS开发,iOS的水平属于中上. 对技术已经有一定熟知程度. 近期为了写一些东西,须要用到Java写后台. 流 ...
- css3 transform方法常用属性
css3中transform方法是一个功能强大的属性,可以对元素进行移动.缩放.转动.拉长或拉伸等功能. transform中最为常用的4个属性分别是:rotate();.scale();.skew( ...
- 深入理解多线程(一)——Synchronized的实现原理
synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字.当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字 ...
- PHP语言基础之MySql 05 By ACReaper
PHP的基本语法学完后,我们马上学下PHP如何和MySql进行交互.PHP和MySql进行交互的API可以分为两类,一类是面向过程的,一类是面向对象的,面向对象的我们等复习完面向对象再介绍,现在先介绍 ...
- eclipse svn 配置
1.安装svn http://subversion.apache.org/ 到apache网站上下载svn 2.在eclipse中安装svn插件 在eclipse->help->eclip ...
- 混沌数学之Henon吸引子
Henon吸引子是混沌与分形的著名例子. 相关软件:混沌数学及其软件模拟相关代码: // http://wenku.baidu.com/view/d51372a60029bd64783e2cc0.ht ...