1.DTD概述

一个完全意义上的XML文件不仅仅是Well-fromed(格式良好的),而且还应该是使用了一些自定义的标记ValidatingXMl(有效的)文档也就是说他必须遵守文档类型的定义中已声明的中中规定。

文档类型定义,DTD用例描述XML文档结构。dtd定义了XML文档中可用的合法元素,可以使用DTD制定可以在文档中存在的元素.

2.为什么要使用DTD文件呢?

因为它满足了网络共享和数据交互。数据存储方便。比如两个相同行业不同地区的人使用同一个DTD文件作为文档的创建规范,那么他们就很容易实现数据共享。网上有人想补充数据根据公用的DTD规范来建立就能立刻加入。

3.DTD声明


DOCTYPE声明有以下部分组成:关键字、文档的根元素名称、可选的外部标识符以及可选的标记声明块,外部标识符用与外部DTD的明明和定位,标记声明快构成的。 XML声明可以有standalone属性,该属性可以有以下两个值yes或no如果是yes说明文档实例没有会影响到传递给应用程序的文档信息的外部声明。

4.DTD声明的位置--------内部DTD


定义的语法‘’ <!DOCTYPE element-name(根元素名) [
元素描述
.......
]> XML文档中的数据区的内容 <!DOCTYPE : 表示开始设定DTD,注意DOCTYPE是大写
element-name:指定此DTD的根元素的名称,一个XML文件只能由一个根元素。
[.........]: 在括号内标记定义XML文件使用的元素,然后使用>结束DTD定义,因此内部含有的定义>

例子

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE myfile [
<!ELEMENT myfile (title,author)> <!--如果没有这句话就会报错character is grammatically unexpected-->
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<myfile>
<title>XML基础教程</title>
<author>张三</author>
</myfile>

5.DTD声明位置----外部DTD

外部DTD是一个独立于XML文件的文件,实际上也是一个文本文件,只是使用.dtd为为文件的扩展名。由于外部DTD独立于XMl文件,因此他可以提供多个XMl文件使用,就像用同一个模板可以写出多个不同内容的文件一样,这多个XML文件因为是引用同一个外部DTD,所以他们的额大致结构相同。

外部DTD的好处就是:他可以方便高校的被多个XML文档共享。

声明的格式:

说明:
!DOCTYPE 指要定义一个DOCTYPE type-of-doc 是文档类型的名称,有用户自己定义,通常 与使用这个DTD文件的XML文档的根元素名称一致。
SYSTEM/PUBLIC 这两个参数只用其一,SYSTEM是指文档使用的是私有的外部DTD文件,这个关键字主要引用于通用的DTD
dtd-name 就是存放dtd文件的地址和名称

DTD文件

<!ELEMENT myfile (title, author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)> 引用dtd文件 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myfile SYSTEM "D:\XML\DTD1.dtd">
<myfile>
<title>xml文档教程</title>
<author>张三</author>
</myfile>

6.DTD语法

元素是XML的核心与灵魂,在DTD中,元素类型是通过ELEMENT标记声明的。除了关键字,标记还提供了所声明类型的名称额内容规范。元素类型名要遵守XML对名称的限制。名乘客也是字母数字下划线组成,但是不能以数字开头;

元素类型声明 ETD (Element Type Declaration) 来声明所有有效的文档元素

说明:
!ELEMENT 表示开始元素设置,注意此处ELEMENT关键字必须是大写
element-name 表示要设置的名称的元素的名称
element-defination 指名要对此元素进行怎样的定义,就是说 <元素 > </元素> 之间能够包含内容,是其他元素还是一般性的文字

7.XML中按元素的内容可以将元素划分为5类,不同类型的元素使用DTD进行定义时的语法有所不同

(1)ANY元素类型
<!ELEMENT 元素名 ANY> XML文档里该元素中可以包含任何在DTD中定义的元素内容。建议一般只把文档的根元素规定为ANY类型。将根元素设为ANY类型后,元素出现的次数和顺序将不受限制。 (2)EMPTY元素类型
<!ELEMENT 人 EMPTY> 以下的元素是合法的:
<人 名字=“Legen” 性别=“男” 年龄=“23”/> 下面这个是错的 名为“人”的元素就是非法的,因为此元素因该为空元素,既不能有内容也不能有子元素 <人 >匹诺曹</人>
<人><大人>匹诺曹爸爸 </大人> </人> (3)#PCDATA 类型的元素(纯文本元素或称简单元素)
可以包含任何字符数据,但是不能包含任何子元素。PCDATA代表字符数据,为了防止与关键字混淆,在前面加个# 语法: <!ELEMENT 元素名 (#PCDATA)>

2018.5.14 XML文档类型定义----DTD的更多相关文章

  1. 有效的XML: DTD(文档类型定义)介绍(转)

    文档类型定义和命名空间 有效(Valid)的XML文档: 首先,XML文档是个格式正规的(Well-formed)XML文档:(见格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节). ...

  2. XML之DTD(文档类型定义)

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 声明元素 在 DTD 中,XML 元素 ...

  3. DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义

    DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义 今天看到一篇CSS应用的一个友好搜索,我按网页上的代码复制.粘贴后预览时总达不到效果,而直接拷贝他的实例却能达到效果, ...

  4. XHTML 1.0 的三种 XML 文档类型 DOCTYPE

    XHTML 1.0 的三种 XML 文档类型 XHTML 1.0 规定了三种 XML 文档类型 XHTML 1.0 Strict <!DOCTYPE html PUBLIC "-//W ...

  5. Umbraco文档类型定义多个template

    利用这个可以同时写PC端和手机端的网站, 在Template中,建立手机端的模板: 在文档类型中,同时选择两个模板,在浏览的时候在URL后加上Template的名称 + .aspx 就可以浏览到你写的 ...

  6. bean文档类型定义

    ELEMENT:表示当前 (bean*):表示0到多个bean元素 (property*):表示0到多个property元素 ATTLIST:表示属性 #REQUIRED:表示不可缺少 #IMPLIE ...

  7. java: (正则表达式,XML文档,DOM和DOM4J解析方法)

    常见的XML解析技术: 1.DOM(基于XML树结构,比较耗资源,适用于多次访问XML): 2.SAX(基于事件,消耗资源小,适用于数量较大的XML): 3.JDOM(比DOM更快,JDOM仅使用具体 ...

  8. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  9. HTML文档类型DTD与浏览器怪异模式

    虽然在兼容IE6时候经常会注意到两个模式的区别,但是系统的理解起来,还没有认真总结过.看了一些网上的资料.结合自己的理解汇总了一下,放在这里备忘并分享给大家. 浏览器从服务端获取网页后会根据文档的DO ...

随机推荐

  1. 洛谷P2052 道路修建

    P2052 道路修建 题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 ...

  2. C语言经典算法100例(三)

    1.河内之塔 说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市:1883年法国数学家 Edoua ...

  3. [Xcode 实际操作]四、常用控件-(10)动作表样式警告窗口的使用

    目录:[Swift]Xcode实际操作 本文将演示动作表单窗口的使用. 动作表单可以给用户展现一系列的选项, 和警告窗口不同的是,动作表单的展示形式和设备的尺寸有关. 在项目导航区,打开视图控制器的代 ...

  4. Mol Cell Proteomics. |马臻| psims-一个用于编写HUPO-PSI标准下的mzML和mzIdentML的python库

    大家好,本周分享的是发表在MCP(MOLECULAR&CRLLULAR PROTEOMICS)上的一篇关于质谱数据处理和识别的文章,题目是psims - A Declarative Write ...

  5. Click: 命令行工具神器

    Click是一个Python用来快速实现命令行应用程序的包,主要优势表现在以下三点: 任意嵌套命令 自动生成帮助页 自动运行时lazy加载子命令 示例程序: import click @click.c ...

  6. having - 函数输出限制

    引用:https://zhidao.baidu.com/question/406745181.html 对函数输出进行限制 栗子: 比如,我们可能只希望看到Store_Information数据表中销 ...

  7. less css用法思维导图

    Less 是一个Css 预编译器,可以扩展Css语言,添加功能如允许变量(variables),混合(mixins),函数(functions) 和许多其他的技术,让你的Css更具维护性,主题性,扩展 ...

  8. java多线程,如何防止脏读数据

    多线程容易“非线程安全”的情况,是由于用了全局变量,而又没有很好的控制起情况.所以无论做什么程序,谨慎使用全局变量 "非线程安全"其实会在多个线程对同一个对象中的实例变量进行并发访 ...

  9. ASP编码规范

    ASP编码规范(--::) 第一章 ASP编码规范通述 ASP编码分为两大部分,一部分为静态文件编码,一部分为包含服务器端脚本的动态文件编码. 静态文件编码分script编码和HTML编码两部分. 服 ...

  10. 11个炫酷的 Linux 终端命令

    我已经用了十年的Linux了,通过今天这篇文章我将向大家展示一系列的命令.工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我. 1.命令行日常系快捷键 如下的快捷方式非常有用,能够 ...